42d91822ec103cfcc74e9f69b39d3ad8d886c278 angie Wed Mar 18 15:25:15 2020 -0700 Add a new trackDb setting hapClusterMethod and corresponding UI option for drawing haplotypes in VCF file order instead of clustering. refs #25197 Applied the new setting to mm10 strainSNPs and increased its default height so that strain labels appear in the left label area. diff --git src/hg/hgc/vcfClick.c src/hg/hgc/vcfClick.c index 2e11288..3238233 100644 --- src/hg/hgc/vcfClick.c +++ src/hg/hgc/vcfClick.c @@ -483,38 +483,47 @@ // Since these are variants, if it looks like a dbSNP or dbVar ID, provide a link: if (regexMatch(rec->name, "^rs[0-9]+$")) { printf("<B>dbSNP:</B> "); printDbSnpRsUrl(rec->name, "%s", rec->name); puts("<BR>"); } else if (regexMatch(rec->name, "^[en]ss?v[0-9]+$")) { printf("<B>dbVar:</B> "); printf("<A HREF=\"https://www.ncbi.nlm.nih.gov/dbvar/variants/%s/\" " "TARGET=_BLANK>%s</A><BR>\n", rec->name, rec->name); } printCustomUrl(tdb, rec->name, TRUE); boolean hapClustEnabled = cartOrTdbBoolean(cart, tdb, VCF_HAP_ENABLED_VAR, TRUE); -if (hapClustEnabled) +if (hapClustEnabled && rec->file != NULL && rec->file->genotypeCount > 1) + { + char *hapMethod = cartOrTdbString(cart, tdb, VCF_HAP_METHOD_VAR, VCF_DEFAULT_HAP_METHOD); + if (sameString(hapMethod, VCF_HAP_METHOD_CENTER_WEIGHTED)) { static char *formName = "vcfCfgHapCenter"; printf("<FORM NAME=\"%s\" ACTION=\"%s\">\n", formName, hgTracksName()); cartSaveSession(cart); + printf("<TABLE cellpadding=0><TR><TD colspan=2>" + "<B>Haplotype sorting order:</B> "); vcfCfgHaplotypeCenter(cart, tdb, tdb->track, FALSE, rec->file, rec->name, seqName, rec->chromStart, formName); - printf("</FORM>\n"); + printf("</TABLE></FORM>\n"); + } + else + printf("<B>Haplotype sorting order:</B> the order in which samples appear in the " + "underlying VCF file<BR>"); } char leftBase = rec->alleles[0][0]; unsigned int vcfStart = vcfRecordTrimIndelLeftBase(rec); boolean showLeftBase = (rec->chromStart == vcfStart+1); (void)vcfRecordTrimAllelesRight(rec); char *displayAls[rec->alleleCount]; makeDisplayAlleles(rec, showLeftBase, leftBase, 20, TRUE, FALSE, displayAls); printPosOnChrom(seqName, rec->chromStart, rec->chromEnd, NULL, FALSE, rec->name); printf("<B>Reference allele:</B> %s<BR>\n", displayAls[0]); vcfAltAlleleDetails(rec, displayAls); vcfQualDetails(rec); vcfFilterDetails(rec); vcfInfoDetails(rec); pgSnpCodingDetail(rec); makeDisplayAlleles(rec, showLeftBase, leftBase, 5, FALSE, TRUE, displayAls);