From 8d13597a271da4285f8c2b4dcbbd73908e4c1599 Mon Sep 17 00:00:00 2001 From: depristo Date: Wed, 6 Jan 2010 12:15:36 +0000 Subject: [PATCH] Temporary command-line support to enable rod walkers, if you know what you are doing this is safe. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2505 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/GATKArgumentCollection.java | 8 ++++++++ .../gatk/datasources/providers/RodLocusView.java | 5 +++-- .../sting/gatk/traversals/TraverseLoci.java | 13 ++++++++----- .../gatk/walkers/varianteval/VariantEvalWalker.java | 4 ++-- .../VariantEvalWalkerIntegrationTest.java | 2 +- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/GATKArgumentCollection.java b/java/src/org/broadinstitute/sting/gatk/GATKArgumentCollection.java index 2bc802872..f9e5645a6 100755 --- a/java/src/org/broadinstitute/sting/gatk/GATKArgumentCollection.java +++ b/java/src/org/broadinstitute/sting/gatk/GATKArgumentCollection.java @@ -141,6 +141,11 @@ public class GATKArgumentCollection { @Argument(fullName = "interval_merging", shortName = "im", doc = "What interval merging rule should we use {ALL [DEFAULT],OVERLAPPING_ONLY,NONE}.", required = false) public INTERVAL_MERGING_RULE intervalMerging = INTERVAL_MERGING_RULE.ALL; + /** Should we enable rodWalkers? This is currently unsafe */ + @Element(required = false) + @Argument(fullName = "enableRodWalkers", shortName = "erw", doc = "Enable experimental rodWalker support. TEMPORARY HACK TO ALLOW EXPERIMENTATION WITH ROD WALKERS. [default is false]}.", required = false) + public boolean enableRodWalkers = false; + /** * marshal the data out to a object * @@ -294,6 +299,9 @@ public class GATKArgumentCollection { if (other.intervalMerging != this.intervalMerging) { return false; } + if (other.enableRodWalkers != this.enableRodWalkers) { + return false; + } return true; } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java index 743a938a4..44d126387 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java @@ -7,6 +7,7 @@ import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.MergingIterator; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.StingException; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import java.util.*; @@ -87,7 +88,7 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { rodQueue = new MergingIterator>(iterators); - throw new StingException("RodLocusView currently disabled"); + //throw new StingException("RodLocusView currently disabled"); } public RefMetaDataTracker getReferenceOrderedDataAtLocus( GenomeLoc loc ) { @@ -127,7 +128,7 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { // calculate the number of skipped bases, and update lastLoc so we can do that again in the next() long skippedBases = getSkippedBases( rodSite ); lastLoc = site; - return new AlignmentContext(site, new ArrayList(), new ArrayList(), skippedBases); + return new AlignmentContext(site, new ReadBackedPileup(site), skippedBases); } private RefMetaDataTracker createTracker( Collection> allTracksHere ) { diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java index c3cab6944..4bfc85bae 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLoci.java @@ -2,6 +2,7 @@ package org.broadinstitute.sting.gatk.traversals; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.WalkerManager; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.providers.*; @@ -13,6 +14,7 @@ import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import java.util.ArrayList; @@ -21,7 +23,7 @@ import java.util.ArrayList; */ public class TraverseLoci extends TraversalEngine { final private static String LOCI_STRING = "sites"; - final private static boolean ENABLE_ROD_TRAVERSAL = false; + //final private static boolean ENABLE_ROD_TRAVERSAL = false; /** @@ -57,7 +59,7 @@ public class TraverseLoci extends TraversalEngine { //ReferenceOrderedView referenceOrderedDataView = new ReferenceOrderedView( dataProvider ); ReferenceOrderedView referenceOrderedDataView = null; - if ( ! ENABLE_ROD_TRAVERSAL || WalkerManager.getWalkerDataSource(walker) != DataSource.REFERENCE_ORDERED_DATA ) + if ( ! GenomeAnalysisEngine.instance.getArguments().enableRodWalkers || WalkerManager.getWalkerDataSource(walker) != DataSource.REFERENCE_ORDERED_DATA ) referenceOrderedDataView = new ManagingReferenceOrderedView( dataProvider ); else referenceOrderedDataView = (RodLocusView)locusView; @@ -102,12 +104,13 @@ public class TraverseLoci extends TraversalEngine { // We have a final map call to execute here to clean up the skipped based from the // last position in the ROD to that in the interval - if ( ENABLE_ROD_TRAVERSAL && WalkerManager.getWalkerDataSource(walker) == DataSource.REFERENCE_ORDERED_DATA ) { + if ( GenomeAnalysisEngine.instance.getArguments().enableRodWalkers && WalkerManager.getWalkerDataSource(walker) == DataSource.REFERENCE_ORDERED_DATA ) { RodLocusView rodLocusView = (RodLocusView)locusView; long nSkipped = rodLocusView.getLastSkippedBases(); if ( nSkipped > 0 ) { // no sense in making the call if you don't have anything interesting to say - AlignmentContext ac = new AlignmentContext(rodLocusView.getLocOneBeyondShard(), null, null, nSkipped); + GenomeLoc site = rodLocusView.getLocOneBeyondShard(); + AlignmentContext ac = new AlignmentContext(site, new ReadBackedPileup(site), nSkipped); M x = locusWalker.map(null, null, ac); sum = locusWalker.reduce(x, sum); } @@ -135,7 +138,7 @@ public class TraverseLoci extends TraversalEngine { DataSource dataSource = WalkerManager.getWalkerDataSource(walker); if( dataSource == DataSource.READS ) return new CoveredLocusView(dataProvider); - else if( dataSource == DataSource.REFERENCE || ! ENABLE_ROD_TRAVERSAL ) + else if( dataSource == DataSource.REFERENCE || ! GenomeAnalysisEngine.instance.getArguments().enableRodWalkers ) return new AllLocusView(dataProvider); else if( dataSource == DataSource.REFERENCE_ORDERED_DATA ) return new RodLocusView(dataProvider); diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalker.java index 62ff415e3..89cd10265 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalker.java @@ -22,8 +22,8 @@ import java.util.*; */ @Requires(value={DataSource.REFERENCE},referenceMetaData={@RMD(name="eval",type=ReferenceOrderedDatum.class)}) // right now we have no base variant class for rods, this should change //@Allows(value={DataSource.REFERENCE},referenceMetaData = {@RMD(name="eval",type=ReferenceOrderedDatum.class), @RMD(name="dbsnp",type=rodDbSNP.class),@RMD(name="hapmap-chip",type=ReferenceOrderedDatum.class), @RMD(name="interval",type=IntervalRod.class), @RMD(name="validation",type=RodGenotypeChipAsGFF.class)}) -public class VariantEvalWalker extends RefWalker { -//public class VariantEvalWalker extends RodWalker { +//public class VariantEvalWalker extends RefWalker { +public class VariantEvalWalker extends RodWalker { @Argument(shortName="minPhredConfidenceScore", doc="Minimum confidence score to consider an evaluation SNP a variant", required=false) public double minConfidenceScore = -1.0; diff --git a/java/test/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalkerIntegrationTest.java b/java/test/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalkerIntegrationTest.java index e0905295c..9190f2646 100644 --- a/java/test/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalkerIntegrationTest.java +++ b/java/test/org/broadinstitute/sting/playground/gatk/walkers/varianteval/VariantEvalWalkerIntegrationTest.java @@ -177,7 +177,7 @@ public class VariantEvalWalkerIntegrationTest extends WalkerTest { @Test public void testEvalRuntimeWithLotsOfIntervals() { List md5 = new ArrayList(); - md5.add(""); + md5.add("d11ea079fc1835514d392056a2c2a28d"); WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( "-T VariantEval -R " + oneKGLocation + "reference/human_b36_both.fasta " + "-B eval,Variants," + validationDataLocation + "NA12878.pilot_3.all.geli.calls " +