791097ea7589f6fadcf825c5c3a8934054917a28
angie
  Thu Jul 9 14:38:12 2020 -0700
VCF haplotype display: trackDb setting geneTrack adds option to color by function (red for non-synon, green for synon, blue for UTR/NC).  refs #25870

diff --git src/hg/hgTracks/variation.c src/hg/hgTracks/variation.c
index e787581..3c2b336 100644
--- src/hg/hgTracks/variation.c
+++ src/hg/hgTracks/variation.c
@@ -2535,32 +2535,33 @@
 tg->itemColor = delMccarrollItemColor;
 tg->itemNameColor = delMccarrollItemColor;
 }
 
 void delHindsMethods(struct track *tg)
 {
 tg->itemColor = delHindsItemColor;
 tg->itemNameColor = delHindsItemColor;
 }
 
 // Functional impact coloring scheme with lf->filterColor values
 #define bigDbSnpColorCodingChange MG_RED
 #define bigDbSnpColorSyn MG_GREEN
 #define bigDbSnpColorUtrNc MG_BLUE
 
-static Color lfColorFromSoTerm(enum soTerm term)
-/* Assign a Color according to soTerm. */
+Color colorFromSoTerm(enum soTerm term)
+/* Assign a Color according to soTerm: red for non-synonymous, green for synonymous, blue for
+ * UTR/noncoding, black otherwise. */
 {
 Color color = MG_BLACK;
 switch (term)
     {
     case frameshift_variant:
     case frameshift:
     case initiator_codon_variant:
     case stop_gained:
     case stop_lost:
     case splice_acceptor_variant:
     case splice_donor_variant:
     case inframe_indel:
     case inframe_insertion:
     case inframe_deletion:
     case missense_variant:
@@ -2804,31 +2805,31 @@
 bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow));
 if (bigBedFilterInterval(bedRow, filters))
     {
     struct bigDbSnp *bds = bigDbSnpLoad(bedRow);
     double minMaf = cartUsualDoubleClosestToHome(cart, tdb, FALSE, "minMaf", 0.0);
     if (! filterMaf(bds, freqSourceIx, minMaf))
         return NULL;
     AllocVar(lf);
     lf->name = cloneString(bds->name);
     AllocVar(lf->components);
     lf->start = lf->components->start = bds->chromStart;
     lf->tallStart = lf->start + bds->shiftBases;
     lf->tallEnd = lf ->end = lf->components->end = bds->chromEnd;
     lf->label = bdsLabel(tdb, bds);
     lf->mouseOver = bdsMouseOver(bds);
-    lf->filterColor = lfColorFromSoTerm(bds->maxFuncImpact);
+    lf->filterColor = colorFromSoTerm(bds->maxFuncImpact);
     lf->original = bds;
     // MNVs in dbSNP are usually linked SNVs; if so, use one sf component for each SNV.
     if (bds->class == bigDbSnpMnv && bds->chromEnd - bds->chromStart > 2)
         {
         paranoidCheckMnvLengths(bds);
         int len = bds->chromEnd - bds->chromStart;
         struct simpleFeature *sf = lf->components, *sfList = NULL;
         int i;
         for (i = 0;  i < len;  i++)
             {
             if (alleleBasesMatch(bds, i))
                 {
                 // If in a block, end the block.
                 if (sf != NULL)
                     {