getFamily() and associated methods implemented and tested
-- Sample no longer serializable -- Sample now implements Comparable
This commit is contained in:
parent
9bd3ba4c7e
commit
51ecc20867
|
|
@ -9,7 +9,7 @@ import java.util.Map;
|
|||
/**
|
||||
*
|
||||
*/
|
||||
public class Sample implements java.io.Serializable {
|
||||
public class Sample implements Comparable<Sample> { // implements java.io.Serializable {
|
||||
final private String familyID, paternalID, maternalID;
|
||||
final private Gender gender;
|
||||
final private double quantitativePhenotype;
|
||||
|
|
@ -118,6 +118,11 @@ public class Sample implements java.io.Serializable {
|
|||
return gender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(final Sample sample) {
|
||||
return ID.compareTo(sample.getID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("Sample %s fam=%s dad=%s mom=%s gender=%s affection=%s qt=%s props=%s",
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import net.sf.samtools.SAMReadGroupRecord;
|
|||
import net.sf.samtools.SAMRecord;
|
||||
import org.broadinstitute.sting.utils.exceptions.StingException;
|
||||
import org.broadinstitute.sting.utils.variantcontext.Genotype;
|
||||
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
|
@ -139,30 +138,42 @@ public class SampleDB {
|
|||
//
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
public Set<String> getFamilyIDs() {
|
||||
throw new NotImplementedException();
|
||||
/**
|
||||
* Returns a sorted set of the family IDs in all samples (excluding null ids)
|
||||
* @return
|
||||
*/
|
||||
public final Set<String> getFamilyIDs() {
|
||||
return getFamilies().keySet();
|
||||
}
|
||||
|
||||
public Map<String, Set<Sample>> getFamilies() {
|
||||
throw new NotImplementedException();
|
||||
/**
|
||||
* Returns a map from family ID -> set of family members for all samples with
|
||||
* non-null family ids
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public final Map<String, Set<Sample>> getFamilies() {
|
||||
final Map<String, Set<Sample>> families = new TreeMap<String, Set<Sample>>();
|
||||
|
||||
for ( final Sample sample : samples.values() ) {
|
||||
final String famID = sample.getFamilyID();
|
||||
if ( famID != null ) {
|
||||
if ( ! families.containsKey(famID) )
|
||||
families.put(famID, new TreeSet<Sample>());
|
||||
families.get(famID).add(sample);
|
||||
}
|
||||
}
|
||||
|
||||
return families;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all samples with a given family ID
|
||||
* Note that this isn't terribly efficient (linear) - it may be worth adding a new family ID data structure for this
|
||||
* @param familyId
|
||||
* @return
|
||||
*/
|
||||
public Set<Sample> getFamily(String familyId) {
|
||||
HashSet<Sample> familyMembers = new HashSet<Sample>();
|
||||
|
||||
for (Sample sample : samples.values()) {
|
||||
if (sample.getFamilyID() != null) {
|
||||
if (sample.getFamilyID().equals(familyId))
|
||||
familyMembers.add(sample);
|
||||
}
|
||||
}
|
||||
return familyMembers;
|
||||
return getFamilies().get(familyId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -172,9 +183,9 @@ public class SampleDB {
|
|||
* @return
|
||||
*/
|
||||
public Set<Sample> getChildren(Sample sample) {
|
||||
HashSet<Sample> children = new HashSet<Sample>();
|
||||
for (Sample familyMember : getFamily(sample.getFamilyID())) {
|
||||
if (familyMember.getMother() == sample || familyMember.getFather() == sample) {
|
||||
final HashSet<Sample> children = new HashSet<Sample>();
|
||||
for ( final Sample familyMember : getFamily(sample.getFamilyID())) {
|
||||
if ( familyMember.getMother() == sample || familyMember.getFather() == sample ) {
|
||||
children.add(familyMember);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,7 @@ import org.testng.annotations.BeforeMethod;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
|
|
@ -36,9 +34,17 @@ public class SampleDBUnitTest extends BaseTest {
|
|||
|
||||
private static final String testPEDString =
|
||||
String.format("%s%n%s%n%s",
|
||||
"fam1 kid dad mom 1 2",
|
||||
"fam1 dad 0 0 1 1",
|
||||
"fam1 mom 0 0 2 2");
|
||||
"fam1 kid dad mom 1 2",
|
||||
"fam1 dad 0 0 1 1",
|
||||
"fam1 mom 0 0 2 2");
|
||||
|
||||
private static final String testPEDMultipleFamilies =
|
||||
String.format("%s%n%s%n%s%n%s%n%s",
|
||||
"fam1 kid dad mom 1 2",
|
||||
"fam1 dad 0 0 1 1",
|
||||
"fam1 mom 0 0 2 2",
|
||||
"fam3 s1 d1 m1 2 2",
|
||||
"fam2 s2 d2 m2 2 2");
|
||||
|
||||
private static final String testPEDStringInconsistentGender =
|
||||
"fam1 kid 0 0 2 2";
|
||||
|
|
@ -117,4 +123,35 @@ public class SampleDBUnitTest extends BaseTest {
|
|||
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringInconsistentGender));
|
||||
builder.getFinalSampleDB();
|
||||
}
|
||||
|
||||
@Test()
|
||||
public void getFamilyIDs() {
|
||||
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies));
|
||||
SampleDB db = builder.getFinalSampleDB();
|
||||
Assert.assertEquals(db.getFamilyIDs(), new TreeSet<String>(Arrays.asList("fam1", "fam2", "fam3")));
|
||||
}
|
||||
|
||||
@Test()
|
||||
public void getFamily() {
|
||||
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies));
|
||||
SampleDB db = builder.getFinalSampleDB();
|
||||
Assert.assertEquals(db.getFamily("fam1"), testPEDSamplesAsSet);
|
||||
}
|
||||
|
||||
@Test()
|
||||
public void loadFamilyIDs() {
|
||||
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies));
|
||||
SampleDB db = builder.getFinalSampleDB();
|
||||
Map<String, Set<Sample>> families = db.getFamilies();
|
||||
Assert.assertEquals(families.size(), 3);
|
||||
Assert.assertEquals(families.keySet(), new TreeSet<String>(Arrays.asList("fam1", "fam2", "fam3")));
|
||||
|
||||
for ( final String famID : families.keySet() ) {
|
||||
final Set<Sample> fam = families.get(famID);
|
||||
Assert.assertEquals(fam.size(), 3);
|
||||
for ( final Sample sample : fam ) {
|
||||
Assert.assertEquals(sample.getFamilyID(), famID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue