698521a7d4cd9d9ecf29b9c316a59060f01ef950 kate Tue Apr 5 09:57:31 2016 -0700 Fix click box problem -- handling of multi-mapped genes found by QA (Thanks Chris!) diff --git src/hg/hgc/gtexClick.c src/hg/hgc/gtexClick.c index 68f4664..9a9973c 100644 --- src/hg/hgc/gtexClick.c +++ src/hg/hgc/gtexClick.c @@ -81,41 +81,43 @@ struct tempName pngTn; trashDirFile(&pngTn, "hgc", "gtexGene", ".png"); char cmd[256]; /* Exec R in quiet mode, without reading/saving environment or workspace */ safef(cmd, sizeof(cmd), "Rscript --vanilla --slave hgcData/gtexBoxplot.R %s %s %s %s %s %s", gtexGene->name, dfTn.forCgi, pngTn.forHtml, doLogTransform ? "log=TRUE" : "log=FALSE", "order=alpha", version); //NOTE: use "order=score" to order bargraph by median RPKM, descending int ret = system(cmd); if (ret == 0) printf("<IMG SRC = \"%s\" BORDER=1><BR>\n", pngTn.forHtml); } -struct gtexGeneBed *getGtexGene(char *item, char *table) +static struct gtexGeneBed *getGtexGene(char *item, char *chrom, int start, int end, char *table) /* Retrieve gene info for this item from the main track table */ { struct gtexGeneBed *gtexGene = NULL; struct sqlConnection *conn = hAllocConn(database); char **row; char query[512]; struct sqlResult *sr; if (sqlTableExists(conn, table)) { - sqlSafef(query, sizeof(query), "select * from %s where name = '%s'", table, item); + sqlSafef(query, sizeof query, "select * from %s where name = '%s' and chrom = '%s' " + " and chromStart = %d and chromEnd = %d", + table, item, chrom, start, end); sr = sqlGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { gtexGene = gtexGeneBedLoad(row); } sqlFreeResult(&sr); } hFreeConn(&conn); return gtexGene; } struct tissueSampleVals *getTissueSampleVals(struct gtexGeneBed *gtexGene, boolean doLogTransform, char *version, double *maxValRet) /* Get sample data for the gene. Optionally log10 it. Return maximum value seen */ @@ -204,31 +206,33 @@ } else { sqlSafef(query, sizeof(query), "select kgXref.description from kgXref where geneSymbol='%s'", gtexGene->name); } 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); +int start = cartInt(cart, "o"); +int end = cartInt(cart, "t"); +struct gtexGeneBed *gtexGene = getGtexGene(item, seqName, start, end, tdb->table); if (gtexGene == NULL) errAbort("Can't find gene %s in GTEx gene table %s\n", item, tdb->table); genericHeader(tdb, item); printf("<b>Gene: </b>"); char *desc = getGeneDescription(gtexGene); 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);