Added IterableLocusContextQueue and test. Cleaned up tests, adding BaseTest where it didn't exist. Enhanced test runner to run only classes ending in ...Test.java, so that utility classes can sit alongside the tests but won't be run by JUnit.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@693 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
7b59f63f12
commit
d14cab0be7
|
|
@ -2,7 +2,7 @@
|
|||
<description>Compile and distribute the Sting toolkit</description>
|
||||
|
||||
<property name="source.dir" value="java/src" />
|
||||
<property name="single" value="*" />
|
||||
<property name="single" value="*Test" />
|
||||
|
||||
<!-- Set target based on STING_BUILD_TYPE environment variable -->
|
||||
<property environment="env"/>
|
||||
|
|
@ -256,10 +256,6 @@
|
|||
<fileset dir="${test.classes}">
|
||||
<include name="**/${single}.class"/>
|
||||
<exclude name="**/BaseTest.class"/>
|
||||
<!-- omit our instrumenation class -->
|
||||
<exclude name="**/TrivialInstrumenter.class"/>
|
||||
<!-- Omit inner classes -->
|
||||
<exclude name="**/*$*.class" />
|
||||
</fileset>
|
||||
</batchtest>
|
||||
</junit>
|
||||
|
|
|
|||
|
|
@ -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<SAMRecord> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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<SAMRecord> reads = new FilteringIterator(provider.getReadIterator(), new TraversalEngine.locusStreamFilterFunc());
|
||||
this.loci = new LocusContextIteratorByHanger(reads);
|
||||
this.shard = provider.getShard();
|
||||
|
|
@ -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<M, T> locusWalker = (LocusWalker<M, T>)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() ) {
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
||||
|
|
|
|||
|
|
@ -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<SAMRecord> 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) );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.<SAMRecord>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<SAMRecord> expectedReads = new ArrayList<SAMRecord>();
|
||||
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<SAMRecord> expectedReads = new ArrayList<SAMRecord>();
|
||||
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<SAMRecord> expectedReads = new ArrayList<SAMRecord>();
|
||||
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<SAMRecord> expectedReads = new ArrayList<SAMRecord>();
|
||||
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<SAMRecord> expectedReads = new ArrayList<SAMRecord>();
|
||||
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<SAMRecord> 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<SAMRecord> 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<SAMRecord> 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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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<SAMRecord> 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue