d9a39b809c2df627f2148806102c4fc2c1290212
kate
  Thu Feb 11 12:59:35 2016 -0800
Suppress links to hgGene when there's no page.  Add transcript class and color it. refs #15645

diff --git src/hg/hgc/gtexClick.c src/hg/hgc/gtexClick.c
index c2aeee6..74de62d 100644
--- src/hg/hgc/gtexClick.c
+++ src/hg/hgc/gtexClick.c
@@ -19,30 +19,48 @@
 
 struct tissueSampleVals
 /* RPKM expression values for multiple samples */
     {
     struct tissueSampleVals *next;
     char *name;         /* GTEx tissue name */
     char *description;  /* GTEx tissue description */
     int color;          /* GTEx tissue color */
     int count;          /* number of samples */
     double *vals;       /* RPKM values */
     double min, max;    /* minimum, maximum value */
     double q1, median, q3;      /* quartiles */
     struct slDouble *valList;   /* used to create val array */
     };
 
+char *gencodeTranscriptClassColorCode(char *transcriptClass)
+/* Get HTML color code used by GENCODE for transcript class
+ * WARNING: should share code with transcript color handling in hgTracks */
+{
+char *unknown = "#010101";
+if (transcriptClass == NULL)
+    return unknown;
+if (sameString(transcriptClass, "coding"))
+    return "#0C0C78";
+if (sameString(transcriptClass, "nonCoding"))
+    return "#006400";
+if (sameString(transcriptClass, "pseudo"))
+    return "#FF33FF";
+if (sameString(transcriptClass, "problem"))
+    return "#FE0000";
+return unknown;
+}
+
 /********************************************************/
 /* R implementation.  Invokes R script */
 
 void drawGtexRBoxplot(struct gtexGeneBed *gtexGene, struct tissueSampleVals *tsvList,
                         boolean doLogTransform, char *version)
 /* Draw a box-and-whiskers plot from GTEx sample data, using R boxplot */
 {
 /* Create R data frame.  This is a tab-sep file, one row per sample, 
  * with columns for sample, tissue, rpkm */
 struct tempName dfTn;
 trashDirFile(&dfTn, "hgc", "gtexGene", ".df.txt");
 FILE *f = fopen(dfTn.forCgi, "w");
 if (f == NULL)
     errAbort("can't create temp file %s", dfTn.forCgi);
 fprintf(f, "sample\ttissue\trpkm\n");
@@ -192,39 +210,45 @@
     }
 struct sqlConnection *conn = hAllocConn(database);
 char *desc = sqlQuickString(conn, query);
 hFreeConn(&conn);
 return desc;
 }
 
 void doGtexGeneExpr(struct trackDb *tdb, char *item)
 /* Details of GTEx gene expression item */
 {
 struct gtexGeneBed *gtexGene = getGtexGene(item, tdb->table);
 if (gtexGene == NULL)
     errAbort("Can't find gene %s in GTEx gene table %s\n", item, tdb->table);
 
 genericHeader(tdb, item);
-// TODO: link to UCSC gene
-printf("<b>Gene: </b><a target='_blank' href='%s?db=%s&hgg_gene=%s'>%s</a><br>", 
-                        hgGeneName(), database, gtexGene->name, gtexGene->name);
+printf("<b>Gene: </b>");
 char *desc = getGeneDescription(gtexGene);
-if (desc != NULL)
+if (desc == NULL)
+    printf("%s<br>\n", gtexGene->name);
+else
+    {
+    printf("<a target='_blank' href='%s?db=%s&hgg_gene=%s'>%s</a><br>\n", 
+                        hgGeneName(), database, gtexGene->name, gtexGene->name);
     printf("<b>Description:</b> %s<br>\n", desc);
+    }
 printf("<b>Ensembl Gene ID:</b> %s<br>\n", gtexGene->geneId);
 printf("<b>Ensembl Transcript ID:</b> %s<br>\n", gtexGene->transcriptId);
-printf("<b>Genomic Position: </b><a href='%s&db=%s&position=%s%%3A%d-%d'>%s:%d-%d</a><br>", 
+printf("<b>Ensembl Transcript Class: </b><span style='color: %s'>%s</span><br>\n", 
+            gencodeTranscriptClassColorCode(gtexGene->transcriptClass), gtexGene->transcriptClass);
+printf("<b>Genomic Position: </b><a href='%s&db=%s&position=%s%%3A%d-%d'>%s:%d-%d</a><br>\n", 
                         hgTracksPathAndSettings(), database, 
                         gtexGene->chrom, gtexGene->chromStart+1, gtexGene->chromEnd,
                         gtexGene->chrom, gtexGene->chromStart+1, gtexGene->chromEnd);
 printf("<a target='_blank' href='http://www.gtexportal.org/home/gene/%s'>View at GTEx portal</a><br>\n", gtexGene->geneId);
 puts("<p>");
 
 boolean doLogTransform = cartUsualBooleanClosestToHome(cart, tdb, FALSE, GTEX_LOG_TRANSFORM,
                                                 GTEX_LOG_TRANSFORM_DEFAULT);
 double maxVal = 0.0;
 char *versionSuffix = gtexVersionSuffix(tdb->table);
 struct tissueSampleVals *tsvs = getTissueSampleVals(gtexGene, doLogTransform, 
                                                         versionSuffix, &maxVal);
 char *version = gtexVersion(tdb->table);
 drawGtexRBoxplot(gtexGene, tsvs, doLogTransform, version);