Found the bug in the engine: RodLocusView was using the wrong seek method so that it would only move to the first locus of a shard (and with multi-locus shards, this meant that we never processed RODs from the other positions). In fact, because the seek(Shard) method is extremely misleading and now no longer used, I think it's safer to delete it and make everyone use the much more transparent seek(GenomeLoc). Note that I have not re-enabled my improvements to the intervals accumulation of ReferenceDataSource because that inefficiency is still present downstream in RodLocusView; need to discuss those changes with Matt.
This commit is contained in:
parent
24c84da60d
commit
2130b39f33
|
|
@ -80,7 +80,7 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView {
|
||||||
// grab the ROD iterator from the data source, and compute the first location in this shard, forwarding
|
// grab the ROD iterator from the data source, and compute the first location in this shard, forwarding
|
||||||
// the iterator to immediately before it, so that it can be added to the merging iterator primed for
|
// the iterator to immediately before it, so that it can be added to the merging iterator primed for
|
||||||
// next() to return the first real ROD in this shard
|
// next() to return the first real ROD in this shard
|
||||||
LocationAwareSeekableRODIterator it = dataSource.seek(provider.getShard());
|
LocationAwareSeekableRODIterator it = dataSource.seek(provider.getLocus());
|
||||||
it.seekForward(genomeLocParser.createGenomeLoc(loc.getContig(), loc.getStart()-1));
|
it.seekForward(genomeLocParser.createGenomeLoc(loc.getContig(), loc.getStart()-1));
|
||||||
|
|
||||||
states.add(new ReferenceOrderedDataState(dataSource,it));
|
states.add(new ReferenceOrderedDataState(dataSource,it));
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ package org.broadinstitute.sting.gatk.datasources.rmd;
|
||||||
|
|
||||||
import net.sf.samtools.SAMSequenceDictionary;
|
import net.sf.samtools.SAMSequenceDictionary;
|
||||||
import org.broadinstitute.sting.commandline.Tags;
|
import org.broadinstitute.sting.commandline.Tags;
|
||||||
import org.broadinstitute.sting.gatk.datasources.reads.Shard;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator;
|
import org.broadinstitute.sting.gatk.refdata.SeekableRODIterator;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack;
|
||||||
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrackBuilder;
|
||||||
|
|
@ -154,16 +153,6 @@ public class ReferenceOrderedDataSource {
|
||||||
return (name.equals(fileDescriptor.getName()) && (type.getClass().isAssignableFrom(getType().getClass())));
|
return (name.equals(fileDescriptor.getName()) && (type.getClass().isAssignableFrom(getType().getClass())));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Seek to the specified position and return an iterator through the data.
|
|
||||||
* @param shard Shard that points to the selected position.
|
|
||||||
* @return Iterator through the data.
|
|
||||||
*/
|
|
||||||
public LocationAwareSeekableRODIterator seek( Shard shard ) {
|
|
||||||
DataStreamSegment dataStreamSegment = shard.getGenomeLocs().size() != 0 ? new MappedStreamSegment(shard.getGenomeLocs().get(0)) : new EntireStream();
|
|
||||||
return iteratorPool.iterator(dataStreamSegment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Seek to the specified position and return an iterator through the data.
|
* Seek to the specified position and return an iterator through the data.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue