Fix CleanedReadInjectorTest to work with new CleanedReadInjector.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1142 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-07-01 15:48:06 +00:00
parent 891f4c2bd9
commit b43d4d909e
2 changed files with 20 additions and 69 deletions

View File

@ -7,14 +7,14 @@ import net.sf.samtools.util.CloseableIterator;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ArrayList;
import java.io.File;
import java.util.*;
import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.utils.GenomeLoc;
import org.broadinstitute.sting.utils.GenomeLocParser;
import org.broadinstitute.sting.gatk.iterators.StingSAMIteratorAdapter;
import org.broadinstitute.sting.gatk.Reads;
/**
* User: hanna
* Date: Jun 11, 2009
@ -40,6 +40,7 @@ public class ArtificialSAMFileReader extends SAMFileReader {
/**
* Construct an artificial SAM file reader.
* @param reads Reads to use as backing data source.
*/
public ArtificialSAMFileReader(SAMRecord... reads) {
super( createEmptyInputStream(),true );
@ -69,6 +70,11 @@ public class ArtificialSAMFileReader extends SAMFileReader {
};
}
@Override
public CloseableIterator<SAMRecord> iterator() {
return StingSAMIteratorAdapter.adapt( new Reads( Collections.<File>emptyList() ), reads.iterator() );
}
/**
* Builds an empty input stream for faking out the sam file reader.
* Derive it from a string so that, in the future, it might be possible

View File

@ -3,7 +3,6 @@ package org.broadinstitute.sting.playground.gatk.walkers.indels;
import org.broadinstitute.sting.BaseTest;
import org.broadinstitute.sting.gatk.OutputTracker;
import org.broadinstitute.sting.utils.fasta.IndexedFastaSequenceFile;
import org.broadinstitute.sting.utils.StingException;
import org.broadinstitute.sting.utils.GenomeLocParser;
import org.broadinstitute.sting.utils.sam.ArtificialSAMFileReader;
import org.broadinstitute.sting.utils.sam.ArtificialSAMFileWriter;
@ -14,7 +13,6 @@ import org.junit.Test;
import java.io.FileNotFoundException;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import net.sf.samtools.SAMFileHeader;
import net.sf.samtools.SAMRecord;
@ -44,6 +42,7 @@ public class CleanedReadInjectorTest extends BaseTest {
/**
* Initialize the fasta.
* @throws FileNotFoundException if fasta or index is not found.
*/
@BeforeClass
public static void initialize() throws FileNotFoundException {
@ -55,7 +54,7 @@ public class CleanedReadInjectorTest extends BaseTest {
public void testNoReads() {
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader();
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:1-10", cleanedReads, output );
CleanedReadInjector walker = createWalker( cleanedReads, output );
walker.initialize();
walker.onTraversalDone(0);
@ -70,7 +69,7 @@ public class CleanedReadInjectorTest extends BaseTest {
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader();
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:1-10", cleanedReads, output );
CleanedReadInjector walker = createWalker( cleanedReads, output );
int result = runWalkerOverReads(walker,sourceRead);
@ -89,7 +88,7 @@ public class CleanedReadInjectorTest extends BaseTest {
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader(cleanedRead);
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:1-10", cleanedReads, output );
CleanedReadInjector walker = createWalker( cleanedReads, output );
int result = runWalkerOverReads(walker,sourceRead);
@ -108,7 +107,7 @@ public class CleanedReadInjectorTest extends BaseTest {
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader(cleanedRead);
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:4-12", cleanedReads, output );
CleanedReadInjector walker = createWalker( cleanedReads, output );
int result = runWalkerOverReads(walker,sourceRead);
@ -131,7 +130,7 @@ public class CleanedReadInjectorTest extends BaseTest {
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader(cleanedRead);
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:1-10", cleanedReads, output );
CleanedReadInjector walker = createWalker( cleanedReads, output );
int result = runWalkerOverReads(walker,sourceReads);
@ -157,74 +156,20 @@ public class CleanedReadInjectorTest extends BaseTest {
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader(cleanedRead);
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:1-10", cleanedReads, output );
CleanedReadInjector walker = createWalker( cleanedReads, output );
int result = runWalkerOverReads(walker,sourceReads);
Assert.assertEquals("Result of traversal is incorrect",1,result);
Assert.assertEquals("Incorrect number of records in output",3,output.getRecords().size());
Assert.assertEquals("Incorrect read at position 1",cleanedRead,output.getRecords().get(0));
Assert.assertEquals("Incorrect read at position 2",sourceReads[1],output.getRecords().get(1));
Assert.assertEquals("Incorrect read at position 1",sourceReads[1],output.getRecords().get(0));
Assert.assertEquals("Incorrect read at position 2",cleanedRead,output.getRecords().get(1));
Assert.assertEquals("Incorrect read at position 3",sourceReads[2],output.getRecords().get(2));
}
@Test
public void testReadOutsideInterval() {
SAMFileHeader header = getMockSAMFileHeader();
SAMRecord sourceRead = ArtificialSAMUtils.createArtificialRead(header,"read1",1,1,5);
SAMRecord cleanedRead = ArtificialSAMUtils.createArtificialRead(header,"read1",1,1,5);
cleanedRead.setBaseQualities(getMockBaseQualityString((byte)1,cleanedRead.getReadLength()));
ArtificialSAMFileReader cleanedReads = new ArtificialSAMFileReader(cleanedRead);
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:20-50", cleanedReads, output );
int result = runWalkerOverReads( walker, sourceRead );
Assert.assertEquals("Result of traversal is incorrect",0,result);
Assert.assertEquals("Incorrect number of records in output",1,output.getRecords().size());
Assert.assertEquals("Output record is incorrect",sourceRead,output.getRecords().get(0));
}
@Test
public void testMultipleIntervals() {
SAMFileHeader header = getMockSAMFileHeader();
SAMRecord[] sourceReads = new SAMRecord[] { ArtificialSAMUtils.createArtificialRead(header,"read1",1,1,10),
ArtificialSAMUtils.createArtificialRead(header,"read2",1,11,10),
ArtificialSAMUtils.createArtificialRead(header,"read3",1,21,10),
ArtificialSAMUtils.createArtificialRead(header,"read4",1,31,10),
ArtificialSAMUtils.createArtificialRead(header,"read5",1,41,10) };
SAMRecord[] cleanedReads = new SAMRecord[sourceReads.length];
for( int i = 0; i < sourceReads.length; i++ ) {
try {
cleanedReads[i] = (SAMRecord)sourceReads[i].clone();
cleanedReads[i].setBaseQualities(getMockBaseQualityString((byte)1,cleanedReads[i].getReadLength()));
}
catch( CloneNotSupportedException ex ) {
throw new StingException("Unable to clone samrecord", ex);
}
}
ArtificialSAMFileReader cleanedReader = new ArtificialSAMFileReader(cleanedReads);
ArtificialSAMFileWriter output = new ArtificialSAMFileWriter();
CleanedReadInjector walker = createWalker( "chr1:11-20;chr1:31-40", cleanedReader, output );
int result = runWalkerOverReads( walker, sourceReads );
Assert.assertEquals("Result of traversal is incorrect",2,result);
Assert.assertEquals("Incorrect number of records in output",5,output.getRecords().size());
Assert.assertEquals("Incorrect read at position 1",sourceReads[0],output.getRecords().get(0));
Assert.assertEquals("Incorrect read at position 2",cleanedReads[1],output.getRecords().get(1));
Assert.assertEquals("Incorrect read at position 3",sourceReads[2],output.getRecords().get(2));
Assert.assertEquals("Incorrect read at position 4",cleanedReads[3],output.getRecords().get(3));
Assert.assertEquals("Incorrect read at position 5",sourceReads[4],output.getRecords().get(4));
}
private CleanedReadInjector createWalker( String intervals, ArtificialSAMFileReader cleanedReads, ArtificialSAMFileWriter output ) {
private CleanedReadInjector createWalker( ArtificialSAMFileReader cleanedReads, ArtificialSAMFileWriter output ) {
CleanedReadInjector walker = new CleanedReadInjector();
walker.intervalsSource = Collections.singletonList(intervals);
walker.cleanedReadsSource = cleanedReads;
walker.outputBAM = output;