Filter,merge performs much better than merge,filter. Many thanks to Eric for checking in an integration test that so compellingly demonstrates this.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3011 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
6dd5f192e7
commit
59045ccb28
|
|
@ -264,16 +264,16 @@ public class BlockDrivenSAMDataSource extends SAMDataSource {
|
||||||
Map<SAMFileReader,CloseableIterator<SAMRecord>> readerToIteratorMap = new HashMap<SAMFileReader,CloseableIterator<SAMRecord>>();
|
Map<SAMFileReader,CloseableIterator<SAMRecord>> readerToIteratorMap = new HashMap<SAMFileReader,CloseableIterator<SAMRecord>>();
|
||||||
for(SAMReaderID id: getReaderIDs()) {
|
for(SAMReaderID id: getReaderIDs()) {
|
||||||
SAMFileReader2 reader2 = (SAMFileReader2)readers.getReader(id);
|
SAMFileReader2 reader2 = (SAMFileReader2)readers.getReader(id);
|
||||||
List<Chunk> chunks = shard.getChunks().get(id);
|
CloseableIterator<SAMRecord> iterator = reader2.iterator(shard.getChunks().get(id));
|
||||||
readerToIteratorMap.put(reader2,reader2.iterator(chunks));
|
if(shard.getFilter() != null)
|
||||||
|
iterator = new FilteringIterator(iterator,shard.getFilter());
|
||||||
|
readerToIteratorMap.put(reader2,iterator);
|
||||||
}
|
}
|
||||||
|
|
||||||
SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(readers.values(),SAMFileHeader.SortOrder.coordinate,true);
|
SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(readers.values(),SAMFileHeader.SortOrder.coordinate,true);
|
||||||
|
|
||||||
// Set up merging and filtering to dynamically merge together multiple BAMs and filter out records not in the shard set.
|
// Set up merging to dynamically merge together multiple BAMs.
|
||||||
CloseableIterator<SAMRecord> iterator = new MergingSamRecordIterator(headerMerger,readerToIteratorMap,true);
|
CloseableIterator<SAMRecord> iterator = new MergingSamRecordIterator(headerMerger,readerToIteratorMap,true);
|
||||||
if(shard.getFilter() != null)
|
|
||||||
iterator = new FilteringIterator(iterator,shard.getFilter());
|
|
||||||
|
|
||||||
return applyDecoratingIterators(enableVerification,
|
return applyDecoratingIterators(enableVerification,
|
||||||
new ReleasingIterator(readers,StingSAMIteratorAdapter.adapt(reads,iterator)),
|
new ReleasingIterator(readers,StingSAMIteratorAdapter.adapt(reads,iterator)),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue