// Overload function in GenotypeLikelihoodsCalculationModel so that, for an indel case, we // consider a deletion as part of the pileup, // so that per-sample DP will include deletions covering the event. protected int getFilteredDepth(ReadBackedPileup pileup) { int count = 0; for (PileupElement p : pileup) { if (p.isDeletion() || BaseUtils.isRegularBase(p.getBase())) count++; } return count; }
private Map<String, AlignmentContext> getFilteredAndStratifiedContexts( UnifiedArgumentCollection UAC, ReferenceContext refContext, AlignmentContext rawContext, final GenotypeLikelihoodsCalculationModel.Model model) { if (!BaseUtils.isRegularBase(refContext.getBase())) return null; Map<String, AlignmentContext> stratifiedContexts = null; if (model.name().contains("INDEL")) { final ReadBackedPileup pileup = rawContext.getBasePileup().getMappingFilteredPileup(UAC.MIN_BASE_QUALTY_SCORE); // don't call when there is no coverage if (pileup.getNumberOfElements() == 0 && UAC.OutputMode != OUTPUT_MODE.EMIT_ALL_SITES) return null; // stratify the AlignmentContext and cut by sample stratifiedContexts = AlignmentContextUtils.splitContextBySampleName(pileup); } else if (model.name().contains("SNP")) { // stratify the AlignmentContext and cut by sample stratifiedContexts = AlignmentContextUtils.splitContextBySampleName(rawContext.getBasePileup()); if (!(UAC.OutputMode == OUTPUT_MODE.EMIT_ALL_SITES && UAC.GenotypingMode != GenotypeLikelihoodsCalculationModel.GENOTYPING_MODE.GENOTYPE_GIVEN_ALLELES)) { int numDeletions = 0; for (final PileupElement p : rawContext.getBasePileup()) { if (p.isDeletion()) numDeletions++; } if (((double) numDeletions) / ((double) rawContext.getBasePileup().getNumberOfElements()) > UAC.MAX_DELETION_FRACTION) { return null; } } } return stratifiedContexts; }