3556696ddf8ee9dadf75805726fb2a4c226c7f92
angie
  Thu Aug 17 09:39:46 2017 -0700
A little refactoring of logic that allows HGVS output only for RefSeq transcripts.

diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c
index e720103..04abe87 100644
--- src/hg/hgVai/hgVai.c
+++ src/hg/hgVai/hgVai.c
@@ -986,59 +986,65 @@
            isVisible ? "block" : "none");
     cartMakeCheckBox(cart, "hgva_txStatus_refSeqStatus", FALSE);
     puts("Include the "
          "<A HREF=" REFSEQ_STATUS_DOC_URL " "
          "TARGET=_BLANK>RefSeq status</A> of each transcript.<BR>");
     puts("</div>");
     }
 printf("<div class=\"noTxStatus\" style=\"display: %s;\">",
        somethingIsVisible ? "none" : "block");
 puts("No transcript status data are available for the selected gene track.");
 puts("</div>");
 puts("<BR>");
 endCollapsibleSection();
 }
 
+static boolean canDoHgvsOut(char *geneTrack)
+/* Return TRUE if we're able to make HGVS output terms for transcripts in geneTrack. */
+{
+return sameString(geneTrack, "refGene") || startsWith("ncbiRefSeq", geneTrack);
+}
+
 static void selectHgvsOut(char *geneTrack)
 /* Offer HGVS output choices if RefSeq Genes are selected */
 {
 startCollapsibleSection("hgvsOut", "HGVS variant nomenclature", TRUE);
 printf("The <a href='http://www.hgvs.org/' target=_blank>Human Genome Variation Society (HGVS)</a> "
        "has established a "
        "<a href='http://varnomen.hgvs.org/' target=_blank>sequence variant nomenclature</a>, "
        "an international standard used to report variation in "
        "genomic, transcript and protein sequences.<br>\n");
-boolean refSeqSelected = sameString(geneTrack, "refGene") || startsWith("ncbiRefSeq", geneTrack);
-printf("<div id=\"hgvsOptions\" style=\"display: %s;\">", refSeqSelected ? "block" : "none");
+boolean hgvsOk = canDoHgvsOut(geneTrack);
+printf("<div id=\"hgvsOptions\" style=\"display: %s;\">", hgvsOk ? "block" : "none");
 cartMakeCheckBox(cart, "hgva_hgvsG", FALSE);
 printf("Include HGVS genomic (g.) terms in output<br>\n");
 cartMakeCheckBox(cart, "hgva_hgvsCN", FALSE);
 printf("Include HGVS coding (c.) terms if applicable, otherwise noncoding (n.) terms, in output"
        "<br>\n");
 cartMakeCheckBox(cart, "hgva_hgvsP", FALSE);
 printf("Include HGVS protein (p.) terms (if applicable) in output<br>\n");
 cartMakeCheckBox(cart, "hgva_hgvsPAddParens", FALSE);
 printf("When including HGVS protein (p.) terms, add parentheses around changes to emphasize "
        "that they are predictions<br>\n");
 cartMakeCheckBox(cart, "hgva_hgvsBreakDelIns", FALSE);
 printf("For variants that involve both a deletion and insertion, "
        "including multi-nucleotide variants, "
        "include the deleted sequence (e.g. show \"delAGinsTT\" instead of only \"delinsTT\")"
        "<br>\n");
 puts("</div>");
 printf("<div id=\"noHgvs\" style=\"display: %s;\">",
-       refSeqSelected ? "none" : "block");
+       hgvsOk ? "none" : "block");
 printf("Select RefSeq Genes in the \"Select Genes\" section above "
        "in order to make options appear.\n");
 puts("</div>");
 puts("<br>");
 endCollapsibleSection();
 }
 
 boolean isHg19RegulatoryTrack(struct trackDb *tdb, void *filterData)
 /* For now, just look for a couple specific tracks by tableName. */
 {
 //#*** NEED METADATA
 return (sameString("wgEncodeRegDnaseClusteredV3", tdb->table) ||
 	sameString("wgEncodeRegTfbsClusteredV3", tdb->table));
 }
 
@@ -1457,44 +1463,44 @@
 aggvFuncFilter.exonLoss = cartUsualBoolean(cart, "hgva_include_exonLoss", TRUE);
 aggvFuncFilter.utr = cartUsualBoolean(cart, "hgva_include_utr", TRUE);
 aggvFuncFilter.cdsSyn = cartUsualBoolean(cart, "hgva_include_cdsSyn", TRUE);
 aggvFuncFilter.cdsNonSyn = cartUsualBoolean(cart, "hgva_include_cdsNonSyn", TRUE);
 aggvFuncFilter.intron = cartUsualBoolean(cart, "hgva_include_intron", TRUE);
 aggvFuncFilter.splice = cartUsualBoolean(cart, "hgva_include_splice", TRUE);
 aggvFuncFilter.nonCodingExon = cartUsualBoolean(cart, "hgva_include_nonCodingExon", TRUE);
 aggvFuncFilter.noVariation = cartUsualBoolean(cart, "hgva_include_noVariation", TRUE);
 annoGratorGpVarSetFuncFilter(gpVarGrator, &aggvFuncFilter);
 }
 
 static void setHgvsOutOptions(struct annoGrator *gpVarGrator, char *geneTrack)
 /* Use cart variables to configure gpVarGrator's HGVS output. */
 {
 uint hgvsOutOptions = 0;
-if (sameString(geneTrack, "refGene") || startsWith("ncbiRefSeq", geneTrack))
+if (canDoHgvsOut(geneTrack))
     {
     if (cartUsualBoolean(cart, "hgva_hgvsG", FALSE))
         hgvsOutOptions |= HGVS_OUT_G;
     if (cartUsualBoolean(cart, "hgva_hgvsCN", FALSE))
         hgvsOutOptions |= HGVS_OUT_CN;
     if (cartUsualBoolean(cart, "hgva_hgvsP", FALSE))
         hgvsOutOptions |= HGVS_OUT_P;
     if (cartUsualBoolean(cart, "hgva_hgvsPAddParens", FALSE))
         hgvsOutOptions |= HGVS_OUT_P_ADD_PARENS;
     if (cartUsualBoolean(cart, "hgva_hgvsBreakDelIns", FALSE))
         hgvsOutOptions |= HGVS_OUT_BREAK_DELINS;
-    annoGratorGpVarSetHgvsOutOptions(gpVarGrator, hgvsOutOptions);
     }
+annoGratorGpVarSetHgvsOutOptions(gpVarGrator, hgvsOutOptions);
 }
 
 struct annoGrator *gratorForSnpBed4(struct hash *gratorsByName, char *suffix,
 				    struct annoAssembly *assembly, char *chrom,
 				    enum annoGratorOverlap overlapRule,
 				    char **retDescription)
 /* Look up snpNNNsuffix; if we find it, return a grator (possibly for a bigBed 4 file),
  * otherwise return NULL. */
 {
 char *fileName = NULL;
 struct trackDb *tdb = NULL;
 if (! findSnpBed4(suffix, &fileName, &tdb))
     return NULL;
 struct annoGrator *grator = NULL;
 // First look in gratorsByName to see if this grator has already been constructed: