From 082073ca3c622a89cc605804af8bce43bf53404c Mon Sep 17 00:00:00 2001 From: hanna Date: Tue, 23 Nov 2010 05:17:06 +0000 Subject: [PATCH] Stop RBP.getPileupBySample() from throwing a NullPointerException if the sample doesn't exist -- now returns null. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4719 348d0f76-0448-11de-a6fe-93d51630548a --- .../pileup/AbstractReadBackedPileup.java | 6 ++- .../pileup/ReadBackedPileupUnitTest.java | 45 +++++++++++++++++-- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java b/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java index f50d7a5af..85156abf1 100644 --- a/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java +++ b/java/src/org/broadinstitute/sting/utils/pileup/AbstractReadBackedPileup.java @@ -612,7 +612,8 @@ public abstract class AbstractReadBackedPileup tracker = (PerSamplePileupElementTracker)pileupElementTracker; - return (RBP)createNewPileup(loc,tracker.getElements(sampleName)); + PileupElementTracker filteredElements = tracker.getElements(sampleName); + return filteredElements != null ? (RBP)createNewPileup(loc,filteredElements) : null; } else { UnifiedPileupElementTracker filteredTracker = new UnifiedPileupElementTracker(); @@ -635,7 +636,8 @@ public abstract class AbstractReadBackedPileup tracker = (PerSamplePileupElementTracker)pileupElementTracker; - return (RBP)createNewPileup(loc,tracker.getElements(sample)); + PileupElementTracker filteredElements = tracker.getElements(sample); + return filteredElements != null ? (RBP)createNewPileup(loc,filteredElements) : null; } else { UnifiedPileupElementTracker filteredTracker = new UnifiedPileupElementTracker(); diff --git a/java/test/org/broadinstitute/sting/utils/pileup/ReadBackedPileupUnitTest.java b/java/test/org/broadinstitute/sting/utils/pileup/ReadBackedPileupUnitTest.java index c031aa2da..fb479ab47 100644 --- a/java/test/org/broadinstitute/sting/utils/pileup/ReadBackedPileupUnitTest.java +++ b/java/test/org/broadinstitute/sting/utils/pileup/ReadBackedPileupUnitTest.java @@ -33,10 +33,7 @@ import org.broadinstitute.sting.utils.sam.ArtificialSAMUtils; import org.testng.annotations.Test; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Test routines for read-backed pileup. @@ -164,4 +161,44 @@ public class ReadBackedPileupUnitTest { Assert.assertEquals(rg2Reads.get(0), read2, "Read " + read2.getReadName() + " should be in rg2 but isn't"); Assert.assertEquals(rg2Reads.get(1), read4, "Read " + read4.getReadName() + " should be in rg2 but isn't"); } + + @Test + public void testGetPileupForSample() { + Sample sample1 = new Sample("sample1"); + Sample sample2 = new Sample("sample2"); + + SAMReadGroupRecord readGroupOne = new SAMReadGroupRecord("rg1"); + readGroupOne.setSample(sample1.getId()); + SAMReadGroupRecord readGroupTwo = new SAMReadGroupRecord("rg2"); + readGroupTwo.setSample(sample2.getId()); + + SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1,1,1000); + header.addReadGroup(readGroupOne); + header.addReadGroup(readGroupTwo); + + SAMRecord read1 = ArtificialSAMUtils.createArtificialRead(header,"read1",0,1,10); + read1.setAttribute("RG",readGroupOne.getId()); + SAMRecord read2 = ArtificialSAMUtils.createArtificialRead(header,"read2",0,1,10); + read2.setAttribute("RG",readGroupTwo.getId()); + + Map sampleToPileupMap = new HashMap(); + sampleToPileupMap.put(sample1,new ReadBackedPileupImpl(null,Collections.singletonList(read1),0)); + sampleToPileupMap.put(sample2,new ReadBackedPileupImpl(null,Collections.singletonList(read2),0)); + + ReadBackedPileup pileup = new ReadBackedPileupImpl(null,sampleToPileupMap); + + ReadBackedPileup sample1Pileup = pileup.getPileupForSample(sample1); + Assert.assertEquals(sample1Pileup.size(),1,"Sample 1 pileup has wrong number of elements"); + Assert.assertEquals(sample1Pileup.getReads().get(0),read1,"Sample 1 pileup has incorrect read"); + + ReadBackedPileup sample2Pileup = pileup.getPileupForSampleName(sample2.getId()); + Assert.assertEquals(sample2Pileup.size(),1,"Sample 2 pileup has wrong number of elements"); + Assert.assertEquals(sample2Pileup.getReads().get(0),read2,"Sample 2 pileup has incorrect read"); + + ReadBackedPileup missingSamplePileup = pileup.getPileupForSample(new Sample("missing")); + Assert.assertNull(missingSamplePileup,"Pileup for sample 'missing' should be null but isn't"); + + missingSamplePileup = pileup.getPileupForSampleName("not here"); + Assert.assertNull(missingSamplePileup,"Pileup for sample 'not here' should be null but isn't"); + } }