diff --git a/build.xml b/build.xml
index f879d0411..737c64122 100644
--- a/build.xml
+++ b/build.xml
@@ -2,7 +2,7 @@
Compile and distribute the Sting toolkit
-
+
@@ -256,10 +256,6 @@
-
-
-
-
diff --git a/java/src/org/broadinstitute/sting/gatk/dataSources/providers/IterableLocusContextQueue.java b/java/src/org/broadinstitute/sting/gatk/dataSources/providers/IterableLocusContextQueue.java
new file mode 100755
index 000000000..851383eef
--- /dev/null
+++ b/java/src/org/broadinstitute/sting/gatk/dataSources/providers/IterableLocusContextQueue.java
@@ -0,0 +1,103 @@
+package org.broadinstitute.sting.gatk.dataSources.providers;
+
+import net.sf.samtools.SAMRecord;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import edu.mit.broad.picard.filter.FilteringIterator;
+import org.broadinstitute.sting.gatk.traversals.TraversalEngine;
+import org.broadinstitute.sting.gatk.iterators.LocusContextIteratorByHanger;
+import org.broadinstitute.sting.gatk.iterators.LocusContextIterator;
+import org.broadinstitute.sting.gatk.iterators.LocusIterator;
+import org.broadinstitute.sting.gatk.LocusContext;
+import org.broadinstitute.sting.gatk.dataSources.shards.Shard;
+import org.broadinstitute.sting.utils.GenomeLoc;
+/**
+ * User: hanna
+ * Date: May 13, 2009
+ * Time: 3:32:30 PM
+ * BROAD INSTITUTE SOFTWARE COPYRIGHT NOTICE AND AGREEMENT
+ * Software and documentation are copyright 2005 by the Broad Institute.
+ * All rights are reserved.
+ *
+ * Users acknowledge that this software is supplied without any warranty or support.
+ * The Broad Institute is not responsible for its use, misuse, or
+ * functionality.
+ */
+
+/**
+ * A LocusContextQueue over which the user can iterate.
+ */
+
+public class IterableLocusContextQueue implements LocusContextQueue, LocusIterator {
+ private Shard shard;
+ private LocusContextIterator loci;
+
+ /**
+ * What's the context for the last locus accessed?
+ * @param provider
+ */
+ private LocusContext nextLocusContext = null;
+
+ /**
+ * Create a new queue of locus contexts.
+ * @param provider
+ */
+ public IterableLocusContextQueue(ShardDataProvider provider) {
+ Iterator reads = new FilteringIterator(provider.getReadIterator(), new TraversalEngine.locusStreamFilterFunc());
+ this.loci = new LocusContextIteratorByHanger(reads);
+ this.shard = provider.getShard();
+ }
+
+ /**
+ * Is there another locus present in this iterator.
+ * @return True if another locus present in this iterator. Otherwise, false.
+ */
+ public boolean hasNext() {
+ return loci.hasNext();
+ }
+
+ /**
+ * Retrieves the next element in the queue.
+ * @return Next element in the queue.
+ */
+ public GenomeLoc next() {
+ do {
+ nextLocusContext = loci.next();
+ }
+ while( nextLocusContext.getLocation().isBefore(shard.getGenomeLoc()) );
+
+ return nextLocusContext.getLocation();
+ }
+
+ /**
+ * Unsupported.
+ */
+ public void remove() {
+ throw new UnsupportedOperationException("Unable to remove elements from this queue.");
+ }
+
+ /**
+ * Peek at the next locus context in the chain.
+ * @return
+ */
+ public LocusContext peek() {
+ if( nextLocusContext == null )
+ throw new NoSuchElementException("No more elements remaining in queue");
+ return nextLocusContext;
+ }
+
+ /**
+ * Seek to the specified position in the contig.
+ * @param seekPoint
+ */
+ public LocusContextQueue seek( GenomeLoc seekPoint ) {
+ if( nextLocusContext == null || !seekPoint.equals(nextLocusContext.getLocation()) ) {
+ nextLocusContext = null;
+ throw new IllegalArgumentException("IterableLocusContextQueue doesn't support seeking and iterator is in the wrong position.");
+ }
+ return this;
+ }
+
+}
diff --git a/java/src/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueue.java b/java/src/org/broadinstitute/sting/gatk/dataSources/providers/SeekableLocusContextQueue.java
similarity index 94%
rename from java/src/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueue.java
rename to java/src/org/broadinstitute/sting/gatk/dataSources/providers/SeekableLocusContextQueue.java
index 23cbeea7e..2009f597a 100755
--- a/java/src/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueue.java
+++ b/java/src/org/broadinstitute/sting/gatk/dataSources/providers/SeekableLocusContextQueue.java
@@ -31,7 +31,7 @@ import edu.mit.broad.picard.filter.FilteringIterator;
* implementation of java.util.Queue interface.
*/
-public class LocusContextQueue {
+public class SeekableLocusContextQueue implements LocusContextQueue {
private Shard shard;
private LocusContextIterator loci;
@@ -46,13 +46,13 @@ public class LocusContextQueue {
*/
private LocusContext nextLocusContext = null;
- private static Logger logger = Logger.getLogger(LocusContextQueue.class);
+ private static Logger logger = Logger.getLogger(SeekableLocusContextQueue.class);
/**
- * Create a new queue of locus contexts, sorted in
+ * Create a new queue of locus contexts.
* @param provider
*/
- public LocusContextQueue(ShardDataProvider provider) {
+ public SeekableLocusContextQueue(ShardDataProvider provider) {
Iterator reads = new FilteringIterator(provider.getReadIterator(), new TraversalEngine.locusStreamFilterFunc());
this.loci = new LocusContextIteratorByHanger(reads);
this.shard = provider.getShard();
diff --git a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLociByReference.java b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLociByReference.java
index 12e9f2e5e..a79258c47 100755
--- a/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLociByReference.java
+++ b/java/src/org/broadinstitute/sting/gatk/traversals/TraverseLociByReference.java
@@ -6,7 +6,7 @@ import org.broadinstitute.sting.gatk.LocusContext;
import org.broadinstitute.sting.gatk.dataSources.shards.Shard;
import org.broadinstitute.sting.gatk.dataSources.providers.ReferenceLocusIterator;
import org.broadinstitute.sting.gatk.dataSources.providers.ShardDataProvider;
-import org.broadinstitute.sting.gatk.dataSources.providers.LocusContextQueue;
+import org.broadinstitute.sting.gatk.dataSources.providers.SeekableLocusContextQueue;
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData;
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
@@ -58,7 +58,7 @@ public class TraverseLociByReference extends TraversalEngine {
LocusWalker locusWalker = (LocusWalker)walker;
LocusIterator locusIterator = new ReferenceLocusIterator( dataProvider );
- LocusContextQueue locusContextQueue = new LocusContextQueue( dataProvider );
+ SeekableLocusContextQueue locusContextQueue = new SeekableLocusContextQueue( dataProvider );
// We keep processing while the next reference location is within the interval
while( locusIterator.hasNext() ) {
diff --git a/java/test/org/broadinstitute/sting/gatk/OutputTrackerTest.java b/java/test/org/broadinstitute/sting/gatk/OutputTrackerTest.java
index 4a616d793..9b458ee23 100755
--- a/java/test/org/broadinstitute/sting/gatk/OutputTrackerTest.java
+++ b/java/test/org/broadinstitute/sting/gatk/OutputTrackerTest.java
@@ -4,11 +4,13 @@ import org.junit.Test;
import org.junit.After;
import org.junit.Assert;
import org.broadinstitute.sting.utils.io.RedirectingOutputStream;
+import org.broadinstitute.sting.BaseTest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
-import java.util.Scanner; /**
+import java.util.Scanner;
+/**
* User: hanna
* Date: Apr 30, 2009
* Time: 10:20:18 AM
@@ -25,7 +27,7 @@ import java.util.Scanner; /**
* For the file opening and closing mechanisms.
*/
-public class OutputTrackerTest {
+public class OutputTrackerTest extends BaseTest {
public static final String OUTPUT_FILENAME = "OutputTrackerTest.out";
public static final String ERROR_FILENAME = "OutputTrackerTest.err";
diff --git a/java/test/org/broadinstitute/sting/gatk/dataSources/providers/IterableLocusContextQueueTest.java b/java/test/org/broadinstitute/sting/gatk/dataSources/providers/IterableLocusContextQueueTest.java
new file mode 100755
index 000000000..41c69529a
--- /dev/null
+++ b/java/test/org/broadinstitute/sting/gatk/dataSources/providers/IterableLocusContextQueueTest.java
@@ -0,0 +1,90 @@
+package org.broadinstitute.sting.gatk.dataSources.providers;
+
+import org.junit.Test;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.broadinstitute.sting.utils.GenomeLoc;
+import org.broadinstitute.sting.gatk.dataSources.shards.Shard;
+import org.broadinstitute.sting.gatk.dataSources.shards.LocusShard;
+import org.broadinstitute.sting.gatk.iterators.StingSAMIterator;
+import org.broadinstitute.sting.gatk.LocusContext;
+import org.broadinstitute.sting.BaseTest;
+import net.sf.samtools.SAMRecord;
+import net.sf.samtools.Cigar;
+import net.sf.samtools.CigarElement;
+import net.sf.samtools.CigarOperator;
+import net.sf.samtools.SAMSequenceDictionary;
+import net.sf.samtools.SAMSequenceRecord;
+import net.sf.samtools.SAMFileHeader;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Collections;
+import java.io.FileNotFoundException;
+
+import edu.mit.broad.picard.reference.ReferenceSequenceFile;
+import edu.mit.broad.picard.reference.ReferenceSequence;
+/**
+ * User: hanna
+ * Date: May 12, 2009
+ * Time: 2:34:46 PM
+ * BROAD INSTITUTE SOFTWARE COPYRIGHT NOTICE AND AGREEMENT
+ * Software and documentation are copyright 2005 by the Broad Institute.
+ * All rights are reserved.
+ *
+ * Users acknowledge that this software is supplied without any warranty or support.
+ * The Broad Institute is not responsible for its use, misuse, or
+ * functionality.
+ */
+
+/**
+ * Test the locus context queue.
+ */
+public class IterableLocusContextQueueTest extends LocusContextQueueTemplate {
+
+ @Override
+ protected LocusContextQueue createQueue(ShardDataProvider provider) {
+ return new IterableLocusContextQueue(provider);
+ }
+
+ /**
+ * Test the reads according to an independently derived context.
+ * @param queue
+ * @param bounds
+ * @param reads
+ */
+ @Override
+ protected void testReadsInContext( LocusContextQueue queue, GenomeLoc bounds, List reads ) {
+ IterableLocusContextQueue iterableQueue = (IterableLocusContextQueue)queue;
+
+ for( long i = bounds.getStart(); i <= bounds.getStop(); i++ ) {
+ GenomeLoc site = new GenomeLoc("chr1",i);
+
+ int expectedReadsAtSite = 0;
+ for( SAMRecord read: reads ) {
+ if( new GenomeLoc(read).containsP(site) )
+ expectedReadsAtSite++;
+ }
+
+ if( expectedReadsAtSite < 1 )
+ continue;
+
+ Assert.assertTrue("Incorrect number of loci in queue",iterableQueue.hasNext());
+
+ GenomeLoc nextLocus = iterableQueue.next();
+ Assert.assertEquals("Next locus context returned is incorrect", site, nextLocus );
+
+ LocusContext locusContext = iterableQueue.seek(site).peek();
+ Assert.assertEquals("Target locus context location is incorrect", site, locusContext.getLocation() );
+ Assert.assertEquals("Found wrong number of reads at site", expectedReadsAtSite, locusContext.getReads().size());
+
+ for( SAMRecord read: reads ) {
+ if(new GenomeLoc(read).containsP(locusContext.getLocation()))
+ Assert.assertTrue("Target locus context does not contain reads", locusContext.getReads().contains(read) );
+ }
+
+ }
+ }
+}
diff --git a/java/test/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueueTest.java b/java/test/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueueTemplate.java
similarity index 80%
rename from java/test/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueueTest.java
rename to java/test/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueueTemplate.java
index 9ec317c27..aee5e39d6 100755
--- a/java/test/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueueTest.java
+++ b/java/test/org/broadinstitute/sting/gatk/dataSources/providers/LocusContextQueueTemplate.java
@@ -1,35 +1,33 @@
package org.broadinstitute.sting.gatk.dataSources.providers;
-import org.junit.Test;
-import org.junit.Assert;
import org.junit.BeforeClass;
+import org.junit.Test;
import org.broadinstitute.sting.utils.GenomeLoc;
+import org.broadinstitute.sting.BaseTest;
+import org.broadinstitute.sting.gatk.iterators.StingSAMIterator;
import org.broadinstitute.sting.gatk.dataSources.shards.Shard;
import org.broadinstitute.sting.gatk.dataSources.shards.LocusShard;
-import org.broadinstitute.sting.gatk.iterators.StingSAMIterator;
-import org.broadinstitute.sting.gatk.LocusContext;
-import org.broadinstitute.sting.BaseTest;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.Cigar;
-import net.sf.samtools.CigarElement;
-import net.sf.samtools.CigarOperator;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.SAMFileHeader;
+import java.io.FileNotFoundException;
+import java.util.Collections;
import java.util.List;
+import java.util.Iterator;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Collections;
-import java.io.FileNotFoundException;
import edu.mit.broad.picard.reference.ReferenceSequenceFile;
import edu.mit.broad.picard.reference.ReferenceSequence;
+import net.sf.samtools.SAMSequenceDictionary;
+import net.sf.samtools.SAMSequenceRecord;
+import net.sf.samtools.SAMRecord;
+import net.sf.samtools.SAMFileHeader;
+import net.sf.samtools.Cigar;
+import net.sf.samtools.CigarElement;
+import net.sf.samtools.CigarOperator;
/**
* User: hanna
- * Date: May 12, 2009
- * Time: 2:34:46 PM
+ * Date: May 13, 2009
+ * Time: 4:29:08 PM
* BROAD INSTITUTE SOFTWARE COPYRIGHT NOTICE AND AGREEMENT
* Software and documentation are copyright 2005 by the Broad Institute.
* All rights are reserved.
@@ -40,10 +38,11 @@ import edu.mit.broad.picard.reference.ReferenceSequence;
*/
/**
- * Test the locus context queue.
+ * Base support for testing variants of the LocusContextQueue family of classes.
*/
-public class LocusContextQueueTest extends BaseTest {
- private static ReferenceSequenceFile sequenceSourceFile = null;
+
+public abstract class LocusContextQueueTemplate extends BaseTest {
+ protected static ReferenceSequenceFile sequenceSourceFile = null;
@BeforeClass
public static void setupGenomeLoc() throws FileNotFoundException {
@@ -51,17 +50,6 @@ public class LocusContextQueueTest extends BaseTest {
GenomeLoc.setupRefContigOrdering(sequenceSourceFile);
}
- private static ReferenceSequenceFile fakeReferenceSequenceFile() {
- return new ReferenceSequenceFile() {
- public SAMSequenceDictionary getSequenceDictionary() {
- SAMSequenceRecord sequenceRecord = new SAMSequenceRecord("chr1");
- SAMSequenceDictionary dictionary = new SAMSequenceDictionary(Collections.singletonList(sequenceRecord));
- return dictionary;
- }
- public ReferenceSequence nextSequence() { throw new UnsupportedOperationException("Fake implementation doesn't support a getter"); }
- };
- }
-
@Test
public void emptyLocusContextTest() {
SAMRecordIterator iterator = new SAMRecordIterator();
@@ -70,7 +58,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(shardBounds);
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
testReadsInContext( queue, shard.getGenomeLoc(), Collections.emptyList() );
}
@@ -84,9 +72,9 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(shardBounds);
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
- testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
+ testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
}
@Test
@@ -96,7 +84,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
}
@@ -108,7 +96,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
}
@@ -120,7 +108,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
}
@@ -132,7 +120,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",6,15));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
}
@@ -144,7 +132,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
testReadsInContext( queue, shard.getGenomeLoc(), Collections.singletonList(read) );
}
@@ -157,7 +145,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
List expectedReads = new ArrayList();
Collections.addAll(expectedReads,read1,read2);
@@ -174,7 +162,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
List expectedReads = new ArrayList();
Collections.addAll(expectedReads,read1,read2,read3,read4);
@@ -191,7 +179,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
List expectedReads = new ArrayList();
Collections.addAll(expectedReads,read1,read2,read3,read4);
@@ -210,7 +198,7 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",1,10));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
List expectedReads = new ArrayList();
Collections.addAll(expectedReads,read1,read2,read3,read4,read5,read6);
@@ -236,13 +224,19 @@ public class LocusContextQueueTest extends BaseTest {
Shard shard = new LocusShard(new GenomeLoc("chr1",6,15));
ShardDataProvider dataProvider = new ShardDataProvider( shard, iterator );
- LocusContextQueue queue = new LocusContextQueue( dataProvider );
+ LocusContextQueue queue = createQueue( dataProvider );
List expectedReads = new ArrayList();
Collections.addAll(expectedReads,read01,read02,read03,read04,read05,read06,
read07,read08,read09,read10,read11,read12);
testReadsInContext( queue, shard.getGenomeLoc(), expectedReads );
- }
+ }
+
+ /**
+ * Creates a queue of the type required for testing.
+ * @return The correct queue to test.
+ */
+ protected abstract LocusContextQueue createQueue( ShardDataProvider provider );
/**
* Test the reads according to an independently derived context.
@@ -250,45 +244,48 @@ public class LocusContextQueueTest extends BaseTest {
* @param bounds
* @param reads
*/
- private void testReadsInContext( LocusContextQueue queue, GenomeLoc bounds, List reads ) {
- Assert.assertEquals("Initial position of queue is incorrect", new GenomeLoc(bounds.getContig(),bounds.getStart()), queue.getSeekPoint() );
+ protected abstract void testReadsInContext( LocusContextQueue queue, GenomeLoc bounds, List reads );
- for( long i = bounds.getStart(); i <= bounds.getStop(); i++ ) {
- GenomeLoc site = new GenomeLoc("chr1",i);
- queue.seek(site);
- Assert.assertEquals("Seeked queue is incorrect", site, queue.getSeekPoint() );
-
- LocusContext locusContext = queue.peek();
- Assert.assertEquals("Target locus context location is incorrect", site, locusContext.getLocation() );
- int expectedReadsAtSite = 0;
-
- for( SAMRecord read: reads ) {
- if(new GenomeLoc(read).containsP(locusContext.getLocation())) {
- Assert.assertTrue("Target locus context does not contain reads", locusContext.getReads().contains(read) );
- expectedReadsAtSite++;
- }
+ /**
+ * Fake a reference sequence file. Essentially, seek a header with a bunch of dummy data.
+ * @return A 'fake' reference sequence file
+ */
+ private static ReferenceSequenceFile fakeReferenceSequenceFile() {
+ return new ReferenceSequenceFile() {
+ public SAMSequenceDictionary getSequenceDictionary() {
+ SAMSequenceRecord sequenceRecord = new SAMSequenceRecord("chr1");
+ SAMSequenceDictionary dictionary = new SAMSequenceDictionary(Collections.singletonList(sequenceRecord));
+ return dictionary;
}
-
- Assert.assertEquals("Found wrong number of reads at site", expectedReadsAtSite, locusContext.getReads().size());
- }
-
+ public ReferenceSequence nextSequence() { throw new UnsupportedOperationException("Fake implementation doesn't support a getter"); }
+ };
}
- private SAMRecord buildSAMRecord( String contig, int alignmentStart, int alignmentEnd ) {
+ /**
+ * Build a SAM record featuring the absolute minimum required dataset.
+ * @param contig Contig to populate.
+ * @param alignmentStart start of alignment
+ * @param alignmentEnd end of alignment
+ * @return New SAM Record
+ */
+ protected SAMRecord buildSAMRecord( String contig, int alignmentStart, int alignmentEnd ) {
SAMFileHeader header = new SAMFileHeader();
header.setSequenceDictionary(sequenceSourceFile.getSequenceDictionary());
- SAMRecord record = new SAMRecord(header);
+ SAMRecord record = new SAMRecord(header);
record.setReferenceIndex(sequenceSourceFile.getSequenceDictionary().getSequenceIndex(contig));
record.setAlignmentStart(alignmentStart);
Cigar cigar = new Cigar();
- cigar.add(new CigarElement(alignmentEnd-alignmentStart+1,CigarOperator.M));
+ cigar.add(new CigarElement(alignmentEnd-alignmentStart+1, CigarOperator.M));
record.setCigar(cigar);
return record;
}
- private class SAMRecordIterator implements StingSAMIterator {
+ /**
+ * A simple iterator which iterates over a list of reads.
+ */
+ protected class SAMRecordIterator implements StingSAMIterator {
private Iterator backingIterator = null;
public SAMRecordIterator( SAMRecord... reads ) {
@@ -317,4 +314,6 @@ public class LocusContextQueueTest extends BaseTest {
throw new UnsupportedOperationException("Can't remove from a read-only iterator");
}
}
+
+
}
diff --git a/java/test/org/broadinstitute/sting/gatk/dataSources/providers/SeekableLocusContextQueueTest.java b/java/test/org/broadinstitute/sting/gatk/dataSources/providers/SeekableLocusContextQueueTest.java
new file mode 100755
index 000000000..80cb080ff
--- /dev/null
+++ b/java/test/org/broadinstitute/sting/gatk/dataSources/providers/SeekableLocusContextQueueTest.java
@@ -0,0 +1,90 @@
+package org.broadinstitute.sting.gatk.dataSources.providers;
+
+import org.junit.Test;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.broadinstitute.sting.utils.GenomeLoc;
+import org.broadinstitute.sting.gatk.dataSources.shards.Shard;
+import org.broadinstitute.sting.gatk.dataSources.shards.LocusShard;
+import org.broadinstitute.sting.gatk.iterators.StingSAMIterator;
+import org.broadinstitute.sting.gatk.LocusContext;
+import org.broadinstitute.sting.BaseTest;
+import net.sf.samtools.SAMRecord;
+import net.sf.samtools.Cigar;
+import net.sf.samtools.CigarElement;
+import net.sf.samtools.CigarOperator;
+import net.sf.samtools.SAMSequenceDictionary;
+import net.sf.samtools.SAMSequenceRecord;
+import net.sf.samtools.SAMFileHeader;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Collections;
+import java.io.FileNotFoundException;
+
+import edu.mit.broad.picard.reference.ReferenceSequenceFile;
+import edu.mit.broad.picard.reference.ReferenceSequence;
+/**
+ * User: hanna
+ * Date: May 12, 2009
+ * Time: 2:34:46 PM
+ * BROAD INSTITUTE SOFTWARE COPYRIGHT NOTICE AND AGREEMENT
+ * Software and documentation are copyright 2005 by the Broad Institute.
+ * All rights are reserved.
+ *
+ * Users acknowledge that this software is supplied without any warranty or support.
+ * The Broad Institute is not responsible for its use, misuse, or
+ * functionality.
+ */
+
+/**
+ * Test the locus context queue.
+ */
+public class SeekableLocusContextQueueTest extends LocusContextQueueTemplate {
+
+
+
+ /**
+ * Retrieve a seekable locus context queue.
+ */
+ @Override
+ protected LocusContextQueue createQueue(ShardDataProvider provider) {
+ return new SeekableLocusContextQueue(provider);
+ }
+
+ /**
+ * Test the reads according to an independently derived context.
+ * @param queue
+ * @param bounds
+ * @param reads
+ */
+ @Override
+ protected void testReadsInContext( LocusContextQueue queue, GenomeLoc bounds, List reads ) {
+ SeekableLocusContextQueue seekableQueue = (SeekableLocusContextQueue)queue;
+
+ Assert.assertEquals("Initial position of queue is incorrect", new GenomeLoc(bounds.getContig(),bounds.getStart()), seekableQueue.getSeekPoint() );
+
+ for( long i = bounds.getStart(); i <= bounds.getStop(); i++ ) {
+ GenomeLoc site = new GenomeLoc("chr1",i);
+ seekableQueue.seek(site);
+ Assert.assertEquals("Seeked queue is incorrect", site, seekableQueue.getSeekPoint() );
+
+ LocusContext locusContext = seekableQueue.peek();
+ Assert.assertEquals("Target locus context location is incorrect", site, locusContext.getLocation() );
+ int expectedReadsAtSite = 0;
+
+ for( SAMRecord read: reads ) {
+ if(new GenomeLoc(read).containsP(locusContext.getLocation())) {
+ Assert.assertTrue("Target locus context does not contain reads", locusContext.getReads().contains(read) );
+ expectedReadsAtSite++;
+ }
+ }
+
+ Assert.assertEquals("Found wrong number of reads at site", expectedReadsAtSite, locusContext.getReads().size());
+ }
+
+ }
+
+}
diff --git a/java/test/org/broadinstitute/sting/gatk/executive/ReduceTreeTest.java b/java/test/org/broadinstitute/sting/gatk/executive/ReduceTreeTest.java
index 9d5495e07..1333f0c67 100755
--- a/java/test/org/broadinstitute/sting/gatk/executive/ReduceTreeTest.java
+++ b/java/test/org/broadinstitute/sting/gatk/executive/ReduceTreeTest.java
@@ -5,6 +5,7 @@ import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import org.junit.Ignore;
+import org.broadinstitute.sting.BaseTest;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
@@ -29,7 +30,7 @@ import java.util.ArrayList;
* Make sure the reduce tree organizes reduces in the correct way.
*/
-public class ReduceTreeTest implements ReduceTree.TreeReduceNotifier {
+public class ReduceTreeTest extends BaseTest implements ReduceTree.TreeReduceNotifier {
/**
* The tree indicating reduce order.
diff --git a/java/test/org/broadinstitute/sting/utils/threading/ThreadPoolMonitorTest.java b/java/test/org/broadinstitute/sting/utils/threading/ThreadPoolMonitorTest.java
index 551533fec..4ecba448a 100755
--- a/java/test/org/broadinstitute/sting/utils/threading/ThreadPoolMonitorTest.java
+++ b/java/test/org/broadinstitute/sting/utils/threading/ThreadPoolMonitorTest.java
@@ -1,9 +1,11 @@
package org.broadinstitute.sting.utils.threading;
import org.junit.Test;
+import org.broadinstitute.sting.BaseTest;
import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors; /**
+import java.util.concurrent.Executors;
+/**
* User: hanna
* Date: Apr 29, 2009
* Time: 4:30:55 PM
@@ -20,7 +22,7 @@ import java.util.concurrent.Executors; /**
* Tests for the thread pool monitor class.
*/
-public class ThreadPoolMonitorTest {
+public class ThreadPoolMonitorTest extends BaseTest {
private ExecutorService threadPool = Executors.newFixedThreadPool(1);
/**