7a16880260a6d93d0616bd8a1660fde60ac0bb3b chmalee Fri May 22 16:13:56 2020 -0700 Use cart*ClosestToHome functions for setting trackUi vars so composite level track settings work correctly, refs #25585 diff --git src/hg/lib/vcfUi.c src/hg/lib/vcfUi.c index 4847cfa..e2a5759 100644 --- src/hg/lib/vcfUi.c +++ src/hg/lib/vcfUi.c @@ -419,106 +419,107 @@ if (val != NULL) { if (foundAlias != gotAlias) errAbort("Either all samples have aliases or none."); else *val++ = 0; } char *name = samples[i]; struct slPair *temp = slPairNew(cloneString(name), cloneString(val)); slAddHead(&ret, temp); } slReverse(&ret); return ret; } -struct slPair *vcfPhasedGetSampleOrder(struct cart *cart, struct trackDb *tdb) +struct slPair *vcfPhasedGetSampleOrder(struct cart *cart, struct trackDb *tdb, boolean parentLevel) /* Parse out a trio sample order from either trackDb or the cart */ { char sampleOrderVar[1028],hideParentsVar[1028]; safef(sampleOrderVar, sizeof(sampleOrderVar), "%s.%s", tdb->track, VCF_PHASED_SAMPLE_ORDER_VAR); safef(hideParentsVar, sizeof(hideParentsVar), "%s.%s", tdb->track, VCF_PHASED_HIDE_OTHER_VAR); -boolean hideOtherSamples = cartUsualBoolean(cart, hideParentsVar, FALSE); +boolean hideOtherSamples = cartUsualBooleanClosestToHome(cart, tdb, parentLevel, VCF_PHASED_HIDE_OTHER_VAR, FALSE); char *cartOrder = cartOptionalString(cart, sampleOrderVar); struct slPair *tdbOrder = vcfPhasedGetSamplesFromTdb(tdb, hideOtherSamples); if (cartOrder != NULL && !hideOtherSamples) { struct slName *name; struct slName *fromCart = slNameListFromComma(cartOrder); struct slPair *ret = NULL; for (name = fromCart; name != NULL; name = name->next) { struct slPair *temp = slPairFind(tdbOrder, name->name); slAddHead(&ret, temp); } slReverse(ret); return ret; } else return tdbOrder; } static boolean hasSampleAliases(struct trackDb *tdb) /* Check whether trackDb has aliases for the sample names */ { struct slPair *nameVals = vcfPhasedGetSamplesFromTdb(tdb,FALSE); return nameVals->val != NULL; } -static void vcfCfgPhasedTrioUi(struct cart *cart, struct trackDb *tdb, struct vcfFile *vcff, char *name) +static void vcfCfgPhasedTrioUi(struct cart *cart, struct trackDb *tdb, struct vcfFile *vcff, char *name, + boolean parentLevel) /* Put up the phased trio specific config settings */ { if (hasSampleAliases(tdb)) { printf("<b>Label samples by:</b>"); char defaultLabel[1024], aliasLabel[1024]; - safef(defaultLabel, sizeof(defaultLabel), "%s.%s", tdb->track, VCF_PHASED_DEFAULT_LABEL_VAR); - safef(aliasLabel, sizeof(aliasLabel), "%s.%s", tdb->track, VCF_PHASED_ALIAS_LABEL_VAR); - boolean isDefaultChecked = cartUsualBoolean(cart, defaultLabel, TRUE); - boolean isAliasChecked = cartUsualBoolean(cart, aliasLabel, FALSE); + safef(defaultLabel, sizeof(defaultLabel), "%s.%s", name, VCF_PHASED_DEFAULT_LABEL_VAR); + safef(aliasLabel, sizeof(aliasLabel), "%s.%s", name, VCF_PHASED_ALIAS_LABEL_VAR); + boolean isDefaultChecked = cartUsualBooleanClosestToHome(cart, tdb, parentLevel, VCF_PHASED_DEFAULT_LABEL_VAR, TRUE); + boolean isAliasChecked = cartUsualBooleanClosestToHome(cart, tdb, parentLevel, VCF_PHASED_ALIAS_LABEL_VAR, FALSE); cgiMakeCheckBox(defaultLabel, isDefaultChecked); printf("VCF file sample names "); cgiMakeCheckBox(aliasLabel, isAliasChecked); printf("aliases"); printf("<br>"); } if (trackDbSetting(tdb,VCF_PHASED_PARENTS_SAMPLE_SETTING)) { printf("<b>Hide parent/other sample(s)"); char hideVarName[1024]; - safef(hideVarName, sizeof(hideVarName), "%s.%s", tdb->track, VCF_PHASED_HIDE_OTHER_VAR); - boolean hidingOtherSamples = cartUsualBoolean(cart, hideVarName, FALSE); + 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); } } 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); if (vcff->genotypeCount > 1 && !sameString(tdb->type, "vcfPhasedTrio")) { vcfCfgHapCluster(cart, tdb, vcff, name, parentLevel); } if (sameString(tdb->type, "vcfPhasedTrio")) { - vcfCfgPhasedTrioUi(cart, tdb, vcff, name); + vcfCfgPhasedTrioUi(cart, tdb, vcff, name, parentLevel); } if (differentString(tdb->track,"evsEsp6500")) { puts("<H3>Filters</H3>"); vcfCfgMinQual(cart, tdb, vcff, name, parentLevel); vcfCfgFilterColumn(cart, tdb, vcff, name, parentLevel); } vcfCfgMinAlleleFreq(cart, tdb, vcff, name, parentLevel); } else { printf("Sorry, couldn't access VCF file.<BR>\n"); } puts("</TD>");