Trap SAMFormatException and rethrow as MalformatedBAM exception
-- Trap errors in header and rethrow -- Wrap underlying iterator in MalformatedBAMErrorReformattingIterator
This commit is contained in:
parent
f2ef8d1d23
commit
9712fed7a5
|
|
@ -570,6 +570,7 @@ public class SAMDataSource {
|
||||||
inputStream.submitAccessPlan(new SAMReaderPosition(id,inputStream,(GATKBAMFileSpan)shard.getFileSpans().get(id)));
|
inputStream.submitAccessPlan(new SAMReaderPosition(id,inputStream,(GATKBAMFileSpan)shard.getFileSpans().get(id)));
|
||||||
}
|
}
|
||||||
iterator = readers.getReader(id).iterator(shard.getFileSpans().get(id));
|
iterator = readers.getReader(id).iterator(shard.getFileSpans().get(id));
|
||||||
|
iterator = new MalformedBAMErrorReformatingIterator(id.samFile, iterator);
|
||||||
if(shard.getGenomeLocs().size() > 0)
|
if(shard.getGenomeLocs().size() > 0)
|
||||||
iterator = new IntervalOverlapFilteringIterator(iterator,shard.getGenomeLocs());
|
iterator = new IntervalOverlapFilteringIterator(iterator,shard.getGenomeLocs());
|
||||||
mergingIterator.addIterator(readers.getReader(id),iterator);
|
mergingIterator.addIterator(readers.getReader(id),iterator);
|
||||||
|
|
@ -873,6 +874,8 @@ public class SAMDataSource {
|
||||||
throw new UserException.CouldNotReadInputFile(readerID.samFile, e);
|
throw new UserException.CouldNotReadInputFile(readerID.samFile, e);
|
||||||
else
|
else
|
||||||
throw e;
|
throw e;
|
||||||
|
} catch ( SAMFormatException e ) {
|
||||||
|
throw new UserException.MalformedBAM(readerID.samFile, e.getMessage());
|
||||||
}
|
}
|
||||||
reader.setSAMRecordFactory(factory);
|
reader.setSAMRecordFactory(factory);
|
||||||
reader.enableFileSource(true);
|
reader.enableFileSource(true);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.broadinstitute.sting.gatk.iterators;
|
||||||
|
|
||||||
|
import net.sf.samtools.SAMFormatException;
|
||||||
|
import net.sf.samtools.SAMRecord;
|
||||||
|
import net.sf.samtools.util.CloseableIterator;
|
||||||
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Traps BAM formatting errors in underlying iterator and rethrows meaningful GATK UserExceptions
|
||||||
|
*/
|
||||||
|
public class MalformedBAMErrorReformatingIterator implements CloseableIterator<SAMRecord> {
|
||||||
|
File source;
|
||||||
|
CloseableIterator<SAMRecord> it;
|
||||||
|
|
||||||
|
public MalformedBAMErrorReformatingIterator(final File source, final CloseableIterator<SAMRecord> it) {
|
||||||
|
this.it = it;
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasNext() {
|
||||||
|
try {
|
||||||
|
return this.it.hasNext();
|
||||||
|
} catch ( SAMFormatException e ) {
|
||||||
|
throw new UserException.MalformedBAM(source, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public SAMRecord next() {
|
||||||
|
try {
|
||||||
|
return it.next();
|
||||||
|
} catch ( SAMFormatException e ) {
|
||||||
|
throw new UserException.MalformedBAM(source, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove() {
|
||||||
|
throw new UnsupportedOperationException("Can not remove records from a SAM file via an iterator!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() { it.close(); }
|
||||||
|
public Iterator<SAMRecord> iterator() { return this; }
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue