0950c73d715f02c493129eedff225843b7c3da98 angie Wed Nov 30 14:34:35 2011 -0800 Feature #3710 (vcfTabix UI options): added section headers forhaplo-sorting display and filters; added some explanatory text at the beginning of the haplo-sorting section. diff --git src/hg/lib/vcfUi.c src/hg/lib/vcfUi.c index 0a3394b..8f27f8a 100644 --- src/hg/lib/vcfUi.c +++ src/hg/lib/vcfUi.c @@ -143,82 +143,80 @@ } errCatchEnd(errCatch); if (errCatch->gotError) { if (isNotEmpty(errCatch->message->string)) warn("unable to open %s: %s", fileOrUrl, errCatch->message->string); } errCatchFree(&errCatch); return vcff; } static void vcfCfgHapClusterEnable(struct cart *cart, struct trackDb *tdb, char *name, boolean compositeLevel) /* Let the user enable/disable haplotype sorting display. */ { -printf("<B>Enable Haplotype sorting display: </B>"); boolean hapClustEnabled = cartUsualBooleanClosestToHome(cart, tdb, compositeLevel, VCF_HAP_ENABLED_VAR, TRUE); char cartVar[1024]; safef(cartVar, sizeof(cartVar), "%s." VCF_HAP_ENABLED_VAR, name); cgiMakeCheckBox(cartVar, hapClustEnabled); -printf("<BR>\n"); +printf("<B>Enable Haplotype sorting display</B><BR>\n"); } static void vcfCfgHapClusterColor(struct cart *cart, struct trackDb *tdb, char *name, boolean compositeLevel) /* Let the user choose how to color the sorted haplotypes. */ { -printf("<B>Color sorted haplotypes by:</B>\n"); +printf("<B>Haplotype coloring scheme:</B><BR>\n"); char *colorBy = cartUsualStringClosestToHome(cart, tdb, compositeLevel, VCF_HAP_COLORBY_VAR, VCF_HAP_COLORBY_REFALT); boolean colorByRefAlt = sameString(colorBy, VCF_HAP_COLORBY_REFALT); char varName[1024]; safef(varName, sizeof(varName), "%s." VCF_HAP_COLORBY_VAR, name); cgiMakeRadioButton(varName, VCF_HAP_COLORBY_REFALT, colorByRefAlt); -printf("reference/alternate alleles (reference = blue, alternate = red)\n"); +printf("reference/alternate alleles (reference = blue, alternate = red)<BR>\n"); cgiMakeRadioButton(varName, VCF_HAP_COLORBY_BASE, !colorByRefAlt); printf("first base of allele (A = red, C = blue, G = green, T = magenta)<BR>\n"); } static void vcfCfgHapClusterHeight(struct cart *cart, struct trackDb *tdb, struct vcfFile *vcff, char *name, boolean compositeLevel) /* Let the user specify a height for the track. */ { if (vcff != NULL && vcff->genotypeCount > 1) { printf("<B>Haplotype sorting display height:</B> \n"); int cartHeight = cartUsualIntClosestToHome(cart, tdb, compositeLevel, VCF_HAP_HEIGHT_VAR, VCF_DEFAULT_HAP_HEIGHT); char varName[1024]; safef(varName, sizeof(varName), "%s." VCF_HAP_HEIGHT_VAR, name); cgiMakeIntVarInRange(varName, cartHeight, "Height (in pixels) of track", 5, "4", "2500"); puts("<BR>"); } } static void vcfCfgHapCluster(struct cart *cart, struct trackDb *tdb, struct vcfFile *vcff, char *name, boolean compositeLevel) /* Show controls for haplotype-sorting display, which only makes sense to do when * the VCF file describes multiple genotypes. */ { vcfCfgHapClusterEnable(cart, tdb, name, compositeLevel); vcfCfgHaplotypeCenter(cart, tdb, name, compositeLevel, vcff, NULL, NULL, 0, "mainForm"); vcfCfgHapClusterColor(cart, tdb, name, compositeLevel); vcfCfgHapClusterHeight(cart, tdb, vcff, name, compositeLevel); -// thicken lines? -// outline center variant? +puts("<BR>"); } static void vcfCfgMinQual(struct cart *cart, struct trackDb *tdb, struct vcfFile *vcff, char *name, boolean compositeLevel) /* If checkbox is checked, apply minimum value filter to QUAL column. */ { char cartVar[1024]; safef(cartVar, sizeof(cartVar), "%s." VCF_APPLY_MIN_QUAL_VAR, name); boolean applyFilter = cartUsualBooleanClosestToHome(cart, tdb, compositeLevel, VCF_APPLY_MIN_QUAL_VAR, VCF_DEFAULT_APPLY_MIN_QUAL); cgiMakeCheckBox(cartVar, applyFilter); printf("<B>Exclude items with QUAL score less than </B>\n"); double minQual = cartUsualDoubleClosestToHome(cart, tdb, compositeLevel, VCF_MIN_QUAL_VAR, VCF_DEFAULT_MIN_QUAL); safef(cartVar, sizeof(cartVar), "%s." VCF_MIN_QUAL_VAR, name); @@ -271,31 +269,41 @@ cgiMakeDoubleVarInRange(varName, cartMinFreq, "minor allele frequency between 0.0 and 0.5", 5, "0.0", "0.5"); puts("<BR>"); } 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 compositeLevel = isNameAtCompositeLevel(tdb, name); if (vcff->genotypeCount > 1) + { + puts("<H3>Haplotype sorting display</H3>"); + puts("<P>When this display mode is enabled and genotypes are phased or homozygous, " + "each genotype is split into two independent haplotypes. " + "These local haplotypes are clustered by similarity around a central variant. " + "Haplotypes are reordered for display using the clustering tree, which is " + "drawn in the left label area. " + "Local haplotype blocks can often be identified using this display.</P>"); vcfCfgHapCluster(cart, tdb, vcff, name, compositeLevel); + } + puts("<H3>Filters</H3>"); vcfCfgMinQual(cart, tdb, vcff, name, compositeLevel); vcfCfgFilterColumn(cart, tdb, vcff, name, compositeLevel); vcfCfgMinAlleleFreq(cart, tdb, vcff, name, compositeLevel); } else { printf("Sorry, couldn't access VCF file.<BR>\n"); } puts("</TD>"); if (boxed && fileExists(hHelpFile("hgVcfTrackHelp"))) printf("<TD style='text-align:right'><A HREF=\"../goldenPath/help/hgVcfTrackHelp.html\" " "TARGET=_BLANK>VCF configuration help</A></TD>"); printf("</TR></TABLE>");