edc2fc7899775257086e2d840beaf7e2e6855742 angie Wed Jul 9 16:46:27 2014 -0700 Moved Regulatory annotations out of 'Select More Annotations' into theirown top-level section because they are not just another annotation source -- they cause us to assign a specific consequence type. Also, as Jonathan suggested, I'm suppressing regulatory annotation info for gene-consequence lines of outputs. That makes the output a lot less redundant while still providing details for RegulatoryFeature lines of output. diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c index f80314c..4815b10 100644 --- src/hg/hgVai/hgVai.c +++ src/hg/hgVai/hgVai.c @@ -733,57 +733,68 @@ { //#*** 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, ®TrackRefList); return regTrackRefList; } -void selectRegulatory(struct slRef *trackRefList) -/* If trackRefList is non-NULL, make a collapsible section with a checkbox for each track, +void selectRegulatory() +/* If trackRefList is non-NULL, make a section with a checkbox for each track, * labelled with longLabel, and optionally some filtering options. */ { +struct slRef *trackRefList = findRegulatoryTracks(); if (trackRefList != NULL) { - startCollapsibleSection("Regulation", "Regulatory regions", FALSE); + puts("
"); + printf("
Select Regulatory Annotations
\n"); + printf("The annotations in this section provide predicted regulatory regions " + "based on various experimental data. " + "When a variant overlaps an annotation selected here, the consequence term " + "regulatory_region_variant will be assigned. " + "Follow the links to description pages that explain how each dataset was " + "constructed. " + "Some datasets cover a significant portion of the genome and it may be " + "desirable to filter these annotations by cell type and/or score in order " + "to avoid an overabundance of hits. "); // Use a table with checkboxes in one column and label/other stuff that depends on // checkbox in other column. puts(""); 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); puts(""); } - puts("
"); cartMakeCheckBox(cart, cartVar, FALSE); puts(""); struct trackDb *topTdb = trackDbTopLevelSelfOrParent(tdb); printf("%s
\n", hgTrackUiName(), cartSidUrlString(cart), topTdb->track, tdb->longLabel); printFilterOptions(tdb); puts("

"); - endCollapsibleSection(); + puts(""); } } 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)); @@ -814,43 +825,40 @@ cartMakeCheckBox(cart, cartVar, FALSE); struct trackDb *topTdb = trackDbTopLevelSelfOrParent(tdb); printf("%s
\n", hgTrackUiName(), cartSidUrlString(cart), topTdb->track, tdb->longLabel); } puts("
"); 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 - && regTrackRefList == NULL) +if (dbNsfpTables == NULL && !gotSnp && elTrackRefList == NULL && scoreTrackRefList == NULL) return; puts("
"); printf("
Select More Annotations (optional)
\n"); // Make wrapper table for collapsible sections: puts(""); selectDbNsfp(dbNsfpTables); selectDbSnp(gotSnp); -selectRegulatory(regTrackRefList); trackCheckBoxSection("ConsEl", "Conserved elements", elTrackRefList); trackCheckBoxSection("ConsScore", "Conservation scores", scoreTrackRefList); puts("
"); } void selectFiltersFunc() /* Options to restrict variants based on gene region/soTerm from gpFx */ { startCollapsibleSection("filtersFunc", "Functional role", FALSE); printf("Include variants annotated as
\n"); cartMakeCheckBox(cart, "hgva_include_intergenic", TRUE); printf("intergenic
\n"); cartMakeCheckBox(cart, "hgva_include_upDownstream", TRUE); printf("upstream/downstream of gene
\n"); cartMakeCheckBox(cart, "hgva_include_nmdTranscript", TRUE); @@ -1028,30 +1036,31 @@ "\n", alreadyAgreed ? "true" : "false"); addSomeCss(); printAssemblySection(); /* Check for variant custom tracks. If there are none, tell user they need to * upload at least one. */ struct slRef *varTrackList = NULL, *varGroupList = NULL; tdbFilterGroupTrack(fullTrackList, fullGroupList, isVariantCustomTrack, NULL, &varGroupList, &varTrackList); puts("
"); // Make wrapper table for collapsible sections: selectVariants(varGroupList, varTrackList); boolean gotGP = selectGenes(); if (gotGP) { + selectRegulatory(); selectAnnotations(); selectFilters(); selectOutput(); submitAndDisclaimer(); } printf(""); jsReloadOnBackButton(cart); webNewSection("Using the Variant Annotation Integrator"); webIncludeHelpFile("hgVaiHelpText", FALSE); jsIncludeFile("jquery-ui.js", NULL); jsIncludeFile("hgVarAnnogrator.js", NULL); jsIncludeFile("ui.dropdownchecklist.js", NULL); jsIncludeFile("ddcl.js", NULL);