diff --git a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index aea61ba0a..759c0932d 100755 --- a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -674,7 +674,8 @@ public class GenomeAnalysisEngine { SHARD_SIZE, intervals, maxIterations); } else - shardStrategy = ShardStrategyFactory.shatter(readsDataSource,ShardStrategyFactory.SHATTER_STRATEGY.LINEAR, + shardStrategy = ShardStrategyFactory.shatter(readsDataSource, + argCollection.experimentalSharding ? ShardStrategyFactory.SHATTER_STRATEGY.LOCUS_EXPERIMENTAL : ShardStrategyFactory.SHATTER_STRATEGY.LINEAR, drivingDataSource.getSequenceDictionary(), SHARD_SIZE, maxIterations); } else if (walker instanceof ReadWalker || diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java index 05ad02214..0e38f7782 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java @@ -2,6 +2,8 @@ package org.broadinstitute.sting.gatk.datasources.shards; import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.utils.StingException; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.gatk.datasources.simpleDataSources.SAMDataSource; import org.broadinstitute.sting.gatk.datasources.simpleDataSources.BlockDrivenSAMDataSource; @@ -9,6 +11,8 @@ import java.util.*; import net.sf.samtools.Chunk; import net.sf.samtools.SAMFileReader2; +import net.sf.samtools.SAMFileHeader; +import net.sf.samtools.SAMSequenceRecord; /* * Copyright (c) 2009 The Broad Institute @@ -62,8 +66,21 @@ public class IndexDelimitedLocusShardStrategy implements ShardStrategy { if(!(dataSource instanceof BlockDrivenSAMDataSource)) throw new StingException("Cannot power an IndexDelimitedLocusShardStrategy with this data source."); + List intervals; + if(locations == null) { + // If no locations were passed in, shard the entire BAM file. + SAMFileHeader header = dataSource.getHeader(); + intervals = new ArrayList(); + + for(SAMSequenceRecord sequenceRecord: header.getSequenceDictionary().getSequences()) + intervals.add(GenomeLocParser.createGenomeLoc(sequenceRecord.getSequenceName(),1,sequenceRecord.getSequenceLength())); + } + else + intervals = locations.toList(); + + this.dataSource = (BlockDrivenSAMDataSource)dataSource; - filePointers.addAll(IntervalSharder.shardIntervals(this.dataSource,locations.toList(),this.dataSource.getNumIndexLevels()-1)); + filePointers.addAll(IntervalSharder.shardIntervals(this.dataSource,intervals,this.dataSource.getNumIndexLevels()-1)); filePointerIterator = filePointers.iterator(); } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/shards/ShardStrategyFactory.java b/java/src/org/broadinstitute/sting/gatk/datasources/shards/ShardStrategyFactory.java index a084d01c6..776f0c083 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/shards/ShardStrategyFactory.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/shards/ShardStrategyFactory.java @@ -76,7 +76,7 @@ public class ShardStrategyFactory { case INTERVAL: throw new StingException("Requested trategy: " + strat + " doesn't work with the limiting count (-M) command line option"); case LOCUS_EXPERIMENTAL: - throw new UnsupportedOperationException("Cannot do experimental locus sharding without intervals"); + return new IndexDelimitedLocusShardStrategy(dataSource,null); case READS_EXPERIMENTAL: return new BlockDelimitedReadShardStrategy(dataSource,null); default: