@Override public Map<String, Object> annotate( final RefMetaDataTracker tracker, final AnnotatorCompatible walker, final ReferenceContext ref, final Map<String, AlignmentContext> stratifiedContexts, final VariantContext vc, final Map<String, PerReadAlleleLikelihoodMap> stratifiedPerReadAlleleLikelihoodMap) { final GenotypesContext genotypes = vc.getGenotypes(); if (genotypes == null || genotypes.size() < MIN_SAMPLES) { if (!warningLogged) { logger.warn("Too few genotypes"); warningLogged = true; } return null; } int refCount = 0; int hetCount = 0; int homCount = 0; for (final Genotype g : genotypes) { if (g.isNoCall()) continue; // TODO - fix me: // Right now we just ignore genotypes that are not confident, but this throws off // our HW ratios. More analysis is needed to determine the right thing to do when // the genotyper cannot decide whether a given sample is het or hom var. if (g.getLog10PError() > MIN_LOG10_PERROR) continue; if (g.isHomRef()) refCount++; else if (g.isHet()) hetCount++; else homCount++; } if (refCount + hetCount + homCount == 0) return null; double pvalue = HardyWeinbergCalculation.hwCalculate(refCount, hetCount, homCount); // System.out.println(refCount + " " + hetCount + " " + homCount + " " + pvalue); Map<String, Object> map = new HashMap<>(); map.put(getKeyNames().get(0), String.format("%.1f", QualityUtils.phredScaleErrorRate(pvalue))); return map; }
private VariantContext makeVC() { final GenotypesContext testGC = GenotypesContext.create(2); final Allele refAllele = Allele.create("A", true); final Allele altAllele = Allele.create("T"); return (new VariantContextBuilder()) .alleles(Arrays.asList(refAllele, altAllele)) .chr("1") .start(15L) .stop(15L) .genotypes(testGC) .make(); }
@Test public void testFixReverseComplementedGenotypes() { final Allele refA = Allele.create("A", true); final Allele altC = Allele.create("C", false); final GenotypesContext originalGenotypes = GenotypesContext.create(3); originalGenotypes.add(new GenotypeBuilder("homref").alleles(Arrays.asList(refA, refA)).make()); originalGenotypes.add(new GenotypeBuilder("het").alleles(Arrays.asList(refA, altC)).make()); originalGenotypes.add(new GenotypeBuilder("homvar").alleles(Arrays.asList(altC, altC)).make()); final Allele refT = Allele.create("T", true); final Allele altG = Allele.create("G", false); final GenotypesContext expectedGenotypes = GenotypesContext.create(3); expectedGenotypes.add(new GenotypeBuilder("homref").alleles(Arrays.asList(refT, refT)).make()); expectedGenotypes.add(new GenotypeBuilder("het").alleles(Arrays.asList(refT, altG)).make()); expectedGenotypes.add(new GenotypeBuilder("homvar").alleles(Arrays.asList(altG, altG)).make()); final Map<Allele, Allele> reverseComplementAlleleMap = new HashMap<Allele, Allele>(2); reverseComplementAlleleMap.put(refA, refT); reverseComplementAlleleMap.put(altC, altG); final GenotypesContext actualGenotypes = LiftoverVcf.fixGenotypes(originalGenotypes, reverseComplementAlleleMap); for (final String sample : Arrays.asList("homref", "het", "homvar")) { final List<Allele> expected = expectedGenotypes.get(sample).getAlleles(); final List<Allele> actual = actualGenotypes.get(sample).getAlleles(); Assert.assertEquals(expected.get(0), actual.get(0)); Assert.assertEquals(expected.get(1), actual.get(1)); } }