From 52477bd9e64f0e7b1064892b4d6b3c0e7b730718 Mon Sep 17 00:00:00 2001 From: hanna Date: Fri, 18 Jun 2010 15:03:08 +0000 Subject: [PATCH] Add some missing methods to the pileup architecture. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3588 348d0f76-0448-11de-a6fe-93d51630548a --- .../pileup/ReadBackedExtendedEventPileup.java | 14 ++++++++++ .../sting/utils/pileup/ReadBackedPileup.java | 7 +++++ ...pleSplitReadBackedExtendedEventPileup.java | 18 ++++++++++++ .../pileup/SampleSplitReadBackedPileup.java | 4 +++ .../UnifiedReadBackedExtendedEventPileup.java | 28 +++++++++++++++++++ .../utils/pileup/UnifiedReadBackedPileup.java | 11 ++++++++ 6 files changed, 82 insertions(+) diff --git a/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java index 1ce46a1e2..7d424bb8c 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedExtendedEventPileup.java @@ -29,6 +29,7 @@ import org.broadinstitute.sting.utils.collections.Pair; import java.util.Iterator; import java.util.List; +import java.util.Collection; import net.sf.samtools.SAMRecord; @@ -58,6 +59,19 @@ public interface ReadBackedExtendedEventPileup extends Iterable getSamples(); + + /** + * Gets the particular subset of this pileup with the given sample name. + * @param sampleName Name of the sample to use. + * @return A subset of this pileup containing only reads with the given sample. + */ + public ReadBackedExtendedEventPileup getPileupForSample(String sampleName); + /** * Returns the number of deletion events in this pileup * diff --git a/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java index 6f480f7f6..0a024cb4d 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/ReadBackedPileup.java @@ -29,6 +29,7 @@ import org.broadinstitute.sting.gatk.iterators.IterableIterator; import net.sf.samtools.SAMRecord; import java.util.List; +import java.util.Collection; /** * A data retrieval interface for accessing parts of the pileup. @@ -95,6 +96,12 @@ public interface ReadBackedPileup extends Iterable { */ public ReadBackedPileup getDownsampledPileup(int desiredCoverage); + /** + * Gets a collection of all the samples stored in this pileup. + * @return Collection of samples in this pileup. + */ + public Collection getSamples(); + /** * Gets the particular subset of this pileup with the given sample name. * @param sampleName Name of the sample to use. diff --git a/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedExtendedEventPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedExtendedEventPileup.java index 72d57e964..c01d203ef 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedExtendedEventPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedExtendedEventPileup.java @@ -151,6 +151,24 @@ public class SampleSplitReadBackedExtendedEventPileup implements ReadBackedExten return downsampledPileup; } + /** + * Gets a list of all the samples stored in this pileup. + * @return List of samples in this pileup. + */ + public Collection getSamples() { + return pileupBySample.keySet(); + } + + /** + * Gets the particular subset of this pileup with the given sample name. + * @param sampleName Name of the sample to use. + * @return A subset of this pileup containing only reads with the given sample. + */ + public ReadBackedExtendedEventPileup getPileupForSample(String sampleName) { + return pileupBySample.get(sampleName); + } + + @Override public Iterator iterator() { return new ExtendedEventCastingIterator(new MergingPileupElementIterator(pileupBySample)); diff --git a/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedPileup.java index 52e6db31a..29f34dc00 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/SampleSplitReadBackedPileup.java @@ -226,6 +226,10 @@ public class SampleSplitReadBackedPileup implements ReadBackedPileup { return downsampledPileup; } + public Collection getSamples() { + return pileupBySample.keySet(); + } + @Override public ReadBackedPileup getPileupForSample(String sampleName) { return pileupBySample.containsKey(sampleName) ? pileupBySample.get(sampleName) : null; diff --git a/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedExtendedEventPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedExtendedEventPileup.java index bc1f46429..6f0b4af79 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedExtendedEventPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedExtendedEventPileup.java @@ -194,6 +194,34 @@ public class UnifiedReadBackedExtendedEventPileup implements ReadBackedExtendedE return new UnifiedReadBackedExtendedEventPileup(getLocation(), downsampledPileup); } + @Override + public Collection getSamples() { + Collection sampleNames = new HashSet(); + for(PileupElement p: this) { + SAMRecord read = p.getRead(); + String sampleName = read.getReadGroup() != null ? read.getReadGroup().getSample() : null; + sampleNames.add(sampleName); + } + return sampleNames; + } + + @Override + public ReadBackedExtendedEventPileup getPileupForSample(String sampleName) { + List filteredPileup = new ArrayList(); + for(ExtendedEventPileupElement p: this) { + SAMRecord read = p.getRead(); + if(sampleName != null) { + if(read.getReadGroup() != null && sampleName.equals(read.getReadGroup().getSample())) + filteredPileup.add(p); + } + else { + if(read.getReadGroup() == null || read.getReadGroup().getSample() == null) + filteredPileup.add(p); + } + } + return filteredPileup.size()>0 ? new UnifiedReadBackedExtendedEventPileup(loc,filteredPileup) : null; + } + // -------------------------------------------------------- // // iterators diff --git a/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedPileup.java index 62a25e58e..ab0cf3287 100755 --- a/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/UnifiedReadBackedPileup.java @@ -299,6 +299,17 @@ public class UnifiedReadBackedPileup implements ReadBackedPileup { return new UnifiedReadBackedPileup(getLocation(), downsampledPileup); } + @Override + public Collection getSamples() { + Collection sampleNames = new HashSet(); + for(PileupElement p: this) { + SAMRecord read = p.getRead(); + String sampleName = read.getReadGroup() != null ? read.getReadGroup().getSample() : null; + sampleNames.add(sampleName); + } + return sampleNames; + } + @Override public ReadBackedPileup getPileupForSample(String sampleName) { List filteredPileup = new ArrayList();