7354383ad1e6cb20625d5203a9593ce5022aa2ea
angie
Mon Aug 29 16:00:58 2011 -0700
Feature #2823 (VCF track handler): on details page, display allele andgenotype frequencies as percents. When genotypes are given, display
Hardy-Weinberg equilibrium genotype probabilities for comparison.
diff --git src/hg/hgc/vcfClick.c src/hg/hgc/vcfClick.c
index e39854b..62a7fab 100644
--- src/hg/hgc/vcfClick.c
+++ src/hg/hgc/vcfClick.c
@@ -149,42 +149,49 @@
refs++;
else
alts++;
if (gt->hapIxA == 0 && gt->hapIxB == 0)
refRefs++;
else if (gt->hapIxA == 1 && gt->hapIxB == 1)
altAlts++;
else if ((gt->hapIxA == 1 && gt->hapIxB == 0) ||
(gt->hapIxA == 0 && gt->hapIxB == 1))
refAlts++;
else
gtOther++;
}
}
printf("Genotype count: %d (%d phased)
\n", vcff->genotypeCount, phasedGts);
-printf("Alleles: %s: %d (%.2f); %s: %d (%.2f)
\n",
- rec->alleles[0], refs, (double)refs/(2*vcff->genotypeCount),
- rec->alleles[1], alts, (double)alts/(2*vcff->genotypeCount));
+double refAf = (double)refs/(2*vcff->genotypeCount);
+double altAf = (double)alts/(2*vcff->genotypeCount);
+printf("Alleles: %s: %d (%.3f%%); %s: %d (%.3f%%)
\n",
+ rec->alleles[0], refs, 100*refAf, rec->alleles[1], alts, 100*altAf);
if (vcff->genotypeCount > 1)
{
- printf("Genotypes: %s/%s: %d (%.2f); %s/%s: %d (%.2f); %s/%s: %d (%.2f)",
- rec->alleles[0], rec->alleles[0], refRefs, (double)refRefs/vcff->genotypeCount,
- rec->alleles[0], rec->alleles[1], refAlts, (double)refAlts/vcff->genotypeCount,
- rec->alleles[1], rec->alleles[1], altAlts, (double)altAlts/vcff->genotypeCount);
+ printf("Genotypes: %s/%s: %d (%.3f%%); %s/%s: %d (%.3f%%); %s/%s: %d (%.3f%%)",
+ rec->alleles[0], rec->alleles[0], refRefs, 100*(double)refRefs/vcff->genotypeCount,
+ rec->alleles[0], rec->alleles[1], refAlts, 100*(double)refAlts/vcff->genotypeCount,
+ rec->alleles[1], rec->alleles[1], altAlts, 100*(double)altAlts/vcff->genotypeCount);
if (gtOther > 0)
- printf("; other: %d (%.2f)", gtOther, (double)gtOther/vcff->genotypeCount);
+ printf("; other: %d (%.3f)", gtOther, (double)gtOther/vcff->genotypeCount);
printf("
\n");
+ if (rec->alleleCount == 2)
+ printf("Hardy-Weinberg equilibrium: "
+ "P(%s/%s) = %.3f%%; P(%s/%s) = %.3f%%; P(%s/%s) = %.3f%%
",
+ rec->alleles[0], rec->alleles[0], 100*refAf*refAf,
+ rec->alleles[0], rec->alleles[1], 100*2*refAf*altAf,
+ rec->alleles[1], rec->alleles[1], 100*altAf*altAf);
}
jsBeginCollapsibleSection(cart, track, "genotypes", "Detailed genotypes", FALSE);
dyStringClear(tmp1);
dyStringAppend(tmp1, rec->format);
enum vcfInfoType formatTypes[256];
char *formatKeys[256];
int formatCount = chopString(tmp1->string, ":", formatKeys, ArraySize(formatKeys));
puts("Genotype info key:
");
for (i = 0; i < formatCount; i++)
{
if (sameString(formatKeys[i], vcfGtGenotype))
continue;
const struct vcfInfoDef *def = vcfInfoDefForGtKey(vcff, formatKeys[i]);
char *desc = def ? def->description : "not described in VCF header";
printf(" %s: %s
\n", formatKeys[i], desc);