From 491ed70b4400f3cf918f59558832e1e388312ef8 Mon Sep 17 00:00:00 2001 From: hanna Date: Thu, 25 Jun 2009 22:51:38 +0000 Subject: [PATCH] TraverseByLocusWindow -- asstd bug fixes. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1109 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/GenomeAnalysisEngine.java | 8 ++++---- .../sting/gatk/executive/MicroScheduler.java | 14 ++++++++++---- .../gatk/traversals/TraverseLocusWindows.java | 16 +++++++++++++++- .../gatk/walkers/PrintLocusContextWalker.java | 6 +++--- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index 325de5540..4809e3490 100755 --- a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -118,11 +118,11 @@ public class GenomeAnalysisEngine { // if we're a read or a locus walker, we use the new system. Right now we have complicated // branching based on the input data, but this should disapear when all the traversals are switched over - if (!(my_walker instanceof LocusWindowWalker) && !args.useNewTraverseByLocusWindow) { - microScheduler = createMicroscheduler(my_walker, rods); - } else { // we have an old style traversal, once we're done return + if (my_walker instanceof LocusWindowWalker && !args.useNewTraverseByLocusWindow) { legacyTraversal(my_walker, rods); return; + } else { // we have an old style traversal, once we're done return + microScheduler = createMicroscheduler(my_walker, rods); } // Prepare the sort ordering w.r.t. the sequence dictionary @@ -194,7 +194,7 @@ public class GenomeAnalysisEngine { MicroScheduler microScheduler = null; // we need to verify different parameter based on the walker type - if (my_walker instanceof LocusWalker) { + if (my_walker instanceof LocusWalker || my_walker instanceof LocusWindowWalker) { // create the MicroScheduler if( argCollection.walkAllLoci ) Utils.scareUser("Argument --all_loci is deprecated. Please annotate your walker with @By(DataSource.REFERENCE) to perform a by-reference traversal."); diff --git a/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java b/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java index 4e7f2a62a..263cda5a9 100755 --- a/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java +++ b/java/src/org/broadinstitute/sting/gatk/executive/MicroScheduler.java @@ -36,10 +36,7 @@ import org.broadinstitute.sting.gatk.datasources.simpleDataSources.ReferenceOrde import org.broadinstitute.sting.gatk.datasources.simpleDataSources.SAMDataSource; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; -import org.broadinstitute.sting.gatk.traversals.TraversalEngine; -import org.broadinstitute.sting.gatk.traversals.TraverseDuplicates; -import org.broadinstitute.sting.gatk.traversals.TraverseLoci; -import org.broadinstitute.sting.gatk.traversals.TraverseReads; +import org.broadinstitute.sting.gatk.traversals.*; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.GenomeLocSortedSet; @@ -107,6 +104,8 @@ public abstract class MicroScheduler { traversalEngine = new TraverseReads(reads.getReadsFiles(), refFile, rods); } else if (walker instanceof LocusWalker) { traversalEngine = new TraverseLoci(reads.getReadsFiles(), refFile, rods); + } else if (walker instanceof LocusWindowWalker) { + traversalEngine = new TraverseLocusWindows(reads.getReadsFiles(), refFile, rods); } else if (walker instanceof DuplicateWalker) { traversalEngine = new TraverseDuplicates(reads.getReadsFiles(), refFile, rods); } else { @@ -184,6 +183,13 @@ public abstract class MicroScheduler { drivingDataSource.getSequenceDictionary(), SHARD_SIZE, maxIterations); } + } else if (walker instanceof LocusWindowWalker) { + if( intervals == null ) + throw new StingException("Unable to shard: walker is of type LocusWindow, but no intervals were provided"); + shardStrategy = ShardStrategyFactory.shatter(ShardStrategyFactory.SHATTER_STRATEGY.INTERVAL, + drivingDataSource.getSequenceDictionary(), + SHARD_SIZE, + intervals, maxIterations); } else throw new StingException("Unable to support walker of type" + walker.getClass().getName()); diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java index dc1f62f21..1f094e9c2 100755 --- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java +++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLocusWindows.java @@ -47,7 +47,11 @@ public class TraverseLocusWindows extends TraversalEngine { LocusContext locus = getLocusContext(readView.iterator(), interval); - String referenceSubsequence = new String(referenceView.getReferenceBases(interval)); + // The TraverseByLocusWindow expands intervals to cover all reads in a non-standard way. + // TODO: Convert this approach to the standard. + GenomeLoc expandedInterval = locus.getLocation(); + + String referenceSubsequence = new String(referenceView.getReferenceBases(expandedInterval)); // Iterate forward to get all reference ordered data covering this interval final RefMetaDataTracker tracker = referenceOrderedDataView.getReferenceOrderedDataAtLocus(locus.getLocation()); @@ -94,4 +98,14 @@ public class TraverseLocusWindows extends TraversalEngine { return locus; } + /** + * Temporary override of printOnTraversalDone. + * TODO: Add some sort of TE.getName() function once all TraversalEngines are ported. + * @param sum Result of the computation. + * @param Type of the result. + */ + public void printOnTraversalDone( T sum ) { + printOnTraversalDone( "intervals", sum ); + } + } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/PrintLocusContextWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/PrintLocusContextWalker.java index 12a48f659..5f909db25 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/PrintLocusContextWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/PrintLocusContextWalker.java @@ -17,9 +17,9 @@ import net.sf.samtools.SAMRecord; * Time: 11:23:14 AM * To change this template use File | Settings | File Templates. */ -public class PrintLocusContextWalker extends LocusWalker implements TreeReducible { - public LocusContext map(RefMetaDataTracker tracker, char ref, LocusContext context) { - out.printf( "In map: ref = %c, loc = %s, reads = %s%n", ref, +public class PrintLocusContextWalker extends LocusWindowWalker implements TreeReducible { + public LocusContext map(RefMetaDataTracker tracker, String ref, LocusContext context) { + out.printf( "In map: ref = %s, loc = %s, reads = %s%n", ref, context.getLocation(), Arrays.deepToString( getReadNames(context.getReads()) ) ); return context;