be693595e590bce1d7d9b5e0d34451047c3170f2
chmalee
  Thu Jul 30 15:52:52 2020 -0700
Add 2 new color options for trios, color by predicted functional affect and de novo child variants, refs #25983

diff --git src/hg/lib/vcfUi.c src/hg/lib/vcfUi.c
index 7073178..9d63153 100644
--- src/hg/lib/vcfUi.c
+++ src/hg/lib/vcfUi.c
@@ -598,35 +598,52 @@
     cgiMakeCheckBox(defaultLabel, isDefaultChecked);
     printf("VCF file sample names  ");
     cgiMakeCheckBox(aliasLabel, isAliasChecked);
     printf("Family Labels");
     printf("<br>");
     }
 if (trackDbSetting(tdb,VCF_PHASED_PARENTS_SAMPLE_SETTING))
     {
     printf("<b>Hide parent sample(s)");
     char hideVarName[1024];
     safef(hideVarName, sizeof(hideVarName), "%s.%s", name, VCF_PHASED_HIDE_OTHER_VAR);
     boolean hidingOtherSamples = cartUsualBooleanClosestToHome(cart, tdb, parentLevel, VCF_PHASED_HIDE_OTHER_VAR, FALSE);
     cgiMakeCheckBox(hideVarName, hidingOtherSamples);
     }
 printf("<br>");
-printf("Highlight child variants that are inconsistent with phasing");
-char shadeByDiffs[1024];
-safef(shadeByDiffs, sizeof(shadeByDiffs), "%s.%s", name, VCF_PHASED_HIGHLIGHT_INCONSISTENT);
-boolean highlightChildDiffs = cartUsualBooleanClosestToHome(cart, tdb, FALSE, VCF_PHASED_HIGHLIGHT_INCONSISTENT, FALSE);
-cgiMakeCheckBox(shadeByDiffs, highlightChildDiffs);
+printf("Allele coloring scheme:");
+printf("<br>");
+char *colorBy = cartOrTdbString(cart, tdb, VCF_PHASED_COLORBY_VAR, VCF_PHASED_COLORBY_DEFAULT);
+char varName[1024];
+safef(varName, sizeof(varName), "%s.%s", name, VCF_PHASED_COLORBY_VAR);
+cgiMakeRadioButton(varName, VCF_PHASED_COLORBY_DEFAULT, sameString(colorBy, VCF_PHASED_COLORBY_DEFAULT));
+printf("No color<br>");
+char *geneTrack = cartOrTdbString(cart, tdb, "geneTrack", NULL);
+if (isNotEmpty(geneTrack))
+    {
+    cgiMakeRadioButton(varName, VCF_PHASED_COLORBY_FUNCTION, sameString(colorBy, VCF_PHASED_COLORBY_FUNCTION));
+    printf("predicted functional affect: ");
+    printf("reference alleles invisible, alternate alleles in "
+           "<span style='color:red'>red</span> for non-synonymous, "
+           "<span style='color:green'>green</span> for synonymous, "
+           "<span style='color:blue'>blue</span> for UTR/noncoding, "
+           "black otherwise<BR>\n");
+    }
+cgiMakeRadioButton(varName, VCF_PHASED_COLORBY_DE_NOVO, sameString(colorBy, VCF_PHASED_COLORBY_DE_NOVO));
+printf("predicted de novo child mutations <span style='color:red'>red</span><br>");
+cgiMakeRadioButton(varName, VCF_PHASED_COLORBY_MENDEL_DIFF, sameString(colorBy, VCF_PHASED_COLORBY_MENDEL_DIFF));
+printf("child variants that are inconsistent with phasing <span style='color:red'>red</span>");
 char *infoText = "Check this box to color child variants red if they do not agree with the implied "
     "parental transmitted allele at this location. This configuration is only available when parent "
     "haplotypes are displayed.";
 printInfoIcon(infoText);
 }
 
 void vcfCfgUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed)
 /* VCF: Variant Call Format.  redmine #3710 */
 {
 boxed = cfgBeginBoxAndTitle(tdb, boxed, title);
 printf("<TABLE%s><TR><TD>", boxed ? " width='100%'" : "");
 struct vcfFile *vcff = vcfHopefullyOpenHeader(cart, tdb);
 if (vcff != NULL)
     {
     boolean parentLevel = isNameAtParentLevel(tdb, name);