Removing dependence on extended events from the RealignerTargetCreator. Did some minor refactoring while I was in there.

This commit is contained in:
Eric Banks 2012-03-30 10:33:30 -04:00
parent b467cd1dae
commit 6b49af253b
2 changed files with 16 additions and 34 deletions

View File

@ -31,18 +31,13 @@ import org.broadinstitute.sting.commandline.Output;
import org.broadinstitute.sting.commandline.RodBinding; import org.broadinstitute.sting.commandline.RodBinding;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.filters.BadCigarFilter; import org.broadinstitute.sting.gatk.filters.*;
import org.broadinstitute.sting.gatk.filters.BadMateFilter;
import org.broadinstitute.sting.gatk.filters.MappingQualityZeroFilter;
import org.broadinstitute.sting.gatk.filters.Platform454Filter;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.gatk.walkers.*;
import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLoc;
import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.baq.BAQ;
import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.exceptions.UserException;
import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement;
import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.VariantContext;
@ -99,7 +94,7 @@ import java.util.TreeSet;
* *
* @author ebanks * @author ebanks
*/ */
@ReadFilters({Platform454Filter.class, MappingQualityZeroFilter.class, BadCigarFilter.class}) @ReadFilters({MappingQualityZeroFilter.class, MappingQualityUnavailableFilter.class, BadMateFilter.class, Platform454Filter.class, BadCigarFilter.class})
@Reference(window=@Window(start=-1,stop=50)) @Reference(window=@Window(start=-1,stop=50))
@Allows(value={DataSource.READS, DataSource.REFERENCE}) @Allows(value={DataSource.READS, DataSource.REFERENCE})
@By(DataSource.REFERENCE) @By(DataSource.REFERENCE)
@ -142,16 +137,17 @@ public class RealignerTargetCreator extends RodWalker<RealignerTargetCreator.Eve
protected int maxIntervalSize = 500; protected int maxIntervalSize = 500;
@Override
public boolean generateExtendedEvents() { return true; }
@Override @Override
public boolean includeReadsWithDeletionAtLoci() { return true; } public boolean includeReadsWithDeletionAtLoci() { return true; }
private boolean lookForMismatchEntropy;
public void initialize() { public void initialize() {
if ( windowSize < 2 ) if ( windowSize < 2 )
throw new UserException.BadArgumentValue("windowSize", "Window Size must be an integer greater than 1"); throw new UserException.BadArgumentValue("windowSize", "Window Size must be an integer greater than 1");
lookForMismatchEntropy = mismatchThreshold > 0.0 && mismatchThreshold <= 1.0;
} }
public Event map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { public Event map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
@ -162,17 +158,6 @@ public class RealignerTargetCreator extends RodWalker<RealignerTargetCreator.Eve
int furthestStopPos = -1; int furthestStopPos = -1;
// look for insertions in the extended context (we'll get deletions from the normal context)
if ( context.hasExtendedEventPileup() ) {
ReadBackedExtendedEventPileup pileup = context.getExtendedEventPileup();
if ( pileup.getNumberOfInsertions() > 0 ) {
hasIndel = hasInsertion = true;
// check the ends of the reads to see how far they extend
for (ExtendedEventPileupElement p : pileup.toExtendedIterable() )
furthestStopPos = Math.max(furthestStopPos, p.getRead().getAlignmentEnd());
}
}
// look at the rods for indels or SNPs // look at the rods for indels or SNPs
if ( tracker != null ) { if ( tracker != null ) {
for ( VariantContext vc : tracker.getValues(known) ) { for ( VariantContext vc : tracker.getValues(known) ) {
@ -201,24 +186,24 @@ public class RealignerTargetCreator extends RodWalker<RealignerTargetCreator.Eve
// look at the normal context to get deletions and positions with high entropy // look at the normal context to get deletions and positions with high entropy
if ( context.hasBasePileup() ) { if ( context.hasBasePileup() ) {
ReadBackedPileup pileup = context.getBasePileup(); final ReadBackedPileup pileup = context.getBasePileup();
int mismatchQualities = 0, totalQualities = 0; int mismatchQualities = 0, totalQualities = 0;
byte refBase = ref.getBase(); final byte refBase = ref.getBase();
for (PileupElement p : pileup ) { for ( PileupElement p : pileup ) {
if ( BadMateFilter.hasBadMate(p.getRead()) )
continue;
// check the ends of the reads to see how far they extend // check the ends of the reads to see how far they extend
furthestStopPos = Math.max(furthestStopPos, p.getRead().getAlignmentEnd()); furthestStopPos = Math.max(furthestStopPos, p.getRead().getAlignmentEnd());
// is it a deletion? (sanity check in case extended event missed it) // is it a deletion or insertion?
if ( p.isDeletion() ) { if ( p.isDeletion() || p.isBeforeInsertion() ) {
hasIndel = true; hasIndel = true;
if ( p.isBeforeInsertion() )
hasInsertion = true;
} }
// look for mismatches // look for mismatches
else { else if ( lookForMismatchEntropy ) {
if ( p.getBase() != refBase ) if ( p.getBase() != refBase )
mismatchQualities += p.getQual(); mismatchQualities += p.getQual();
totalQualities += p.getQual(); totalQualities += p.getQual();
@ -226,8 +211,7 @@ public class RealignerTargetCreator extends RodWalker<RealignerTargetCreator.Eve
} }
// make sure we're supposed to look for high entropy // make sure we're supposed to look for high entropy
if ( mismatchThreshold > 0.0 && if ( lookForMismatchEntropy &&
mismatchThreshold <= 1.0 &&
pileup.getNumberOfElements() >= minReadsAtLocus && pileup.getNumberOfElements() >= minReadsAtLocus &&
(double)mismatchQualities / (double)totalQualities >= mismatchThreshold ) (double)mismatchQualities / (double)totalQualities >= mismatchThreshold )
hasPointEvent = true; hasPointEvent = true;
@ -244,8 +228,6 @@ public class RealignerTargetCreator extends RodWalker<RealignerTargetCreator.Eve
GenomeLoc eventLoc = context.getLocation(); GenomeLoc eventLoc = context.getLocation();
if ( hasInsertion ) if ( hasInsertion )
eventLoc = getToolkit().getGenomeLocParser().createGenomeLoc(eventLoc.getContig(), eventLoc.getStart(), eventLoc.getStart()+1); eventLoc = getToolkit().getGenomeLocParser().createGenomeLoc(eventLoc.getContig(), eventLoc.getStart(), eventLoc.getStart()+1);
else if ( hasIndel && !context.hasBasePileup() )
eventLoc = getToolkit().getGenomeLocParser().createGenomeLoc(eventLoc.getContig(), eventLoc.getStart(), furthestStopPos);
EVENT_TYPE eventType = (hasIndel ? (hasPointEvent ? EVENT_TYPE.BOTH : EVENT_TYPE.INDEL_EVENT) : EVENT_TYPE.POINT_EVENT); EVENT_TYPE eventType = (hasIndel ? (hasPointEvent ? EVENT_TYPE.BOTH : EVENT_TYPE.INDEL_EVENT) : EVENT_TYPE.POINT_EVENT);

View File

@ -26,7 +26,7 @@ public class RealignerTargetCreatorIntegrationTest extends WalkerTest {
@Test @Test
public void testIntervals2() { public void testIntervals2() {
String md5 = "e0f745b79b679c225314a2abef4919ff"; String md5 = "d073237694175c75d37bd4f40b8c64db";
WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec(
"-T RealignerTargetCreator --known " + b36dbSNP129 + " -R " + b36KGReference + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,000,000-10,200,000 -o %s", "-T RealignerTargetCreator --known " + b36dbSNP129 + " -R " + b36KGReference + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -L 1:10,000,000-10,200,000 -o %s",