private boolean haveSameGenotypes(final Genotype g1, final Genotype g2) { if ( g1 == null || g2 == null ) return false; if ((g1.isCalled() && g2.isFiltered()) || (g2.isCalled() && g1.isFiltered()) || (g1.isFiltered() && g2.isFiltered() && XLfiltered)) return false; List<Allele> a1s = g1.getAlleles(); List<Allele> a2s = g2.getAlleles(); return (a1s.containsAll(a2s) && a2s.containsAll(a1s)); } @Override
static boolean allGenotypesAreUnfilteredAndCalled(VariantContext vc) { for (final Genotype gt : vc.getGenotypes()) { if (gt.isNoCall() || gt.isFiltered()) return false; } return true; }
private boolean sampleHasVariant(final Genotype g) { return (g !=null && !g.isHomRef() && (g.isCalled() || (g.isFiltered() && !XLfiltered))); }
/** * Find the number of filtered samples * * @param vc the variant rod VariantContext * @return number of filtered samples */ private int numFilteredGenotypes(final VariantContext vc){ if (vc == null) return 0; int numFiltered = 0; // check if we find it in the variant rod GenotypesContext genotypes = vc.getGenotypes(samples); for (final Genotype g : genotypes) if ( g.isFiltered() && !g.getFilters().isEmpty()) numFiltered++; return numFiltered; }
public static boolean isUnfilteredCalledDiploidGenotype(Genotype gt) { return (! gt.isFiltered() && gt.isCalled() && gt.getPloidy() == 2); }
/** Augment genotype with the given filters and return modified GenotypeBuilder */ public Genotype gtWithAppliedFilters(Genotype gt) { GenotypeBuilder gtBuilder = new GenotypeBuilder(gt); ArrayList<String> filters = new ArrayList<>(); if (gt.isFiltered()) filters.add(gt.getFilters()); filters.addAll(getFiltersFor(gt)); gtBuilder.filters(filters); return gtBuilder.make(); }
if ( g.hasAD() ) sawAD = true; if ( g.hasPL() ) sawPL = true; if (g.isFiltered()) sawGenotypeFilter = true;
if ( g.hasAD() ) sawAD = true; if ( g.hasPL() ) sawPL = true; if (g.isFiltered()) sawGenotypeFilter = true;
if ( g.hasAD() ) sawAD = true; if ( g.hasPL() ) sawPL = true; if (g.isFiltered()) sawGenotypeFilter = true;
final Genotype gtFather = vc.getGenotype(fatherName); valFather = (gtFather != null && (gtFather.isFiltered() || !extraFts.get(fatherName).isEmpty())) ? 1 : 0; } else { valFather = 0; final Genotype gtMother = vc.getGenotype(motherName); valMother = (gtMother != null && (gtMother.isFiltered() || !extraFts.get(motherName).isEmpty())) ? 1 : 0; } else { valMother = 0;
@Test public void testApplyGenotypeFilters(){ final VariantContext vc = buildDataForFilters().make(); final String filterName = "LowZ"; //an attribute that doesn't appear in the VariantContext, so there isn't any chance of confusion like with the INFO DP final String filterExpr = "Z < 10"; final List<VariantContextUtils.JexlVCMatchExp> genotypeFilterExps = VariantContextUtils.initializeMatchExps(Arrays.asList(filterName), Arrays.asList(filterExpr)); final VariantContextBuilder anotherVCBuilder = VariantFiltration.applyGenotypeFilters(vc, genotypeFilterExps, false, false, false); final VariantContext anotherVC = anotherVCBuilder.filters().make(); Assert.assertEquals(anotherVC.getGenotype("one").isFiltered(), true); Assert.assertTrue(anotherVC.getGenotype("one").getFilters().equals(filterName)); Assert.assertEquals(anotherVC.getGenotype("two").isFiltered(), false); Assert.assertEquals(anotherVC.getGenotype("three").isFiltered(), false); Assert.assertEquals(anotherVC.getGenotype("four").isFiltered(), false); Assert.assertEquals(anotherVC.getGenotype("five").isFiltered(), false); Assert.assertEquals(anotherVC.getGenotype("six").isFiltered(), false); final VariantContextBuilder yetAnotherVCBuilder = VariantFiltration.applyGenotypeFilters(anotherVC, genotypeFilterExps, false, true, false); final VariantContext yetAnotherVC = yetAnotherVCBuilder.filters().make(); Assert.assertEquals(yetAnotherVC.getGenotype("six").isFiltered(), true); Assert.assertTrue(yetAnotherVC.getGenotype("six").getFilters().equals(filterName)); }
private static GenotypeConcordanceStateCodes getStateCode(final VariantContext ctx, final String sample, final int minGq, final int minDp) { // Site level checks // Added potential to include missing sites as hom ref. if (ctx == null) return MISSING_CODE; else if (ctx.isMixed()) return IS_MIXED_CODE; else if (ctx.isFiltered()) return VC_FILTERED_CODE; else { // Genotype level checks final Genotype genotype = ctx.getGenotype(sample); if (genotype.isNoCall()) return NO_CALL_CODE; else if (genotype.isFiltered()) return GT_FILTERED_CODE; else if ((genotype.getGQ() != -1) && (genotype.getGQ() < minGq)) return LOW_GQ_CODE; else if ((genotype.getDP() != -1) && (genotype.getDP() < minDp)) return LOW_DP_CODE; // Note. Genotype.isMixed means that it is called on one chromosome and NOT on the other else if ((genotype.isMixed())) return NO_CALL_CODE; } return null; }
if ( g.isCalled() ) { final List<String> filters = new ArrayList<>(); if ( g.isFiltered() ) filters.add(g.getFilters());
private static GenotypeConcordanceStateCodes getStateCode(final VariantContext ctx, final String sample, final int minGq, final int minDp) { // Site level checks // Added potential to include missing sites as hom ref. if (ctx == null) return MISSING_CODE; else if (ctx.isMixed()) return IS_MIXED_CODE; else if (ctx.isFiltered()) return VC_FILTERED_CODE; else { // Genotype level checks final Genotype genotype = ctx.getGenotype(sample); if (genotype.isNoCall()) return NO_CALL_CODE; else if (genotype.isFiltered()) return GT_FILTERED_CODE; else if ((genotype.getGQ() != -1) && (genotype.getGQ() < minGq)) return LOW_GQ_CODE; else if ((genotype.getDP() != -1) && (genotype.getDP() < minDp)) return LOW_DP_CODE; // Note. Genotype.isMixed means that it is called on one chromosome and NOT on the other else if ((genotype.isMixed())) return NO_CALL_CODE; } return null; }
public static void assertEquals(final Genotype actual, final Genotype expected) { Assert.assertEquals(actual.getSampleName(), expected.getSampleName(), "Genotype names"); Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "Genotype alleles"); Assert.assertEquals(actual.getGenotypeString(), expected.getGenotypeString(), "Genotype string"); Assert.assertEquals(actual.getType(), expected.getType(), "Genotype type"); // filters are the same Assert.assertEquals(actual.getFilters(), expected.getFilters(), "Genotype fields"); Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered"); // inline attributes Assert.assertEquals(actual.getDP(), expected.getDP(), "Genotype dp"); Assert.assertTrue(Arrays.equals(actual.getAD(), expected.getAD())); Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype gq"); Assert.assertEquals(actual.hasPL(), expected.hasPL(), "Genotype hasPL"); Assert.assertEquals(actual.hasAD(), expected.hasAD(), "Genotype hasAD"); Assert.assertEquals(actual.hasGQ(), expected.hasGQ(), "Genotype hasGQ"); Assert.assertEquals(actual.hasDP(), expected.hasDP(), "Genotype hasDP"); Assert.assertEquals(actual.hasLikelihoods(), expected.hasLikelihoods(), "Genotype haslikelihoods"); Assert.assertEquals(actual.getLikelihoodsString(), expected.getLikelihoodsString(), "Genotype getlikelihoodsString"); Assert.assertEquals(actual.getLikelihoods(), expected.getLikelihoods(), "Genotype getLikelihoods"); Assert.assertTrue(Arrays.equals(actual.getPL(), expected.getPL())); Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype phredScaledQual"); assertAttributesEquals(actual.getExtendedAttributes(), expected.getExtendedAttributes()); Assert.assertEquals(actual.isPhased(), expected.isPhased(), "Genotype isPhased"); Assert.assertEquals(actual.getPloidy(), expected.getPloidy(), "Genotype getPloidy"); }
@Test public void testFilters() { Assert.assertFalse(makeGB().make().isFiltered(), "by default Genotypes must be PASS"); Assert.assertNull(makeGB().make().getFilters(), "by default Genotypes must be PASS => getFilters() == null"); Assert.assertFalse(makeGB().filter(null).make().isFiltered(), "setting filter == null => Genotypes must be PASS"); Assert.assertNull(makeGB().filter(null).make().getFilters(), "Genotypes PASS => getFilters == null"); Assert.assertFalse(makeGB().filter("PASS").make().isFiltered(), "setting filter == PASS => Genotypes must be PASS"); Assert.assertNull(makeGB().filter("PASS").make().getFilters(), "Genotypes PASS => getFilters == null"); Assert.assertTrue(makeGB().filter("x").make().isFiltered(), "setting filter != null => Genotypes must be PASS"); Assert.assertEquals(makeGB().filter("x").make().getFilters(), "x", "Should get back the expected filter string"); Assert.assertEquals(makeGB().filters("x", "y").make().getFilters(), "x;y", "Multiple filter field values should be joined with ;"); Assert.assertEquals(makeGB().filters("x", "y", "z").make().getFilters(), "x;y;z", "Multiple filter field values should be joined with ;"); Assert.assertTrue(makeGB().filters("x", "y", "z").make().isFiltered(), "Multiple filter values should be filtered"); Assert.assertEquals(makeGB().filter("x;y;z").make().getFilters(), "x;y;z", "Multiple filter field values should be joined with ;"); Assert.assertEquals(makeGB().filter("x;y;z").make().getAnyAttribute(VCFConstants.GENOTYPE_FILTER_KEY), "x;y;z", "getAnyAttribute(GENOTYPE_FILTER_KEY) should return the filter"); Assert.assertTrue(makeGB().filter("x;y;z").make().hasAnyAttribute(VCFConstants.GENOTYPE_FILTER_KEY), "hasAnyAttribute(GENOTYPE_FILTER_KEY) should return true"); Assert.assertTrue(makeGB().make().hasAnyAttribute(VCFConstants.GENOTYPE_FILTER_KEY), "hasAnyAttribute(GENOTYPE_FILTER_KEY) should return true"); Assert.assertFalse(makeGB().filter("").make().isFiltered(), "empty filters should count as unfiltered"); Assert.assertEquals(makeGB().filter("").make().getFilters(), null, "empty filter string should result in null filters"); }
public static void assertGenotypesAreEqual(final Genotype actual, final Genotype expected) { Assert.assertEquals(actual.getSampleName(), expected.getSampleName(), "Genotype names"); Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "Genotype alleles"); Assert.assertEquals(actual.getGenotypeString(), expected.getGenotypeString(), "Genotype string"); Assert.assertEquals(actual.getType(), expected.getType(), "Genotype type"); // filters are the same Assert.assertEquals(actual.getFilters(), expected.getFilters(), "Genotype fields"); Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered"); // inline attributes Assert.assertEquals(actual.getDP(), expected.getDP(), "Genotype dp"); Assert.assertTrue(Arrays.equals(actual.getAD(), expected.getAD())); Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype gq"); Assert.assertEquals(actual.hasPL(), expected.hasPL(), "Genotype hasPL"); Assert.assertEquals(actual.hasAD(), expected.hasAD(), "Genotype hasAD"); Assert.assertEquals(actual.hasGQ(), expected.hasGQ(), "Genotype hasGQ"); Assert.assertEquals(actual.hasDP(), expected.hasDP(), "Genotype hasDP"); Assert.assertEquals(actual.hasLikelihoods(), expected.hasLikelihoods(), "Genotype haslikelihoods"); Assert.assertEquals(actual.getLikelihoodsString(), expected.getLikelihoodsString(), "Genotype getlikelihoodsString"); Assert.assertEquals(actual.getLikelihoods(), expected.getLikelihoods(), "Genotype getLikelihoods"); Assert.assertTrue(Arrays.equals(actual.getPL(), expected.getPL())); Assert.assertEquals(actual.getPhredScaledQual(), expected.getPhredScaledQual(), "Genotype phredScaledQual"); assertAttributesEquals(actual.getExtendedAttributes(), expected.getExtendedAttributes()); Assert.assertEquals(actual.isPhased(), expected.isPhased(), "Genotype isPhased"); Assert.assertEquals(actual.getPloidy(), expected.getPloidy(), "Genotype getPloidy"); }
Genotype g = originalVC.getGenotype(sample); if ( ! g.isFiltered() ) { if ( g.hasDP() ) { depth += g.getDP();
Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered");
boolean haveFilteredNoCallAlleles = false; for ( final Genotype g : vc.getGenotypes() ) { if ( g.isCalled() && g.isFiltered() ) { haveFilteredNoCallAlleles = true; final List<Allele> noCallAlleles = (g.getPloidy() == 2 ? diploidNoCallAlleles :