LocusIteratorByState and ReadBackedPileups no long use Sample
This commit is contained in:
parent
b3a2371925
commit
625ffb6a07
|
|
@ -70,7 +70,7 @@ public class WindowMaker implements Iterable<WindowMaker.WindowMakerIterator>, I
|
|||
this.sourceInfo = shard.getReadProperties();
|
||||
this.readIterator = iterator;
|
||||
|
||||
this.sourceIterator = new PeekableIterator<AlignmentContext>(new LocusIteratorByState(iterator,sourceInfo,genomeLocParser,sampleData));
|
||||
this.sourceIterator = new PeekableIterator<AlignmentContext>(new LocusIteratorByState(iterator,sourceInfo,genomeLocParser,sampleData.getSampleNames()));
|
||||
this.intervalIterator = intervals.size()>0 ? new PeekableIterator<GenomeLoc>(intervals.iterator()) : null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ import org.broadinstitute.sting.gatk.DownsampleType;
|
|||
import org.broadinstitute.sting.gatk.DownsamplingMethod;
|
||||
import org.broadinstitute.sting.gatk.ReadProperties;
|
||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||
import org.broadinstitute.sting.gatk.samples.Sample;
|
||||
import org.broadinstitute.sting.gatk.samples.SampleDataSource;
|
||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||
import org.broadinstitute.sting.utils.MathUtils;
|
||||
|
|
@ -69,7 +67,7 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
* Used to create new GenomeLocs.
|
||||
*/
|
||||
private final GenomeLocParser genomeLocParser;
|
||||
private final ArrayList<Sample> samples;
|
||||
private final ArrayList<String> samples;
|
||||
private final ReadStateManager readStates;
|
||||
|
||||
static private class SAMRecordState {
|
||||
|
|
@ -278,15 +276,15 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
//
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
public LocusIteratorByState(final Iterator<SAMRecord> samIterator, ReadProperties readInformation, GenomeLocParser genomeLocParser, SampleDataSource sampleData ) {
|
||||
public LocusIteratorByState(final Iterator<SAMRecord> samIterator, ReadProperties readInformation, GenomeLocParser genomeLocParser, Collection<String> samples ) {
|
||||
this.readInfo = readInformation;
|
||||
this.genomeLocParser = genomeLocParser;
|
||||
this.samples = new ArrayList<String>(samples);
|
||||
this.readStates = new ReadStateManager(samIterator,readInformation.getDownsamplingMethod());
|
||||
}
|
||||
|
||||
// get the list of samples
|
||||
this.samples = new ArrayList<Sample>(sampleData.getSamples());
|
||||
|
||||
readStates = new ReadStateManager(samIterator,readInformation.getDownsamplingMethod());
|
||||
|
||||
public LocusIteratorByState(final Iterator<SAMRecord> samIterator, ReadProperties readInformation, GenomeLocParser genomeLocParser ) {
|
||||
this(samIterator, readInformation, genomeLocParser, Collections.<String>emptySet());
|
||||
}
|
||||
|
||||
public Iterator<AlignmentContext> iterator() {
|
||||
|
|
@ -303,19 +301,6 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
//if ( DEBUG ) System.out.printf("hasNext() = %b%n", r);
|
||||
}
|
||||
|
||||
public void printState() {
|
||||
for(Sample sample: samples) {
|
||||
Iterator<SAMRecordState> iterator = readStates.iterator(sample);
|
||||
while(iterator.hasNext()) {
|
||||
SAMRecordState state = iterator.next();
|
||||
logger.debug(String.format("printState():"));
|
||||
SAMRecord read = state.getRead();
|
||||
int offset = state.getReadOffset();
|
||||
logger.debug(String.format(" read: %s(%d)=%s, cigar=%s", read.getReadName(), offset, (char)read.getReadBases()[offset], read.getCigarString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private GenomeLoc getLocation() {
|
||||
return readStates.isEmpty() ? null : readStates.getFirst().getLocation(genomeLocParser);
|
||||
}
|
||||
|
|
@ -355,14 +340,14 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
// In this case, the subsequent call to next() will emit the normal pileup at the current base
|
||||
// and shift the position.
|
||||
if (readInfo.generateExtendedEvents() && hasExtendedEvents) {
|
||||
Map<Sample,ReadBackedExtendedEventPileupImpl> fullExtendedEventPileup = new HashMap<Sample,ReadBackedExtendedEventPileupImpl>();
|
||||
Map<String,ReadBackedExtendedEventPileupImpl> fullExtendedEventPileup = new HashMap<String,ReadBackedExtendedEventPileupImpl>();
|
||||
|
||||
// get current location on the reference and decrement it by 1: the indels we just stepped over
|
||||
// are associated with the *previous* reference base
|
||||
GenomeLoc loc = genomeLocParser.incPos(getLocation(),-1);
|
||||
|
||||
boolean hasBeenSampled = false;
|
||||
for(Sample sample: samples) {
|
||||
for(final String sample: samples) {
|
||||
Iterator<SAMRecordState> iterator = readStates.iterator(sample);
|
||||
List<ExtendedEventPileupElement> indelPile = new ArrayList<ExtendedEventPileupElement>(readStates.size(sample));
|
||||
hasBeenSampled |= loc.getStart() <= readStates.getDownsamplingExtent(sample);
|
||||
|
|
@ -426,10 +411,10 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
nextAlignmentContext = new AlignmentContext(loc, new ReadBackedExtendedEventPileupImpl(loc, fullExtendedEventPileup), hasBeenSampled);
|
||||
} else {
|
||||
GenomeLoc location = getLocation();
|
||||
Map<Sample,ReadBackedPileupImpl> fullPileup = new HashMap<Sample,ReadBackedPileupImpl>();
|
||||
Map<String,ReadBackedPileupImpl> fullPileup = new HashMap<String,ReadBackedPileupImpl>();
|
||||
|
||||
boolean hasBeenSampled = false;
|
||||
for(Sample sample: samples) {
|
||||
for(final String sample: samples) {
|
||||
Iterator<SAMRecordState> iterator = readStates.iterator(sample);
|
||||
List<PileupElement> pile = new ArrayList<PileupElement>(readStates.size(sample));
|
||||
hasBeenSampled |= location.getStart() <= readStates.getDownsamplingExtent(sample);
|
||||
|
|
@ -495,7 +480,7 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
}
|
||||
|
||||
private void updateReadStates() {
|
||||
for(Sample sample: samples) {
|
||||
for(final String sample: samples) {
|
||||
Iterator<SAMRecordState> it = readStates.iterator(sample);
|
||||
while ( it.hasNext() ) {
|
||||
SAMRecordState state = it.next();
|
||||
|
|
@ -522,7 +507,7 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
private final PeekableIterator<SAMRecord> iterator;
|
||||
private final DownsamplingMethod downsamplingMethod;
|
||||
private final SamplePartitioner samplePartitioner;
|
||||
private final Map<Sample,PerSampleReadStateManager> readStatesBySample = new HashMap<Sample,PerSampleReadStateManager>();
|
||||
private final Map<String,PerSampleReadStateManager> readStatesBySample = new HashMap<String,PerSampleReadStateManager>();
|
||||
private final int targetCoverage;
|
||||
private int totalReadStates = 0;
|
||||
|
||||
|
|
@ -540,9 +525,9 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
}
|
||||
|
||||
Map<String,ReadSelector> readSelectors = new HashMap<String,ReadSelector>();
|
||||
for(Sample sample: samples) {
|
||||
for(final String sample: samples) {
|
||||
readStatesBySample.put(sample,new PerSampleReadStateManager());
|
||||
readSelectors.put(sample.getID(),downsamplingMethod.type == DownsampleType.BY_SAMPLE ? new NRandomReadSelector(null,targetCoverage) : new AllReadsSelector());
|
||||
readSelectors.put(sample,downsamplingMethod.type == DownsampleType.BY_SAMPLE ? new NRandomReadSelector(null,targetCoverage) : new AllReadsSelector());
|
||||
}
|
||||
|
||||
samplePartitioner = new SamplePartitioner(readSelectors);
|
||||
|
|
@ -554,7 +539,7 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
* @param sample The sample.
|
||||
* @return Iterator over the reads associated with that sample.
|
||||
*/
|
||||
public Iterator<SAMRecordState> iterator(final Sample sample) {
|
||||
public Iterator<SAMRecordState> iterator(final String sample) {
|
||||
return new Iterator<SAMRecordState>() {
|
||||
private Iterator<SAMRecordState> wrappedIterator = readStatesBySample.get(sample).iterator();
|
||||
|
||||
|
|
@ -590,7 +575,7 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
* @param sample The sample.
|
||||
* @return Total number of reads in the given sample.
|
||||
*/
|
||||
public int size(final Sample sample) {
|
||||
public int size(final String sample) {
|
||||
return readStatesBySample.get(sample).size();
|
||||
}
|
||||
|
||||
|
|
@ -600,12 +585,12 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
* @param sample Sample, downsampled independently.
|
||||
* @return Integer stop of the furthest undownsampled region.
|
||||
*/
|
||||
public int getDownsamplingExtent(final Sample sample) {
|
||||
public int getDownsamplingExtent(final String sample) {
|
||||
return readStatesBySample.get(sample).getDownsamplingExtent();
|
||||
}
|
||||
|
||||
public SAMRecordState getFirst() {
|
||||
for(Sample sample: samples) {
|
||||
for(final String sample: samples) {
|
||||
PerSampleReadStateManager reads = readStatesBySample.get(sample);
|
||||
if(!reads.isEmpty())
|
||||
return reads.peek();
|
||||
|
|
@ -639,8 +624,8 @@ public class LocusIteratorByState extends LocusIterator {
|
|||
}
|
||||
samplePartitioner.complete();
|
||||
|
||||
for(Sample sample: samples) {
|
||||
ReadSelector aggregator = samplePartitioner.getSelectedReads(sample.getID());
|
||||
for(final String sample: samples) {
|
||||
ReadSelector aggregator = samplePartitioner.getSelectedReads(sample);
|
||||
|
||||
Collection<SAMRecord> newReads = new ArrayList<SAMRecord>(aggregator.getSelectedReads());
|
||||
|
||||
|
|
@ -1072,6 +1057,3 @@ class SamplePartitioner implements ReadSelector {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -182,12 +182,15 @@ public class SampleDataSource {
|
|||
return children;
|
||||
}
|
||||
|
||||
public Set<Sample> getSamples() {
|
||||
HashSet<Sample> set = new HashSet<Sample>();
|
||||
set.addAll(samples.values());
|
||||
return set;
|
||||
public Collection<Sample> getSamples() {
|
||||
return Collections.unmodifiableCollection(samples.values());
|
||||
}
|
||||
|
||||
public Collection<String> getSampleNames() {
|
||||
return Collections.unmodifiableCollection(samples.keySet());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Takes a collection of sample names and returns their corresponding sample objects
|
||||
* Note that, since a set is returned, if you pass in a list with duplicates names there will not be any duplicates in the returned set
|
||||
|
|
|
|||
|
|
@ -26,11 +26,9 @@ package org.broadinstitute.sting.utils.pileup;
|
|||
|
||||
import net.sf.samtools.SAMRecord;
|
||||
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
|
||||
import org.broadinstitute.sting.gatk.samples.Sample;
|
||||
import org.broadinstitute.sting.utils.BaseUtils;
|
||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||
import org.broadinstitute.sting.utils.exceptions.StingException;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
|
@ -114,10 +112,10 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
calculateCachedData();
|
||||
}
|
||||
|
||||
protected AbstractReadBackedPileup(GenomeLoc loc, Map<Sample,? extends AbstractReadBackedPileup<RBP,PE>> pileupsBySample) {
|
||||
protected AbstractReadBackedPileup(GenomeLoc loc, Map<String,? extends AbstractReadBackedPileup<RBP,PE>> pileupsBySample) {
|
||||
this.loc = loc;
|
||||
PerSamplePileupElementTracker<PE> tracker = new PerSamplePileupElementTracker<PE>();
|
||||
for(Map.Entry<Sample,? extends AbstractReadBackedPileup<RBP,PE>> pileupEntry: pileupsBySample.entrySet()) {
|
||||
for(Map.Entry<String,? extends AbstractReadBackedPileup<RBP,PE>> pileupEntry: pileupsBySample.entrySet()) {
|
||||
tracker.addElements(pileupEntry.getKey(),pileupEntry.getValue().pileupElementTracker);
|
||||
addPileupToCumulativeStats(pileupEntry.getValue());
|
||||
}
|
||||
|
|
@ -213,7 +211,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getPileupWithoutDeletions();
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -251,7 +249,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getOverlappingFragmentFilteredPileup();
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -305,7 +303,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getPileupWithoutMappingQualityZeroReads();
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -334,7 +332,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getPositiveStrandPileup();
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -363,7 +361,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getNegativeStrandPileup();
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -393,7 +391,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getFilteredPileup(filter);
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -425,7 +423,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getBaseAndMappingFilteredPileup(minBaseQ,minMapQ);
|
||||
filteredTracker.addElements(sample,pileup.pileupElementTracker);
|
||||
|
|
@ -492,7 +490,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getPileupForReadGroup(targetReadGroupId);
|
||||
if(pileup != null)
|
||||
|
|
@ -523,7 +521,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
PerSamplePileupElementTracker<PE> filteredTracker = new PerSamplePileupElementTracker<PE>();
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
AbstractReadBackedPileup<RBP,PE> pileup = createNewPileup(loc,perSampleElements).getPileupForLane(laneID);
|
||||
if(pileup != null)
|
||||
|
|
@ -553,11 +551,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
public Collection<String> getSampleNames() {
|
||||
if(pileupElementTracker instanceof PerSamplePileupElementTracker) {
|
||||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
Collection<String> sampleNames = new HashSet<String>();
|
||||
for (Sample sample : tracker.getSamples()) {
|
||||
sampleNames.add(sample.getID());
|
||||
}
|
||||
return sampleNames;
|
||||
return new HashSet<String>(tracker.getSamples());
|
||||
}
|
||||
else {
|
||||
Collection<String> sampleNames = new HashSet<String>();
|
||||
|
|
@ -594,7 +588,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
|
||||
int current = 0;
|
||||
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> perSampleElements = tracker.getElements(sample);
|
||||
|
||||
List<PileupElement> filteredPileup = new ArrayList<PileupElement>();
|
||||
|
|
@ -767,7 +761,7 @@ public abstract class AbstractReadBackedPileup<RBP extends AbstractReadBackedPil
|
|||
|
||||
if(pileupElementTracker instanceof PerSamplePileupElementTracker) {
|
||||
PerSamplePileupElementTracker<PE> tracker = (PerSamplePileupElementTracker<PE>)pileupElementTracker;
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
int[] countsBySample = createNewPileup(loc,tracker.getElements(sample)).getBaseCounts();
|
||||
for(int i = 0; i < counts.length; i++)
|
||||
counts[i] += countsBySample[i];
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
package org.broadinstitute.sting.utils.pileup;
|
||||
|
||||
import net.sf.picard.util.PeekableIterator;
|
||||
import org.broadinstitute.sting.gatk.samples.Sample;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
|
|
@ -42,7 +41,7 @@ class MergingPileupElementIterator<PE extends PileupElement> implements Iterator
|
|||
|
||||
public MergingPileupElementIterator(PerSamplePileupElementTracker<PE> tracker) {
|
||||
perSampleIterators = new PriorityQueue<PeekableIterator<PE>>(Math.max(1,tracker.getSamples().size()),new PileupElementIteratorComparator());
|
||||
for(Sample sample: tracker.getSamples()) {
|
||||
for(final String sample: tracker.getSamples()) {
|
||||
PileupElementTracker<PE> trackerPerSample = tracker.getElements(sample);
|
||||
if(trackerPerSample.size() != 0)
|
||||
perSampleIterators.add(new PeekableIterator<PE>(trackerPerSample.iterator()));
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@
|
|||
|
||||
package org.broadinstitute.sting.utils.pileup;
|
||||
|
||||
import org.broadinstitute.sting.gatk.samples.Sample;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
|
|
@ -60,52 +58,35 @@ class UnifiedPileupElementTracker<PE extends PileupElement> extends PileupElemen
|
|||
}
|
||||
|
||||
class PerSamplePileupElementTracker<PE extends PileupElement> extends PileupElementTracker<PE> {
|
||||
private final Map<Sample,PileupElementTracker<PE>> pileup;
|
||||
private final Map<String, Sample> sampleNames = new HashMap<String, Sample>();
|
||||
private final Map<String,PileupElementTracker<PE>> pileup;
|
||||
private int size = 0;
|
||||
|
||||
public PerSamplePileupElementTracker() {
|
||||
pileup = new HashMap<Sample,PileupElementTracker<PE>>();
|
||||
}
|
||||
|
||||
public PerSamplePileupElementTracker(Map<Sample,AbstractReadBackedPileup<?,PE>> pileupsBySample) {
|
||||
pileup = new HashMap<Sample,PileupElementTracker<PE>>();
|
||||
for(Map.Entry<Sample,AbstractReadBackedPileup<?,PE>> entry: pileupsBySample.entrySet()) {
|
||||
Sample sample = entry.getKey();
|
||||
AbstractReadBackedPileup<?,PE> pileupBySample = entry.getValue();
|
||||
pileup.put(sample,pileupBySample.pileupElementTracker);
|
||||
sampleNames.put(sample.getID(), sample);
|
||||
}
|
||||
pileup = new HashMap<String,PileupElementTracker<PE>>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of all the samples stored in this pileup.
|
||||
* @return List of samples in this pileup.
|
||||
*/
|
||||
public Collection<Sample> getSamples() {
|
||||
public Collection<String> getSamples() {
|
||||
return pileup.keySet();
|
||||
}
|
||||
|
||||
public PileupElementTracker<PE> getElements(final Sample sample) {
|
||||
public PileupElementTracker<PE> getElements(final String sample) {
|
||||
return pileup.get(sample);
|
||||
}
|
||||
|
||||
public PileupElementTracker<PE> getElements(final String sampleName) {
|
||||
return pileup.get(sampleNames.get(sampleName));
|
||||
}
|
||||
|
||||
public PileupElementTracker<PE> getElements(final Collection<String> selectSampleNames) {
|
||||
PerSamplePileupElementTracker<PE> result = new PerSamplePileupElementTracker<PE>();
|
||||
for (String sample : selectSampleNames) {
|
||||
Sample sampleObject = sampleNames.get(sample);
|
||||
result.addElements(sampleObject, pileup.get(sampleObject));
|
||||
for (final String sample : selectSampleNames) {
|
||||
result.addElements(sample, pileup.get(sample));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void addElements(final Sample sample, PileupElementTracker<PE> elements) {
|
||||
public void addElements(final String sample, PileupElementTracker<PE> elements) {
|
||||
pileup.put(sample,elements);
|
||||
sampleNames.put(sample.getID(), sample);
|
||||
size += elements.size();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
package org.broadinstitute.sting.utils.pileup;
|
||||
|
||||
import net.sf.samtools.SAMRecord;
|
||||
import org.broadinstitute.sting.gatk.samples.Sample;
|
||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||
import org.broadinstitute.sting.utils.collections.Pair;
|
||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||
|
|
@ -56,7 +55,7 @@ public class ReadBackedExtendedEventPileupImpl extends AbstractReadBackedPileup<
|
|||
}
|
||||
|
||||
// this is the good new one
|
||||
public ReadBackedExtendedEventPileupImpl(GenomeLoc loc, Map<Sample,? extends ReadBackedExtendedEventPileupImpl> pileupElementsBySample) {
|
||||
public ReadBackedExtendedEventPileupImpl(GenomeLoc loc, Map<String,? extends ReadBackedExtendedEventPileupImpl> pileupElementsBySample) {
|
||||
super(loc,pileupElementsBySample);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
package org.broadinstitute.sting.utils.pileup;
|
||||
|
||||
import net.sf.samtools.SAMRecord;
|
||||
import org.broadinstitute.sting.gatk.samples.Sample;
|
||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -48,7 +47,7 @@ public class ReadBackedPileupImpl extends AbstractReadBackedPileup<ReadBackedPil
|
|||
super(loc,pileupElements);
|
||||
}
|
||||
|
||||
public ReadBackedPileupImpl(GenomeLoc loc, Map<Sample,ReadBackedPileupImpl> pileupElementsBySample) {
|
||||
public ReadBackedPileupImpl(GenomeLoc loc, Map<String,ReadBackedPileupImpl> pileupElementsBySample) {
|
||||
super(loc,pileupElementsBySample);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ import java.util.*;
|
|||
* testing of the LocusIteratorByState
|
||||
*/
|
||||
public class LocusIteratorByStateUnitTest extends BaseTest {
|
||||
|
||||
private final int MAX_READS = 10;
|
||||
private static SAMFileHeader header;
|
||||
private LocusIteratorByState li;
|
||||
|
|
@ -67,7 +66,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
|
|||
List<SAMRecord> reads = Arrays.asList(before,during,after);
|
||||
|
||||
// create the iterator by state with the fake reads and fake records
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser, new SampleDataSource());
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser);
|
||||
|
||||
boolean foundExtendedEventPileup = false;
|
||||
while (li.hasNext()) {
|
||||
|
|
@ -119,7 +118,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
|
|||
List<SAMRecord> reads = Arrays.asList(before,during,after);
|
||||
|
||||
// create the iterator by state with the fake reads and fake records
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser, new SampleDataSource());
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser);
|
||||
|
||||
boolean foundExtendedEventPileup = false;
|
||||
while (li.hasNext()) {
|
||||
|
|
@ -153,7 +152,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
|
|||
List<SAMRecord> reads = Arrays.asList(indelOnlyRead);
|
||||
|
||||
// create the iterator by state with the fake reads and fake records
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser,new SampleDataSource());
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser);
|
||||
|
||||
// Traditionally, reads that end with indels bleed into the pileup at the following locus. Verify that the next pileup contains this read
|
||||
// and considers it to be an indel-containing read.
|
||||
|
|
@ -166,7 +165,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
|
|||
|
||||
// Turn on extended events, and make sure the event is found.
|
||||
JVMUtils.setFieldValue(JVMUtils.findField(ReadProperties.class,"generateExtendedEvents"),readAttributes,true);
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser,new SampleDataSource());
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser);
|
||||
|
||||
Assert.assertTrue(li.hasNext(),"LocusIteratorByState with extended events should contain exactly one pileup");
|
||||
alignmentContext = li.next();
|
||||
|
|
@ -202,7 +201,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
|
|||
List<SAMRecord> reads = Arrays.asList(leadingRead,indelOnlyRead,fullMatchAfterIndel);
|
||||
|
||||
// create the iterator by state with the fake reads and fake records
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),createTestReadProperties(),genomeLocParser,new SampleDataSource());
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),createTestReadProperties(),genomeLocParser);
|
||||
int currentLocus = firstLocus;
|
||||
int numAlignmentContextsFound = 0;
|
||||
|
||||
|
|
@ -259,7 +258,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
|
|||
List<SAMRecord> reads = Arrays.asList(leadingRead,indelOnlyRead,fullMatchAfterIndel);
|
||||
|
||||
// create the iterator by state with the fake reads and fake records
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser,new SampleDataSource());
|
||||
li = new LocusIteratorByState(new FakeCloseableIterator<SAMRecord>(reads.iterator()),readAttributes,genomeLocParser);
|
||||
|
||||
Assert.assertTrue(li.hasNext(),"Missing first locus at " + firstLocus);
|
||||
AlignmentContext alignmentContext = li.next();
|
||||
|
|
|
|||
Loading…
Reference in New Issue