From adff40ff589b95d28decd0c3836e9a6e9626eee4 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Tue, 27 Dec 2011 13:16:25 -0500 Subject: [PATCH 01/29] Minor optimizations to avoid extra processing (esp. for reduced reads) --- .../genotyper/DiploidSNPGenotypeLikelihoods.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java index 295cf8688..ae7077230 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/DiploidSNPGenotypeLikelihoods.java @@ -275,19 +275,22 @@ public class DiploidSNPGenotypeLikelihoods implements Cloneable { public int add(PileupElement elt, boolean ignoreBadBases, boolean capBaseQualsAtMappingQual, int minBaseQual) { byte obsBase = elt.getBase(); byte qual = qualToUse(elt, ignoreBadBases, capBaseQualsAtMappingQual, minBaseQual); + if ( qual == 0 ) + return 0; if ( elt.isReducedRead() ) { // reduced read representation if ( BaseUtils.isRegularBase( obsBase )) { - add(obsBase, qual, (byte)0, (byte)0, elt.getRepresentativeCount()); // fast calculation of n identical likelihoods - return elt.getRepresentativeCount(); // we added nObs bases here + int representativeCount = elt.getRepresentativeCount(); + add(obsBase, qual, (byte)0, (byte)0, representativeCount); // fast calculation of n identical likelihoods + return representativeCount; // we added nObs bases here } // odd bases or deletions => don't use them return 0; } - return qual > 0 ? add(obsBase, qual, (byte)0, (byte)0, 1) : 0; + return add(obsBase, qual, (byte)0, (byte)0, 1); } public int add(List overlappingPair, boolean ignoreBadBases, boolean capBaseQualsAtMappingQual, int minBaseQual) { @@ -519,7 +522,7 @@ public class DiploidSNPGenotypeLikelihoods implements Cloneable { if ( qual > SAMUtils.MAX_PHRED_SCORE ) throw new UserException.MalformedBAM(p.getRead(), String.format("the maximum allowed quality score is %d, but a quality of %d was observed in read %s. Perhaps your BAM incorrectly encodes the quality scores in Sanger format; see http://en.wikipedia.org/wiki/FASTQ_format for more details", SAMUtils.MAX_PHRED_SCORE, qual, p.getRead().getReadName())); if ( capBaseQualsAtMappingQual ) - qual = (byte)Math.min((int)p.getQual(), p.getMappingQual()); + qual = (byte)Math.min((int)qual, p.getMappingQual()); if ( (int)qual < minBaseQual ) qual = (byte)0; From d20a25d68175e14c972980426156fb035d3424d4 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Tue, 27 Dec 2011 16:50:38 -0500 Subject: [PATCH 02/29] A much better way of choosing the alternate allele(s) to genotype in the SNP model of UG: instead of looking at the sum of base qualities (which can and did lead to us over-genotyping esp. when allowing multiple alternate alleles), we look at the likelihoods themselves (free since we are already calculating likelihoods for all 10 genotypes). Now, even if the base quals exceed some arbitrary threshold, we only bother genotyping an alternate allele when there's a sample for which it is more likely than ref/ref (I can generate weird edge cases where this falls apart, but none that model truly variable sites that we actually want to call). This leads to a huge efficiency improvement esp. for exomes (and esp. for many samples) where we almost always were trying to genotype all 3 alternate alleles. Integration tests change only because ref calls have slight QUAL differences (because the best alt allele is still chosen arbitrarily, but differently). --- ...NPGenotypeLikelihoodsCalculationModel.java | 128 +++++++++--------- .../UnifiedGenotyperIntegrationTest.java | 4 +- 2 files changed, 69 insertions(+), 63 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java index 57cc5594a..eee89674a 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java @@ -46,8 +46,6 @@ import java.util.*; public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsCalculationModel { - private static final int MIN_QUAL_SUM_FOR_ALT_ALLELE = 50; - private boolean ALLOW_MULTIPLE_ALLELES; private final boolean useAlleleFromVCF; @@ -56,15 +54,19 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC super(UAC, logger); ALLOW_MULTIPLE_ALLELES = UAC.MULTI_ALLELIC; useAlleleFromVCF = UAC.GenotypingMode == GENOTYPING_MODE.GENOTYPE_GIVEN_ALLELES; + + // make sure the PL cache has been initialized with enough alleles + if ( UnifiedGenotyperEngine.PLIndexToAlleleIndex == null || UnifiedGenotyperEngine.PLIndexToAlleleIndex.length < 4 ) // +1 for 0 alt alleles + UnifiedGenotyperEngine.calculatePLcache(3); } - public VariantContext getLikelihoods(RefMetaDataTracker tracker, - ReferenceContext ref, - Map contexts, - AlignmentContextUtils.ReadOrientation contextType, - GenotypePriors priors, - Allele alternateAlleleToUse, - boolean useBAQedPileup) { + public VariantContext getLikelihoods(final RefMetaDataTracker tracker, + final ReferenceContext ref, + final Map contexts, + final AlignmentContextUtils.ReadOrientation contextType, + final GenotypePriors priors, + final Allele alternateAlleleToUse, + final boolean useBAQedPileup) { if ( !(priors instanceof DiploidSNPGenotypePriors) ) throw new StingException("Only diploid-based SNP priors are supported in the SNP GL model"); @@ -79,6 +81,20 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC alleles.add(Allele.create(refBase, true)); final VariantContextBuilder builder = new VariantContextBuilder("UG_call", loc.getContig(), loc.getStart(), loc.getStop(), alleles); + // calculate the GLs + ArrayList GLs = new ArrayList(contexts.size()); + for ( Map.Entry sample : contexts.entrySet() ) { + ReadBackedPileup pileup = AlignmentContextUtils.stratify(sample.getValue(), contextType).getBasePileup(); + if ( useBAQedPileup ) + pileup = createBAQedPileup( pileup ); + + // create the GenotypeLikelihoods object + final DiploidSNPGenotypeLikelihoods GL = new DiploidSNPGenotypeLikelihoods((DiploidSNPGenotypePriors)priors, UAC.PCR_error); + final int nGoodBases = GL.add(pileup, true, true, UAC.MIN_BASE_QUALTY_SCORE); + if ( nGoodBases > 0 ) + GLs.add(new SampleGenotypeData(sample.getKey(), GL, getFilteredDepth(pileup))); + } + // find the alternate allele(s) that we should be using if ( alternateAlleleToUse != null ) { basesToUse[BaseUtils.simpleBaseToBaseIndex(alternateAlleleToUse.getBases()[0])] = true; @@ -93,7 +109,7 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC basesToUse[BaseUtils.simpleBaseToBaseIndex(allele.getBases()[0])] = true; } else { - determineAlternateAlleles(basesToUse, refBase, contexts, useBAQedPileup); + determineAlternateAlleles(basesToUse, refBase, GLs); // how many alternate alleles are we using? int alleleCounter = Utils.countSetBits(basesToUse); @@ -125,22 +141,12 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC builder.alleles(alleles); // create the genotypes; no-call everyone for now - GenotypesContext genotypes = GenotypesContext.create(); + final GenotypesContext genotypes = GenotypesContext.create(); final List noCall = new ArrayList(); noCall.add(Allele.NO_CALL); - for ( Map.Entry sample : contexts.entrySet() ) { - ReadBackedPileup pileup = AlignmentContextUtils.stratify(sample.getValue(), contextType).getBasePileup(); - if ( useBAQedPileup ) - pileup = createBAQedPileup( pileup ); - - // create the GenotypeLikelihoods object - final DiploidSNPGenotypeLikelihoods GL = new DiploidSNPGenotypeLikelihoods((DiploidSNPGenotypePriors)priors, UAC.PCR_error); - final int nGoodBases = GL.add(pileup, true, true, UAC.MIN_BASE_QUALTY_SCORE); - if ( nGoodBases == 0 ) - continue; - - final double[] allLikelihoods = GL.getLikelihoods(); + for ( SampleGenotypeData sampleData : GLs ) { + final double[] allLikelihoods = sampleData.GL.getLikelihoods(); final double[] myLikelihoods = new double[numLikelihoods]; int myLikelihoodsIndex = 0; @@ -151,60 +157,48 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC } // normalize in log space so that max element is zero. - GenotypeLikelihoods likelihoods = GenotypeLikelihoods.fromLog10Likelihoods(MathUtils.normalizeFromLog10(myLikelihoods, false, true)); + final GenotypeLikelihoods likelihoods = GenotypeLikelihoods.fromLog10Likelihoods(MathUtils.normalizeFromLog10(myLikelihoods, false, true)); - HashMap attributes = new HashMap(); - attributes.put(VCFConstants.DEPTH_KEY, getFilteredDepth(pileup)); + final HashMap attributes = new HashMap(); + attributes.put(VCFConstants.DEPTH_KEY, sampleData.depth); attributes.put(VCFConstants.PHRED_GENOTYPE_LIKELIHOODS_KEY, likelihoods); - genotypes.add(new Genotype(sample.getKey(), noCall, Genotype.NO_LOG10_PERROR, null, attributes, false)); + genotypes.add(new Genotype(sampleData.name, noCall, Genotype.NO_LOG10_PERROR, null, attributes, false)); } return builder.genotypes(genotypes).make(); } // fills in the allelesToUse array - protected void determineAlternateAlleles(boolean[] allelesToUse, byte ref, Map contexts, boolean useBAQedPileup) { - int[] qualCounts = new int[4]; + protected void determineAlternateAlleles(final boolean[] allelesToUse, final byte ref, final List sampleDataList) { - for ( Map.Entry sample : contexts.entrySet() ) { - // calculate the sum of quality scores for each base - ReadBackedPileup pileup = useBAQedPileup ? createBAQedPileup( sample.getValue().getBasePileup() ) : sample.getValue().getBasePileup(); - for ( PileupElement p : pileup ) { - // ignore deletions - if ( p.isDeletion() || (!p.isReducedRead() && p.getQual() < UAC.MIN_BASE_QUALTY_SCORE) ) - continue; + final int baseIndexOfRef = BaseUtils.simpleBaseToBaseIndex(ref); + final int PLindexOfRef = DiploidGenotype.createDiploidGenotype(ref, ref).ordinal(); + final double[] likelihoodCounts = new double[4]; - final int index = BaseUtils.simpleBaseToBaseIndex(p.getBase()); - if ( index >= 0 ) { - qualCounts[index] += p.getQual(); - } + // based on the GLs, find the alternate alleles with the most probability + for ( SampleGenotypeData sampleData : sampleDataList ) { + final double[] likelihoods = sampleData.GL.getLikelihoods(); + final int PLindexOfBestGL = MathUtils.maxElementIndex(likelihoods); + if ( PLindexOfBestGL != PLindexOfRef ) { + int[] alleles = UnifiedGenotyperEngine.PLIndexToAlleleIndex[3][PLindexOfBestGL]; + if ( alleles[0] != baseIndexOfRef ) + likelihoodCounts[alleles[0]] += likelihoods[PLindexOfBestGL] - likelihoods[PLindexOfRef]; + // don't double-count it + if ( alleles[1] != baseIndexOfRef && alleles[1] != alleles[0] ) + likelihoodCounts[alleles[1]] += likelihoods[PLindexOfBestGL] - likelihoods[PLindexOfRef]; } } if ( ALLOW_MULTIPLE_ALLELES ) { - for ( byte altAllele : BaseUtils.BASES ) { - if ( altAllele == ref ) - continue; - int index = BaseUtils.simpleBaseToBaseIndex(altAllele); - if ( qualCounts[index] >= MIN_QUAL_SUM_FOR_ALT_ALLELE ) { - allelesToUse[index] = true; + for ( int i = 0; i < 4; i++ ) { + if ( likelihoodCounts[i] > 0.0 ) { + allelesToUse[i] = true; } } } else { - // set the non-ref base which has the maximum quality score sum - int maxCount = 0; - int indexOfMax = 0; - for ( byte altAllele : BaseUtils.BASES ) { - if ( altAllele == ref ) - continue; - int index = BaseUtils.simpleBaseToBaseIndex(altAllele); - if ( qualCounts[index] > maxCount ) { - maxCount = qualCounts[index]; - indexOfMax = index; - } - } - - if ( maxCount > 0 ) + // set the non-ref base which has the maximum sum of non-ref GLs + final int indexOfMax = MathUtils.maxElementIndex(likelihoodCounts); + if ( likelihoodCounts[indexOfMax] > 0.0 ) allelesToUse[indexOfMax] = true; } } @@ -227,4 +221,16 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC public byte getQual( final int offset ) { return BAQ.calcBAQFromTag(getRead(), offset, true); } } -} \ No newline at end of file + private static class SampleGenotypeData { + + public final String name; + public final DiploidSNPGenotypeLikelihoods GL; + public final int depth; + + public SampleGenotypeData(final String name, final DiploidSNPGenotypeLikelihoods GL, final int depth) { + this.name = name; + this.GL = GL; + this.depth = depth; + } + } +} diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java index 3c6131d6c..d4518078b 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java @@ -129,8 +129,8 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testOutputParameter() { HashMap e = new HashMap(); e.put( "-sites_only", "44f3b5b40e6ad44486cddfdb7e0bfcd8" ); - e.put( "--output_mode EMIT_ALL_CONFIDENT_SITES", "42e4ea7878ef8d96215accb3ba4e97b7" ); - e.put( "--output_mode EMIT_ALL_SITES", "e0443c720149647469f2a2f3fb73942f" ); + e.put( "--output_mode EMIT_ALL_CONFIDENT_SITES", "553f6b4cbf380885bec9dd634cf68742" ); + e.put( "--output_mode EMIT_ALL_SITES", "6d8624e45ad9dae5803ac705b39e4ffa" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( From 94791a2a754730c4cbe3e076cf4868d8db87e698 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Wed, 28 Dec 2011 12:15:53 -0500 Subject: [PATCH 04/29] Add support for reads starting with insertion * Modified cleanCigarShift to allow insertions in the beginning and end of the read * Allowed cigars starting/ending in insertions in the systematic ReadClipper tests * Updated all ReadClipper unit tests * ReduceReads does not hard clip leading insertions by default anymore * SlidingWindow adjusts start location if read starts with insertion * SlidingWindow creates an empty element with insertions to the right * Fixed all potential divide by zero with totalCount() (from BaseCounts) * Updated all Integration tests * Added new integration test for multiple interval reducing --- .../sting/utils/clipping/ClippingOp.java | 54 ++-- .../sting/utils/clipping/ReadClipper.java | 33 ++- .../sting/utils/sam/ArtificialSAMUtils.java | 2 +- .../sting/utils/sam/GATKSAMRecord.java | 7 +- .../sting/utils/sam/ReadUtils.java | 185 +++++++------ .../utils/clipping/ReadClipperTestUtils.java | 19 +- .../utils/clipping/ReadClipperUnitTest.java | 244 +++++++++--------- 7 files changed, 301 insertions(+), 243 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/clipping/ClippingOp.java b/public/java/src/org/broadinstitute/sting/utils/clipping/ClippingOp.java index 921a0a599..fb133d902 100644 --- a/public/java/src/org/broadinstitute/sting/utils/clipping/ClippingOp.java +++ b/public/java/src/org/broadinstitute/sting/utils/clipping/ClippingOp.java @@ -70,27 +70,27 @@ public class ClippingOp { break; case SOFTCLIP_BASES: - if ( read.getReadUnmappedFlag() ) { + if (read.getReadUnmappedFlag()) { // we can't process unmapped reads throw new UserException("Read Clipper cannot soft clip unmapped reads"); } //System.out.printf("%d %d %d%n", stop, start, read.getReadLength()); int myStop = stop; - if ( (stop + 1 - start) == read.getReadLength() ) { + if ((stop + 1 - start) == read.getReadLength()) { // BAM representation issue -- we can't SOFTCLIP away all bases in a read, just leave it alone //Walker.logger.info(String.format("Warning, read %s has all bases clip but this can't be represented with SOFTCLIP_BASES, just leaving it alone", read.getReadName())); //break; myStop--; // just decrement stop } - if ( start > 0 && myStop != read.getReadLength() - 1 ) + if (start > 0 && myStop != read.getReadLength() - 1) throw new RuntimeException(String.format("Cannot apply soft clipping operator to the middle of a read: %s to be clipped at %d-%d", read.getReadName(), start, myStop)); Cigar oldCigar = read.getCigar(); int scLeft = 0, scRight = read.getReadLength(); - if ( start == 0 ) + if (start == 0) scLeft = myStop + 1; else scRight = start; @@ -134,8 +134,7 @@ public class ClippingOp { unclippedCigar.add(new CigarElement(matchesCount, CigarOperator.MATCH_OR_MISMATCH)); matchesCount = 0; unclippedCigar.add(element); - } - else + } else unclippedCigar.add(element); } if (matchesCount > 0) @@ -284,10 +283,9 @@ public class ClippingOp { } @Requires({"start <= stop", "start == 0 || stop == read.getReadLength() - 1"}) - private GATKSAMRecord hardClip (GATKSAMRecord read, int start, int stop) { + private GATKSAMRecord hardClip(GATKSAMRecord read, int start, int stop) { if (start == 0 && stop == read.getReadLength() - 1) return GATKSAMRecord.emptyRead(read); -// return new GATKSAMRecord(read.getHeader()); // If the read is unmapped there is no Cigar string and neither should we create a new cigar string @@ -296,8 +294,8 @@ public class ClippingOp { // the cigar may force a shift left or right (or both) in case we are left with insertions // starting or ending the read after applying the hard clip on start/stop. int newLength = read.getReadLength() - (stop - start + 1) - cigarShift.shiftFromStart - cigarShift.shiftFromEnd; - byte [] newBases = new byte[newLength]; - byte [] newQuals = new byte[newLength]; + byte[] newBases = new byte[newLength]; + byte[] newQuals = new byte[newLength]; int copyStart = (start == 0) ? stop + 1 + cigarShift.shiftFromStart : cigarShift.shiftFromStart; System.arraycopy(read.getReadBases(), copyStart, newBases, 0, newLength); @@ -321,11 +319,11 @@ public class ClippingOp { } @Requires({"!cigar.isEmpty()"}) - private CigarShift hardClipCigar (Cigar cigar, int start, int stop) { + private CigarShift hardClipCigar(Cigar cigar, int start, int stop) { Cigar newCigar = new Cigar(); int index = 0; int totalHardClipCount = stop - start + 1; - int alignmentShift = 0; // caused by hard clipping insertions or deletions + int alignmentShift = 0; // caused by hard clipping deletions // hard clip the beginning of the cigar string if (start == 0) { @@ -353,7 +351,7 @@ public class ClippingOp { // element goes beyond what we need to clip else if (index + shift > stop + 1) { int elementLengthAfterChopping = cigarElement.getLength() - (stop - index + 1); - alignmentShift += calculateHardClippingAlignmentShift(cigarElement, stop-index+1); + alignmentShift += calculateHardClippingAlignmentShift(cigarElement, stop - index + 1); newCigar.add(new CigarElement(totalHardClipCount + alignmentShift, CigarOperator.HARD_CLIP)); newCigar.add(new CigarElement(elementLengthAfterChopping, cigarElement.getOperator())); } @@ -388,7 +386,7 @@ public class ClippingOp { if (index + shift < start) newCigar.add(new CigarElement(cigarElement.getLength(), cigarElement.getOperator())); - // element goes beyond our clip starting position + // element goes beyond our clip starting position else { int elementLengthAfterChopping = start - index; alignmentShift += calculateHardClippingAlignmentShift(cigarElement, cigarElement.getLength() - (start - index)); @@ -396,7 +394,7 @@ public class ClippingOp { // if this last element is a HARD CLIP operator, just merge it with our hard clip operator to be added later if (cigarElement.getOperator() == CigarOperator.HARD_CLIP) totalHardClipCount += elementLengthAfterChopping; - // otherwise, maintain what's left of this last operator + // otherwise, maintain what's left of this last operator else newCigar.add(new CigarElement(elementLengthAfterChopping, cigarElement.getOperator())); } @@ -408,7 +406,7 @@ public class ClippingOp { } // check if we are hard clipping indels - while(cigarElementIterator.hasNext()) { + while (cigarElementIterator.hasNext()) { cigarElement = cigarElementIterator.next(); alignmentShift += calculateHardClippingAlignmentShift(cigarElement, cigarElement.getLength()); @@ -444,34 +442,30 @@ public class ClippingOp { boolean readHasStarted = false; boolean addedHardClips = false; - while(!cigarStack.empty()) { + while (!cigarStack.empty()) { CigarElement cigarElement = cigarStack.pop(); - if ( !readHasStarted && - cigarElement.getOperator() != CigarOperator.INSERTION && + if (!readHasStarted && +// cigarElement.getOperator() != CigarOperator.INSERTION && cigarElement.getOperator() != CigarOperator.DELETION && cigarElement.getOperator() != CigarOperator.HARD_CLIP) readHasStarted = true; - else if ( !readHasStarted && cigarElement.getOperator() == CigarOperator.HARD_CLIP) + else if (!readHasStarted && cigarElement.getOperator() == CigarOperator.HARD_CLIP) totalHardClip += cigarElement.getLength(); - else if ( !readHasStarted && cigarElement.getOperator() == CigarOperator.INSERTION) - shift += cigarElement.getLength(); - - else if ( !readHasStarted && cigarElement.getOperator() == CigarOperator.DELETION) + else if (!readHasStarted && cigarElement.getOperator() == CigarOperator.DELETION) totalHardClip += cigarElement.getLength(); if (readHasStarted) { - if (i==1) { + if (i == 1) { if (!addedHardClips) { if (totalHardClip > 0) inverseCigarStack.push(new CigarElement(totalHardClip, CigarOperator.HARD_CLIP)); addedHardClips = true; } inverseCigarStack.push(cigarElement); - } - else { + } else { if (!addedHardClips) { if (totalHardClip > 0) cleanCigar.add(new CigarElement(totalHardClip, CigarOperator.HARD_CLIP)); @@ -498,7 +492,7 @@ public class ClippingOp { int newShift = 0; int oldShift = 0; - boolean readHasStarted = false; // if the new cigar is composed of S and H only, we have to traverse the entire old cigar to calculate the shift + boolean readHasStarted = false; // if the new cigar is composed of S and H only, we have to traverse the entire old cigar to calculate the shift for (CigarElement cigarElement : newCigar.getCigarElements()) { if (cigarElement.getOperator() == CigarOperator.HARD_CLIP || cigarElement.getOperator() == CigarOperator.SOFT_CLIP) newShift += cigarElement.getLength(); @@ -509,7 +503,7 @@ public class ClippingOp { } for (CigarElement cigarElement : oldCigar.getCigarElements()) { - if (cigarElement.getOperator() == CigarOperator.HARD_CLIP || cigarElement.getOperator() == CigarOperator.SOFT_CLIP ) + if (cigarElement.getOperator() == CigarOperator.HARD_CLIP || cigarElement.getOperator() == CigarOperator.SOFT_CLIP) oldShift += cigarElement.getLength(); else if (readHasStarted) break; @@ -522,7 +516,7 @@ public class ClippingOp { if (cigarElement.getOperator() == CigarOperator.INSERTION) return -clippedLength; - // Deletions should be added to the total hard clip count + // Deletions should be added to the total hard clip count else if (cigarElement.getOperator() == CigarOperator.DELETION) return cigarElement.getLength(); diff --git a/public/java/src/org/broadinstitute/sting/utils/clipping/ReadClipper.java b/public/java/src/org/broadinstitute/sting/utils/clipping/ReadClipper.java index afe7fa975..7a664bd61 100644 --- a/public/java/src/org/broadinstitute/sting/utils/clipping/ReadClipper.java +++ b/public/java/src/org/broadinstitute/sting/utils/clipping/ReadClipper.java @@ -374,24 +374,43 @@ public class ReadClipper { * Generic functionality to hard clip a read, used internally by hardClipByReferenceCoordinatesLeftTail * and hardClipByReferenceCoordinatesRightTail. Should not be used directly. * + * Note, it REQUIRES you to give the directionality of your hard clip (i.e. whether you're clipping the + * left of right tail) by specifying either refStart < 0 or refStop < 0. + * * @param refStart first base to clip (inclusive) * @param refStop last base to clip (inclusive) * @return a new read, without the clipped bases */ - @Requires("!read.getReadUnmappedFlag()") // can't handle unmapped reads, as we're using reference coordinates to clip + @Requires({"!read.getReadUnmappedFlag()", "refStart < 0 || refStop < 0"}) // can't handle unmapped reads, as we're using reference coordinates to clip protected GATKSAMRecord hardClipByReferenceCoordinates(int refStart, int refStop) { - int start = (refStart < 0) ? 0 : ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStart, ReadUtils.ClippingTail.RIGHT_TAIL); - int stop = (refStop < 0) ? read.getReadLength() - 1 : ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStop, ReadUtils.ClippingTail.LEFT_TAIL); + if (read.isEmpty()) + return read; - if (read.isEmpty() || (start == 0 && stop == read.getReadLength() - 1)) - return GATKSAMRecord.emptyRead(read); -// return new GATKSAMRecord(read.getHeader()); + int start; + int stop; + + // Determine the read coordinate to start and stop hard clipping + if (refStart < 0) { + if (refStop < 0) + throw new ReviewedStingException("Only one of refStart or refStop must be < 0, not both (" + refStart + ", " + refStop + ")"); + start = 0; + stop = ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStop, ReadUtils.ClippingTail.LEFT_TAIL); + } + else { + if (refStop >= 0) + throw new ReviewedStingException("Either refStart or refStop must be < 0 (" + refStart + ", " + refStop + ")"); + start = ReadUtils.getReadCoordinateForReferenceCoordinate(read, refStart, ReadUtils.ClippingTail.RIGHT_TAIL); + stop = read.getReadLength() - 1; + } + +// if ((start == 0 && stop == read.getReadLength() - 1)) +// return GATKSAMRecord.emptyRead(read); if (start < 0 || stop > read.getReadLength() - 1) throw new ReviewedStingException("Trying to clip before the start or after the end of a read"); if ( start > stop ) - throw new ReviewedStingException("START > STOP -- this should never happen -- call Mauricio!"); + throw new ReviewedStingException(String.format("START (%d) > (%d) STOP -- this should never happen -- call Mauricio!", start, stop)); if ( start > 0 && stop < read.getReadLength() - 1) throw new ReviewedStingException(String.format("Trying to clip the middle of the read: start %d, stop %d, cigar: %s", start, stop, read.getCigarString())); diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMUtils.java b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMUtils.java index cedd56bdf..542adea77 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMUtils.java @@ -238,7 +238,7 @@ public class ArtificialSAMUtils { */ public static GATKSAMRecord createArtificialRead( byte[] bases, byte[] qual, String cigar ) { SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 1000000); - return ArtificialSAMUtils.createArtificialRead(header, "default_read", 0, 1, bases, qual, cigar); + return ArtificialSAMUtils.createArtificialRead(header, "default_read", 0, 10000, bases, qual, cigar); } diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java index 96713edc2..5e0802fa6 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.utils.sam; -import com.google.java.contract.Ensures; import net.sf.samtools.*; import org.broadinstitute.sting.utils.NGSPlatform; @@ -277,7 +276,6 @@ public class GATKSAMRecord extends BAMRecord { * * @return the unclipped start of the read taking soft clips (but not hard clips) into account */ - @Ensures({"result >= getUnclippedStart()", "result <= getUnclippedEnd() || ReadUtils.readIsEntirelyInsertion(this)"}) public int getSoftStart() { int start = this.getUnclippedStart(); for (CigarElement cigarElement : this.getCigar().getCigarElements()) { @@ -286,17 +284,17 @@ public class GATKSAMRecord extends BAMRecord { else break; } + return start; } /** * Calculates the reference coordinate for the end of the read taking into account soft clips but not hard clips. * - * Note: getUnclippedStart() adds soft and hard clips, this function only adds soft clips. + * Note: getUnclippedEnd() adds soft and hard clips, this function only adds soft clips. * * @return the unclipped end of the read taking soft clips (but not hard clips) into account */ - @Ensures({"result >= getUnclippedStart()", "result <= getUnclippedEnd() || ReadUtils.readIsEntirelyInsertion(this)"}) public int getSoftEnd() { int stop = this.getUnclippedStart(); @@ -313,6 +311,7 @@ public class GATKSAMRecord extends BAMRecord { else shift = 0; } + return (lastOperator == CigarOperator.HARD_CLIP) ? stop-1 : stop+shift-1 ; } diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java index f2e54713f..d52814ef7 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java @@ -58,7 +58,7 @@ public class ReadUtils { /** * A HashMap of the SAM spec read flag names - *

+ * * Note: This is not being used right now, but can be useful in the future */ private static final Map readFlagNames = new HashMap(); @@ -79,49 +79,47 @@ public class ReadUtils { /** * This enum represents all the different ways in which a read can overlap an interval. - *

+ * * NO_OVERLAP_CONTIG: * read and interval are in different contigs. - *

+ * * NO_OVERLAP_LEFT: * the read does not overlap the interval. - *

- * |----------------| (interval) - * <----------------> (read) - *

+ * + * |----------------| (interval) + * <----------------> (read) + * * NO_OVERLAP_RIGHT: * the read does not overlap the interval. - *

- * |----------------| (interval) - * <----------------> (read) - *

+ * + * |----------------| (interval) + * <----------------> (read) + * * OVERLAP_LEFT: * the read starts before the beginning of the interval but ends inside of it - *

- * |----------------| (interval) - * <----------------> (read) - *

+ * + * |----------------| (interval) + * <----------------> (read) + * * OVERLAP_RIGHT: * the read starts inside the interval but ends outside of it - *

- * |----------------| (interval) - * <----------------> (read) - *

+ * + * |----------------| (interval) + * <----------------> (read) + * * OVERLAP_LEFT_AND_RIGHT: * the read starts before the interval and ends after the interval - *

- * |-----------| (interval) - * <-------------------> (read) - *

+ * + * |-----------| (interval) + * <-------------------> (read) + * * OVERLAP_CONTAINED: * the read starts and ends inside the interval - *

- * |----------------| (interval) - * <--------> (read) + * + * |----------------| (interval) + * <--------> (read) */ - public enum ReadAndIntervalOverlap { - NO_OVERLAP_CONTIG, NO_OVERLAP_LEFT, NO_OVERLAP_RIGHT, NO_OVERLAP_HARDCLIPPED_LEFT, NO_OVERLAP_HARDCLIPPED_RIGHT, OVERLAP_LEFT, OVERLAP_RIGHT, OVERLAP_LEFT_AND_RIGHT, OVERLAP_CONTAINED - } + public enum ReadAndIntervalOverlap {NO_OVERLAP_CONTIG, NO_OVERLAP_LEFT, NO_OVERLAP_RIGHT, NO_OVERLAP_HARDCLIPPED_LEFT, NO_OVERLAP_HARDCLIPPED_RIGHT, OVERLAP_LEFT, OVERLAP_RIGHT, OVERLAP_LEFT_AND_RIGHT, OVERLAP_CONTAINED} /** * Creates a SAMFileWriter with the given compression level if you request a bam file. Creates a regular @@ -141,15 +139,15 @@ public class ReadUtils { /** * is this base inside the adaptor of the read? - *

+ * * There are two cases to treat here: - *

+ * * 1) Read is in the negative strand => Adaptor boundary is on the left tail * 2) Read is in the positive strand => Adaptor boundary is on the right tail - *

+ * * Note: We return false to all reads that are UNMAPPED or have an weird big insert size (probably due to mismapping or bigger event) * - * @param read the read to test + * @param read the read to test * @param basePos base position in REFERENCE coordinates (not read coordinates) * @return whether or not the base is in the adaptor */ @@ -166,22 +164,22 @@ public class ReadUtils { * the read boundary. If the read is in the positive strand, this is the first base after the end of the * fragment (Picard calls it 'insert'), if the read is in the negative strand, this is the first base before the * beginning of the fragment. - *

+ * * There are two cases we need to treat here: - *

+ * * 1) Our read is in the reverse strand : - *

- * <----------------------| * - * |---------------------> - *

- * in these cases, the adaptor boundary is at the mate start (minus one) - *

+ * + * <----------------------| * + * |---------------------> + * + * in these cases, the adaptor boundary is at the mate start (minus one) + * * 2) Our read is in the forward strand : - *

- * |----------------------> * - * <----------------------| - *

- * in these cases the adaptor boundary is at the start of the read plus the inferred insert size (plus one) + * + * |----------------------> * + * <----------------------| + * + * in these cases the adaptor boundary is at the start of the read plus the inferred insert size (plus one) * * @param read the read being tested for the adaptor boundary * @return the reference coordinate for the adaptor boundary (effectively the first base IN the adaptor, closest to the read. NULL if the read is unmapped or the mate is mapped to another contig. @@ -264,7 +262,7 @@ public class ReadUtils { /** * If a read starts in INSERTION, returns the first element length. - *

+ * * Warning: If the read has Hard or Soft clips before the insertion this function will return 0. * * @param read @@ -272,7 +270,7 @@ public class ReadUtils { */ public final static int getFirstInsertionOffset(SAMRecord read) { CigarElement e = read.getCigar().getCigarElement(0); - if (e.getOperator() == CigarOperator.I) + if ( e.getOperator() == CigarOperator.I ) return e.getLength(); else return 0; @@ -280,7 +278,7 @@ public class ReadUtils { /** * If a read ends in INSERTION, returns the last element length. - *

+ * * Warning: If the read has Hard or Soft clips after the insertion this function will return 0. * * @param read @@ -288,7 +286,7 @@ public class ReadUtils { */ public final static int getLastInsertionOffset(SAMRecord read) { CigarElement e = read.getCigar().getCigarElement(read.getCigarLength() - 1); - if (e.getOperator() == CigarOperator.I) + if ( e.getOperator() == CigarOperator.I ) return e.getLength(); else return 0; @@ -297,8 +295,7 @@ public class ReadUtils { /** * Determines what is the position of the read in relation to the interval. * Note: This function uses the UNCLIPPED ENDS of the reads for the comparison. - * - * @param read the read + * @param read the read * @param interval the interval * @return the overlap type as described by ReadAndIntervalOverlap enum (see above) */ @@ -309,30 +306,30 @@ public class ReadUtils { int uStart = read.getUnclippedStart(); int uStop = read.getUnclippedEnd(); - if (!read.getReferenceName().equals(interval.getContig())) + if ( !read.getReferenceName().equals(interval.getContig()) ) return ReadAndIntervalOverlap.NO_OVERLAP_CONTIG; - else if (uStop < interval.getStart()) + else if ( uStop < interval.getStart() ) return ReadAndIntervalOverlap.NO_OVERLAP_LEFT; - else if (uStart > interval.getStop()) + else if ( uStart > interval.getStop() ) return ReadAndIntervalOverlap.NO_OVERLAP_RIGHT; - else if (sStop < interval.getStart()) + else if ( sStop < interval.getStart() ) return ReadAndIntervalOverlap.NO_OVERLAP_HARDCLIPPED_LEFT; - else if (sStart > interval.getStop()) + else if ( sStart > interval.getStop() ) return ReadAndIntervalOverlap.NO_OVERLAP_HARDCLIPPED_RIGHT; - else if ((sStart >= interval.getStart()) && - (sStop <= interval.getStop())) + else if ( (sStart >= interval.getStart()) && + (sStop <= interval.getStop()) ) return ReadAndIntervalOverlap.OVERLAP_CONTAINED; - else if ((sStart < interval.getStart()) && - (sStop > interval.getStop())) + else if ( (sStart < interval.getStart()) && + (sStop > interval.getStop()) ) return ReadAndIntervalOverlap.OVERLAP_LEFT_AND_RIGHT; - else if ((sStart < interval.getStart())) + else if ( (sStart < interval.getStart()) ) return ReadAndIntervalOverlap.OVERLAP_LEFT; else @@ -340,36 +337,52 @@ public class ReadUtils { } /** - * Pre-processes the results of getReadCoordinateForReferenceCoordinate(GATKSAMRecord, int) in case it falls in - * a deletion following the typical clipping needs. If clipping the left tail (beginning of the read) returns - * the base prior to the deletion. If clipping the right tail (end of the read) returns the base after the - * deletion. + * Pre-processes the results of getReadCoordinateForReferenceCoordinate(GATKSAMRecord, int) to take care of + * two corner cases: + * + * 1. If clipping the right tail (end of the read) getReadCoordinateForReferenceCoordinate and fall inside + * a deletion return the base after the deletion. If clipping the left tail (beginning of the read) it + * doesn't matter because it already returns the previous base by default. + * + * 2. If clipping the left tail (beginning of the read) getReadCoordinateForReferenceCoordinate and the + * read starts with an insertion, and you're requesting the first read based coordinate, it will skip + * the leading insertion (because it has the same reference coordinate as the following base). * * @param read * @param refCoord * @param tail * @return the read coordinate corresponding to the requested reference coordinate for clipping. */ - @Requires({"refCoord >= read.getUnclippedStart()", "refCoord <= read.getUnclippedEnd()"}) + @Requires({"refCoord >= read.getUnclippedStart()", "refCoord <= read.getUnclippedEnd() || (read.getUnclippedEnd() < read.getUnclippedStart())"}) @Ensures({"result >= 0", "result < read.getReadLength()"}) public static int getReadCoordinateForReferenceCoordinate(GATKSAMRecord read, int refCoord, ClippingTail tail) { Pair result = getReadCoordinateForReferenceCoordinate(read, refCoord); int readCoord = result.getFirst(); + // Corner case one: clipping the right tail and falls on deletion, move to the next + // read coordinate. It is not a problem for the left tail because the default answer + // from getReadCoordinateForReferenceCoordinate is to give the previous read coordinate. if (result.getSecond() && tail == ClippingTail.RIGHT_TAIL) readCoord++; + // clipping the left tail and first base is insertion, go to the next read coordinate + // with the same reference coordinate. Advance to the next cigar element, or to the + // end of the read if there is no next element. + Pair firstElementIsInsertion = readStartsWithInsertion(read); + if (readCoord == 0 && tail == ClippingTail.LEFT_TAIL && firstElementIsInsertion.getFirst()) + readCoord = Math.min(firstElementIsInsertion.getSecond().getLength(), read.getReadLength() - 1); + return readCoord; } /** * Returns the read coordinate corresponding to the requested reference coordinate. - *

+ * * WARNING: if the requested reference coordinate happens to fall inside a deletion in the read, this function * will return the last read base before the deletion. This function returns a * Pair(int readCoord, boolean fallsInsideDeletion) so you can choose which readCoordinate to use when faced with * a deletion. - *

+ * * SUGGESTION: Use getReadCoordinateForReferenceCoordinate(GATKSAMRecord, int, ClippingTail) instead to get a * pre-processed result according to normal clipping needs. Or you can use this function and tailor the * behavior to your needs. @@ -421,7 +434,7 @@ public class ReadUtils { if (endsWithinCigar) fallsInsideDeletion = cigarElement.getOperator() == CigarOperator.DELETION; - // if we end outside the current cigar element, we need to check if the next element is an insertion or deletion. + // if we end outside the current cigar element, we need to check if the next element is an insertion or deletion. else { nextCigarElement = cigarElementIterator.next(); @@ -442,13 +455,13 @@ public class ReadUtils { if (!fallsInsideDeletion && cigarElement.getOperator().consumesReadBases()) readBases += shift; - // If we reached our goal inside a deletion, but the deletion is the next cigar element then we need - // to add the shift of the current cigar element but go back to it's last element to return the last - // base before the deletion (see warning in function contracts) + // If we reached our goal inside a deletion, but the deletion is the next cigar element then we need + // to add the shift of the current cigar element but go back to it's last element to return the last + // base before the deletion (see warning in function contracts) else if (fallsInsideDeletion && !endsWithinCigar) readBases += shift - 1; - // If we reached our goal inside a deletion then we must backtrack to the last base before the deletion + // If we reached our goal inside a deletion then we must backtrack to the last base before the deletion else if (fallsInsideDeletion && endsWithinCigar) readBases--; } @@ -457,7 +470,6 @@ public class ReadUtils { if (!goalReached) throw new ReviewedStingException("Somehow the requested coordinate is not covered by the read. Too many deletions?"); - return new Pair(readBases, fallsInsideDeletion); } @@ -465,12 +477,11 @@ public class ReadUtils { * Compares two SAMRecords only the basis on alignment start. Note that * comparisons are performed ONLY on the basis of alignment start; any * two SAM records with the same alignment start will be considered equal. - *

+ * * Unmapped alignments will all be considered equal. */ @Requires({"read1 != null", "read2 != null"}) - @Ensures("result == 0 || result == 1 || result == -1") public static int compareSAMRecords(GATKSAMRecord read1, GATKSAMRecord read2) { AlignmentStartComparator comp = new AlignmentStartComparator(); return comp.compare(read1, read2); @@ -479,7 +490,7 @@ public class ReadUtils { /** * Is a base inside a read? * - * @param read the read to evaluate + * @param read the read to evaluate * @param referenceCoordinate the reference coordinate of the base to test * @return true if it is inside the read, false otherwise. */ @@ -502,4 +513,22 @@ public class ReadUtils { } + /** + * Checks if a read starts with an insertion. It looks beyond Hard and Soft clips + * if there are any. + * + * @param read + * @return A pair with the answer (true/false) and the element or null if it doesn't exist + */ + public static Pair readStartsWithInsertion(GATKSAMRecord read) { + for (CigarElement cigarElement : read.getCigar().getCigarElements()) { + if (cigarElement.getOperator() == CigarOperator.INSERTION) + return new Pair(true, cigarElement); + + else if (cigarElement.getOperator() != CigarOperator.HARD_CLIP && cigarElement.getOperator() != CigarOperator.SOFT_CLIP) + break; + } + return new Pair(false, null); + } + } diff --git a/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperTestUtils.java b/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperTestUtils.java index 18108e0a1..16b141bc3 100644 --- a/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperTestUtils.java +++ b/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperTestUtils.java @@ -112,8 +112,9 @@ public class ReadClipperTestUtils { } } - if (startingOp != CigarOperator.DELETION && endingOp != CigarOperator.DELETION && startingOp != CigarOperator.INSERTION && endingOp != CigarOperator.INSERTION) - return true; // we don't accept reads starting or ending in deletions (add any other constraint here) +// if (startingOp != CigarOperator.DELETION && endingOp != CigarOperator.DELETION && startingOp != CigarOperator.INSERTION && endingOp != CigarOperator.INSERTION) + if (startingOp != CigarOperator.DELETION && endingOp != CigarOperator.DELETION) + return true; // we don't accept reads starting or ending in deletions (add any other constraint here) } return false; @@ -190,4 +191,18 @@ public class ReadClipperTestUtils { return invertedCigar; } + /** + * Checks whether or not the read has any cigar element that is not H or S + * + * @param read + * @return true if it has any M, I or D, false otherwise + */ + public static boolean readHasNonClippedBases(GATKSAMRecord read) { + for (CigarElement cigarElement : read.getCigar().getCigarElements()) + if (cigarElement.getOperator() != CigarOperator.SOFT_CLIP && cigarElement.getOperator() != CigarOperator.HARD_CLIP) + return true; + return false; + } + + } diff --git a/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperUnitTest.java index 4dad68dc5..bc918c0a4 100644 --- a/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/clipping/ReadClipperUnitTest.java @@ -30,12 +30,12 @@ import net.sf.samtools.CigarElement; import net.sf.samtools.CigarOperator; import org.broadinstitute.sting.BaseTest; import org.broadinstitute.sting.utils.Utils; -import org.broadinstitute.sting.utils.sam.ArtificialSAMUtils; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.util.HashMap; import java.util.List; /** @@ -59,10 +59,11 @@ public class ReadClipperUnitTest extends BaseTest { int alnStart = read.getAlignmentStart(); int alnEnd = read.getAlignmentEnd(); int readLength = alnStart - alnEnd; - for (int i=0; i= alnStart + i, String.format("Clipped alignment start is less than original read (minus %d): %s -> %s", i, read.getCigarString(), clippedRead.getCigarString())); Assert.assertTrue(clippedRead.getAlignmentEnd() <= alnEnd + i, String.format("Clipped alignment end is greater than original read (minus %d): %s -> %s", i, read.getCigarString(), clippedRead.getCigarString())); + assertUnclippedLimits(read, clippedRead); } } } @@ -72,12 +73,14 @@ public class ReadClipperUnitTest extends BaseTest { for (Cigar cigar : cigarList) { GATKSAMRecord read = ReadClipperTestUtils.makeReadFromCigar(cigar); int readLength = read.getReadLength(); - for (int i=0; i %s", i, read.getCigarString(), clipLeft.getCigarString())); + Assert.assertTrue(clipLeft.getReadLength() <= readLength - i, String.format("Clipped read length is greater than original read length (minus %d): %s -> %s", i, read.getCigarString(), clipLeft.getCigarString())); + assertUnclippedLimits(read, clipLeft); - GATKSAMRecord clipRight = ReadClipper.hardClipByReadCoordinates(read, i, readLength-1); + GATKSAMRecord clipRight = ReadClipper.hardClipByReadCoordinates(read, i, readLength - 1); Assert.assertTrue(clipRight.getReadLength() <= i, String.format("Clipped read length is greater than original read length (minus %d): %s -> %s", i, read.getCigarString(), clipRight.getCigarString())); + assertUnclippedLimits(read, clipRight); } } } @@ -86,19 +89,27 @@ public class ReadClipperUnitTest extends BaseTest { public void testHardClipByReferenceCoordinates() { for (Cigar cigar : cigarList) { GATKSAMRecord read = ReadClipperTestUtils.makeReadFromCigar(cigar); - int alnStart = read.getAlignmentStart(); - int alnEnd = read.getAlignmentEnd(); - for (int i=alnStart; i<=alnEnd; i++) { - if (read.getSoftStart() == alnStart) { // we can't test left clipping if the read has hanging soft clips on the left side - GATKSAMRecord clipLeft = (new ReadClipper(read)).hardClipByReferenceCoordinates(alnStart, i); - if (!clipLeft.isEmpty()) - Assert.assertTrue(clipLeft.getAlignmentStart() >= i + 1, String.format("Clipped alignment start (%d) is less the expected (%d): %s -> %s", clipLeft.getAlignmentStart(), i + 1, read.getCigarString(), clipLeft.getCigarString())); + int start = read.getSoftStart(); + int stop = read.getSoftEnd(); + +// System.out.println(String.format("CIGAR: %s (%d, %d)", cigar.toString(), start, stop)); + +// if (ReadUtils.readIsEntirelyInsertion(read)) +// System.out.println("debug"); + + for (int i = start; i <= stop; i++) { + GATKSAMRecord clipLeft = (new ReadClipper(read)).hardClipByReferenceCoordinates(-1, i); + if (!clipLeft.isEmpty()) { +// System.out.println(String.format("\t left [%d] %s -> %s ", i-start+1, cigar.toString(), clipLeft.getCigarString())); + Assert.assertTrue(clipLeft.getAlignmentStart() >= Math.min(read.getAlignmentEnd(), i + 1), String.format("Clipped alignment start (%d) is less the expected (%d): %s -> %s", clipLeft.getAlignmentStart(), i + 1, read.getCigarString(), clipLeft.getCigarString())); + assertUnclippedLimits(read, clipLeft); } - if (read.getSoftEnd() == alnEnd) { // we can't test right clipping if the read has hanging soft clips on the right side - GATKSAMRecord clipRight = (new ReadClipper(read)).hardClipByReferenceCoordinates(i, alnEnd); - if (!clipRight.isEmpty() && clipRight.getAlignmentStart() <= clipRight.getAlignmentEnd()) // alnStart > alnEnd if the entire read is a soft clip now. We can't test those. - Assert.assertTrue(clipRight.getAlignmentEnd() <= i - 1, String.format("Clipped alignment end (%d) is greater than expected (%d): %s -> %s", clipRight.getAlignmentEnd(), i - 1, read.getCigarString(), clipRight.getCigarString())); + GATKSAMRecord clipRight = (new ReadClipper(read)).hardClipByReferenceCoordinates(i, -1); + if (!clipRight.isEmpty() && clipRight.getAlignmentStart() <= clipRight.getAlignmentEnd()) { // alnStart > alnEnd if the entire read is a soft clip now. We can't test those. +// System.out.println(String.format("\t right [%d] %s -> %s ", i-start+1, cigar.toString(), clipRight.getCigarString())); + Assert.assertTrue(clipRight.getAlignmentEnd() <= Math.max(read.getAlignmentStart(), i - 1), String.format("Clipped alignment end (%d) is greater than expected (%d): %s -> %s", clipRight.getAlignmentEnd(), i - 1, read.getCigarString(), clipRight.getCigarString())); + assertUnclippedLimits(read, clipRight); } } } @@ -111,10 +122,14 @@ public class ReadClipperUnitTest extends BaseTest { int alnStart = read.getAlignmentStart(); int alnEnd = read.getAlignmentEnd(); if (read.getSoftStart() == alnStart) { // we can't test left clipping if the read has hanging soft clips on the left side - for (int i=alnStart; i<=alnEnd; i++) { - GATKSAMRecord clipLeft = ReadClipper.hardClipByReferenceCoordinatesLeftTail(read, i); - if (!clipLeft.isEmpty()) - Assert.assertTrue(clipLeft.getAlignmentStart() >= i + 1, String.format("Clipped alignment start (%d) is less the expected (%d): %s -> %s", clipLeft.getAlignmentStart(), i + 1, read.getCigarString(), clipLeft.getCigarString())); + for (int i = alnStart; i <= alnEnd; i++) { + GATKSAMRecord clipLeft = ReadClipper.hardClipByReferenceCoordinatesLeftTail(read, i); + + if (!clipLeft.isEmpty()) { +// System.out.println(String.format("Left Tail [%d]: %s (%d,%d,%d : %d,%d,%d) -> %s (%d,%d,%d : %d,%d,%d)", i, cigar.toString(), read.getUnclippedStart(), read.getSoftStart(), read.getAlignmentStart(), read.getAlignmentEnd(), read.getSoftEnd(), read.getUnclippedEnd(), clipLeft.getCigarString(), clipLeft.getUnclippedStart(), clipLeft.getSoftStart(), clipLeft.getAlignmentStart(), clipLeft.getAlignmentEnd(), clipLeft.getSoftEnd(), clipLeft.getUnclippedEnd())); + Assert.assertTrue(clipLeft.getAlignmentStart() >= i + 1, String.format("Clipped alignment start (%d) is less the expected (%d): %s -> %s", clipLeft.getAlignmentStart(), i + 1, read.getCigarString(), clipLeft.getCigarString())); + assertUnclippedLimits(read, clipLeft); + } } } } @@ -127,10 +142,12 @@ public class ReadClipperUnitTest extends BaseTest { int alnStart = read.getAlignmentStart(); int alnEnd = read.getAlignmentEnd(); if (read.getSoftEnd() == alnEnd) { // we can't test right clipping if the read has hanging soft clips on the right side - for (int i=alnStart; i<=alnEnd; i++) { + for (int i = alnStart; i <= alnEnd; i++) { GATKSAMRecord clipRight = ReadClipper.hardClipByReferenceCoordinatesRightTail(read, i); - if (!clipRight.isEmpty() && clipRight.getAlignmentStart() <= clipRight.getAlignmentEnd()) // alnStart > alnEnd if the entire read is a soft clip now. We can't test those. + if (!clipRight.isEmpty() && clipRight.getAlignmentStart() <= clipRight.getAlignmentEnd()) { // alnStart > alnEnd if the entire read is a soft clip now. We can't test those. Assert.assertTrue(clipRight.getAlignmentEnd() <= i - 1, String.format("Clipped alignment end (%d) is greater than expected (%d): %s -> %s", clipRight.getAlignmentEnd(), i - 1, read.getCigarString(), clipRight.getCigarString())); + assertUnclippedLimits(read, clipRight); + } } } } @@ -145,43 +162,36 @@ public class ReadClipperUnitTest extends BaseTest { for (Cigar cigar : cigarList) { GATKSAMRecord read = ReadClipperTestUtils.makeReadFromCigar(cigar); int readLength = read.getReadLength(); - byte [] quals = new byte[readLength]; + byte[] quals = new byte[readLength]; for (int nLowQualBases = 0; nLowQualBases < readLength; nLowQualBases++) { - - // create a read with nLowQualBases in the left tail - Utils.fillArrayWithByte(quals, HIGH_QUAL); + Utils.fillArrayWithByte(quals, HIGH_QUAL); // create a read with nLowQualBases in the left tail for (int addLeft = 0; addLeft < nLowQualBases; addLeft++) quals[addLeft] = LOW_QUAL; read.setBaseQualities(quals); GATKSAMRecord clipLeft = ReadClipper.hardClipLowQualEnds(read, LOW_QUAL); - // Tests + assertUnclippedLimits(read, clipLeft); // Make sure limits haven't changed + assertNoLowQualBases(clipLeft, LOW_QUAL); // Make sure the low qualities are gone + Assert.assertEquals(clipLeft.getReadLength(), readLength - nLowQualBases, // Make sure only low quality bases were clipped + String.format("Clipped read size (%d) is different than the number high qual bases (%d) -- Cigars: %s -> %s", clipLeft.getReadLength(), readLength - nLowQualBases, read.getCigarString(), clipLeft.getCigarString())); - // Make sure the low qualities are gone - assertNoLowQualBases(clipLeft, LOW_QUAL); - // Can't run this test with the current contract of no hanging insertions -// Assert.assertEquals(clipLeft.getReadLength(), readLength - nLowQualBases, String.format("Clipped read size (%d) is different than the number high qual bases (%d) -- Cigars: %s -> %s", clipLeft.getReadLength(), readLength - nLowQualBases, read.getCigarString(), clipLeft.getCigarString())); - - // create a read with nLowQualBases in the right tail - Utils.fillArrayWithByte(quals, HIGH_QUAL); + Utils.fillArrayWithByte(quals, HIGH_QUAL); // create a read with nLowQualBases in the right tail for (int addRight = 0; addRight < nLowQualBases; addRight++) quals[readLength - addRight - 1] = LOW_QUAL; read.setBaseQualities(quals); GATKSAMRecord clipRight = ReadClipper.hardClipLowQualEnds(read, LOW_QUAL); - // Tests +// System.out.println(String.format("Debug [%d]: %s -> %s / %s", nLowQualBases, cigar.toString(), clipLeft.getCigarString(), clipRight.getCigarString())); - // Make sure the low qualities are gone - assertNoLowQualBases(clipRight, LOW_QUAL); + assertUnclippedLimits(read, clipRight); // Make sure limits haven't changed + assertNoLowQualBases(clipRight, LOW_QUAL); // Make sure the low qualities are gone + Assert.assertEquals(clipLeft.getReadLength(), readLength - nLowQualBases, // Make sure only low quality bases were clipped + String.format("Clipped read size (%d) is different than the number high qual bases (%d) -- Cigars: %s -> %s", clipRight.getReadLength(), readLength - nLowQualBases, read.getCigarString(), clipRight.getCigarString())); - // Make sure we haven't clipped any high quals -- Can't run this test with the current contract of no hanging insertions - //Assert.assertEquals(clipLeft.getReadLength(), readLength - nLowQualBases, String.format("Clipped read size (%d) is different than the number high qual bases (%d) -- Cigars: %s -> %s", clipRight.getReadLength(), readLength - nLowQualBases, read.getCigarString(), clipRight.getCigarString())); - - // create a read with nLowQualBases in the both tails - if (nLowQualBases <= readLength/2) { - Utils.fillArrayWithByte(quals, HIGH_QUAL); + if (nLowQualBases <= readLength / 2) { + Utils.fillArrayWithByte(quals, HIGH_QUAL); // create a read with nLowQualBases on both tails for (int addBoth = 0; addBoth < nLowQualBases; addBoth++) { quals[addBoth] = LOW_QUAL; quals[readLength - addBoth - 1] = LOW_QUAL; @@ -189,83 +199,25 @@ public class ReadClipperUnitTest extends BaseTest { read.setBaseQualities(quals); GATKSAMRecord clipBoth = ReadClipper.hardClipLowQualEnds(read, LOW_QUAL); - // Tests - - // Make sure the low qualities are gone - assertNoLowQualBases(clipBoth, LOW_QUAL); - - // Can't run this test with the current contract of no hanging insertions - //Assert.assertEquals(clipLeft.getReadLength(), readLength - nLowQualBases, String.format("Clipped read size (%d) is different than the number high qual bases (%d) -- Cigars: %s -> %s", clipRight.getReadLength(), readLength - (2*nLowQualBases), read.getCigarString(), clipBoth.getCigarString())); + assertUnclippedLimits(read, clipBoth); // Make sure limits haven't changed + assertNoLowQualBases(clipBoth, LOW_QUAL); // Make sure the low qualities are gone + Assert.assertEquals(clipLeft.getReadLength(), readLength - nLowQualBases, // Make sure only low quality bases were clipped + String.format("Clipped read size (%d) is different than the number high qual bases (%d) -- Cigars: %s -> %s", clipRight.getReadLength(), readLength - (2 * nLowQualBases), read.getCigarString(), clipBoth.getCigarString())); } } -// logger.warn(String.format("Testing %s for all combinations of low/high qual... PASSED", read.getCigarString())); } - - // ONE OFF Testing clipping that ends inside an insertion ( Ryan's bug ) - final byte[] BASES = {'A','C','G','T','A','C','G','T'}; - final byte[] QUALS = {2, 2, 2, 2, 20, 20, 20, 2}; - final String CIGAR = "1S1M5I1S"; - - final byte[] CLIPPED_BASES = {}; - final byte[] CLIPPED_QUALS = {}; - final String CLIPPED_CIGAR = ""; - - - GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(BASES, QUALS, CIGAR); - GATKSAMRecord expected = ArtificialSAMUtils.createArtificialRead(CLIPPED_BASES, CLIPPED_QUALS, CLIPPED_CIGAR); - - ReadClipperTestUtils.assertEqualReads(ReadClipper.hardClipLowQualEnds(read, (byte) 2), expected); } @Test(enabled = true) public void testHardClipSoftClippedBases() { - - // Generate a list of cigars to test for (Cigar cigar : cigarList) { GATKSAMRecord read = ReadClipperTestUtils.makeReadFromCigar(cigar); GATKSAMRecord clippedRead = ReadClipper.hardClipSoftClippedBases(read); + CigarCounter original = new CigarCounter(read); + CigarCounter clipped = new CigarCounter(clippedRead); - int sumHardClips = 0; - int sumMatches = 0; - - boolean tail = true; - for (CigarElement element : read.getCigar().getCigarElements()) { - // Assuming cigars are well formed, if we see S or H, it means we're on the tail (left or right) - if (element.getOperator() == CigarOperator.HARD_CLIP || element.getOperator() == CigarOperator.SOFT_CLIP) - tail = true; - - // Adds all H, S and D's (next to hard/soft clips). - // All these should be hard clips after clipping. - if (tail && (element.getOperator() == CigarOperator.HARD_CLIP || element.getOperator() == CigarOperator.SOFT_CLIP || element.getOperator() == CigarOperator.DELETION)) - sumHardClips += element.getLength(); - - // this means we're no longer on the tail (insertions can still potentially be the tail because - // of the current contract of clipping out hanging insertions - else if (element.getOperator() != CigarOperator.INSERTION) - tail = false; - - // Adds all matches to verify that they remain the same after clipping - if (element.getOperator() == CigarOperator.MATCH_OR_MISMATCH) - sumMatches += element.getLength(); - } - - for (CigarElement element : clippedRead.getCigar().getCigarElements()) { - // Test if clipped read has Soft Clips (shouldn't have any!) - Assert.assertTrue( element.getOperator() != CigarOperator.SOFT_CLIP, String.format("Cigar %s -> %s -- FAILED (resulting cigar has soft clips)", read.getCigarString(), clippedRead.getCigarString())); - - // Keep track of the total number of Hard Clips after clipping to make sure everything was accounted for - if (element.getOperator() == CigarOperator.HARD_CLIP) - sumHardClips -= element.getLength(); - - // Make sure all matches are still there - if (element.getOperator() == CigarOperator.MATCH_OR_MISMATCH) - sumMatches -= element.getLength(); - } - Assert.assertTrue( sumHardClips == 0, String.format("Cigar %s -> %s -- FAILED (number of hard clips mismatched by %d)", read.getCigarString(), clippedRead.getCigarString(), sumHardClips)); - Assert.assertTrue( sumMatches == 0, String.format("Cigar %s -> %s -- FAILED (number of matches mismatched by %d)", read.getCigarString(), clippedRead.getCigarString(), sumMatches)); - - -// logger.warn(String.format("Cigar %s -> %s -- PASSED!", read.getCigarString(), clippedRead.getCigarString())); + assertUnclippedLimits(read, clippedRead); // Make sure limits haven't changed + original.assertHardClippingSoftClips(clipped); // Make sure we have only clipped SOFT_CLIPS } } @@ -276,38 +228,39 @@ public class ReadClipperUnitTest extends BaseTest { GATKSAMRecord read = ReadClipperTestUtils.makeReadFromCigar(cigar); GATKSAMRecord clippedRead = ReadClipper.hardClipLeadingInsertions(read); + assertUnclippedLimits(read, clippedRead); // Make sure limits haven't changed + int expectedLength = read.getReadLength() - leadingCigarElementLength(read.getCigar(), CigarOperator.INSERTION); if (cigarHasElementsDifferentThanInsertionsAndHardClips(read.getCigar())) expectedLength -= leadingCigarElementLength(ReadClipperTestUtils.invertCigar(read.getCigar()), CigarOperator.INSERTION); - if (! clippedRead.isEmpty()) { + if (!clippedRead.isEmpty()) { Assert.assertEquals(expectedLength, clippedRead.getReadLength(), String.format("%s -> %s", read.getCigarString(), clippedRead.getCigarString())); // check that everything else is still there Assert.assertFalse(startsWithInsertion(clippedRead.getCigar())); // check that the insertions are gone - } - else + } else Assert.assertTrue(expectedLength == 0, String.format("expected length: %d", expectedLength)); // check that the read was expected to be fully clipped } } } @Test(enabled = true) - public void testRevertSoftClippedBases() - { - for (Cigar cigar: cigarList) { + public void testRevertSoftClippedBases() { + for (Cigar cigar : cigarList) { final int leadingSoftClips = leadingCigarElementLength(cigar, CigarOperator.SOFT_CLIP); final int tailSoftClips = leadingCigarElementLength(ReadClipperTestUtils.invertCigar(cigar), CigarOperator.SOFT_CLIP); final GATKSAMRecord read = ReadClipperTestUtils.makeReadFromCigar(cigar); final GATKSAMRecord unclipped = ReadClipper.revertSoftClippedBases(read); - if ( leadingSoftClips > 0 || tailSoftClips > 0) { + assertUnclippedLimits(read, unclipped); // Make sure limits haven't changed + + if (leadingSoftClips > 0 || tailSoftClips > 0) { final int expectedStart = read.getAlignmentStart() - leadingSoftClips; final int expectedEnd = read.getAlignmentEnd() + tailSoftClips; Assert.assertEquals(unclipped.getAlignmentStart(), expectedStart); Assert.assertEquals(unclipped.getAlignmentEnd(), expectedEnd); - } - else + } else Assert.assertEquals(read.getCigarString(), unclipped.getCigarString()); } } @@ -315,12 +268,25 @@ public class ReadClipperUnitTest extends BaseTest { private void assertNoLowQualBases(GATKSAMRecord read, byte low_qual) { if (!read.isEmpty()) { - byte [] quals = read.getBaseQualities(); - for (int i=0; i 0; } @@ -335,10 +301,46 @@ public class ReadClipperUnitTest extends BaseTest { return 0; } - private boolean cigarHasElementsDifferentThanInsertionsAndHardClips (Cigar cigar) { + private boolean cigarHasElementsDifferentThanInsertionsAndHardClips(Cigar cigar) { for (CigarElement cigarElement : cigar.getCigarElements()) if (cigarElement.getOperator() != CigarOperator.INSERTION && cigarElement.getOperator() != CigarOperator.HARD_CLIP) return true; return false; } + + private class CigarCounter { + private HashMap counter; + + public Integer getCounterForOp(CigarOperator operator) { + return counter.get(operator); + } + + public CigarCounter(GATKSAMRecord read) { + CigarOperator[] operators = CigarOperator.values(); + counter = new HashMap(operators.length); + + for (CigarOperator op : operators) + counter.put(op, 0); + + for (CigarElement cigarElement : read.getCigar().getCigarElements()) + counter.put(cigarElement.getOperator(), counter.get(cigarElement.getOperator()) + cigarElement.getLength()); + } + + public boolean assertHardClippingSoftClips(CigarCounter clipped) { + for (CigarOperator op : counter.keySet()) { + if (op == CigarOperator.HARD_CLIP || op == CigarOperator.SOFT_CLIP) { + int counterTotal = counter.get(CigarOperator.HARD_CLIP) + counter.get(CigarOperator.SOFT_CLIP); + int clippedHard = clipped.getCounterForOp(CigarOperator.HARD_CLIP); + int clippedSoft = clipped.getCounterForOp(CigarOperator.SOFT_CLIP); + + Assert.assertEquals(counterTotal, clippedHard); + Assert.assertTrue(clippedSoft == 0); + } else + Assert.assertEquals(counter.get(op), clipped.getCounterForOp(op)); + } + return true; + } + + } + } \ No newline at end of file From cd68cc239b9dd200fb9a741e55dd60221c9d5c4a Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Thu, 29 Dec 2011 00:41:59 -0500 Subject: [PATCH 05/29] Added knuth-shuffle (KS) and randomSubset using KS to MathUtils * Knuth-shuffle is a simple, yet effective array permutator (hope this is good english). * added a simple randomSubset that returns a random subset without repeats of any given array with the same probability for every permutation. * added unit tests to both functions --- .../broadinstitute/sting/utils/MathUtils.java | 818 ++++++++++-------- .../sting/utils/MathUtilsUnitTest.java | 92 +- 2 files changed, 545 insertions(+), 365 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/MathUtils.java b/public/java/src/org/broadinstitute/sting/utils/MathUtils.java index 759e1649d..4a3100a94 100644 --- a/public/java/src/org/broadinstitute/sting/utils/MathUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/MathUtils.java @@ -25,6 +25,7 @@ package org.broadinstitute.sting.utils; +import com.google.java.contract.Ensures; import com.google.java.contract.Requires; import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; @@ -49,8 +50,11 @@ public class MathUtils { */ - /** Private constructor. No instantiating this class! */ - private MathUtils() {} + /** + * Private constructor. No instantiating this class! + */ + private MathUtils() { + } @Requires({"d > 0.0"}) public static int fastPositiveRound(double d) { @@ -58,21 +62,21 @@ public class MathUtils { } public static int fastRound(double d) { - if ( d > 0.0 ) { + if (d > 0.0) { return fastPositiveRound(d); } else { - return -1*fastPositiveRound(-1*d); + return -1 * fastPositiveRound(-1 * d); } } public static double sum(Collection numbers) { - return sum(numbers,false); + return sum(numbers, false); } - public static double sum( Collection numbers, boolean ignoreNan ) { + public static double sum(Collection numbers, boolean ignoreNan) { double sum = 0; - for ( Number n : numbers ) { - if ( ! ignoreNan || ! Double.isNaN(n.doubleValue())) { + for (Number n : numbers) { + if (!ignoreNan || !Double.isNaN(n.doubleValue())) { sum += n.doubleValue(); } } @@ -82,66 +86,72 @@ public class MathUtils { public static int nonNanSize(Collection numbers) { int size = 0; - for ( Number n : numbers) { + for (Number n : numbers) { size += Double.isNaN(n.doubleValue()) ? 0 : 1; } return size; } - public static double average( Collection numbers, boolean ignoreNan) { - if ( ignoreNan ) { - return sum(numbers,true)/nonNanSize(numbers); + public static double average(Collection numbers, boolean ignoreNan) { + if (ignoreNan) { + return sum(numbers, true) / nonNanSize(numbers); } else { - return sum(numbers,false)/nonNanSize(numbers); + return sum(numbers, false) / nonNanSize(numbers); } } - public static double variance( Collection numbers, Number mean, boolean ignoreNan ) { + public static double variance(Collection numbers, Number mean, boolean ignoreNan) { double mn = mean.doubleValue(); double var = 0; - for ( Number n : numbers ) { var += ( ! ignoreNan || ! Double.isNaN(n.doubleValue())) ? (n.doubleValue()-mn)*(n.doubleValue()-mn) : 0; } - if ( ignoreNan ) { return var/(nonNanSize(numbers)-1); } - return var/(numbers.size()-1); + for (Number n : numbers) { + var += (!ignoreNan || !Double.isNaN(n.doubleValue())) ? (n.doubleValue() - mn) * (n.doubleValue() - mn) : 0; + } + if (ignoreNan) { + return var / (nonNanSize(numbers) - 1); + } + return var / (numbers.size() - 1); } public static double variance(Collection numbers, Number mean) { - return variance(numbers,mean,false); + return variance(numbers, mean, false); } public static double variance(Collection numbers, boolean ignoreNan) { - return variance(numbers,average(numbers,ignoreNan),ignoreNan); + return variance(numbers, average(numbers, ignoreNan), ignoreNan); } public static double variance(Collection numbers) { - return variance(numbers,average(numbers,false),false); + return variance(numbers, average(numbers, false), false); } public static double sum(double[] values) { double s = 0.0; - for ( double v : values) s += v; + for (double v : values) s += v; return s; } /** * Calculates the log10 cumulative sum of an array with log10 probabilities + * * @param log10p the array with log10 probabilites - * @param upTo index in the array to calculate the cumsum up to + * @param upTo index in the array to calculate the cumsum up to * @return the log10 of the cumulative sum */ - public static double log10CumulativeSumLog10(double [] log10p, int upTo) { + public static double log10CumulativeSumLog10(double[] log10p, int upTo) { return log10sumLog10(log10p, 0, upTo); } /** * Converts a real space array of probabilities into a log10 array + * * @param prRealSpace * @return */ public static double[] toLog10(double[] prRealSpace) { double[] log10s = new double[prRealSpace.length]; - for ( int i = 0; i < prRealSpace.length; i++ ) + for (int i = 0; i < prRealSpace.length; i++) log10s[i] = Math.log10(prRealSpace[i]); return log10s; } @@ -154,7 +164,7 @@ public class MathUtils { double sum = 0.0; double maxValue = Utils.findMaxEntry(log10p); - for ( int i = start; i < finish; i++ ) { + for (int i = start; i < finish; i++) { sum += Math.pow(10.0, log10p[i] - maxValue); } @@ -163,13 +173,13 @@ public class MathUtils { public static double sumDoubles(List values) { double s = 0.0; - for ( double v : values) s += v; + for (double v : values) s += v; return s; } public static int sumIntegers(List values) { int s = 0; - for ( int v : values) s += v; + for (int v : values) s += v; return s; } @@ -185,11 +195,11 @@ public class MathUtils { } public static boolean wellFormedDouble(double val) { - return ! Double.isInfinite(val) && ! Double.isNaN(val); + return !Double.isInfinite(val) && !Double.isNaN(val); } public static double bound(double value, double minBoundary, double maxBoundary) { - return Math.max(Math.min(value, maxBoundary), minBoundary); + return Math.max(Math.min(value, maxBoundary), minBoundary); } public static boolean isBounded(double val, double lower, double upper) { @@ -197,7 +207,7 @@ public class MathUtils { } public static boolean isPositive(double val) { - return ! isNegativeOrZero(val); + return !isNegativeOrZero(val); } public static boolean isPositiveOrZero(double val) { @@ -209,17 +219,19 @@ public class MathUtils { } public static boolean isNegative(double val) { - return ! isPositiveOrZero(val); + return !isPositiveOrZero(val); } /** * Compares double values for equality (within 1e-6), or inequality. * - * @param a the first double value - * @param b the second double value - * @return -1 if a is greater than b, 0 if a is equal to be within 1e-6, 1 if b is greater than a. + * @param a the first double value + * @param b the second double value + * @return -1 if a is greater than b, 0 if a is equal to be within 1e-6, 1 if b is greater than a. */ - public static byte compareDoubles(double a, double b) { return compareDoubles(a, b, 1e-6); } + public static byte compareDoubles(double a, double b) { + return compareDoubles(a, b, 1e-6); + } /** * Compares double values for equality (within epsilon), or inequality. @@ -227,23 +239,28 @@ public class MathUtils { * @param a the first double value * @param b the second double value * @param epsilon the precision within which two double values will be considered equal - * @return -1 if a is greater than b, 0 if a is equal to be within epsilon, 1 if b is greater than a. + * @return -1 if a is greater than b, 0 if a is equal to be within epsilon, 1 if b is greater than a. */ - public static byte compareDoubles(double a, double b, double epsilon) - { - if (Math.abs(a - b) < epsilon) { return 0; } - if (a > b) { return -1; } + public static byte compareDoubles(double a, double b, double epsilon) { + if (Math.abs(a - b) < epsilon) { + return 0; + } + if (a > b) { + return -1; + } return 1; } /** * Compares float values for equality (within 1e-6), or inequality. * - * @param a the first float value - * @param b the second float value - * @return -1 if a is greater than b, 0 if a is equal to be within 1e-6, 1 if b is greater than a. + * @param a the first float value + * @param b the second float value + * @return -1 if a is greater than b, 0 if a is equal to be within 1e-6, 1 if b is greater than a. */ - public static byte compareFloats(float a, float b) { return compareFloats(a, b, 1e-6f); } + public static byte compareFloats(float a, float b) { + return compareFloats(a, b, 1e-6f); + } /** * Compares float values for equality (within epsilon), or inequality. @@ -251,47 +268,50 @@ public class MathUtils { * @param a the first float value * @param b the second float value * @param epsilon the precision within which two float values will be considered equal - * @return -1 if a is greater than b, 0 if a is equal to be within epsilon, 1 if b is greater than a. + * @return -1 if a is greater than b, 0 if a is equal to be within epsilon, 1 if b is greater than a. */ - public static byte compareFloats(float a, float b, float epsilon) - { - if (Math.abs(a - b) < epsilon) { return 0; } - if (a > b) { return -1; } + public static byte compareFloats(float a, float b, float epsilon) { + if (Math.abs(a - b) < epsilon) { + return 0; + } + if (a > b) { + return -1; + } return 1; } - public static double NormalDistribution(double mean, double sd, double x) - { - double a = 1.0 / (sd*Math.sqrt(2.0 * Math.PI)); - double b = Math.exp(-1.0 * (Math.pow(x - mean,2.0)/(2.0 * sd * sd))); + public static double NormalDistribution(double mean, double sd, double x) { + double a = 1.0 / (sd * Math.sqrt(2.0 * Math.PI)); + double b = Math.exp(-1.0 * (Math.pow(x - mean, 2.0) / (2.0 * sd * sd))); return a * b; } - public static double binomialCoefficient (int n, int k) { + public static double binomialCoefficient(int n, int k) { return Math.pow(10, log10BinomialCoefficient(n, k)); } + /** * Computes a binomial probability. This is computed using the formula - * - * B(k; n; p) = [ n! / ( k! (n - k)! ) ] (p^k)( (1-p)^k ) - * + *

+ * B(k; n; p) = [ n! / ( k! (n - k)! ) ] (p^k)( (1-p)^k ) + *

* where n is the number of trials, k is the number of successes, and p is the probability of success * - * @param n number of Bernoulli trials - * @param k number of successes - * @param p probability of success - * - * @return the binomial probability of the specified configuration. Computes values down to about 1e-237. + * @param n number of Bernoulli trials + * @param k number of successes + * @param p probability of success + * @return the binomial probability of the specified configuration. Computes values down to about 1e-237. */ - public static double binomialProbability (int n, int k, double p) { + public static double binomialProbability(int n, int k, double p) { return Math.pow(10, log10BinomialProbability(n, k, Math.log10(p))); } /** * Performs the cumulative sum of binomial probabilities, where the probability calculation is done in log space. - * @param start - start of the cumulant sum (over hits) - * @param end - end of the cumulant sum (over hits) - * @param total - number of attempts for the number of hits + * + * @param start - start of the cumulant sum (over hits) + * @param end - end of the cumulant sum (over hits) + * @param total - number of attempts for the number of hits * @param probHit - probability of a successful hit * @return - returns the cumulative probability */ @@ -300,11 +320,11 @@ public class MathUtils { double prevProb; BigDecimal probCache = BigDecimal.ZERO; - for(int hits = start; hits < end; hits++) { + for (int hits = start; hits < end; hits++) { prevProb = cumProb; double probability = binomialProbability(total, hits, probHit); cumProb += probability; - if ( probability > 0 && cumProb - prevProb < probability/2 ) { // loss of precision + if (probability > 0 && cumProb - prevProb < probability / 2) { // loss of precision probCache = probCache.add(new BigDecimal(prevProb)); cumProb = 0.0; hits--; // repeat loop @@ -314,20 +334,20 @@ public class MathUtils { return probCache.add(new BigDecimal(cumProb)).doubleValue(); } - + /** * Computes a multinomial coefficient efficiently avoiding overflow even for large numbers. * This is computed using the formula: - * - * M(x1,x2,...,xk; n) = [ n! / (x1! x2! ... xk!) ] - * + *

+ * M(x1,x2,...,xk; n) = [ n! / (x1! x2! ... xk!) ] + *

* where xi represents the number of times outcome i was observed, n is the number of total observations. * In this implementation, the value of n is inferred as the sum over i of xi. * - * @param k an int[] of counts, where each element represents the number of times a certain outcome was observed - * @return the multinomial of the specified configuration. + * @param k an int[] of counts, where each element represents the number of times a certain outcome was observed + * @return the multinomial of the specified configuration. */ - public static double multinomialCoefficient (int [] k) { + public static double multinomialCoefficient(int[] k) { int n = 0; for (int xi : k) { n += xi; @@ -339,37 +359,38 @@ public class MathUtils { /** * Computes a multinomial probability efficiently avoiding overflow even for large numbers. * This is computed using the formula: - * - * M(x1,x2,...,xk; n; p1,p2,...,pk) = [ n! / (x1! x2! ... xk!) ] (p1^x1)(p2^x2)(...)(pk^xk) - * + *

+ * M(x1,x2,...,xk; n; p1,p2,...,pk) = [ n! / (x1! x2! ... xk!) ] (p1^x1)(p2^x2)(...)(pk^xk) + *

* where xi represents the number of times outcome i was observed, n is the number of total observations, and * pi represents the probability of the i-th outcome to occur. In this implementation, the value of n is * inferred as the sum over i of xi. * - * @param k an int[] of counts, where each element represents the number of times a certain outcome was observed - * @param p a double[] of probabilities, where each element represents the probability a given outcome can occur - * @return the multinomial probability of the specified configuration. + * @param k an int[] of counts, where each element represents the number of times a certain outcome was observed + * @param p a double[] of probabilities, where each element represents the probability a given outcome can occur + * @return the multinomial probability of the specified configuration. */ - public static double multinomialProbability (int[] k, double[] p) { + public static double multinomialProbability(int[] k, double[] p) { if (p.length != k.length) throw new UserException.BadArgumentValue("p and k", "Array of log10 probabilities must have the same size as the array of number of sucesses: " + p.length + ", " + k.length); int n = 0; - double [] log10P = new double[p.length]; - for (int i=0; i array[maxI] ) + for (int i = 0; i < array.length; i++) { + if (maxI == -1 || array[i] > array[maxI]) maxI = i; } @@ -532,11 +554,11 @@ public class MathUtils { } public static int maxElementIndex(int[] array) { - if ( array == null ) throw new IllegalArgumentException("Array cannot be null!"); + if (array == null) throw new IllegalArgumentException("Array cannot be null!"); int maxI = -1; - for ( int i = 0; i < array.length; i++ ) { - if ( maxI == -1 || array[i] > array[maxI] ) + for (int i = 0; i < array.length; i++) { + if (maxI == -1 || array[i] > array[maxI]) maxI = i; } @@ -556,11 +578,11 @@ public class MathUtils { } public static int minElementIndex(double[] array) { - if ( array == null ) throw new IllegalArgumentException("Array cannot be null!"); + if (array == null) throw new IllegalArgumentException("Array cannot be null!"); int minI = -1; - for ( int i = 0; i < array.length; i++ ) { - if ( minI == -1 || array[i] < array[minI] ) + for (int i = 0; i < array.length; i++) { + if (minI == -1 || array[i] < array[minI]) minI = i; } @@ -568,32 +590,32 @@ public class MathUtils { } public static int minElementIndex(byte[] array) { - if ( array == null ) throw new IllegalArgumentException("Array cannot be null!"); + if (array == null) throw new IllegalArgumentException("Array cannot be null!"); int minI = -1; - for ( int i = 0; i < array.length; i++ ) { - if ( minI == -1 || array[i] < array[minI] ) + for (int i = 0; i < array.length; i++) { + if (minI == -1 || array[i] < array[minI]) minI = i; } return minI; - } + } public static int arrayMaxInt(List array) { - if ( array == null ) throw new IllegalArgumentException("Array cannot be null!"); - if ( array.size() == 0 ) throw new IllegalArgumentException("Array size cannot be 0!"); + if (array == null) throw new IllegalArgumentException("Array cannot be null!"); + if (array.size() == 0) throw new IllegalArgumentException("Array size cannot be 0!"); int m = array.get(0); - for ( int e : array ) m = Math.max(m, e); + for (int e : array) m = Math.max(m, e); return m; } public static double arrayMaxDouble(List array) { - if ( array == null ) throw new IllegalArgumentException("Array cannot be null!"); - if ( array.size() == 0 ) throw new IllegalArgumentException("Array size cannot be 0!"); + if (array == null) throw new IllegalArgumentException("Array cannot be null!"); + if (array.size() == 0) throw new IllegalArgumentException("Array size cannot be 0!"); double m = array.get(0); - for ( double e : array ) m = Math.max(m, e); + for (double e : array) m = Math.max(m, e); return m; } @@ -636,7 +658,7 @@ public class MathUtils { for (byte v : vals) { sum += v; } - return (byte) Math.floor(sum/vals.length); + return (byte) Math.floor(sum / vals.length); } public static double averageDouble(List vals) { @@ -749,7 +771,9 @@ public class MathUtils { } - /** Draw N random elements from list. */ + /** + * Draw N random elements from list. + */ public static List randomSubset(List list, int N) { if (list.size() <= N) { return list; @@ -770,6 +794,25 @@ public class MathUtils { return ans; } + /** + * Draw N random elements from an array. + * + * @param array your objects + * @param n number of elements to select at random from the list + * @return a new list with the N randomly chosen elements from list + */ + @Requires({"array != null", "n>=0"}) + @Ensures({"result != null", "result.length == Math.min(n, array.length)"}) + public static Object[] randomSubset(final Object[] array, final int n) { + if (array.length <= n) + return array.clone(); + + Object[] shuffledArray = arrayShuffle(array); + Object[] result = new Object[n]; + System.arraycopy(shuffledArray, 0, result, 0, n); + return result; + } + public static double percentage(double x, double base) { return (base > 0 ? (x / base) * 100.0 : 0); } @@ -799,7 +842,7 @@ public class MathUtils { return count; } - public static int countOccurrences(byte element, byte [] array) { + public static int countOccurrences(byte element, byte[] array) { int count = 0; for (byte y : array) { if (element == y) @@ -814,13 +857,13 @@ public class MathUtils { * Better than sorting if N (number of elements to return) is small * * @param array the array - * @param n number of top elements to return + * @param n number of top elements to return * @return the n larger elements of the array */ - public static Collection getNMaxElements(double [] array, int n) { + public static Collection getNMaxElements(double[] array, int n) { ArrayList maxN = new ArrayList(n); double lastMax = Double.MAX_VALUE; - for (int i=0; i sampleIndicesWithReplacement(int n, int k) { - ArrayList chosen_balls = new ArrayList (k); - for (int i=0; i< k; i++) { + ArrayList chosen_balls = new ArrayList(k); + for (int i = 0; i < k; i++) { //Integer chosen_ball = balls[rand.nextInt(k)]; chosen_balls.add(GenomeAnalysisEngine.getRandomGenerator().nextInt(n)); //balls.remove(chosen_ball); @@ -872,11 +915,11 @@ public class MathUtils { /** * Given a list of indices into a list, return those elements of the list with the possibility of drawing list elements multiple times - - * @param indices the list of indices for elements to extract - * @param list the list from which the elements should be extracted - * @param the template type of the ArrayList - * @return a new ArrayList consisting of the elements at the specified indices + * + * @param indices the list of indices for elements to extract + * @param list the list from which the elements should be extracted + * @param the template type of the ArrayList + * @return a new ArrayList consisting of the elements at the specified indices */ static public ArrayList sliceListByIndices(List indices, List list) { ArrayList subset = new ArrayList(); @@ -898,18 +941,18 @@ public class MathUtils { ArrayList equalToX = new ArrayList(); ArrayList greaterThanX = new ArrayList(); - for(Comparable y : list) { - if(x.compareTo(y) > 0) { + for (Comparable y : list) { + if (x.compareTo(y) > 0) { lessThanX.add(y); - } else if(x.compareTo(y) < 0) { + } else if (x.compareTo(y) < 0) { greaterThanX.add(y); } else equalToX.add(y); } - if(lessThanX.size() > orderStat) + if (lessThanX.size() > orderStat) return orderStatisticSearch(orderStat, lessThanX); - else if(lessThanX.size() + equalToX.size() >= orderStat) + else if (lessThanX.size() + equalToX.size() >= orderStat) return orderStat; else return orderStatisticSearch(orderStat - lessThanX.size() - equalToX.size(), greaterThanX); @@ -918,7 +961,7 @@ public class MathUtils { public static Object getMedian(List list) { - return orderStatisticSearch((int) Math.ceil(list.size()/2), list); + return orderStatisticSearch((int) Math.ceil(list.size() / 2), list); } public static byte getQScoreOrderStatistic(List reads, List offsets, int k) { @@ -926,7 +969,7 @@ public class MathUtils { // list index maps to a q-score only through the offset index // returns the kth-largest q-score. - if( reads.size() == 0) { + if (reads.size() == 0) { return 0; } @@ -938,15 +981,15 @@ public class MathUtils { final byte qk = reads.get(k).getBaseQualities()[offsets.get(k)]; - for(int iter = 0; iter < reads.size(); iter ++) { + for (int iter = 0; iter < reads.size(); iter++) { SAMRecord read = reads.get(iter); int offset = offsets.get(iter); byte quality = read.getBaseQualities()[offset]; - if(quality < qk) { + if (quality < qk) { lessThanQReads.add(read); lessThanQOffsets.add(offset); - } else if(quality > qk) { + } else if (quality > qk) { greaterThanQReads.add(read); greaterThanQOffsets.add(offset); } else { @@ -954,9 +997,9 @@ public class MathUtils { } } - if(lessThanQReads.size() > k) + if (lessThanQReads.size() > k) return getQScoreOrderStatistic(lessThanQReads, lessThanQOffsets, k); - else if(equalToQReads.size() + lessThanQReads.size() >= k) + else if (equalToQReads.size() + lessThanQReads.size() >= k) return qk; else return getQScoreOrderStatistic(greaterThanQReads, greaterThanQOffsets, k - lessThanQReads.size() - equalToQReads.size()); @@ -964,10 +1007,11 @@ public class MathUtils { } public static byte getQScoreMedian(List reads, List offsets) { - return getQScoreOrderStatistic(reads, offsets, (int)Math.floor(reads.size()/2.)); + return getQScoreOrderStatistic(reads, offsets, (int) Math.floor(reads.size() / 2.)); } - /** A utility class that computes on the fly average and standard deviation for a stream of numbers. + /** + * A utility class that computes on the fly average and standard deviation for a stream of numbers. * The number of observations does not have to be known in advance, and can be also very big (so that * it could overflow any naive summation-based scheme or cause loss of precision). * Instead, adding a new number observed @@ -983,20 +1027,31 @@ public class MathUtils { public void add(double obs) { obs_count++; double oldMean = mean; - mean += ( obs - mean ) / obs_count; // update mean - s += ( obs - oldMean ) * ( obs - mean ); + mean += (obs - mean) / obs_count; // update mean + s += (obs - oldMean) * (obs - mean); } public void addAll(Collection col) { - for ( Number o : col ) { + for (Number o : col) { add(o.doubleValue()); } } - public double mean() { return mean; } - public double stddev() { return Math.sqrt(s/(obs_count - 1)); } - public double var() { return s/(obs_count - 1); } - public long observationCount() { return obs_count; } + public double mean() { + return mean; + } + + public double stddev() { + return Math.sqrt(s / (obs_count - 1)); + } + + public double var() { + return s / (obs_count - 1); + } + + public long observationCount() { + return obs_count; + } public RunningAverage clone() { RunningAverage ra = new RunningAverage(); @@ -1007,71 +1062,86 @@ public class MathUtils { } public void merge(RunningAverage other) { - if ( this.obs_count > 0 || other.obs_count > 0 ) { // if we have any observations at all - this.mean = ( this.mean * this.obs_count + other.mean * other.obs_count ) / ( this.obs_count + other.obs_count ); + if (this.obs_count > 0 || other.obs_count > 0) { // if we have any observations at all + this.mean = (this.mean * this.obs_count + other.mean * other.obs_count) / (this.obs_count + other.obs_count); this.s += other.s; } this.obs_count += other.obs_count; } } - + // // useful common utility routines // - public static double rate(long n, long d) { return n / (1.0 * Math.max(d, 1)); } - public static double rate(int n, int d) { return n / (1.0 * Math.max(d, 1)); } + public static double rate(long n, long d) { + return n / (1.0 * Math.max(d, 1)); + } - public static long inverseRate(long n, long d) { return n == 0 ? 0 : d / Math.max(n, 1); } - public static long inverseRate(int n, int d) { return n == 0 ? 0 : d / Math.max(n, 1); } + public static double rate(int n, int d) { + return n / (1.0 * Math.max(d, 1)); + } - public static double ratio(int num, int denom) { return ((double)num) / (Math.max(denom, 1)); } - public static double ratio(long num, long denom) { return ((double)num) / (Math.max(denom, 1)); } + public static long inverseRate(long n, long d) { + return n == 0 ? 0 : d / Math.max(n, 1); + } + + public static long inverseRate(int n, int d) { + return n == 0 ? 0 : d / Math.max(n, 1); + } + + public static double ratio(int num, int denom) { + return ((double) num) / (Math.max(denom, 1)); + } + + public static double ratio(long num, long denom) { + return ((double) num) / (Math.max(denom, 1)); + } public static final double[] log10Cache; public static final double[] jacobianLogTable; public static final int JACOBIAN_LOG_TABLE_SIZE = 101; public static final double JACOBIAN_LOG_TABLE_STEP = 0.1; - public static final double INV_JACOBIAN_LOG_TABLE_STEP = 1.0/JACOBIAN_LOG_TABLE_STEP; + public static final double INV_JACOBIAN_LOG_TABLE_STEP = 1.0 / JACOBIAN_LOG_TABLE_STEP; public static final double MAX_JACOBIAN_TOLERANCE = 10.0; private static final int MAXN = 11000; private static final int LOG10_CACHE_SIZE = 4 * MAXN; // we need to be able to go up to 2*(2N) when calculating some of the coefficients static { log10Cache = new double[LOG10_CACHE_SIZE]; - jacobianLogTable = new double[JACOBIAN_LOG_TABLE_SIZE]; + jacobianLogTable = new double[JACOBIAN_LOG_TABLE_SIZE]; log10Cache[0] = Double.NEGATIVE_INFINITY; - for (int k=1; k < LOG10_CACHE_SIZE; k++) + for (int k = 1; k < LOG10_CACHE_SIZE; k++) log10Cache[k] = Math.log10(k); - for (int k=0; k < JACOBIAN_LOG_TABLE_SIZE; k++) { - jacobianLogTable[k] = Math.log10(1.0+Math.pow(10.0,-((double)k) - * JACOBIAN_LOG_TABLE_STEP)); + for (int k = 0; k < JACOBIAN_LOG_TABLE_SIZE; k++) { + jacobianLogTable[k] = Math.log10(1.0 + Math.pow(10.0, -((double) k) + * JACOBIAN_LOG_TABLE_STEP)); - } + } } static public double softMax(final double[] vec) { double acc = vec[0]; - for (int k=1; k < vec.length; k++) - acc = softMax(acc,vec[k]); + for (int k = 1; k < vec.length; k++) + acc = softMax(acc, vec[k]); return acc; } static public double max(double x0, double x1, double x2) { - double a = Math.max(x0,x1); - return Math.max(a,x2); + double a = Math.max(x0, x1); + return Math.max(a, x2); } - - static public double softMax(final double x0, final double x1, final double x2) { - // compute naively log10(10^x[0] + 10^x[1]+...) - // return Math.log10(MathUtils.sumLog10(vec)); - // better approximation: do Jacobian logarithm function on data pairs - double a = softMax(x0,x1); - return softMax(a,x2); + static public double softMax(final double x0, final double x1, final double x2) { + // compute naively log10(10^x[0] + 10^x[1]+...) + // return Math.log10(MathUtils.sumLog10(vec)); + + // better approximation: do Jacobian logarithm function on data pairs + double a = softMax(x0, x1); + return softMax(a, x2); } static public double softMax(final double x, final double y) { @@ -1084,49 +1154,50 @@ public class MathUtils { // slow exact version: // return Math.log10(Math.pow(10.0,x) + Math.pow(10.0,y)); - double diff = x-y; + double diff = x - y; if (diff > MAX_JACOBIAN_TOLERANCE) return x; else if (diff < -MAX_JACOBIAN_TOLERANCE) return y; else if (diff >= 0) { - int ind = (int)(diff*INV_JACOBIAN_LOG_TABLE_STEP+0.5); + int ind = (int) (diff * INV_JACOBIAN_LOG_TABLE_STEP + 0.5); return x + jacobianLogTable[ind]; - } - else { - int ind = (int)(-diff*INV_JACOBIAN_LOG_TABLE_STEP+0.5); + } else { + int ind = (int) (-diff * INV_JACOBIAN_LOG_TABLE_STEP + 0.5); return y + jacobianLogTable[ind]; } } - public static double phredScaleToProbability (byte q) { - return Math.pow(10,(-q)/10.0); + public static double phredScaleToProbability(byte q) { + return Math.pow(10, (-q) / 10.0); } - public static double phredScaleToLog10Probability (byte q) { - return ((-q)/10.0); + public static double phredScaleToLog10Probability(byte q) { + return ((-q) / 10.0); } /** * Returns the phred scaled value of probability p + * * @param p probability (between 0 and 1). * @return phred scaled probability of p */ - public static byte probabilityToPhredScale (double p) { + public static byte probabilityToPhredScale(double p) { return (byte) ((-10) * Math.log10(p)); } - public static double log10ProbabilityToPhredScale (double log10p) { + public static double log10ProbabilityToPhredScale(double log10p) { return (-10) * log10p; } /** * Converts LN to LOG10 + * * @param ln log(x) * @return log10(x) */ - public static double lnToLog10 (double ln) { + public static double lnToLog10(double ln) { return ln * Math.log10(Math.exp(1)); } @@ -1134,169 +1205,190 @@ public class MathUtils { * Constants to simplify the log gamma function calculation. */ private static final double - zero = 0.0, - one = 1.0, - half = .5, - a0 = 7.72156649015328655494e-02, - a1 = 3.22467033424113591611e-01, - a2 = 6.73523010531292681824e-02, - a3 = 2.05808084325167332806e-02, - a4 = 7.38555086081402883957e-03, - a5 = 2.89051383673415629091e-03, - a6 = 1.19270763183362067845e-03, - a7 = 5.10069792153511336608e-04, - a8 = 2.20862790713908385557e-04, - a9 = 1.08011567247583939954e-04, - a10 = 2.52144565451257326939e-05, - a11 = 4.48640949618915160150e-05, - tc = 1.46163214496836224576e+00, - tf = -1.21486290535849611461e-01, - tt = -3.63867699703950536541e-18, - t0 = 4.83836122723810047042e-01, - t1 = -1.47587722994593911752e-01, - t2 = 6.46249402391333854778e-02, - t3 = -3.27885410759859649565e-02, - t4 = 1.79706750811820387126e-02, - t5 = -1.03142241298341437450e-02, - t6 = 6.10053870246291332635e-03, - t7 = -3.68452016781138256760e-03, - t8 = 2.25964780900612472250e-03, - t9 = -1.40346469989232843813e-03, - t10 = 8.81081882437654011382e-04, - t11 = -5.38595305356740546715e-04, - t12 = 3.15632070903625950361e-04, - t13 = -3.12754168375120860518e-04, - t14 = 3.35529192635519073543e-04, - u0 = -7.72156649015328655494e-02, - u1 = 6.32827064025093366517e-01, - u2 = 1.45492250137234768737e+00, - u3 = 9.77717527963372745603e-01, - u4 = 2.28963728064692451092e-01, - u5 = 1.33810918536787660377e-02, - v1 = 2.45597793713041134822e+00, - v2 = 2.12848976379893395361e+00, - v3 = 7.69285150456672783825e-01, - v4 = 1.04222645593369134254e-01, - v5 = 3.21709242282423911810e-03, - s0 = -7.72156649015328655494e-02, - s1 = 2.14982415960608852501e-01, - s2 = 3.25778796408930981787e-01, - s3 = 1.46350472652464452805e-01, - s4 = 2.66422703033638609560e-02, - s5 = 1.84028451407337715652e-03, - s6 = 3.19475326584100867617e-05, - r1 = 1.39200533467621045958e+00, - r2 = 7.21935547567138069525e-01, - r3 = 1.71933865632803078993e-01, - r4 = 1.86459191715652901344e-02, - r5 = 7.77942496381893596434e-04, - r6 = 7.32668430744625636189e-06, - w0 = 4.18938533204672725052e-01, - w1 = 8.33333333333329678849e-02, - w2 = -2.77777777728775536470e-03, - w3 = 7.93650558643019558500e-04, - w4 = -5.95187557450339963135e-04, - w5 = 8.36339918996282139126e-04, - w6 = -1.63092934096575273989e-03; + zero = 0.0, + one = 1.0, + half = .5, + a0 = 7.72156649015328655494e-02, + a1 = 3.22467033424113591611e-01, + a2 = 6.73523010531292681824e-02, + a3 = 2.05808084325167332806e-02, + a4 = 7.38555086081402883957e-03, + a5 = 2.89051383673415629091e-03, + a6 = 1.19270763183362067845e-03, + a7 = 5.10069792153511336608e-04, + a8 = 2.20862790713908385557e-04, + a9 = 1.08011567247583939954e-04, + a10 = 2.52144565451257326939e-05, + a11 = 4.48640949618915160150e-05, + tc = 1.46163214496836224576e+00, + tf = -1.21486290535849611461e-01, + tt = -3.63867699703950536541e-18, + t0 = 4.83836122723810047042e-01, + t1 = -1.47587722994593911752e-01, + t2 = 6.46249402391333854778e-02, + t3 = -3.27885410759859649565e-02, + t4 = 1.79706750811820387126e-02, + t5 = -1.03142241298341437450e-02, + t6 = 6.10053870246291332635e-03, + t7 = -3.68452016781138256760e-03, + t8 = 2.25964780900612472250e-03, + t9 = -1.40346469989232843813e-03, + t10 = 8.81081882437654011382e-04, + t11 = -5.38595305356740546715e-04, + t12 = 3.15632070903625950361e-04, + t13 = -3.12754168375120860518e-04, + t14 = 3.35529192635519073543e-04, + u0 = -7.72156649015328655494e-02, + u1 = 6.32827064025093366517e-01, + u2 = 1.45492250137234768737e+00, + u3 = 9.77717527963372745603e-01, + u4 = 2.28963728064692451092e-01, + u5 = 1.33810918536787660377e-02, + v1 = 2.45597793713041134822e+00, + v2 = 2.12848976379893395361e+00, + v3 = 7.69285150456672783825e-01, + v4 = 1.04222645593369134254e-01, + v5 = 3.21709242282423911810e-03, + s0 = -7.72156649015328655494e-02, + s1 = 2.14982415960608852501e-01, + s2 = 3.25778796408930981787e-01, + s3 = 1.46350472652464452805e-01, + s4 = 2.66422703033638609560e-02, + s5 = 1.84028451407337715652e-03, + s6 = 3.19475326584100867617e-05, + r1 = 1.39200533467621045958e+00, + r2 = 7.21935547567138069525e-01, + r3 = 1.71933865632803078993e-01, + r4 = 1.86459191715652901344e-02, + r5 = 7.77942496381893596434e-04, + r6 = 7.32668430744625636189e-06, + w0 = 4.18938533204672725052e-01, + w1 = 8.33333333333329678849e-02, + w2 = -2.77777777728775536470e-03, + w3 = 7.93650558643019558500e-04, + w4 = -5.95187557450339963135e-04, + w5 = 8.36339918996282139126e-04, + w6 = -1.63092934096575273989e-03; /** * Efficient rounding functions to simplify the log gamma function calculation - * double to long with 32 bit shift + * double to long with 32 bit shift */ - private static final int HI (double x) { - return (int)(Double.doubleToLongBits(x) >> 32); + private static final int HI(double x) { + return (int) (Double.doubleToLongBits(x) >> 32); } /** * Efficient rounding functions to simplify the log gamma function calculation - * double to long without shift + * double to long without shift */ - private static final int LO (double x) { - return (int)Double.doubleToLongBits(x); + private static final int LO(double x) { + return (int) Double.doubleToLongBits(x); } /** * Most efficent implementation of the lnGamma (FDLIBM) * Use via the log10Gamma wrapper method. */ - private static double lnGamma (double x) { - double t,y,z,p,p1,p2,p3,q,r,w; + private static double lnGamma(double x) { + double t, y, z, p, p1, p2, p3, q, r, w; int i; int hx = HI(x); int lx = LO(x); /* purge off +-inf, NaN, +-0, and negative arguments */ - int ix = hx&0x7fffffff; + int ix = hx & 0x7fffffff; if (ix >= 0x7ff00000) return Double.POSITIVE_INFINITY; - if ((ix|lx)==0 || hx < 0) return Double.NaN; - if (ix<0x3b900000) { /* |x|<2**-70, return -log(|x|) */ + if ((ix | lx) == 0 || hx < 0) return Double.NaN; + if (ix < 0x3b900000) { /* |x|<2**-70, return -log(|x|) */ return -Math.log(x); } /* purge off 1 and 2 */ - if((((ix-0x3ff00000)|lx)==0)||(((ix-0x40000000)|lx)==0)) r = 0; - /* for x < 2.0 */ - else if(ix<0x40000000) { - if(ix<=0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ + if ((((ix - 0x3ff00000) | lx) == 0) || (((ix - 0x40000000) | lx) == 0)) r = 0; + /* for x < 2.0 */ + else if (ix < 0x40000000) { + if (ix <= 0x3feccccc) { /* lgamma(x) = lgamma(x+1)-log(x) */ r = -Math.log(x); - if(ix>=0x3FE76944) {y = one-x; i= 0;} - else if(ix>=0x3FCDA661) {y= x-(tc-one); i=1;} - else {y = x; i=2;} + if (ix >= 0x3FE76944) { + y = one - x; + i = 0; + } else if (ix >= 0x3FCDA661) { + y = x - (tc - one); + i = 1; + } else { + y = x; + i = 2; + } } else { r = zero; - if(ix>=0x3FFBB4C3) {y=2.0-x;i=0;} /* [1.7316,2] */ - else if(ix>=0x3FF3B4C4) {y=x-tc;i=1;} /* [1.23,1.73] */ - else {y=x-one;i=2;} + if (ix >= 0x3FFBB4C3) { + y = 2.0 - x; + i = 0; + } /* [1.7316,2] */ else if (ix >= 0x3FF3B4C4) { + y = x - tc; + i = 1; + } /* [1.23,1.73] */ else { + y = x - one; + i = 2; + } } - switch(i) { - case 0: - z = y*y; - p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))); - p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))); - p = y*p1+p2; - r += (p-0.5*y); break; - case 1: - z = y*y; - w = z*y; - p1 = t0+w*(t3+w*(t6+w*(t9 +w*t12))); /* parallel comp */ - p2 = t1+w*(t4+w*(t7+w*(t10+w*t13))); - p3 = t2+w*(t5+w*(t8+w*(t11+w*t14))); - p = z*p1-(tt-w*(p2+y*p3)); - r += (tf + p); break; - case 2: - p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))); - p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))); - r += (-0.5*y + p1/p2); + switch (i) { + case 0: + z = y * y; + p1 = a0 + z * (a2 + z * (a4 + z * (a6 + z * (a8 + z * a10)))); + p2 = z * (a1 + z * (a3 + z * (a5 + z * (a7 + z * (a9 + z * a11))))); + p = y * p1 + p2; + r += (p - 0.5 * y); + break; + case 1: + z = y * y; + w = z * y; + p1 = t0 + w * (t3 + w * (t6 + w * (t9 + w * t12))); /* parallel comp */ + p2 = t1 + w * (t4 + w * (t7 + w * (t10 + w * t13))); + p3 = t2 + w * (t5 + w * (t8 + w * (t11 + w * t14))); + p = z * p1 - (tt - w * (p2 + y * p3)); + r += (tf + p); + break; + case 2: + p1 = y * (u0 + y * (u1 + y * (u2 + y * (u3 + y * (u4 + y * u5))))); + p2 = one + y * (v1 + y * (v2 + y * (v3 + y * (v4 + y * v5)))); + r += (-0.5 * y + p1 / p2); } - } - else if(ix<0x40200000) { /* x < 8.0 */ - i = (int)x; + } else if (ix < 0x40200000) { /* x < 8.0 */ + i = (int) x; t = zero; - y = x-(double)i; - p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))); - q = one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))); - r = half*y+p/q; - z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ - switch(i) { - case 7: z *= (y+6.0); /* FALLTHRU */ - case 6: z *= (y+5.0); /* FALLTHRU */ - case 5: z *= (y+4.0); /* FALLTHRU */ - case 4: z *= (y+3.0); /* FALLTHRU */ - case 3: z *= (y+2.0); /* FALLTHRU */ - r += Math.log(z); break; + y = x - (double) i; + p = y * (s0 + y * (s1 + y * (s2 + y * (s3 + y * (s4 + y * (s5 + y * s6)))))); + q = one + y * (r1 + y * (r2 + y * (r3 + y * (r4 + y * (r5 + y * r6))))); + r = half * y + p / q; + z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ + switch (i) { + case 7: + z *= (y + 6.0); /* FALLTHRU */ + case 6: + z *= (y + 5.0); /* FALLTHRU */ + case 5: + z *= (y + 4.0); /* FALLTHRU */ + case 4: + z *= (y + 3.0); /* FALLTHRU */ + case 3: + z *= (y + 2.0); /* FALLTHRU */ + r += Math.log(z); + break; } /* 8.0 <= x < 2**58 */ } else if (ix < 0x43900000) { t = Math.log(x); - z = one/x; - y = z*z; - w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))); - r = (x-half)*(t-one)+w; + z = one / x; + y = z * z; + w = w0 + z * (w1 + y * (w2 + y * (w3 + y * (w4 + y * (w5 + y * w6))))); + r = (x - half) * (t - one) + w; } else /* 2**58 <= x <= inf */ - r = x*(Math.log(x)-one); + r = x * (Math.log(x) - one); return r; } @@ -1308,7 +1400,7 @@ public class MathUtils { * @param x the x parameter * @return the log10 of the gamma function at x. */ - public static double log10Gamma (double x) { + public static double log10Gamma(double x) { return lnToLog10(lnGamma(x)); } @@ -1320,13 +1412,13 @@ public class MathUtils { * @param k number of successes * @return the log10 of the binomial coefficient */ - public static double log10BinomialCoefficient (int n, int k) { - return log10Gamma(n+1) - log10Gamma(k+1) - log10Gamma(n-k+1); + public static double log10BinomialCoefficient(int n, int k) { + return log10Gamma(n + 1) - log10Gamma(k + 1) - log10Gamma(n - k + 1); } - public static double log10BinomialProbability (int n, int k, double log10p) { - double log10OneMinusP = Math.log10(1-Math.pow(10,log10p)); - return log10BinomialCoefficient(n, k) + log10p*k + log10OneMinusP*(n-k); + public static double log10BinomialProbability(int n, int k, double log10p) { + double log10OneMinusP = Math.log10(1 - Math.pow(10, log10p)); + return log10BinomialCoefficient(n, k) + log10p * k + log10OneMinusP * (n - k); } @@ -1338,38 +1430,74 @@ public class MathUtils { * @param k array of any size with the number of successes for each grouping (k1, k2, k3, ..., km) * @return */ - public static double log10MultinomialCoefficient (int n, int [] k) { + public static double log10MultinomialCoefficient(int n, int[] k) { double denominator = 0.0; for (int x : k) { - denominator += log10Gamma(x+1); + denominator += log10Gamma(x + 1); } - return log10Gamma(n+1) - denominator; + return log10Gamma(n + 1) - denominator; } /** * Computes the log10 of the multinomial distribution probability given a vector * of log10 probabilities. Designed to prevent overflows even with very large numbers. * - * @param n number of trials - * @param k array of number of successes for each possibility + * @param n number of trials + * @param k array of number of successes for each possibility * @param log10p array of log10 probabilities * @return */ - public static double log10MultinomialProbability (int n, int [] k, double [] log10p) { + public static double log10MultinomialProbability(int n, int[] k, double[] log10p) { if (log10p.length != k.length) throw new UserException.BadArgumentValue("p and k", "Array of log10 probabilities must have the same size as the array of number of sucesses: " + log10p.length + ", " + k.length); double log10Prod = 0.0; - for (int i=0; i set = new HashSet(); + set.addAll(Arrays.asList(expected)); + set.removeAll(Arrays.asList(actual)); + return set.isEmpty(); + } + + + private void p (Object []x) { + for (Object v: x) + System.out.print((Integer) v + " "); + System.out.println(); + } } From 21ae3ef5f96e4b24bca21ea86d79dc7ed4b7f108 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Sat, 31 Dec 2011 13:56:41 -0500 Subject: [PATCH 06/29] Added downsampling support to ReduceReads * Downsampling is now a parameter to the walker with default value of 0 (no downsampling) * Downsampling selects reads at random at the variant region window and strives to achieve uniform coverage if possible around the desired downsampling value. * Added integration test --- .../sting/utils/sam/GATKSAMRecord.java | 6 + .../sting/utils/sam/ReadUtils.java | 113 ++++++++++++++++++ 2 files changed, 119 insertions(+) diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java index 5e0802fa6..913548ecc 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/GATKSAMRecord.java @@ -183,6 +183,12 @@ public class GATKSAMRecord extends BAMRecord { return getReducedReadCounts() != null; } + /** + * The number of bases corresponding the i'th base of the reduced read. + * + * @param i the read based coordinate inside the read + * @return the number of bases corresponding to the i'th base of the reduced read + */ public final byte getReducedCount(final int i) { byte firstCount = getReducedReadCounts()[0]; byte offsetCount = getReducedReadCounts()[i]; diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java index d52814ef7..7fa2f6230 100755 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java @@ -29,6 +29,7 @@ import com.google.java.contract.Ensures; import com.google.java.contract.Requires; import net.sf.samtools.*; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; @@ -531,4 +532,116 @@ public class ReadUtils { return new Pair(false, null); } + /** + * Returns the coverage distribution of a list of reads within the desired region. + * + * See getCoverageDistributionOfRead for information on how the coverage is calculated. + * + * @param list the list of reads covering the region + * @param startLocation the first reference coordinate of the region (inclusive) + * @param stopLocation the last reference coordinate of the region (inclusive) + * @return an array with the coverage of each position from startLocation to stopLocation + */ + public static int [] getCoverageDistributionOfReads(List list, int startLocation, int stopLocation) { + int [] totalCoverage = new int[stopLocation - startLocation + 1]; + + for (GATKSAMRecord read : list) { + int [] readCoverage = getCoverageDistributionOfRead(read, startLocation, stopLocation); + totalCoverage = MathUtils.addArrays(totalCoverage, readCoverage); + } + + return totalCoverage; + } + + /** + * Returns the coverage distribution of a single read within the desired region. + * + * Note: This function counts DELETIONS as coverage (since the main purpose is to downsample + * reads for variant regions, and deletions count as variants) + * + * @param read the read to get the coverage distribution of + * @param startLocation the first reference coordinate of the region (inclusive) + * @param stopLocation the last reference coordinate of the region (inclusive) + * @return an array with the coverage of each position from startLocation to stopLocation + */ + public static int [] getCoverageDistributionOfRead(GATKSAMRecord read, int startLocation, int stopLocation) { + int [] coverage = new int[stopLocation - startLocation + 1]; + int refLocation = read.getSoftStart(); + for (CigarElement cigarElement : read.getCigar().getCigarElements()) { + switch (cigarElement.getOperator()) { + case S: + case M: + case EQ: + case N: + case X: + case D: + for (int i = 0; i < cigarElement.getLength(); i++) { + if (refLocation >= startLocation && refLocation <= stopLocation) { + int baseCount = read.isReducedRead() ? read.getReducedCount(refLocation - read.getSoftStart()) : 1; + coverage[refLocation - startLocation] += baseCount; // this may be a reduced read, so add the proper number of bases + } + refLocation++; + } + break; + + case P: + case I: + case H: + break; + } + + if (refLocation > stopLocation) + break; + } + return coverage; + } + + /** + * Makes association maps for the reads and loci coverage as described below : + * + * - First: locusToReadMap -- a HashMap that describes for each locus, which reads contribute to its coverage. + * Note: Locus is in reference coordinates. + * Example: Locus => {read1, read2, ..., readN} + * + * - Second: readToLocusMap -- a HashMap that describes for each read what loci it contributes to the coverage. + * Note: Locus is a boolean array, indexed from 0 (= startLocation) to N (= stopLocation), with true meaning it contributes to the coverage. + * Example: Read => {true, true, false, ... false} + * + * @param readList the list of reads to generate the association mappings + * @param startLocation the first reference coordinate of the region (inclusive) + * @param stopLocation the last reference coordinate of the region (inclusive) + * @return the two hashmaps described above + */ + public static Pair> , HashMap> getBothReadToLociMappings (List readList, int startLocation, int stopLocation) { + int arraySize = stopLocation - startLocation + 1; + + HashMap> locusToReadMap = new HashMap>(2*(stopLocation - startLocation + 1), 0.5f); + HashMap readToLocusMap = new HashMap(2*readList.size(), 0.5f); + + + for (int i = startLocation; i <= stopLocation; i++) + locusToReadMap.put(i, new HashSet()); // Initialize the locusToRead map with empty lists + + for (GATKSAMRecord read : readList) { + readToLocusMap.put(read, new Boolean[arraySize]); // Initialize the readToLocus map with empty arrays + + int [] readCoverage = getCoverageDistributionOfRead(read, startLocation, stopLocation); + + for (int i=0; i 0) { + // Update the hash for this locus + HashSet readSet = locusToReadMap.get(refLocation); + readSet.add(read); + + // Add this locus to the read hash + readToLocusMap.get(read)[refLocation - startLocation] = true; + } + else + // Update the boolean array with a 'no coverage' from this read to this locus + readToLocusMap.get(read)[refLocation-startLocation] = false; + } + } + return new Pair>, HashMap>(locusToReadMap, readToLocusMap); + } } From 4a208c7c06a55df1790d32b5de1c18608b12ddab Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Mon, 2 Jan 2012 18:26:31 -0500 Subject: [PATCH 08/29] Refactor of the downsampling machinery to accept different strategies * Implemented Adaptive downsampler * Added integration test * Added option to RRead scala script to choose downsampling strategy --- .../broadinstitute/sting/utils/MathUtils.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/public/java/src/org/broadinstitute/sting/utils/MathUtils.java b/public/java/src/org/broadinstitute/sting/utils/MathUtils.java index 4a3100a94..737f4bb5f 100644 --- a/public/java/src/org/broadinstitute/sting/utils/MathUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/MathUtils.java @@ -573,6 +573,10 @@ public class MathUtils { return array[minElementIndex(array)]; } + public static int arrayMin(int[] array) { + return array[minElementIndex(array)]; + } + public static byte arrayMin(byte[] array) { return array[minElementIndex(array)]; } @@ -601,6 +605,18 @@ public class MathUtils { return minI; } + public static int minElementIndex(int[] array) { + if (array == null) throw new IllegalArgumentException("Array cannot be null!"); + + int minI = -1; + for (int i = 0; i < array.length; i++) { + if (minI == -1 || array[i] < array[minI]) + minI = i; + } + + return minI; + } + public static int arrayMaxInt(List array) { if (array == null) throw new IllegalArgumentException("Array cannot be null!"); if (array.size() == 0) throw new IllegalArgumentException("Array size cannot be 0!"); From 3d4bf273de8e350d27b92ff8c5411a8e4485173e Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Mon, 2 Jan 2012 16:17:57 -0500 Subject: [PATCH 12/29] Added getPileupForReadGroups to ReadBackPileup * returns a pileup for all the read groups provided. * saves us from multiple calls to getPileup (which is very inefficient) --- .../pileup/AbstractReadBackedPileup.java | 36 +++++++++++++++++++ .../sting/utils/pileup/ReadBackedPileup.java | 8 +++++ 2 files changed, 44 insertions(+) diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java b/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java index 18051ce92..586b86490 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java @@ -526,6 +526,42 @@ public abstract class AbstractReadBackedPileup rgSet) { + if(pileupElementTracker instanceof PerSamplePileupElementTracker) { + PerSamplePileupElementTracker tracker = (PerSamplePileupElementTracker)pileupElementTracker; + PerSamplePileupElementTracker filteredTracker = new PerSamplePileupElementTracker(); + + for(final String sample: tracker.getSamples()) { + PileupElementTracker perSampleElements = tracker.getElements(sample); + AbstractReadBackedPileup pileup = createNewPileup(loc,perSampleElements).getPileupForReadGroups(rgSet); + if(pileup != null) + filteredTracker.addElements(sample,pileup.pileupElementTracker); + } + return filteredTracker.size()>0 ? (RBP)createNewPileup(loc,filteredTracker) : null; + } + else { + UnifiedPileupElementTracker filteredTracker = new UnifiedPileupElementTracker(); + for(PE p: pileupElementTracker) { + GATKSAMRecord read = p.getRead(); + if(rgSet != null && !rgSet.isEmpty()) { + if(read.getReadGroup() != null && rgSet.contains(read.getReadGroup().getReadGroupId())) + filteredTracker.add(p); + } + else { + if(read.getReadGroup() == null || read.getReadGroup().getReadGroupId() == null) + filteredTracker.add(p); + } + } + return filteredTracker.size()>0 ? (RBP)createNewPileup(loc,filteredTracker) : null; + } + } + @Override public RBP getPileupForLane(String laneID) { if(pileupElementTracker instanceof PerSamplePileupElementTracker) { diff --git a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java index 02767df7c..ccd9d509f 100644 --- a/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java +++ b/public/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java @@ -30,6 +30,7 @@ import org.broadinstitute.sting.utils.fragments.FragmentCollection; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import java.util.Collection; +import java.util.HashSet; import java.util.List; /** @@ -129,6 +130,13 @@ public interface ReadBackedPileup extends Iterable, HasGenomeLoca */ public ReadBackedPileup getPileupForReadGroup(String readGroupId); + /** + * Gets all the reads associated with a given read groups. + * @param rgSet Set of identifiers for the read group. + * @return A pileup containing only the reads in the given read groups. + */ + public ReadBackedPileup getPileupForReadGroups(final HashSet rgSet); + /** * Gets all reads in a given lane id. (Lane ID is the read group * id stripped of the last .XX sample identifier added by the GATK). From 055364d786a2fc1bb54b940b3186daead52590a9 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Tue, 3 Jan 2012 10:18:45 -0500 Subject: [PATCH 14/29] Always use full, three-part version numbers. Previously, the initial release of a new GATK version had a version number with only one part (eg., "1.4"). This could potentially mislead people into thinking it's the most recent revision of a release, instead of the least recent. Now, initial releases will have full, three-part version numbers (eg., "1.4-0-g472fc94") like everything else. --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index 2086d0c9a..7c81c1f20 100644 --- a/build.xml +++ b/build.xml @@ -215,7 +215,7 @@ - + From f3f01da1afee5390afa46431eeb7c697a67aa177 Mon Sep 17 00:00:00 2001 From: David Roazen Date: Tue, 3 Jan 2012 10:42:41 -0500 Subject: [PATCH 15/29] Enforce serial dependencies in RecalibrationWalkersIntegrationTest Some tests in this class were intermittently not being executed due to being randomly scheduled before tests whose results they depend on. Now the serial dependencies are enforced to avoid problematic orderings. --- .../RecalibrationWalkersIntegrationTest.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java index 3976231ef..65de6697b 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersIntegrationTest.java @@ -118,6 +118,9 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { Arrays.asList(md5)); executeTest("testTableRecalibrator1", spec); } + else { + throw new IllegalStateException("testTableRecalibrator1: paramsFile was null"); + } } @Test @@ -144,7 +147,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - @Test + @Test(dependsOnMethods = "testCountCovariates1") public void testTableRecalibratorMaxQ70() { HashMap e = new HashMap(); e.put( validationDataLocation + "NA12892.SLX.SRP000031.2009_06.selected.bam", "0b7123ae9f4155484b68e4a4f96c5504" ); @@ -170,6 +173,9 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { Arrays.asList(md5)); executeTest("testTableRecalibratorMaxQ70", spec); } + else { + throw new IllegalStateException("testTableRecalibratorMaxQ70: paramsFile was null"); + } } } @@ -199,7 +205,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - @Test + @Test(dependsOnMethods = "testCountCovariatesSolidIndelsRemoveRefBias") public void testTableRecalibratorSolidIndelsRemoveRefBias() { HashMap e = new HashMap(); e.put( validationDataLocation + "NA19240.chr1.BFAST.SOLID.bam", "2ad4c17ac3ed380071137e4e53a398a5" ); @@ -224,6 +230,9 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { Arrays.asList(md5)); executeTest("testTableRecalibratorSolidIndelsRemoveRefBias", spec); } + else { + throw new IllegalStateException("testTableRecalibratorSolidIndelsRemoveRefBias: paramsFile was null"); + } } } @@ -305,7 +314,7 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { } } - @Test + @Test(dependsOnMethods = "testCountCovariatesNoIndex") public void testTableRecalibratorNoIndex() { HashMap e = new HashMap(); e.put( validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.noindex.bam", "991f093a0e610df235d28ada418ebf33" ); @@ -329,6 +338,9 @@ public class RecalibrationWalkersIntegrationTest extends WalkerTest { Arrays.asList(md5)); executeTest("testTableRecalibratorNoIndex", spec); } + else { + throw new IllegalStateException("testTableRecalibratorNoIndex: paramsFile was null"); + } } } From 93e1417b6eaeb2be84efbf4bdc21e9dc90e10d79 Mon Sep 17 00:00:00 2001 From: Christopher Hartl Date: Tue, 3 Jan 2012 13:39:31 -0500 Subject: [PATCH 16/29] Update to the VSS GATK documentation. --- .../ValidationSiteSelectorWalker.java | 46 +++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/validation/validationsiteselector/ValidationSiteSelectorWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/validation/validationsiteselector/ValidationSiteSelectorWalker.java index ae11d8102..cd4c57136 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/validation/validationsiteselector/ValidationSiteSelectorWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/validation/validationsiteselector/ValidationSiteSelectorWalker.java @@ -106,37 +106,70 @@ public class ValidationSiteSelectorWalker extends RodWalker { POLY_BASED_ON_GL } + /** + * The input VCF file + */ @Input(fullName="variant", shortName = "V", doc="Input VCF file, can be specified multiple times", required=true) public List> variants; + /** + * The output VCF file + */ @Output(doc="File to which variants should be written",required=true) protected VCFWriter vcfWriter = null; + /** + * Sample name(s) to subset the input VCF to, prior to selecting variants. -sn A -sn B subsets to samples A and B. + */ @Argument(fullName="sample_name", shortName="sn", doc="Include genotypes from this sample. Can be specified multiple times", required=false) public Set sampleNames = new HashSet(0); + /** + * Sample regexps to subset the input VCF to, prior to selecting variants. -sn NA12* subsets to all samples with prefix NA12 + */ @Argument(fullName="sample_expressions", shortName="se", doc="Regular expression to select many samples from the ROD tracks provided. Can be specified multiple times", required=false) public Set sampleExpressions ; + /** + * File containing a list of sample names to subset the input vcf to. Equivalent to specifying the contents of the file separately with -sn + */ @Input(fullName="sample_file", shortName="sf", doc="File containing a list of samples (one per line) to include. Can be specified multiple times", required=false) public Set sampleFiles; + /** + * A mode for selecting sites based on sample-level data. See the wiki documentation for more information. + */ @Argument(fullName="sampleMode", shortName="sampleMode", doc="Sample selection mode", required=false) private SAMPLE_SELECTION_MODE sampleMode = SAMPLE_SELECTION_MODE.NONE; + /** + * An P[nonref] threshold for SAMPLE_SELECTION_MODE=POLY_BASED_ON_GL. See the wiki documentation for more information. + */ @Argument(shortName="samplePNonref",fullName="samplePNonref", doc="GL-based selection mode only: the probability" + " that a site is non-reference in the samples for which to include the site",required=false) private double samplePNonref = 0.99; + /** + * The number of sites in your validation set + */ @Argument(fullName="numValidationSites", shortName="numSites", doc="Number of output validation sites", required=true) private int numValidationSites; + /** + * Do not exclude filtered sites (e.g. not PASS or .) from consideration for validation + */ @Argument(fullName="includeFilteredSites", shortName="ifs", doc="If true, will include filtered sites in set to choose variants from", required=false) private boolean INCLUDE_FILTERED_SITES = false; + /** + * Argument for the frequency selection mode. (AC/AF/AN) are taken from VCF info field, not recalculated. Typically specified for sites-only VCFs that still have AC/AF/AN information. + */ @Argument(fullName="ignoreGenotypes", shortName="ignoreGenotypes", doc="If true, will ignore genotypes in VCF, will take AC,AF from annotations and will make no sample selection", required=false) private boolean IGNORE_GENOTYPES = false; + /** + * Argument for the frequency selection mode. Allows reference (non-polymorphic) sites to be included in the validation set. + */ @Argument(fullName="ignorePolymorphicStatus", shortName="ignorePolymorphicStatus", doc="If true, will ignore polymorphic status in VCF, and will take VCF record directly without pre-selection", required=false) private boolean IGNORE_POLYMORPHIC = false; @@ -145,19 +178,14 @@ public class ValidationSiteSelectorWalker extends RodWalker { private int numFrequencyBins = 20; /** - * This argument selects allele frequency selection mode: - * KEEP_AF_SPECTRUM will choose variants so that the resulting allele frequency spectrum matches as closely as possible the input set - * UNIFORM will choose variants uniformly without regard to their allele frequency. - * - */ + * This argument selects allele frequency selection mode. See the wiki for more information. + */ @Argument(fullName="frequencySelectionMode", shortName="freqMode", doc="Allele Frequency selection mode", required=false) private AF_COMPUTATION_MODE freqMode = AF_COMPUTATION_MODE.KEEP_AF_SPECTRUM; /** - * This argument selects particular kinds of variants out of a list. If left empty, there is no type selection and all variant types are considered for other selection criteria. - * When specified one or more times, a particular type of variant is selected. - * - */ + * This argument selects particular kinds of variants (i.e. SNP, INDEL) out of a list. If left unspecified, all types are considered. + */ @Argument(fullName="selectTypeToInclude", shortName="selectType", doc="Select only a certain type of variants from the input file. Valid types are INDEL, SNP, MIXED, MNP, SYMBOLIC, NO_VARIATION. Can be specified multiple times", required=false) private List TYPES_TO_INCLUDE = new ArrayList(); From ea6e718cb813277302f9b8a20bd0a2710838b0dd Mon Sep 17 00:00:00 2001 From: David Roazen Date: Mon, 2 Jan 2012 21:57:03 -0500 Subject: [PATCH 17/29] SnpEff 2.0.5 support. Re-enabled SnpEff in the HybridSelectionPipeline. For now, we recommend only running with the GRCh37.64 database. --- ivy.xml | 2 +- .../sting/gatk/walkers/annotator/SnpEff.java | 8 +------- .../VariantAnnotatorIntegrationTest.java | 8 ++++---- .../UnifiedGenotyperIntegrationTest.java | 2 +- .../VariantEvalIntegrationTest.java | 6 +++--- .../{snpeff-2.0.4rc3.jar => snpeff-2.0.5.jar} | Bin 4155641 -> 4178339 bytes .../{snpeff-2.0.4rc3.xml => snpeff-2.0.5.xml} | 2 +- 7 files changed, 11 insertions(+), 17 deletions(-) rename settings/repository/net.sf.snpeff/{snpeff-2.0.4rc3.jar => snpeff-2.0.5.jar} (92%) rename settings/repository/net.sf.snpeff/{snpeff-2.0.4rc3.xml => snpeff-2.0.5.xml} (77%) diff --git a/ivy.xml b/ivy.xml index ee24bc367..4f41904ba 100644 --- a/ivy.xml +++ b/ivy.xml @@ -76,7 +76,7 @@ - + diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SnpEff.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SnpEff.java index 5d215603a..6c860fce6 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SnpEff.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/annotator/SnpEff.java @@ -56,7 +56,7 @@ public class SnpEff extends InfoFieldAnnotation implements RodRequiringAnnotatio // We refuse to parse SnpEff output files generated by unsupported versions, or // lacking a SnpEff version number in the VCF header: - public static final String[] SUPPORTED_SNPEFF_VERSIONS = { "2.0.4" }; + public static final String[] SUPPORTED_SNPEFF_VERSIONS = { "2.0.5" }; public static final String SNPEFF_VCF_HEADER_VERSION_LINE_KEY = "SnpEffVersion"; public static final String SNPEFF_VCF_HEADER_COMMAND_LINE_KEY = "SnpEffCmd"; @@ -204,11 +204,6 @@ public class SnpEff extends InfoFieldAnnotation implements RodRequiringAnnotatio } public void initialize ( AnnotatorCompatibleWalker walker, GenomeAnalysisEngine toolkit, Set headerLines ) { - throw new UserException("SnpEff support is currently disabled in the GATK until SnpEff 2.0.4 is officially released " + - "due to a serious issue with SnpEff versions prior to 2.0.4. Please see this page for more details: " + - "http://www.broadinstitute.org/gsa/wiki/index.php/Adding_Genomic_Annotations_Using_SnpEff_and_VariantAnnotator"); - - /* // Make sure that we actually have a valid SnpEff rod binding (just in case the user specified -A SnpEff // without providing a SnpEff rod via --snpEffFile): validateRodBinding(walker.getSnpEffRodBinding()); @@ -228,7 +223,6 @@ public class SnpEff extends InfoFieldAnnotation implements RodRequiringAnnotatio // mistaken in the future for a SnpEff output file: headerLines.add(new VCFHeaderLine(OUTPUT_VCF_HEADER_VERSION_LINE_KEY, snpEffVersionLine.getValue())); headerLines.add(new VCFHeaderLine(OUTPUT_VCF_HEADER_COMMAND_LINE_KEY, snpEffCommandLine.getValue())); - */ } public Map annotate ( RefMetaDataTracker tracker, AnnotatorCompatibleWalker walker, ReferenceContext ref, Map stratifiedContexts, VariantContext vc ) { diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java index 8b101d1d5..0aec94663 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/annotator/VariantAnnotatorIntegrationTest.java @@ -145,19 +145,19 @@ public class VariantAnnotatorIntegrationTest extends WalkerTest { } } - @Test(enabled = false) + @Test public void testSnpEffAnnotations() { WalkerTestSpec spec = new WalkerTestSpec( "-T VariantAnnotator -R " + hg19Reference + " -NO_HEADER -o %s -A SnpEff --variant " + validationDataLocation + "1kg_exomes_unfiltered.AFR.unfiltered.vcf --snpEffFile " + validationDataLocation + - "snpEff2.0.4.AFR.unfiltered.vcf -L 1:1-1,500,000 -L 2:232,325,429", + "snpEff2.0.5.AFR.unfiltered.vcf -L 1:1-1,500,000 -L 2:232,325,429", 1, - Arrays.asList("51258f5c880bd1ca3eb45a1711335c66") + Arrays.asList("ffbda45b3682c9b83cb541d83f6c15d6") ); executeTest("Testing SnpEff annotations", spec); } - @Test(enabled = false) + @Test public void testSnpEffAnnotationsUnsupportedVersion() { WalkerTestSpec spec = new WalkerTestSpec( "-T VariantAnnotator -R " + hg19Reference + " -NO_HEADER -o %s -A SnpEff --variant " + diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java index f7d6af3a7..de9d55605 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java @@ -298,7 +298,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { executeTest("test MultiSample Phase1 indels with complicated records", spec4); } - @Test(enabled = false) + @Test public void testSnpEffAnnotationRequestedWithoutRodBinding() { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -o %s -L 1:10,022,000-10,025,000 " + diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java index 3ef4e5e9f..b3555b145 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java @@ -14,19 +14,19 @@ public class VariantEvalIntegrationTest extends WalkerTest { private static String cmdRoot = "-T VariantEval" + " -R " + b36KGReference; - @Test(enabled = false) + @Test public void testFunctionClassWithSnpeff() { WalkerTestSpec spec = new WalkerTestSpec( buildCommandLine( "-T VariantEval", "-R " + b37KGReference, "--dbsnp " + b37dbSNP132, - "--eval " + validationDataLocation + "snpEff2.0.4.AFR.unfiltered.VariantAnnotator.output.vcf", + "--eval " + validationDataLocation + "snpEff2.0.5.AFR.unfiltered.VariantAnnotator.output.vcf", "-noEV", "-EV TiTvVariantEvaluator", "-noST", "-ST FunctionalClass", - "-L " + validationDataLocation + "snpEff2.0.4.AFR.unfiltered.VariantAnnotator.output.vcf", + "-L " + validationDataLocation + "snpEff2.0.5.AFR.unfiltered.VariantAnnotator.output.vcf", "-o %s" ), 1, diff --git a/settings/repository/net.sf.snpeff/snpeff-2.0.4rc3.jar b/settings/repository/net.sf.snpeff/snpeff-2.0.5.jar similarity index 92% rename from settings/repository/net.sf.snpeff/snpeff-2.0.4rc3.jar rename to settings/repository/net.sf.snpeff/snpeff-2.0.5.jar index ee5d02367293107c0e4383274daec7fc91d4d53f..6dc922af7db3d86986ddde69dc81413d575367c8 100644 GIT binary patch delta 224555 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�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

(+Ksz#o35@ym}i0bMds4HV9`uU z{Pb{dVZ{KGe_Dce6)!|WRlZZPbB1a#9lDgpUSC0+5B_YvaA5mcrx(e~vpFN4mhM=4 z$Q4^N)M!X54-tR?SU2FAUyD%qJN+@xJ|cc|!a{8HD+ZN+YnqAamos!%EL{|r72Wh$ zy=3l(wM%%E?1nr#_xu}}@DS}22qlv#wh%Utc%k?rdyK#o6H+^gGVS9E|F-Z@9mhtI zV;i)nHQ_eI-b%RFhyP9#r-U;fLF=SvJa0V60?*sh73+rsjA(MRR@||fS_hbkce_p` zVU+XM$swAP$QkUe(F2=9OL>Auo+@6s?3OMBfcaYL4O!jC^oW)rs|bp|P@1AXXS`Xo zBqR9bD@b9HD6nu-S!+D_2qg*)!&YJz{jqUH-7owb(fD)%w&Y&o)6ZZkgVhA*_Y(n0 zQk;bBx16vCNR7ydP5nYwWy)SNbGGr0UN^VL4FI34HX^^TOCwWAzixI|?yQUivfcy9 z<%D#Idr`>C!y9tdtiCXsHUNc>dt02Z< zQJv3|5rwbAWN=2}OJ-Jz{O4_YNeRShkC&Ta?a_C6P~~9Di?yUl|3LzYrbtoi#EQc@ zh-}FMplPElDS_%fQjZZckzSvSFFSO5g)y4j&&BXV6%LSU|MNHqPVlZJ2Y`FucY51j zdp>@ks2AWW5eWHoeo4KQC*k8O5eU-n9H^OE; zlF4aDGLM$%5sfSMWmB)cLp|R~q>m6a;|i(*j6F3WmJYFK+bo9pDX)M%bZE@*heCqt zqm9UV78H8z`9i99>sD^l&daVK%2&cw50chE@S0SqmBW@cr{zJHlvO=B8CKAh^}<;q z|8YlH!Z`O+hj#mf^R#zmD!;N1_1BYVXdmgjW5SzW4XhFh$eQL1Sj6YLkIGjJZR;EX zdJY(y;k3|oEX(%xThd`v6SaiEQ;d*zu7)(k9_b6gwJnlkp!V=m&N8|PniUQIbfczn zwGUD%e#wtk*4rBn@S`RRfQ6{FXKfXK-fV?bN5cJdKP)TR-m^CyVLw}!67XxuIOoaG zigXMW9kItv(+5CTTA6TV3HL6#a&S`ti?JOJGkU4}2

v+;eM^%5IuGvUSIZmxY>l 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 B69xbP delta 202307 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 Dr!lwh diff --git a/settings/repository/net.sf.snpeff/snpeff-2.0.4rc3.xml b/settings/repository/net.sf.snpeff/snpeff-2.0.5.xml similarity index 77% rename from settings/repository/net.sf.snpeff/snpeff-2.0.4rc3.xml rename to settings/repository/net.sf.snpeff/snpeff-2.0.5.xml index 5417641d3..9a622abe5 100644 --- a/settings/repository/net.sf.snpeff/snpeff-2.0.4rc3.xml +++ b/settings/repository/net.sf.snpeff/snpeff-2.0.5.xml @@ -1,3 +1,3 @@ - + From 2d093828a4473b5187fa3540c4f33bd0c0204e9c Mon Sep 17 00:00:00 2001 From: Christopher Hartl Date: Tue, 3 Jan 2012 15:33:04 -0500 Subject: [PATCH 18/29] Final changes to Junky (been frozen for a while, but uncommitted) and the qscript for it. A first cursory implementation of the trellis-based Exact AC-constrained genotyping algorithm in UGE. Nothing calls into it, so this should be entirely safe (and, no surprise, it passes UG integration tests). --- .../genotyper/UnifiedGenotyperEngine.java | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index aa33d39e3..2159da6e6 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -401,6 +401,11 @@ public class UnifiedGenotyperEngine { // *** note that calculating strand bias involves overwriting data structures, so we do that last final HashMap attributes = new HashMap(); + List mlecounts = new ArrayList(AFresult.log10AlleleFrequencyPosteriors.length); + for ( int i = 0; i < AFresult.log10AlleleFrequencyLikelihoods.length ; i++) { + mlecounts.add(MathUtils.maxElementIndex(AFresult.log10AlleleFrequencyLikelihoods[i])); + } + attributes.put("MLEAC",Utils.join(",",mlecounts)); // if the site was downsampled, record that fact if ( !limitedContext && rawContext.hasPileupBeenDownsampled() ) @@ -858,4 +863,171 @@ public class UnifiedGenotyperEngine { return calls; } + + /** + * @param vc variant context with genotype likelihoods + * @param allelesToUse bit vector describing which alternate alleles from the vc are okay to use + * @param exactAC integer array describing the AC from the exact model for the corresponding alleles + * @return genotypes + */ + public static GenotypesContext constrainedAssignGenotypes(VariantContext vc, boolean[] allelesToUse, int[] exactAC ) { + + final GenotypesContext GLs = vc.getGenotypes(); + + // samples + final List sampleIndices = GLs.getSampleNamesOrderedByName(); + + // we need to determine which of the alternate alleles (and hence the likelihoods) to use and carry forward + final int numOriginalAltAlleles = allelesToUse.length; + final List newAlleles = new ArrayList(numOriginalAltAlleles+1); + newAlleles.add(vc.getReference()); + final HashMap alleleIndexMap = new HashMap(); // need this for skipping dimensions + int[] alleleCount = new int[exactAC.length]; + for ( int i = 0; i < numOriginalAltAlleles; i++ ) { + if ( allelesToUse[i] ) { + newAlleles.add(vc.getAlternateAllele(i)); + alleleIndexMap.put(vc.getAlternateAllele(i),i); + alleleCount[i] = exactAC[i]; + } else { + alleleCount[i] = 0; + } + } + final List newAltAlleles = newAlleles.subList(1,newAlleles.size()); + final int numNewAltAlleles = newAltAlleles.size(); + ArrayList likelihoodIndexesToUse = null; + + // an optimization: if we are supposed to use all (or none in the case of a ref call) of the alleles, + // then we can keep the PLs as is; otherwise, we determine which ones to keep + final int[][] PLcache; + if ( numNewAltAlleles != numOriginalAltAlleles && numNewAltAlleles > 0 ) { + likelihoodIndexesToUse = new ArrayList(30); + PLcache = PLIndexToAlleleIndex[numOriginalAltAlleles]; + + for ( int PLindex = 0; PLindex < PLcache.length; PLindex++ ) { + int[] alleles = PLcache[PLindex]; + // consider this entry only if both of the alleles are good + if ( (alleles[0] == 0 || allelesToUse[alleles[0] - 1]) && (alleles[1] == 0 || allelesToUse[alleles[1] - 1]) ) + likelihoodIndexesToUse.add(PLindex); + } + } else { + PLcache = PLIndexToAlleleIndex[numOriginalAltAlleles]; + } + + // set up the trellis dimensions + // SAMPLE x alt 1 x alt 2 x alt 3 + // todo -- check that exactAC has alt counts at [1],[2],[3] (and not [0],[1],[2]) + double[][][][] transitionTrellis = new double[sampleIndices.size()+1][exactAC[1]][exactAC[2]][exactAC[3]]; + // N x AC1 x AC2 x AC3; worst performance in multi-allelic where all alleles are moderate frequency + // capped at the MLE ACs* + // todo -- there's an optimization: not all states in the rectangular matrix will be reached, in fact + // todo -- for tT[0] we only care about tT[0][0][0][0], and for tT[1], only combinations of 0,1,2. + int idx = 1; // index of which sample we're on + int prevMaxState = 0; // the maximum state (e.g. AC) reached by the previous sample. Symmetric. (AC capping handled by logic in loop) + // iterate over each sample + for ( String sample : sampleIndices ) { + // push the likelihoods into the next possible states, that is to say + // L[state] = L[prev state] + L[genotype getting into state] + // iterate over each previous state, by dimension + // and contribute the likelihoods for transitions to this state + double[][][] prevState = transitionTrellis[idx-1]; + double[][][] thisState = transitionTrellis[idx]; + Genotype genotype = GLs.get(sample); + if ( genotype.isNoCall() || genotype.isFiltered() ) { + thisState = prevState.clone(); + } else { + double[] likelihoods = genotype.getLikelihoods().getAsVector(); + int dim1min = Math.max(0, alleleCount[0]-2*(sampleIndices.size()-idx+1)); + int dim1max = Math.min(prevMaxState,alleleCount[0]); + int dim2min = Math.max(0,alleleCount[1]-2*(sampleIndices.size()-idx+1)); + int dim2max = Math.min(prevMaxState,alleleCount[1]); + int dim3min = Math.max(0,alleleCount[2]-2*(sampleIndices.size()-idx+1)); + int dim3max = Math.min(prevMaxState,alleleCount[2]); + // cue annoying nested for loop + for ( int a1 = dim1min ; a1 <= dim1max; a1++ ) { + for ( int a2 = dim2min; a2 <= dim2max; a2++ ) { + for ( int a3 = dim3min; a3 <= dim3max; a3++ ) { + double base = prevState[a1][a2][a3]; + for ( int likIdx : likelihoodIndexesToUse ) { + int[] offsets = calculateOffsets(PLcache[likIdx]); + thisState[a1+offsets[1]][a2+offsets[2]][a3+offsets[3]] = base + likelihoods[likIdx]; + } + } + } + } + prevMaxState += 2; + } + idx++; + } + + // after all that pain, we have a fully calculated trellis. Now just march backwards from the EAC state and + // assign genotypes along the greedy path + + GenotypesContext calls = GenotypesContext.create(sampleIndices.size()); + int[] state = alleleCount; + for ( String sample : Utils.reverse(sampleIndices) ) { + --idx; + // the next state will be the maximum achievable state + Genotype g = GLs.get(sample); + if ( g.isNoCall() || ! g.hasLikelihoods() ) { + calls.add(g); + continue; + } + + // subset to the new likelihoods. These are not used except for subsetting in the context iself. + // i.e. they are not a part of the calculation. + final double[] originalLikelihoods = GLs.get(sample).getLikelihoods().getAsVector(); + double[] newLikelihoods; + if ( likelihoodIndexesToUse == null ) { + newLikelihoods = originalLikelihoods; + } else { + newLikelihoods = new double[likelihoodIndexesToUse.size()]; + int newIndex = 0; + for ( int oldIndex : likelihoodIndexesToUse ) + newLikelihoods[newIndex++] = originalLikelihoods[oldIndex]; + + // might need to re-normalize + newLikelihoods = MathUtils.normalizeFromLog10(newLikelihoods, false, true); + } + + // todo -- alter this. For ease of programming, likelihood indeces are + // todo -- used to iterate over achievable states. + double max = Double.NEGATIVE_INFINITY; + int[] bestState = null; + int[] bestAlleles = null; + int bestLikIdx = -1; + for ( int likIdx : likelihoodIndexesToUse ) { + int[] offsets = calculateOffsets(PLcache[likIdx]); + double val = transitionTrellis[idx-1][state[0]-offsets[0]][state[1]-offsets[1]][state[2]-offsets[2]]; + if ( val > max ) { + max = val; + bestState = new int[] { state[0]-offsets[0],state[1]-offsets[1],state[2]-offsets[2]}; + bestAlleles = PLcache[likIdx]; + bestLikIdx = likIdx; + } + } + state = bestState; + List gtAlleles = new ArrayList(2); + gtAlleles.add(newAlleles.get(bestAlleles[0])); + gtAlleles.add(newAlleles.get(bestAlleles[1])); + + final double qual = numNewAltAlleles == 0 ? Genotype.NO_LOG10_PERROR : GenotypeLikelihoods.getQualFromLikelihoods(bestLikIdx, newLikelihoods); + Map attrs = new HashMap(g.getAttributes()); + if ( numNewAltAlleles == 0 ) + attrs.remove(VCFConstants.PHRED_GENOTYPE_LIKELIHOODS_KEY); + else + attrs.put(VCFConstants.PHRED_GENOTYPE_LIKELIHOODS_KEY, GenotypeLikelihoods.fromLog10Likelihoods(newLikelihoods)); + calls.add(new Genotype(sample, gtAlleles, qual, null, attrs, false)); + + } + return calls; + } + + private static int[] calculateOffsets(int[] alleleIndeces) { + int[] offsets = new int[4]; + for ( int i = 0; i < alleleIndeces.length; i++ ) { + offsets[alleleIndeces[i]]++; + } + + return offsets; + } } From 9093de1132be1c5a7cc657c552299bceb1f67c33 Mon Sep 17 00:00:00 2001 From: Christopher Hartl Date: Tue, 3 Jan 2012 15:58:51 -0500 Subject: [PATCH 19/29] Cleanup: remove code to calculate the MLE AC in the UGE. --- .../sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index 2159da6e6..34be88dbb 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -401,11 +401,6 @@ public class UnifiedGenotyperEngine { // *** note that calculating strand bias involves overwriting data structures, so we do that last final HashMap attributes = new HashMap(); - List mlecounts = new ArrayList(AFresult.log10AlleleFrequencyPosteriors.length); - for ( int i = 0; i < AFresult.log10AlleleFrequencyLikelihoods.length ; i++) { - mlecounts.add(MathUtils.maxElementIndex(AFresult.log10AlleleFrequencyLikelihoods[i])); - } - attributes.put("MLEAC",Utils.join(",",mlecounts)); // if the site was downsampled, record that fact if ( !limitedContext && rawContext.hasPileupBeenDownsampled() ) From 9b55505c0368745c9b59708a40967360b1008d1e Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Tue, 3 Jan 2012 18:08:46 -0500 Subject: [PATCH 20/29] Fixing PairHMMIndelErrorModel array out of bounds This error was due to the ReadClipper change of contract. Before the read utils would return null if a read was entirely clipped, now it returns an empty (safe) GATKSAMRecord. --- .../sting/gatk/walkers/indels/PairHMMIndelErrorModel.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java index d893e620e..6410d619d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/indels/PairHMMIndelErrorModel.java @@ -28,13 +28,13 @@ package org.broadinstitute.sting.gatk.walkers.indels; import net.sf.samtools.Cigar; import net.sf.samtools.CigarElement; import net.sf.samtools.CigarOperator; -import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.Haplotype; import org.broadinstitute.sting.utils.MathUtils; import org.broadinstitute.sting.utils.clipping.ReadClipper; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.broadinstitute.sting.utils.sam.ReadUtils; import org.broadinstitute.sting.utils.variantcontext.Allele; @@ -409,9 +409,9 @@ public class PairHMMIndelErrorModel { } } else { - //System.out.format("%d %s\n",p.getRead().getAlignmentStart(), p.getRead().getClass().getName()); - SAMRecord read = ReadClipper.hardClipAdaptorSequence(p.getRead()); - if (read == null) + // System.out.format("%d %s\n",p.getRead().getAlignmentStart(), p.getRead().getClass().getName()); + GATKSAMRecord read = ReadClipper.hardClipAdaptorSequence(p.getRead()); + if (read.isEmpty()) continue; if(ReadUtils.is454Read(read)) { From 58d45393048c6cdd429bfbb3bd58d96ca66d5caf Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Wed, 4 Jan 2012 15:28:26 -0500 Subject: [PATCH 24/29] Enabled banded indel computation by default. Reversed logic in input UG argument so that we can still disable it if required. Minor changes to integration tests due to minor differences in GL's and in annotations --- .../IndelGenotypeLikelihoodsCalculationModel.java | 2 +- .../gatk/walkers/genotyper/UnifiedArgumentCollection.java | 6 +++--- .../genotyper/UnifiedGenotyperIntegrationTest.java | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java index fe2086d47..8d279005b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java @@ -81,7 +81,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood protected IndelGenotypeLikelihoodsCalculationModel(UnifiedArgumentCollection UAC, Logger logger) { super(UAC, logger); pairModel = new PairHMMIndelErrorModel(UAC.INDEL_GAP_OPEN_PENALTY,UAC.INDEL_GAP_CONTINUATION_PENALTY, - UAC.OUTPUT_DEBUG_INDEL_INFO, UAC.BANDED_INDEL_COMPUTATION); + UAC.OUTPUT_DEBUG_INDEL_INFO, !UAC.DONT_DO_BANDED_INDEL_COMPUTATION); alleleList = new ArrayList(); getAlleleListFromVCF = UAC.GenotypingMode == GENOTYPING_MODE.GENOTYPE_GIVEN_ALLELES; minIndelCountForGenotyping = UAC.MIN_INDEL_COUNT_FOR_GENOTYPING; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java index 5713432b4..4639d67a7 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java @@ -146,8 +146,8 @@ public class UnifiedArgumentCollection { public int INDEL_HAPLOTYPE_SIZE = 80; @Hidden - @Argument(fullName = "bandedIndel", shortName = "bandedIndel", doc = "Banded Indel likelihood computation", required = false) - public boolean BANDED_INDEL_COMPUTATION = false; + @Argument(fullName = "noBandedIndel", shortName = "noBandedIndel", doc = "Don't do Banded Indel likelihood computation", required = false) + public boolean DONT_DO_BANDED_INDEL_COMPUTATION = false; @Hidden @Argument(fullName = "indelDebug", shortName = "indelDebug", doc = "Output indel debug info", required = false) @@ -184,7 +184,7 @@ public class UnifiedArgumentCollection { // todo- arguments to remove uac.IGNORE_SNP_ALLELES = IGNORE_SNP_ALLELES; - uac.BANDED_INDEL_COMPUTATION = BANDED_INDEL_COMPUTATION; + uac.DONT_DO_BANDED_INDEL_COMPUTATION = DONT_DO_BANDED_INDEL_COMPUTATION; uac.MULTI_ALLELIC = MULTI_ALLELIC; return uac; } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java index 7c0dba558..a91ea1c87 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java @@ -265,7 +265,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommandIndels + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,100,000", 1, - Arrays.asList("fa4f3ee67d98b64102a8a3ec81a3bc81")); + Arrays.asList("c60a44ba94a80a0cb1fba8b6f90a13cd")); executeTest("test MultiSample Pilot2 indels with alleles passed in", spec1); } @@ -275,7 +275,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { baseCommandIndels + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,100,000", 1, - Arrays.asList("df90890e43d735573a3b3e4f289ca46b")); + Arrays.asList("36ce53ae4319718ad9c8ae391deebc8c")); executeTest("test MultiSample Pilot2 indels with alleles passed in and emitting all sites", spec2); } @@ -285,7 +285,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { WalkerTest.WalkerTestSpec spec3 = new WalkerTest.WalkerTestSpec( baseCommandIndels + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "ALL.wgs.union_v2.20101123.indels.sites.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,080,000", 1, - Arrays.asList("cff6dd0f4eb1ef0b6fc476da6ffead19")); + Arrays.asList("d356cbaf240d7025d1aecdabaff3a3e0")); executeTest("test MultiSample Pilot2 indels with complicated records", spec3); } @@ -294,7 +294,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { WalkerTest.WalkerTestSpec spec4 = new WalkerTest.WalkerTestSpec( baseCommandIndelsb37 + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "ALL.wgs.union_v2_chr20_100_110K.20101123.indels.sites.vcf -I " + validationDataLocation + "phase1_GBR_realigned.chr20.100K-110K.bam -o %s -L 20:100,000-110,000", 1, - Arrays.asList("1e2a4aab26e9ab0dae709d33a669e036")); + Arrays.asList("947c12ef2a8c29ae787cd11be8c565c8")); executeTest("test MultiSample Phase1 indels with complicated records", spec4); } From a6886a4cc0e21c368fcd06e36e144e41113bf0d0 Mon Sep 17 00:00:00 2001 From: Ryan Poplin Date: Wed, 4 Jan 2012 17:03:21 -0500 Subject: [PATCH 25/29] Initial commit of the Active Region Traversal. Not ready to be used by anyone yet. --- .../sting/gatk/GenomeAnalysisEngine.java | 2 +- .../executive/HierarchicalMicroScheduler.java | 1 - .../gatk/executive/LinearMicroScheduler.java | 8 +- .../sting/gatk/executive/MicroScheduler.java | 2 + .../traversals/TraverseActiveRegions.java | 213 ++++++++++++++++++ .../gatk/walkers/ActiveRegionWalker.java | 29 +++ .../broadinstitute/sting/utils/GenomeLoc.java | 6 +- .../sting/utils/activeregion/ActiveRead.java | 19 ++ .../utils/activeregion/ActiveRegion.java | 55 +++++ 9 files changed, 331 insertions(+), 4 deletions(-) create mode 100644 public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java create mode 100644 public/java/src/org/broadinstitute/sting/gatk/walkers/ActiveRegionWalker.java create mode 100644 public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRead.java create mode 100644 public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java diff --git a/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index f954d7650..ede8e9340 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -443,7 +443,7 @@ public class GenomeAnalysisEngine { if(!readsDataSource.hasIndex() && intervals != null && !argCollection.allowIntervalsWithUnindexedBAM) throw new UserException.CommandLineException("Cannot perform interval processing when reads are present but no index is available."); - if(walker instanceof LocusWalker) { + if(walker instanceof LocusWalker || walker instanceof ActiveRegionWalker) { if (readsDataSource.getSortOrder() != SAMFileHeader.SortOrder.coordinate) throw new UserException.MissortedBAM(SAMFileHeader.SortOrder.coordinate, "Locus walkers can only traverse coordinate-sorted data. Please resort your input BAM file(s) or set the Sort Order tag in the header appropriately."); if(intervals == null) diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java index 39e1bdc72..eec440820 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/HierarchicalMicroScheduler.java @@ -11,7 +11,6 @@ import org.broadinstitute.sting.gatk.io.ThreadLocalOutputTracker; import org.broadinstitute.sting.gatk.walkers.TreeReducible; import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; -import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.threading.ThreadPoolMonitor; import java.util.Collection; diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java index ff5e1064b..774b532f3 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/LinearMicroScheduler.java @@ -10,6 +10,7 @@ import org.broadinstitute.sting.gatk.datasources.reads.Shard; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.io.DirectOutputTracker; import org.broadinstitute.sting.gatk.io.OutputTracker; +import org.broadinstitute.sting.gatk.traversals.TraverseActiveRegions; import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.SampleUtils; @@ -55,7 +56,6 @@ public class LinearMicroScheduler extends MicroScheduler { traversalEngine.startTimersIfNecessary(); if(shard.getShardType() == Shard.ShardType.LOCUS) { - LocusWalker lWalker = (LocusWalker)walker; WindowMaker windowMaker = new WindowMaker(shard, engine.getGenomeLocParser(), getReadIterator(shard), shard.getGenomeLocs(), SampleUtils.getSAMFileSamples(engine)); for(WindowMaker.WindowMakerIterator iterator: windowMaker) { @@ -77,6 +77,12 @@ public class LinearMicroScheduler extends MicroScheduler { done = walker.isDone(); } + // Special function call to empty out the work queue. Ugly for now but will be cleaned up when we push this functionality more into the engine + if( traversalEngine instanceof TraverseActiveRegions ) { + final Object result = ((TraverseActiveRegions) traversalEngine).endTraversal(walker, accumulator.getReduceInit()); + accumulator.accumulate(null, result); // Assumes only used with StandardAccumulator + } + Object result = accumulator.finishTraversal(); printOnTraversalDone(result); diff --git a/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java b/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java index d013db7e8..508099708 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java +++ b/public/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java @@ -128,6 +128,8 @@ public abstract class MicroScheduler implements MicroSchedulerMBean { traversalEngine = new TraverseDuplicates(); } else if (walker instanceof ReadPairWalker) { traversalEngine = new TraverseReadPairs(); + } else if (walker instanceof ActiveRegionWalker) { + traversalEngine = new TraverseActiveRegions(); } else { throw new UnsupportedOperationException("Unable to determine traversal type, the walker is an unknown type."); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java new file mode 100644 index 000000000..01bfe396a --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegions.java @@ -0,0 +1,213 @@ +package org.broadinstitute.sting.gatk.traversals; + +import net.sf.samtools.SAMRecord; +import org.apache.log4j.Logger; +import org.broadinstitute.sting.gatk.WalkerManager; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.datasources.providers.*; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.ActiveRegionWalker; +import org.broadinstitute.sting.gatk.walkers.DataSource; +import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.activeregion.ActiveRegion; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.sam.GATKSAMRecord; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.Queue; + +/** + * Created by IntelliJ IDEA. + * User: rpoplin + * Date: 12/9/11 + */ + +public class TraverseActiveRegions extends TraversalEngine,LocusShardDataProvider> { + /** + * our log, which we want to capture anything from this class + */ + protected static Logger logger = Logger.getLogger(TraversalEngine.class); + + private final Queue workQueue = new LinkedList(); + private final LinkedHashSet myReads = new LinkedHashSet(); + + @Override + protected String getTraversalType() { + return "active regions"; + } + + @Override + public T traverse( final ActiveRegionWalker walker, + final LocusShardDataProvider dataProvider, + T sum) { + logger.debug(String.format("TraverseActiveRegion.traverse: Shard is %s", dataProvider)); + + LocusView locusView = getLocusView( walker, dataProvider ); + + int minStart = Integer.MAX_VALUE; + final LocusReferenceView referenceView = new LocusReferenceView( walker, dataProvider ); + + if ( locusView.hasNext() ) { // trivial optimization to avoid unnecessary processing when there's nothing here at all + + final ArrayList isActiveList = new ArrayList(); + + //ReferenceOrderedView referenceOrderedDataView = new ReferenceOrderedView( dataProvider ); + ReferenceOrderedView referenceOrderedDataView = null; + if ( WalkerManager.getWalkerDataSource(walker) != DataSource.REFERENCE_ORDERED_DATA ) + referenceOrderedDataView = new ManagingReferenceOrderedView( dataProvider ); + else + referenceOrderedDataView = (RodLocusView)locusView; + + // We keep processing while the next reference location is within the interval + while( locusView.hasNext() ) { + final AlignmentContext locus = locusView.next(); + GenomeLoc location = locus.getLocation(); + + dataProvider.getShard().getReadMetrics().incrementNumIterations(); + + if ( locus.hasExtendedEventPileup() ) { + // if the alignment context we received holds an "extended" pileup (i.e. pileup of insertions/deletions + // associated with the current site), we need to update the location. The updated location still starts + // at the current genomic position, but it has to span the length of the longest deletion (if any). + location = engine.getGenomeLocParser().setStop(location,location.getStop()+locus.getExtendedEventPileup().getMaxDeletionLength()); + + // it is possible that the new expanded location spans the current shard boundary; the next method ensures + // that when it is the case, the reference sequence held by the ReferenceView will be reloaded so that + // the view has all the bases we are gonna need. If the location fits within the current view bounds, + // the next call will not do anything to the view: + referenceView.expandBoundsToAccomodateLoc(location); + } + + // create reference context. Note that if we have a pileup of "extended events", the context will + // hold the (longest) stretch of deleted reference bases (if deletions are present in the pileup). + final ReferenceContext refContext = referenceView.getReferenceContext(location); + + // Iterate forward to get all reference ordered data covering this location + final RefMetaDataTracker tracker = referenceOrderedDataView.getReferenceOrderedDataAtLocus(locus.getLocation(), refContext); + + // Call the walkers isActive function for this locus and add them to the list to be integrated later + final boolean isActive = walker.isActive( tracker, refContext, locus ); + isActiveList.add( new ActiveRegion(location, isActive, engine.getGenomeLocParser()) ); + + // Grab all the previously unseen reads from this pileup and add them to the massive read list + for( final PileupElement p : locus.getBasePileup() ) { + final SAMRecord read = p.getRead(); + if( !myReads.contains(read) ) { + myReads.add(read); + } + } + + // If this is the last pileup for this shard then need to calculate the minimum alignment start so that + // we know which active regions in the work queue are now safe to process + if( !locusView.hasNext() ) { + for( final PileupElement p : locus.getBasePileup() ) { + final SAMRecord read = p.getRead(); + if( read.getAlignmentStart() < minStart ) { minStart = read.getAlignmentStart(); } + } + } + printProgress(dataProvider.getShard(),locus.getLocation()); + } + + // Take the individual isActive calls and integrate them into contiguous active regions and + // add these blocks of work to the work queue + final ArrayList activeRegions = integrateActiveList( isActiveList ); + logger.debug("Integrated " + isActiveList.size() + " isActive calls into " + activeRegions.size() + " regions." ); + workQueue.addAll( activeRegions ); + } + + while( workQueue.peek().getLocation().getStop() < minStart ) { + final ActiveRegion activeRegion = workQueue.remove(); + sum = processActiveRegion( activeRegion, myReads, workQueue, sum, walker ); + } + + return sum; + } + + // Special function called in LinearMicroScheduler to empty out the work queue. Ugly for now but will be cleaned up when we push this functionality more into the engine + public T endTraversal( final Walker walker, T sum) { + while( workQueue.peek() != null ) { + final ActiveRegion activeRegion = workQueue.remove(); + sum = processActiveRegion( activeRegion, myReads, workQueue, sum, (ActiveRegionWalker) walker ); + } + + return sum; + } + + private T processActiveRegion( final ActiveRegion activeRegion, final LinkedHashSet reads, final Queue workQueue, final T sum, final ActiveRegionWalker walker ) { + final ArrayList placedReads = new ArrayList(); + for( final SAMRecord read : reads ) { + final GenomeLoc readLoc = this.engine.getGenomeLocParser().createGenomeLoc( read ); + if( activeRegion.getLocation().overlapsP( readLoc ) ) { + // The region which the highest amount of overlap is chosen as the primary region for the read (tie breaking is done as right most region) + long maxOverlap = activeRegion.getLocation().sizeOfOverlap( readLoc ); + ActiveRegion bestRegion = activeRegion; + for( final ActiveRegion otherRegionToTest : workQueue ) { + if( otherRegionToTest.getLocation().sizeOfOverlap(readLoc) >= maxOverlap ) { + maxOverlap = otherRegionToTest.getLocation().sizeOfOverlap(readLoc); + bestRegion = otherRegionToTest; + } + } + bestRegion.add( (GATKSAMRecord) read, true ); + + // The read is also added to all other region in which it overlaps but marked as non-primary + if( !bestRegion.equals(activeRegion) ) { + activeRegion.add( (GATKSAMRecord) read, false ); + } + for( final ActiveRegion otherRegionToTest : workQueue ) { + if( !bestRegion.equals(otherRegionToTest) && otherRegionToTest.getLocation().overlapsP( readLoc ) ) { + activeRegion.add( (GATKSAMRecord) read, false ); + } + } + placedReads.add( read ); + } + } + reads.removeAll( placedReads ); // remove all the reads which have been placed into their active region + + logger.debug(">> Map call with " + activeRegion.getReads().size() + " " + (activeRegion.isActive ? "active" : "inactive") + " reads @ " + activeRegion.getLocation() + " with full extent: " + activeRegion.getReferenceLocation()); + final M x = walker.map( activeRegion, null ); // BUGBUG: tracker needs to be filled in and passed to the walker + return walker.reduce( x, sum ); + } + + /** + * Gets the best view of loci for this walker given the available data. + * @param walker walker to interrogate. + * @param dataProvider Data which which to drive the locus view. + * @return A view of the locus data, where one iteration of the locus view maps to one iteration of the traversal. + */ + private LocusView getLocusView( Walker walker, LocusShardDataProvider dataProvider ) { + DataSource dataSource = WalkerManager.getWalkerDataSource(walker); + if( dataSource == DataSource.READS ) + return new CoveredLocusView(dataProvider); + else if( dataSource == DataSource.REFERENCE ) //|| ! GenomeAnalysisEngine.instance.getArguments().enableRodWalkers ) + return new AllLocusView(dataProvider); + else if( dataSource == DataSource.REFERENCE_ORDERED_DATA ) + return new RodLocusView(dataProvider); + else + throw new UnsupportedOperationException("Unsupported traversal type: " + dataSource); + } + + // integrate active regions into contiguous chunks based on active status + private ArrayList integrateActiveList( final ArrayList activeList ) { + final ArrayList returnList = new ArrayList(); + ActiveRegion prevLocus = activeList.remove(0); + ActiveRegion startLocus = prevLocus; + for( final ActiveRegion thisLocus : activeList ) { + if( prevLocus.isActive != thisLocus.isActive ) { + returnList.add( new ActiveRegion( engine.getGenomeLocParser().createGenomeLoc(startLocus.getLocation().getContig(), startLocus.getLocation().getStart(), prevLocus.getLocation().getStart()), + prevLocus.isActive, engine.getGenomeLocParser() ) ); + startLocus = thisLocus; + } + prevLocus = thisLocus; + } + // output the last region if necessary + if( startLocus != prevLocus ) { + returnList.add( new ActiveRegion( engine.getGenomeLocParser().createGenomeLoc(startLocus.getLocation().getContig(), startLocus.getLocation().getStart(), prevLocus.getLocation().getStart()), + prevLocus.isActive, engine.getGenomeLocParser() ) ); + } + return returnList; + } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/ActiveRegionWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/ActiveRegionWalker.java new file mode 100644 index 000000000..d2891c959 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/ActiveRegionWalker.java @@ -0,0 +1,29 @@ +package org.broadinstitute.sting.gatk.walkers; + +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.utils.activeregion.ActiveRegion; + +/** + * Created by IntelliJ IDEA. + * User: rpoplin + * Date: 12/7/11 + */ + +@By(DataSource.READS) +@Requires({DataSource.READS, DataSource.REFERENCE_BASES}) +@PartitionBy(PartitionType.READ) +public abstract class ActiveRegionWalker extends Walker { + // Do we actually want to operate on the context? + public boolean filter(final RefMetaDataTracker tracker, final ReferenceContext ref, final AlignmentContext context) { + return true; // We are keeping all the reads + } + + // Determine active status over the AlignmentContext + public abstract boolean isActive(final RefMetaDataTracker tracker, final ReferenceContext ref, final AlignmentContext context); + + // Map over the ActiveRegion + public abstract MapType map(final ActiveRegion activeRegion, final ReadMetaDataTracker metaDataTracker); +} diff --git a/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java b/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java index 345161416..6941b888b 100644 --- a/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java +++ b/public/java/src/org/broadinstitute/sting/utils/GenomeLoc.java @@ -145,7 +145,7 @@ public class GenomeLoc implements Comparable, Serializable, HasGenome } return new GenomeLoc(getContig(), this.contigIndex, - Math.min(getStart(), that.getStart()), + Math.min( getStart(), that.getStart() ), Math.max( getStop(), that.getStop()) ); } @@ -465,4 +465,8 @@ public class GenomeLoc implements Comparable, Serializable, HasGenome private final static double overlapPercent(final GenomeLoc gl1, final GenomeLoc gl2) { return (1.0 * gl1.intersect(gl2).size()) / gl1.size(); } + + public long sizeOfOverlap( final GenomeLoc that ) { + return ( this.overlapsP(that) ? Math.min( getStop(), that.getStop() ) - Math.max( getStart(), that.getStart() ) : 0L ); + } } diff --git a/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRead.java b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRead.java new file mode 100644 index 000000000..8d08a29b6 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRead.java @@ -0,0 +1,19 @@ +package org.broadinstitute.sting.utils.activeregion; + +import org.broadinstitute.sting.utils.sam.GATKSAMRecord; + +/** + * Created by IntelliJ IDEA. + * User: rpoplin + * Date: 1/4/12 + */ + +public class ActiveRead { + final public GATKSAMRecord read; + final public boolean isPrimaryRegion; + + ActiveRead( final GATKSAMRecord read, final boolean isPrimaryRegion ) { + this.read = read; + this.isPrimaryRegion = isPrimaryRegion; + } +} diff --git a/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java new file mode 100644 index 000000000..e8908480c --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java @@ -0,0 +1,55 @@ +package org.broadinstitute.sting.utils.activeregion; + +import net.sf.picard.reference.IndexedFastaSequenceFile; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.HasGenomeLocation; +import org.broadinstitute.sting.utils.sam.GATKSAMRecord; + +import java.util.ArrayList; + +/** + * Created by IntelliJ IDEA. + * User: rpoplin + * Date: 1/4/12 + */ + +public class ActiveRegion implements HasGenomeLocation { + + private final ArrayList reads = new ArrayList(); + private byte[] reference = null; + private final GenomeLoc loc; + private GenomeLoc referenceLoc = null; + private final GenomeLocParser genomeLocParser; + public final boolean isActive; + + public ActiveRegion( final GenomeLoc loc, final boolean isActive, final GenomeLocParser genomeLocParser ) { + this.loc = loc; + this.isActive = isActive; + this.genomeLocParser = genomeLocParser; + referenceLoc = loc; + } + + // add each read to the bin and extend the reference genome loc if needed + public void add( final GATKSAMRecord read, final boolean isPrimaryRegion ) { + referenceLoc = referenceLoc.union( genomeLocParser.createGenomeLoc( read ) ); + reads.add( new ActiveRead(read, isPrimaryRegion) ); + } + + public ArrayList getReads() { return reads; } + + public byte[] getReference( final IndexedFastaSequenceFile referenceReader ) { + // set up the reference if we haven't done so yet + if ( reference == null ) { + reference = referenceReader.getSubsequenceAt(referenceLoc.getContig(), referenceLoc.getStart(), referenceLoc.getStop()).getBases(); + } + + return reference; + } + + public GenomeLoc getLocation() { return loc; } + + public GenomeLoc getReferenceLocation() { return referenceLoc; } + + public int size() { return reads.size(); } +} \ No newline at end of file From 18ed9547411cc0ab62a01446f144039d28af3c26 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 5 Jan 2012 15:33:26 -0500 Subject: [PATCH 26/29] Compute Ti/Tv only if bi-allelic --- .../gatk/walkers/varianteval/evaluators/VariantSummary.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java index a271d3c35..b3f3630bd 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java @@ -224,7 +224,7 @@ public class VariantSummary extends VariantEvaluator implements StandardEval { allVariantCounts.inc(type, ALL); // type specific calculations - if ( type == Type.SNP ) { + if ( type == Type.SNP && eval.isBiallelic() ) { titvTable = VariantContextUtils.isTransition(eval) ? transitionsPerSample : transversionsPerSample; titvTable.inc(type, ALL); } From c96fee477ca7b7ae0bc7b3249815170b2b035160 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Thu, 5 Jan 2012 21:49:02 -0500 Subject: [PATCH 27/29] Bug fix for VariantSummary -- Call sets with indels > 50 bp in length are tagged as CNVs in the tag (following the 1000 Genomes convention) and were unconditionally checking whether the CNV is already known, by looking at the known cnvs file, which is optional. Fixed. Has the annoying side effect that indels > 50bp in size are not counted as indels, and so are substrated from both the novel and known counts for indels. C'est la vie -- Added integration test to check for this case, using Mauricio's most recent VCF file for NA12878 which has many large indels. Using this more recent and representative file probably a good idea for more future tests in VE and other tools. File is NA12878.HiSeq.WGS.b37_decoy.indel.recalibrated.vcf in Validation_Data --- .../varianteval/evaluators/VariantSummary.java | 17 ++++++++++------- .../varianteval/VariantEvalIntegrationTest.java | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java index b3f3630bd..3c7c6f00c 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/VariantSummary.java @@ -46,6 +46,7 @@ import java.util.*; public class VariantSummary extends VariantEvaluator implements StandardEval { final protected static Logger logger = Logger.getLogger(VariantSummary.class); + /** Indels with size greater than this value are tallied in the CNV column */ private final static int MAX_INDEL_LENGTH = 50; private final static double MIN_CNV_OVERLAP = 0.5; private VariantEvalWalker walker; @@ -196,14 +197,16 @@ public class VariantSummary extends VariantEvaluator implements StandardEval { } private final boolean overlapsKnownCNV(VariantContext cnv) { - final GenomeLoc loc = walker.getGenomeLocParser().createGenomeLoc(cnv, true); - IntervalTree intervalTree = knownCNVs.get(loc.getContig()); + if ( knownCNVs != null ) { + final GenomeLoc loc = walker.getGenomeLocParser().createGenomeLoc(cnv, true); + IntervalTree intervalTree = knownCNVs.get(loc.getContig()); - final Iterator> nodeIt = intervalTree.overlappers(loc.getStart(), loc.getStop()); - while ( nodeIt.hasNext() ) { - final double overlapP = loc.reciprocialOverlapFraction(nodeIt.next().getValue()); - if ( overlapP > MIN_CNV_OVERLAP ) - return true; + final Iterator> nodeIt = intervalTree.overlappers(loc.getStart(), loc.getStop()); + while ( nodeIt.hasNext() ) { + final double overlapP = loc.reciprocialOverlapFraction(nodeIt.next().getValue()); + if ( overlapP > MIN_CNV_OVERLAP ) + return true; + } } return false; diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java index b3555b145..5c3a43c96 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java @@ -450,4 +450,21 @@ public class VariantEvalIntegrationTest extends WalkerTest { ); executeTest("testIntervalStrat", spec); } + + @Test + public void testModernVCFWithLargeIndels() { + WalkerTestSpec spec = new WalkerTestSpec( + buildCommandLine( + "-T VariantEval", + "-R " + b37KGReference, + "-eval " + validationDataLocation + "/NA12878.HiSeq.WGS.b37_decoy.indel.recalibrated.vcf", + "-L 20", + "-D " + b37dbSNP132, + "-o %s" + ), + 1, + Arrays.asList("a6f8b32fa732632da13dfe3ddcc73cef") + ); + executeTest("testModernVCFWithLargeIndels", spec); + } } From d4e7655d14d9bb9c30a79d53fafe309dd9922fa9 Mon Sep 17 00:00:00 2001 From: Guillermo del Angel Date: Fri, 6 Jan 2012 11:24:38 -0500 Subject: [PATCH 29/29] Added ability to call multiallelic indels, if -multiallelic is included in UG arguments. Simple idea: we genotype all alleles with count >= minIndelCnt. To support this, refactored code that computes consensus alleles. To ease merging of mulitple alt alleles, we create a single vc for each alt alleles and then use VariantContextUtils.simpleMerge to carry out merging, which takes care of handling all corner conditions already. In order to use this, interface to GenotypeLikelihoodsCalculationModel changed to pass in a GenomeLocParser object (why are these objects to hard to handle??). More testing is required and feature turned off my default. --- .../GenotypeLikelihoodsCalculationModel.java | 42 ++--- ...elGenotypeLikelihoodsCalculationModel.java | 147 ++++++++++-------- ...NPGenotypeLikelihoodsCalculationModel.java | 8 +- .../genotyper/UnifiedArgumentCollection.java | 2 +- .../genotyper/UnifiedGenotyperEngine.java | 2 +- 5 files changed, 106 insertions(+), 95 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java index b30a25414..ace780dd0 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java @@ -31,6 +31,7 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; @@ -72,25 +73,28 @@ public abstract class GenotypeLikelihoodsCalculationModel implements Cloneable { this.logger = logger; } - /** - * Must be overridden by concrete subclasses - * - * @param tracker rod data - * @param ref reference context - * @param contexts stratified alignment contexts - * @param contextType stratified context type - * @param priors priors to use for GLs - * @param alternateAlleleToUse the alternate allele to use, null if not set - * @param useBAQedPileup should we use the BAQed pileup or the raw one? - * @return variant context where genotypes are no-called but with GLs - */ - public abstract VariantContext getLikelihoods(RefMetaDataTracker tracker, - ReferenceContext ref, - Map contexts, - AlignmentContextUtils.ReadOrientation contextType, - GenotypePriors priors, - Allele alternateAlleleToUse, - boolean useBAQedPileup); + /** + * Can be overridden by concrete subclasses + * + * @param tracker rod data + * @param ref reference context + * @param contexts stratified alignment contexts + * @param contextType stratified context type + * @param priors priors to use for GLs + * @param alternateAlleleToUse the alternate allele to use, null if not set + * @param useBAQedPileup should we use the BAQed pileup or the raw one? + * @param locParser Genome Loc Parser + * @return variant context where genotypes are no-called but with GLs + */ + public abstract VariantContext getLikelihoods(RefMetaDataTracker tracker, + ReferenceContext ref, + Map contexts, + AlignmentContextUtils.ReadOrientation contextType, + GenotypePriors priors, + Allele alternateAlleleToUse, + boolean useBAQedPileup, + GenomeLocParser locParser); + protected int getFilteredDepth(ReadBackedPileup pileup) { int count = 0; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java index 8d279005b..0756caf03 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java @@ -33,6 +33,7 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.indels.PairHMMIndelErrorModel; import org.broadinstitute.sting.utils.BaseUtils; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.Haplotype; import org.broadinstitute.sting.utils.clipping.ReadClipper; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; @@ -54,17 +55,17 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood private final boolean getAlleleListFromVCF; private boolean DEBUG = false; - + private final boolean doMultiAllelicCalls; private boolean ignoreSNPAllelesWhenGenotypingIndels = false; - + private final int maxAlternateAlleles; private PairHMMIndelErrorModel pairModel; private static ThreadLocal>> indelLikelihoodMap = new ThreadLocal>>() { - protected synchronized HashMap> initialValue() { - return new HashMap>(); - } - }; + protected synchronized HashMap> initialValue() { + return new HashMap>(); + } + }; private LinkedHashMap haplotypeMap; @@ -87,6 +88,8 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood minIndelCountForGenotyping = UAC.MIN_INDEL_COUNT_FOR_GENOTYPING; HAPLOTYPE_SIZE = UAC.INDEL_HAPLOTYPE_SIZE; DEBUG = UAC.OUTPUT_DEBUG_INDEL_INFO; + maxAlternateAlleles = UAC.MAX_ALTERNATE_ALLELES; + doMultiAllelicCalls = UAC.MULTI_ALLELIC; haplotypeMap = new LinkedHashMap(); ignoreSNPAllelesWhenGenotypingIndels = UAC.IGNORE_SNP_ALLELES; @@ -95,7 +98,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood private ArrayList computeConsensusAlleles(ReferenceContext ref, Map contexts, - AlignmentContextUtils.ReadOrientation contextType) { + AlignmentContextUtils.ReadOrientation contextType, GenomeLocParser locParser) { Allele refAllele=null, altAllele=null; GenomeLoc loc = ref.getLocus(); ArrayList aList = new ArrayList(); @@ -114,7 +117,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood if (insCount < minIndelCountForGenotyping && delCount < minIndelCountForGenotyping) return aList; - + for ( Map.Entry sample : contexts.entrySet() ) { // todo -- warning, can be duplicating expensive partition here AlignmentContext context = AlignmentContextUtils.stratify(sample.getValue(), contextType); @@ -126,9 +129,9 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood for ( ExtendedEventPileupElement p : indelPileup.toExtendedIterable() ) { //SAMRecord read = p.getRead(); - GATKSAMRecord read = ReadClipper.hardClipAdaptorSequence(p.getRead()); + GATKSAMRecord read = ReadClipper.hardClipAdaptorSequence(p.getRead()); if (read == null) - continue; + continue; if(ReadUtils.is454Read(read)) { continue; } @@ -208,63 +211,69 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood } } -/* if (DEBUG) { - int icount = indelPileup.getNumberOfInsertions(); - int dcount = indelPileup.getNumberOfDeletions(); - if (icount + dcount > 0) - { - List> eventStrings = indelPileup.getEventStringsWithCounts(ref.getBases()); - System.out.format("#ins: %d, #del:%d\n", insCount, delCount); - - for (int i=0 ; i < eventStrings.size() ; i++ ) { - System.out.format("%s:%d,",eventStrings.get(i).first,eventStrings.get(i).second); - // int k=0; - } - System.out.println(); - } - } */ } + Collection vcs = new ArrayList(); int maxAlleleCnt = 0; String bestAltAllele = ""; + for (String s : consensusIndelStrings.keySet()) { - int curCnt = consensusIndelStrings.get(s); - if (curCnt > maxAlleleCnt) { - maxAlleleCnt = curCnt; - bestAltAllele = s; + int curCnt = consensusIndelStrings.get(s), stop = 0; + // if observed count if above minimum threshold, we will genotype this allele + if (curCnt < minIndelCountForGenotyping) + continue; + + if (s.startsWith("D")) { + // get deletion length + int dLen = Integer.valueOf(s.substring(1)); + // get ref bases of accurate deletion + int startIdxInReference = 1+loc.getStart()-ref.getWindow().getStart(); + stop = loc.getStart() + dLen; + byte[] refBases = Arrays.copyOfRange(ref.getBases(),startIdxInReference,startIdxInReference+dLen); + + if (Allele.acceptableAlleleBases(refBases)) { + refAllele = Allele.create(refBases,true); + altAllele = Allele.create(Allele.NULL_ALLELE_STRING, false); + } + } + else { + // insertion case + if (Allele.acceptableAlleleBases(s)) { + refAllele = Allele.create(Allele.NULL_ALLELE_STRING, true); + altAllele = Allele.create(s, false); + stop = loc.getStart(); + } } -// if (DEBUG) -// System.out.format("Key:%s, number: %d\n",s,consensusIndelStrings.get(s) ); - } //gdebug- - if (maxAlleleCnt < minIndelCountForGenotyping) - return aList; - if (bestAltAllele.startsWith("D")) { - // get deletion length - int dLen = Integer.valueOf(bestAltAllele.substring(1)); - // get ref bases of accurate deletion - int startIdxInReference = 1+loc.getStart()-ref.getWindow().getStart(); + ArrayList vcAlleles = new ArrayList(); + vcAlleles.add(refAllele); + vcAlleles.add(altAllele); - //System.out.println(new String(ref.getBases())); - byte[] refBases = Arrays.copyOfRange(ref.getBases(),startIdxInReference,startIdxInReference+dLen); + final VariantContextBuilder builder = new VariantContextBuilder().source(""); + builder.loc(loc.getContig(), loc.getStart(), stop); + builder.alleles(vcAlleles); + builder.referenceBaseForIndel(ref.getBase()); + builder.noGenotypes(); + if (doMultiAllelicCalls) + vcs.add(builder.make()); + else { + if (curCnt > maxAlleleCnt) { + maxAlleleCnt = curCnt; + vcs.clear(); + vcs.add(builder.make()); + } - if (Allele.acceptableAlleleBases(refBases)) { - refAllele = Allele.create(refBases,true); - altAllele = Allele.create(Allele.NULL_ALLELE_STRING, false); } } - else { - // insertion case - if (Allele.acceptableAlleleBases(bestAltAllele)) { - refAllele = Allele.create(Allele.NULL_ALLELE_STRING, true); - altAllele = Allele.create(bestAltAllele, false); - } - } - if (refAllele != null && altAllele != null) { - aList.add(0,refAllele); - aList.add(1,altAllele); - } + + if (vcs.isEmpty()) + return aList; // nothing else to do, no alleles passed minimum count criterion + + VariantContext mergedVC = VariantContextUtils.simpleMerge(locParser, vcs, null, VariantContextUtils.FilteredRecordMergeType.KEEP_IF_ANY_UNFILTERED, VariantContextUtils.GenotypeMergeType.UNSORTED, false, false, null, false, false); + + aList = new ArrayList(mergedVC.getAlleles()); + return aList; } @@ -277,7 +286,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood AlignmentContextUtils.ReadOrientation contextType, GenotypePriors priors, Allele alternateAlleleToUse, - boolean useBAQedPileup) { + boolean useBAQedPileup, GenomeLocParser locParser) { if ( tracker == null ) return null; @@ -294,17 +303,17 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood haplotypeMap.clear(); if (getAlleleListFromVCF) { - for( final VariantContext vc_input : tracker.getValues(UAC.alleles, loc) ) { - if( vc_input != null && - allowableTypes.contains(vc_input.getType()) && - ref.getLocus().getStart() == vc_input.getStart()) { - vc = vc_input; - break; - } - } - // ignore places where we don't have a variant - if ( vc == null ) - return null; + for( final VariantContext vc_input : tracker.getValues(UAC.alleles, loc) ) { + if( vc_input != null && + allowableTypes.contains(vc_input.getType()) && + ref.getLocus().getStart() == vc_input.getStart()) { + vc = vc_input; + break; + } + } + // ignore places where we don't have a variant + if ( vc == null ) + return null; alleleList.clear(); if (ignoreSNPAllelesWhenGenotypingIndels) { @@ -323,7 +332,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood } else { - alleleList = computeConsensusAlleles(ref,contexts, contextType); + alleleList = computeConsensusAlleles(ref,contexts, contextType, locParser); if (alleleList.isEmpty()) return null; } @@ -340,7 +349,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood if (alleleList.isEmpty()) return null; - + refAllele = alleleList.get(0); altAllele = alleleList.get(1); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java index eee89674a..81c766e4d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java @@ -30,10 +30,7 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.utils.BaseUtils; -import org.broadinstitute.sting.utils.GenomeLoc; -import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.utils.Utils; +import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; import org.broadinstitute.sting.utils.exceptions.StingException; @@ -66,7 +63,8 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC final AlignmentContextUtils.ReadOrientation contextType, final GenotypePriors priors, final Allele alternateAlleleToUse, - final boolean useBAQedPileup) { + final boolean useBAQedPileup, + final GenomeLocParser locParser) { if ( !(priors instanceof DiploidSNPGenotypePriors) ) throw new StingException("Only diploid-based SNP priors are supported in the SNP GL model"); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java index 4639d67a7..16159393f 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java @@ -109,7 +109,7 @@ public class UnifiedArgumentCollection { * For advanced users only. */ @Advanced - @Argument(fullName = "multiallelic", shortName = "multiallelic", doc = "Allow the discovery of multiple alleles (SNPs only)", required = false) + @Argument(fullName = "multiallelic", shortName = "multiallelic", doc = "Allow the discovery of multiple alleles", required = false) public boolean MULTI_ALLELIC = false; /** diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index 34be88dbb..5d73e8d28 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -243,7 +243,7 @@ public class UnifiedGenotyperEngine { glcm.set(getGenotypeLikelihoodsCalculationObject(logger, UAC)); } - return glcm.get().get(model).getLikelihoods(tracker, refContext, stratifiedContexts, type, getGenotypePriors(model), alternateAlleleToUse, useBAQedPileup && BAQEnabledOnCMDLine); + return glcm.get().get(model).getLikelihoods(tracker, refContext, stratifiedContexts, type, getGenotypePriors(model), alternateAlleleToUse, useBAQedPileup && BAQEnabledOnCMDLine, genomeLocParser); } private VariantCallContext generateEmptyContext(RefMetaDataTracker tracker, ReferenceContext ref, Map stratifiedContexts, AlignmentContext rawContext) {