From c6c6d32b462cd44d95a9b0e159e2d5cc8b4988d3 Mon Sep 17 00:00:00 2001 From: bthomas Date: Fri, 17 Sep 2010 15:55:17 +0000 Subject: [PATCH] Quickly adding a new convenience method for retreiving a group of samples. The method is getSamples(Collection) and returns a set of sample objects. There's also a test there. Ryan is using this to modify VCF code today... git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4303 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/GenomeAnalysisEngine.java | 10 ++++++++ .../datasources/sample/SampleDataSource.java | 23 ++++++++++++++++++- .../sample/SampleDataSourceUnitTest.java | 7 ++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index 640f71d95..b0cb761fc 100755 --- a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -1037,4 +1037,14 @@ public class GenomeAnalysisEngine { return sampleDataSource.getChildren(sample); } + /** + * Takes a list of sample names and returns their corresponding sample objects + * + * @param sampleNameList List of sample names + * @return Corresponding set of samples + */ + public Set getSamples(Collection sampleNameList) { + return sampleDataSource.getSamples(sampleNameList); + } + } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java b/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java index f8e923eb1..eedc15e7f 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSource.java @@ -19,6 +19,8 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.ArrayList; +import java.util.Collection; /** * Created by IntelliJ IDEA. @@ -464,5 +466,24 @@ public class SampleDataSource { return children; } + /** + * 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 + * @param sampleNameList Set of sample names + * @return Corresponding set of samples + */ + public Set getSamples(Collection sampleNameList) { + HashSet samples = new HashSet(); + for (String name : sampleNameList) { + try { + samples.add(getSampleById(name)); + } + catch (Exception e) { + throw new StingException("Could not get sample with the following ID: " + name, e); + } + } + return samples; + } -} \ No newline at end of file + +} diff --git a/java/test/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSourceUnitTest.java b/java/test/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSourceUnitTest.java index 54b4f0658..8b4046e5c 100644 --- a/java/test/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSourceUnitTest.java +++ b/java/test/org/broadinstitute/sting/gatk/datasources/sample/SampleDataSourceUnitTest.java @@ -46,6 +46,13 @@ public class SampleDataSourceUnitTest extends BaseTest { Assert.assertTrue(family.size() == 2); Assert.assertTrue(family.contains(sampleA)); Assert.assertTrue(family.contains(sampleB)); + + // make sure getSamples(List names) works + ArrayList names = new ArrayList(); + names.add("sampleA"); + names.add("sampleB"); + Set testList = s.getSamples(names); + Assert.assertTrue(testList.size() == 2); } // but that file should fail if it has an extra character in it...