/** * Counts of observed bases at a genomic position e.g. {13,0,0,1} at chr1:100,000,000 * * @param perReadAlleleLikelihoodMap for each read, the underlying alleles represented by an aligned read, and corresponding relative likelihood. * @param vc variant context * @return count of A, C, G, T bases */ private int[] getBaseCounts(final PerReadAlleleLikelihoodMap perReadAlleleLikelihoodMap, final VariantContext vc) { final Set<Allele> alleles = new HashSet<>(vc.getAlleles()); return AlignmentUtils.countBasesAtPileupPosition(perReadAlleleLikelihoodMap, alleles, vc.getStart()); } }
/** * Counts of observed bases at a genomic position (e.g. {13,0,0,1} at chr1:100,000,000) over all samples * * @param stratifiedPerReadAlleleLikelihoodMap for each read, the underlying alleles represented by an aligned read, and corresponding relative likelihood. * @param vc variant context * @return count of A, C, G, T bases */ private int[] getBaseCounts(final Map<String, PerReadAlleleLikelihoodMap> stratifiedPerReadAlleleLikelihoodMap, final VariantContext vc) { final Set<Allele> alleles = new HashSet<>(vc.getAlleles()); final int[] baseCounts = new int[4]; for ( final Map.Entry<String, PerReadAlleleLikelihoodMap> strat : stratifiedPerReadAlleleLikelihoodMap.entrySet() ) { final int[] counts = AlignmentUtils.countBasesAtPileupPosition(strat.getValue(), alleles, vc.getStart()); for ( int i = 0; i < baseCounts.length; i++ ) { baseCounts[i] += counts[i]; } } return baseCounts; }
@Test(dataProvider = "CountBasesAtPileupPositionData", expectedExceptions = IllegalStateException.class) public void testCountBasesAtPileupPositionException(final SAMFileHeader header, final byte[][] bases, final byte[][] quals, final Allele allele, final String[] cigar, final int[][] expected) { final PerReadAlleleLikelihoodMap perReadAlleleLikelihoodMap = new PerReadAlleleLikelihoodMap(); final Set<Allele> wrongAlleles = new HashSet<>(Arrays.asList(allele)); AlignmentUtils.countBasesAtPileupPosition(perReadAlleleLikelihoodMap, wrongAlleles, bases.length); } }
@Test(dataProvider = "CountBasesAtPileupPositionData") public void testCountBasesAtPileupPosition(final SAMFileHeader header, final byte[][] bases, final byte[][] quals, final Allele allele, final String[] cigar, final int[][] expected) { final PerReadAlleleLikelihoodMap perReadAlleleLikelihoodMap = new PerReadAlleleLikelihoodMap(); for ( int i = 1; i <= bases.length; i++ ) { final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "read" + i, 0, 1, bases[i-1], quals[i-1], cigar[i-1]); perReadAlleleLikelihoodMap.add(read, allele, -0.01); } final Set<Allele> alleles = new HashSet<>(Arrays.asList(allele)); final int endPosition = Math.min(bases[0].length, bases[1].length); for ( int i = 1; i <= endPosition; i++ ) { final int[] baseCounts = AlignmentUtils.countBasesAtPileupPosition(perReadAlleleLikelihoodMap, alleles, i); Assert.assertEquals(baseCounts, expected[i-1]); } }