Skip to content

Commit

Permalink
Revert "- Expand SamLocusAndReferenceIterator tests to cover BAMs and…
Browse files Browse the repository at this point in the history
… CRAMs."

This reverts commit 651bd0c.
  • Loading branch information
Yossi Farjoun committed Dec 17, 2020
1 parent 651bd0c commit 2c4c9b2
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 164 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@

import java.util.List;

import static htsjdk.samtools.util.SamLocusIterator.LocusInfo;
import static htsjdk.samtools.util.SamLocusIterator.RecordAndOffset;
import static htsjdk.samtools.util.SamLocusIterator.*;

/**
* Iterator that traverses a SAM File and a ReferenceFile, accumulating information on a per-locus basis.
Expand Down
63 changes: 0 additions & 63 deletions src/main/java/htsjdk/variant/vcf/SamFileUtils.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,87 +1,26 @@
package htsjdk.samtools.reference;

import htsjdk.HtsjdkTest;
import htsjdk.samtools.SAMFileWriter;
import htsjdk.samtools.SAMFileWriterFactory;
import htsjdk.samtools.SAMRecord;
import htsjdk.samtools.SamReader;
import htsjdk.samtools.SamReaderFactory;
import htsjdk.samtools.util.Interval;
import htsjdk.samtools.util.IntervalList;
import htsjdk.samtools.util.OverlapDetector;
import htsjdk.samtools.util.SamLocusIterator;
import htsjdk.samtools.util.SequenceUtil;
import htsjdk.variant.vcf.SamFileUtils;
import htsjdk.samtools.util.*;
import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;

public class SamLocusAndReferenceIteratorTest extends HtsjdkTest {
static private final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/reference");

final File referenceAssembly18_trimmed = new File(TEST_DATA_DIR, "Homo_sapiens_assembly18.trimmed.fasta");
final File referenceWithTrailingNewWhiteSpace = new File(TEST_DATA_DIR, "reference_with_trailing_whitespace.fasta");
@Test
public void testSamLocusAndReferenceIterator() {

File simpleSmallFileCram;
File simpleSmallFileSam;
File simpleSmallFileBam;

File leadingInsertionCram;
File leadingInsertionSam;
File leadingInsertionBam;

@DataProvider
Object[][] testSamLocusAndReferenceIteratorData() {
return new Object[][]{
{simpleSmallFileSam, false},
{simpleSmallFileBam, false},
{simpleSmallFileCram, true}
};
}

@BeforeSuite
void setup() throws IOException {

simpleSmallFileSam = new File(TEST_DATA_DIR, "simpleSmallFile.sam");
leadingInsertionSam = new File(TEST_DATA_DIR, "leading_insertion.sam");

simpleSmallFileCram = createTemporarySamFileFromInput(simpleSmallFileSam, "SamLocusAndReferenceIteratorTest", ".cram", referenceAssembly18_trimmed);
leadingInsertionCram = createTemporarySamFileFromInput(leadingInsertionSam, "SamLocusAndReferenceIteratorTest", ".cram", referenceAssembly18_trimmed);

simpleSmallFileBam = createTemporarySamFileFromInput(simpleSmallFileSam, "SamLocusAndReferenceIteratorTest", ".bam", referenceAssembly18_trimmed);
leadingInsertionBam = createTemporarySamFileFromInput(leadingInsertionSam, "SamLocusAndReferenceIteratorTest", ".bam", referenceAssembly18_trimmed);

}

public static File createTemporarySamFileFromInput(final File samFile, final String tempFilePrefix, final String suffix, final File reference) throws IOException {

final File output = SamFileUtils.createTemporaryIndexedFile(tempFilePrefix, suffix);

try (final SamReader in = SamReaderFactory.makeDefault().open(samFile);
final SAMFileWriter out = new SAMFileWriterFactory().makeWriter(in.getFileHeader().clone(), true, output, reference)) {
for (final SAMRecord record : in) {
out.addAlignment(record);
}
}
return output;
}


@Test(dataProvider = "testSamLocusAndReferenceIteratorData")
public void testSamLocusAndReferenceIterator(final File samFile, boolean readerNeedsReference) {

final ReferenceSequenceFile referenceSequenceFile = new FastaSequenceFile(referenceAssembly18_trimmed, false);
final File reference = new File(TEST_DATA_DIR, "Homo_sapiens_assembly18.trimmed.fasta");
final File samFile = new File(TEST_DATA_DIR, "simpleSmallFile.sam");
final ReferenceSequenceFile referenceSequenceFile = new FastaSequenceFile(reference, false);
final ReferenceSequenceFileWalker referenceSequenceFileWalker = new ReferenceSequenceFileWalker(referenceSequenceFile);

final SamReaderFactory samReaderFactory = SamReaderFactory.makeDefault();
if (readerNeedsReference) {
samReaderFactory.referenceSequence(referenceAssembly18_trimmed);
}
final SamReader samReader = samReaderFactory.open(samFile);
final SamReader samReader = SamReaderFactory.makeDefault().open(samFile);
final SamLocusIterator samLocusIterator = new SamLocusIterator(samReader);
final SamLocusAndReferenceIterator samLocusAndReferences = new SamLocusAndReferenceIterator(referenceSequenceFileWalker, samLocusIterator);

Expand All @@ -93,53 +32,36 @@ public void testSamLocusAndReferenceIterator(final File samFile, boolean readerN
overlapDetector.addAll(intervalList.getIntervals(), intervalList.getIntervals());

for (final SamLocusAndReferenceIterator.SAMLocusAndReference samLocusAndReference : samLocusAndReferences) {
// The sam file only has coverage in the intervals that are within 'intervalList', and there the coverage should
// be exactly 2 since there are two overlapping, paired reads. This is what this test is testing:
// The sam file only has coverage in the intervals that are within 'intervalList', and there the coverage should
// be exactly 2 since there are two overlapping, paired reads. This is what this test is testing:
Assert.assertEquals(samLocusAndReference.getRecordAndOffsets().size(), overlapDetector.overlapsAny(samLocusAndReference.getLocus()) ? 2 : 0, "Position:" + samLocusAndReference.getLocus().toString());

// all the reads are equal to the reference...this is what this test is testing.
for (final SamLocusIterator.RecordAndOffset recordAndOffset : samLocusAndReference.getRecordAndOffsets()) {
for (final SamLocusIterator.RecordAndOffset recordAndOffset : samLocusAndReference.getRecordAndOffsets())
Assert.assertTrue(SequenceUtil.basesEqual(samLocusAndReference.getReferenceBase(), recordAndOffset.getReadBase()), "Record: " + recordAndOffset.getRecord() + " Position:" + samLocusAndReference.getLocus().toString());
}
}
}

@Test(dataProvider = "testSamLocusAndReferenceIteratorData", expectedExceptions = IllegalArgumentException.class)
public void testSamLocusAndReferenceIteratorMismatch(final File samFile, boolean readerNeedsReference) {
final File reference = referenceWithTrailingNewWhiteSpace;
@Test(expectedExceptions = IllegalArgumentException.class)
public void testSamLocusAndReferenceIteratorMismatch() {
final File reference = new File(TEST_DATA_DIR, "reference_with_trailing_whitespace.fasta");
final File samFile = new File(TEST_DATA_DIR, "simpleSmallFile.sam");
final ReferenceSequenceFile referenceSequenceFile = new FastaSequenceFile(reference, false);
final ReferenceSequenceFileWalker referenceSequenceFileWalker = new ReferenceSequenceFileWalker(referenceSequenceFile);

final SamReaderFactory samReaderFactory = SamReaderFactory.makeDefault();
if (readerNeedsReference) {
samReaderFactory.referenceSequence(reference);
}
final SamReader samReader = samReaderFactory.open(samFile);
final SamReader samReader = SamReaderFactory.makeDefault().open(samFile);
final SamLocusIterator samLocusIterator = new SamLocusIterator(samReader);
new SamLocusAndReferenceIterator(referenceSequenceFileWalker, samLocusIterator); // should throw
}


@DataProvider
Object[][] testSamLocusAndReferenceIteratorLeadingInsertionData() {
return new Object[][]{
{leadingInsertionSam, false},
{leadingInsertionBam, false},
{leadingInsertionCram, true}
};
}

@Test(dataProvider = "testSamLocusAndReferenceIteratorLeadingInsertionData")
public void testSamLocusAndReferenceIteratorLeadingInsertion(final File samFile, boolean readerNeedsReference) {
final File reference = referenceAssembly18_trimmed;
@Test
public void testSamLocusAndReferenceIteratorLeadingInsertion() {
final File reference = new File(TEST_DATA_DIR, "Homo_sapiens_assembly18.trimmed.fasta");
final File samFile = new File(TEST_DATA_DIR, "leading_insertion.sam");
final ReferenceSequenceFile referenceSequenceFile = new FastaSequenceFile(reference, false);
final ReferenceSequenceFileWalker referenceSequenceFileWalker = new ReferenceSequenceFileWalker(referenceSequenceFile);

final SamReaderFactory samReaderFactory = SamReaderFactory.makeDefault();
if (readerNeedsReference) {
samReaderFactory.referenceSequence(reference);
}
final SamReader samReader = samReaderFactory.open(samFile);
final SamReader samReader = SamReaderFactory.makeDefault().open(samFile);
final SamLocusIterator samLocusIterator = new SamLocusIterator(samReader);
samLocusIterator.setIncludeIndels(true);
final SamLocusAndReferenceIterator samLocusAndReferences = new SamLocusAndReferenceIterator(referenceSequenceFileWalker, samLocusIterator);
Expand Down Expand Up @@ -170,7 +92,8 @@ public void testSamLocusAndReferenceIteratorLeadingInsertion(final File samFile,

if (overlapDetector.overlapsAny(samLocusAndReference.getLocus())) {
Assert.assertEquals(samLocusAndReference.getRecordAndOffsets().size(), 2);
} else {
}
else {
Assert.assertEquals(samLocusAndReference.getRecordAndOffsets().size(), 0);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -812,4 +812,5 @@ public void testOverlappingGappedAlignmentsWithIndels() {
++i;
}
}

}

0 comments on commit 2c4c9b2

Please sign in to comment.