c65b04d176ad125c1eddd777fb8befd481bdba2c
angie
  Thu Dec 5 11:46:02 2013 -0800
Added a couple ENCODE Regulation summary tracks to hgVai.  refs #11461
diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c
index 566d9b4..646b144 100644
--- src/hg/hgVai/hgVai.c
+++ src/hg/hgVai/hgVai.c
@@ -586,103 +586,111 @@
 }
 
 void selectDbSnp(boolean gotSnp)
 /* Offer to include rsID (and other fields, or leave that for advanced output??) if available */
 {
 if (!gotSnp)
     return;
 startCollapsibleSection("dbSnp", "Known variation", TRUE);
 cartMakeCheckBox(cart, "hgva_rsId", TRUE);
 printf("Include <A HREF='http://www.ncbi.nlm.nih.gov/projects/SNP/' TARGET=_BLANK>dbSNP</A> "
        "rs# ID if one exists<BR>\n");
 puts("<BR>");
 endCollapsibleSection();
 }
 
+boolean isRegulatoryTrack(struct trackDb *tdb, void *filterData)
+/* For now, just look for a couple specific tracks by tableName. */
+{
+//#*** NEED METADATA
+return (sameString("wgEncodeRegDnaseClusteredV2", tdb->table) ||
+	sameString("wgEncodeRegTfbsClusteredV3", tdb->table));
+}
+
+struct slRef *findRegulatoryTracks()
+/* Look for the very limited set of Regulation tracks that hgVai offers. */
+{
+struct slRef *regTrackRefList = NULL;
+tdbFilterGroupTrack(fullTrackList, fullGroupList, isRegulatoryTrack,
+		    NULL, NULL, &regTrackRefList);
+return regTrackRefList;
+}
+
 boolean isConsElTrack(struct trackDb *tdb, void *filterData)
 /* This is a TdbFilterFunction to get "phastConsNwayElements" tracks. */
 {
 return (startsWith("phastCons", tdb->table) && stringIn("Elements", tdb->table));
 }
 
 boolean isConsScoreTrack(struct trackDb *tdb, void *filterData)
 /* This is a TdbFilterFunction to get tracks that start with "phastCons" (no Elements)
  * or "phyloP". */
 {
 return ((startsWith("phastCons", tdb->table) && !stringIn("Elements", tdb->table))
 	|| startsWith("phyloP", tdb->table));
 }
 
 void findCons(struct slRef **retElTrackRefList, struct slRef **retScoreTrackRefList)
 /* See if this database has Conserved Elements and/or Conservation Scores */
 {
 tdbFilterGroupTrack(fullTrackList, fullGroupList, isConsElTrack,
 		    NULL, NULL, retElTrackRefList);
 tdbFilterGroupTrack(fullTrackList, fullGroupList, isConsScoreTrack,
 		    NULL, NULL, retScoreTrackRefList);
 }
 
-void trackRefListToCheckboxes(struct slRef *trackRefList)
+void trackCheckBoxSection(char *sectionSuffix, char *title, struct slRef *trackRefList)
+/* If trackRefList is non-NULL, make a collapsible section with a checkbox for each track,
+ * labelled with longLabel. */
 {
+if (trackRefList != NULL)
+    {
+    startCollapsibleSection(sectionSuffix, title, FALSE);
     struct slRef *ref;
     for (ref = trackRefList;  ref != NULL;  ref = ref->next)
 	{
 	struct trackDb *tdb = ref->val;
 	char cartVar[512];
 	safef(cartVar, sizeof(cartVar), "hgva_track_%s_%s", database, tdb->track);
 	cartMakeCheckBox(cart, cartVar, FALSE);
 	printf("%s<BR>\n", tdb->longLabel);
 	}
-}
-
-void selectCons(struct slRef *elTrackRefList, struct slRef *scoreTrackRefList)
-/* Offer checkboxes for optional Conservation scores. */
-{
-if (elTrackRefList == NULL && scoreTrackRefList == NULL)
-    return;
-if (elTrackRefList != NULL)
-    {
-    startCollapsibleSection("ConsEl", "Conserved elements", FALSE);
-    trackRefListToCheckboxes(elTrackRefList);
     puts("<BR>");
     endCollapsibleSection();
     }
-if (scoreTrackRefList != NULL)
-    {
-    startCollapsibleSection("ConsScore", "Conservation scores",
-			    FALSE);
-    trackRefListToCheckboxes(scoreTrackRefList);
-    endCollapsibleSection();
-    }
 }
 
 void selectAnnotations()
 /* Beyond predictions of protein-coding effect, what other basic data can we integrate? */
 {
 struct slName *dbNsfpTables = findDbNsfpTables();
 boolean gotSnp = findSnpBed4("", NULL, NULL);
+struct slRef *regTrackRefList = findRegulatoryTracks();
 struct slRef *elTrackRefList = NULL, *scoreTrackRefList = NULL;
 findCons(&elTrackRefList, &scoreTrackRefList);
-if (dbNsfpTables == NULL && !gotSnp && elTrackRefList == NULL && scoreTrackRefList == NULL)
+if (dbNsfpTables == NULL && !gotSnp && elTrackRefList == NULL && scoreTrackRefList == NULL
+    && regTrackRefList == NULL)
     return;
 puts("<BR>");
 printf("<div class='sectionLiteHeader'>Select More Annotations (optional)</div>\n");
 // Make wrapper table for collapsible sections:
 puts("<TABLE border=0 cellspacing=5 cellpadding=0 style='padding-left: 10px;'>");
 selectDbNsfp(dbNsfpTables);
 selectDbSnp(gotSnp);
-selectCons(elTrackRefList, scoreTrackRefList);
+trackCheckBoxSection("Regulation", "Regulatory Regions", regTrackRefList);
+trackCheckBoxSection("ConsEl", "Conserved elements", elTrackRefList);
+trackCheckBoxSection("ConsScore", "Conservation scores", scoreTrackRefList);
 puts("</TABLE>");
 }
 
 void selectFiltersFunc()
 /* Options to restrict variants based on gene region/soTerm from gpFx */
 {
 startCollapsibleSection("filtersFunc", "Functional role", FALSE);
 printf("Include variants annotated as<BR>\n");
 cartMakeCheckBox(cart, "hgva_include_intergenic", TRUE);
 printf("intergenic<BR>\n");
 cartMakeCheckBox(cart, "hgva_include_upDownstream", TRUE);
 printf("upstream/downstream of gene<BR>\n");
 cartMakeCheckBox(cart, "hgva_include_nmdTranscript", TRUE);
 printf("in transcript already subject to nonsense-mediated decay (NMD)<BR>\n");
 cartMakeCheckBox(cart, "hgva_include_exonLoss", TRUE);