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("Gene: %s
", - hgGeneName(), database, gtexGene->name, gtexGene->name); +printf("Gene: "); char *desc = getGeneDescription(gtexGene); -if (desc != NULL) +if (desc == NULL) + printf("%s
\n", gtexGene->name); +else + { + printf("%s
\n", + hgGeneName(), database, gtexGene->name, gtexGene->name); printf("Description: %s
\n", desc); + } printf("Ensembl Gene ID: %s
\n", gtexGene->geneId); printf("Ensembl Transcript ID: %s
\n", gtexGene->transcriptId); -printf("Genomic Position: %s:%d-%d
", +printf("Ensembl Transcript Class: %s
\n", + gencodeTranscriptClassColorCode(gtexGene->transcriptClass), gtexGene->transcriptClass); +printf("Genomic Position: %s:%d-%d
\n", hgTracksPathAndSettings(), database, gtexGene->chrom, gtexGene->chromStart+1, gtexGene->chromEnd, gtexGene->chrom, gtexGene->chromStart+1, gtexGene->chromEnd); printf("View at GTEx portal
\n", gtexGene->geneId); puts("

"); 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);