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