Fixes for getting ValidatingPileup running in parallel.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@807 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-05-22 21:20:24 +00:00
parent cd80e3f372
commit ec2e8d5726
3 changed files with 15 additions and 10 deletions

View File

@ -1,6 +1,7 @@
package org.broadinstitute.sting.gatk.executive;
import org.broadinstitute.sting.gatk.traversals.TraverseLoci;
import org.broadinstitute.sting.gatk.traversals.TraversalEngine;
import org.broadinstitute.sting.gatk.walkers.Walker;
import org.broadinstitute.sting.gatk.walkers.TreeReducible;
import org.broadinstitute.sting.gatk.dataSources.shards.ShardStrategy;
@ -42,8 +43,6 @@ public class HierarchicalMicroScheduler extends MicroScheduler implements Reduce
*/
private static final int MAX_OUTSTANDING_OUTPUT_MERGES = 50;
private TraverseLoci traversalEngine = null;
/**
* Manage currently running threads.
*/
@ -62,8 +61,6 @@ public class HierarchicalMicroScheduler extends MicroScheduler implements Reduce
protected HierarchicalMicroScheduler( Walker walker, Reads reads, File refFile, List<ReferenceOrderedData<? extends ReferenceOrderedDatum>> rods, int nThreadsToUse ) {
super( walker, reads, refFile, rods );
this.threadPool = Executors.newFixedThreadPool(nThreadsToUse);
if( !(traversalEngine instanceof TraverseLoci) )
throw new UnsupportedOperationException("Traversal engine supports only traverse loci by reference at this time.");
}
public Object execute( Walker walker, List<GenomeLoc> intervals ) {
@ -211,7 +208,7 @@ public class HierarchicalMicroScheduler extends MicroScheduler implements Reduce
Shard shard = traverseTasks.remove();
OutputMerger outputMerger = new OutputMerger();
ShardTraverser traverser = new ShardTraverser( traversalEngine,
ShardTraverser traverser = new ShardTraverser( getTraversalEngine(),
walker,
shard,
getShardDataProvider(shard),

View File

@ -2,7 +2,7 @@ package org.broadinstitute.sting.gatk.executive;
import org.broadinstitute.sting.gatk.dataSources.providers.ShardDataProvider;
import org.broadinstitute.sting.gatk.dataSources.shards.Shard;
import org.broadinstitute.sting.gatk.traversals.TraverseLoci;
import org.broadinstitute.sting.gatk.traversals.TraversalEngine;
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
import org.broadinstitute.sting.gatk.OutputTracker;
import org.broadinstitute.sting.gatk.walkers.Walker;
@ -25,12 +25,12 @@ import java.util.concurrent.Callable;
*/
public class ShardTraverser implements Callable {
private Walker walker;
private TraverseLoci traversalEngine;
private TraversalEngine traversalEngine;
private Shard shard;
private ShardDataProvider dataProvider;
private OutputMerger output;
public ShardTraverser( TraverseLoci traversalEngine,
public ShardTraverser( TraversalEngine traversalEngine,
Walker walker,
Shard shard,
ShardDataProvider dataProvider,

View File

@ -8,6 +8,7 @@ import org.broadinstitute.sting.utils.Utils;
import org.broadinstitute.sting.utils.Pileup;
import org.broadinstitute.sting.utils.BasicPileup;
import org.broadinstitute.sting.utils.ReadBackedPileup;
import org.broadinstitute.sting.utils.StingException;
/**
* Created by IntelliJ IDEA.
@ -17,14 +18,14 @@ import org.broadinstitute.sting.utils.ReadBackedPileup;
* To change this template use File | Settings | File Templates.
*/
@Requires(value={DataSource.READS,DataSource.REFERENCE},referenceMetaData=@RMD(name="pileup",type=rodSAMPileup.class))
public class ValidatingPileupWalker extends LocusWalker<Integer, ValidationStats> {
public class ValidatingPileupWalker extends LocusWalker<Integer, ValidationStats> implements TreeReducible<ValidationStats> {
@Argument(fullName="continue_after_error",doc="Continue after an error",required=false)
public boolean CONTINUE_AFTER_AN_ERROR = false;
public Integer map(RefMetaDataTracker tracker, char ref, LocusContext context) {
Pileup pileup = new ReadBackedPileup(ref, context);
Pileup truePileup = (Pileup)tracker.lookup("pileup", null);
if ( truePileup == null ) {
System.out.printf("No truth pileup data available at %s%n", pileup.getPileupString());
if ( ! CONTINUE_AFTER_AN_ERROR ) {
@ -51,6 +52,13 @@ public class ValidatingPileupWalker extends LocusWalker<Integer, ValidationStats
sum.nBases += value;
return sum;
}
public ValidationStats treeReduce( ValidationStats lhs, ValidationStats rhs ) {
ValidationStats combined = new ValidationStats();
combined.nLoci = lhs.nLoci + rhs.nLoci;
combined.nBases = lhs.nBases + rhs.nBases;
return combined;
}
}
class ValidationStats {