45c5e17075e31abf2735b09ca201d29ce6e0e1f4 kate Thu Jun 29 18:17:22 2017 -0700 Add trackUi (body map and right-click versions) and implement filters in hgTracks. refs #15646 diff --git src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c index 7b24767..22cc2e8 100644 --- src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c +++ src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c @@ -87,48 +87,62 @@ } static void printScoreFilter(struct cart *cart, char *track, struct trackDb *tdb) /* Filter on overall gene expression score */ { char buf[512]; puts("<b>Limit to genes scored at or above:</b>\n"); safef(buf, sizeof(buf), "%s.%s", tdb->track, SCORE_FILTER); int score = cartUsualInt(cart, buf, 0); int minScore = 0, maxScore = 1000; cgiMakeIntVarWithLimits(buf, score, "Minimum score", 0, minScore, maxScore); printf( " (range %d-%d)\n", minScore, maxScore); } -static void printConfigPanel(struct trackDb *tdb) -/* Controls for track configuration (except for tissues) */ +static void printGtexEqtlConfigPanel(struct trackDb *tdb, char *track) +/* GTEx eQTL track specific controls */ { -char *track = tdb->track; puts( -" <!-- Configuration panel -->\n" -" <div class='row gbSectionBanner'>\n" -" <div class='col-md-8'>Configuration</div>\n" -" <div class='col-md-4 text-right'>\n"); - -/* Track vis dropdown */ -printVisSelect(tdb); -printGoButton(); +" <!-- row 1 -->\n" +" <div class='row'>\n" +" <div class='gbControl col-md-12'>\n"); +gtexEqtlGene(cart, track, tdb); +puts( +" </div>\n" +" </div>\n"); +puts( +" <!-- row 2 -->\n" +" <div class='row'>\n" +" <div class='gbControl col-md-12'>\n"); +gtexEqtlEffectSize(cart, track, tdb); +puts( +" </div>\n" +" </div>\n"); +puts( +" <!-- row 3 -->\n" +" <div class='row'>\n" +" <div class='gbControl col-md-12'>\n"); +gtexEqtlProbability(cart, track, tdb); puts( " </div>\n" " </div>\n"); +} -/* GTEx-specific track controls, layout in 3 rows */ +static void printGtexGeneConfigPanel(struct trackDb *tdb, char *track) +/* GTEx Gene track specific controls, layout in 3 rows */ +{ puts( " <!-- row 1 -->\n" " <div class='row'>\n" " <div class='gbControl col-md-5'>\n"); gtexGeneUiGeneLabel(cart, track, tdb); puts( " </div>\n" " <div class='gbControl col-md-7'>\n"); gtexGeneUiGeneModel(cart, track, tdb); puts( " </div>\n" " </div>\n"); puts( " <!-- row 2 -->\n" " <div class='row'>\n" @@ -146,30 +160,57 @@ " <!-- row 3 -->\n" " <div class='row'>\n"); puts( " <div class='gbControl col-md-5'>\n"); gtexGeneUiCodingFilter(cart, track, tdb); puts( " </div>\n"); /* Filter on score */ puts( " <div class='gbControl col-md-7'>\n"); printScoreFilter(cart, track, tdb); puts( " </div>\n" " </div>\n"); +} + +static void printConfigPanel(struct trackDb *tdb) +/* Controls for track configuration (except for tissues) */ +{ +puts( +" <!-- Configuration panel -->\n" +" <div class='row gbSectionBanner'>\n" +" <div class='col-md-8'>Configuration</div>\n" +" <div class='col-md-4 text-right'>\n"); + +/* Track vis dropdown */ +printVisSelect(tdb); +printGoButton(); +puts( +" </div>\n" +" </div>\n"); + +/* Track-specific config */ +char *track = tdb->track; +if (gtexIsGeneTrack(track)) + printGtexGeneConfigPanel(tdb, track); +else if (gtexIsEqtlTrack(track)) + printGtexEqtlConfigPanel(tdb, track); +else + errAbort("Unknown GTEx track: %s\n", track); + puts( " <!-- end configure panel -->\n"); } static void printTissueTable(struct trackDb *tdb) /* Output HTML with tissue labels and colors, in 2 columns, to fit next to body map */ { char *version = gtexVersion(tdb->track); struct gtexTissue *tis, *tissues = gtexGetTissues(version); char var[512]; safef(var, sizeof var, "%s.%s", tdb->track, GTEX_TISSUE_SELECT); struct hash *selectedHash = cartHashList(cart, var); struct gtexTissue **tisTable = NULL; int count = slCount(tissues); AllocArray(tisTable, count); @@ -327,31 +368,32 @@ " <div class='gbTrackDescription'>\n"); puts(tdb->html); puts( " </div>\n" " </div>\n"); } static struct trackDb *getTrackDb(char *db, char *track) /* Check if this is an assembly with GTEx track and get trackDb */ { struct sqlConnection *conn = sqlConnect(db); if (conn == NULL) errAbort("Can't connect to database %s\n", db); char where[256]; safef(where, sizeof(where), "tableName='%s'", track); -// TODO: use hdb, hTrackDbList to get table names of trackDb, +// WARNING: this will break in sandboxes unless trackDb entry is pushed to hgwdev. +// The fix of using hTrackDbList() would slow for all users, so leaving as is. struct trackDb *tdb = trackDbLoadWhere(conn, "trackDb", where); trackDbAddTableField(tdb); sqlDisconnect(&conn); return tdb; } static void doMiddle(struct cart *theCart) /* Send HTML with javascript to display the user interface. */ { cart = theCart; char *db = NULL, *genome = NULL, *clade = NULL; getDbGenomeClade(cart, &db, &genome, &clade, oldVars); // Start web page with new-style header webStartGbNoBanner(cart, db, "Genome Browser GTEx Track Settings");