Fix Sample mergeValues failure when merging identical string values (#1156).

This commit is contained in:
Chris Norman 2015-09-14 19:08:38 -04:00 committed by Ron Levine
parent 9e168ede3e
commit e776502c49
2 changed files with 55 additions and 32 deletions

View File

@ -234,7 +234,9 @@ public class Sample implements Comparable<Sample> { // implements java.io.Serial
return o1; // keep o1, since it's a real value return o1; // keep o1, since it's a real value
else { else {
// both o1 and o2 have a value // both o1 and o2 have a value
if ( o1 == o2 ) if ( o1 instanceof String && o1.equals(o2) )
return o1;
else if ( o1 == o2 )
return o1; return o1;
else else
throw new UserException("Inconsistent values detected for " + name + " for field " + field + " value1 " + o1 + " value2 " + o2); throw new UserException("Inconsistent values detected for " + name + " for field " + field + " value1 " + o1 + " value2 " + o2);

View File

@ -117,6 +117,9 @@ public class SampleDBUnitTest extends BaseTest {
private static final String testPEDStringInconsistentGender = private static final String testPEDStringInconsistentGender =
"fam1 kid 0 0 2 2"; "fam1 kid 0 0 2 2";
private static final String testPEDStringConsistent =
"fam1 kid dad mom 1 2";
private static final Set<Sample> testPEDSamplesAsSet = private static final Set<Sample> testPEDSamplesAsSet =
new HashSet<Sample>(testPEDSamples); new HashSet<Sample>(testPEDSamples);
@ -128,20 +131,20 @@ public class SampleDBUnitTest extends BaseTest {
@Test() @Test()
public void loadPEDFile() { public void loadPEDFile() {
builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED)); final SampleDB db = builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(testPEDSamplesAsSet, db.getSamples()); Assert.assertEquals(testPEDSamplesAsSet, db.getSamples());
} }
@Test() @Test()
public void loadPEDString() { public void loadPEDString() {
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDString)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDString))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(testPEDSamplesAsSet, db.getSamples()); Assert.assertEquals(testPEDSamplesAsSet, db.getSamples());
} }
private static final void addSAMHeader() { private static final void addSAMHeader() {
SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 10); final SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 10);
ArtificialSAMUtils.createEnumeratedReadGroups(header, Arrays.asList("1", "2", "3"), ArtificialSAMUtils.createEnumeratedReadGroups(header, Arrays.asList("1", "2", "3"),
Arrays.asList("kid", "mom", "dad")); Arrays.asList("kid", "mom", "dad"));
builder.addSamplesFromSAMHeader(header); builder.addSamplesFromSAMHeader(header);
@ -150,66 +153,84 @@ public class SampleDBUnitTest extends BaseTest {
@Test() @Test()
public void loadSAMHeader() { public void loadSAMHeader() {
addSAMHeader(); addSAMHeader();
SampleDB db = builder.getFinalSampleDB(); final SampleDB db = builder.getFinalSampleDB();
Assert.assertEquals(testSAMSamples, db.getSamples()); Assert.assertEquals(testSAMSamples, db.getSamples());
} }
@Test() @Test()
public void loadSAMHeaderPlusPED() { public void loadSAMHeaderPlusPED() {
addSAMHeader(); addSAMHeader();
builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED)); final SampleDB db = builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(testPEDSamples, db.getSamples()); Assert.assertEquals(testPEDSamples, db.getSamples());
} }
@Test() @Test()
public void loadDuplicateData() { public void loadDuplicateData() {
builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED)); final SampleDB db = builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED))
builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED)); .addSamplesFromPedigreeFiles(Arrays.asList(testPED))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(testPEDSamples, db.getSamples()); Assert.assertEquals(testPEDSamples, db.getSamples());
} }
@Test(expectedExceptions = UserException.class) @Test(expectedExceptions = UserException.class)
public void loadNonExistentFile() { public void loadNonExistentFile() {
builder.addSamplesFromPedigreeFiles(Arrays.asList(new File("non-existence-file.txt"))); final SampleDB db = builder.addSamplesFromPedigreeFiles(Arrays.asList(new File("non-existence-file.txt")))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(testSAMSamples, db.getSamples()); Assert.assertEquals(testSAMSamples, db.getSamples());
} }
@Test(expectedExceptions = UserException.class) @Test(expectedExceptions = UserException.class)
public void loadInconsistentData() { public void loadInconsistentData() {
builder = new SampleDBBuilder(PedigreeValidationType.STRICT); builder = new SampleDBBuilder(PedigreeValidationType.STRICT)
builder.addSamplesFromPedigreeFiles(Arrays.asList(testPED)); .addSamplesFromPedigreeFiles(Arrays.asList(testPED))
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringInconsistentGender)); .addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringInconsistentGender));
builder.getFinalSampleDB(); builder.getFinalSampleDB();
} }
@Test
public void loadConsistentData() {
// build a temporary DB and get the resulting sample to use for test result comparison
final Sample baseKidSample = new SampleDBBuilder(PedigreeValidationType.STRICT)
.addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringConsistent))
.getFinalSampleDB()
.getSample("kid");
// build a sample DB and then merge in the consistent test string
final SampleDB finalDB = new SampleDBBuilder(PedigreeValidationType.STRICT)
.addSamplesFromPedigreeFiles(Arrays.asList(testPED))
.addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringConsistent))
.getFinalSampleDB();
Assert.assertEquals(finalDB.getSamples().size(), 3);
Assert.assertTrue(finalDB.getSample("kid").equals(baseKidSample));
}
@Test(expectedExceptions = UserException.class) @Test(expectedExceptions = UserException.class)
public void sampleInSAMHeaderNotInSamplesDB() { public void sampleInSAMHeaderNotInSamplesDB() {
addSAMHeader(); addSAMHeader();
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringInconsistentGender)); builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDStringInconsistentGender))
builder.getFinalSampleDB(); .getFinalSampleDB();
} }
@Test() @Test()
public void getFamilyIDs() { public void getFamilyIDs() {
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(db.getFamilyIDs(), new TreeSet<String>(Arrays.asList("fam1", "fam2", "fam3"))); Assert.assertEquals(db.getFamilyIDs(), new TreeSet<String>(Arrays.asList("fam1", "fam2", "fam3")));
} }
@Test() @Test()
public void getFamily() { public void getFamily() {
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(db.getFamily("fam1"), testPEDSamplesAsSet); Assert.assertEquals(db.getFamily("fam1"), testPEDSamplesAsSet);
} }
@Test() @Test()
public void getFamilies(){ public void getFamilies(){
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(db.getFamilies(),testGetFamilies); Assert.assertEquals(db.getFamilies(),testGetFamilies);
Assert.assertEquals(db.getFamilies(null),testGetFamilies); Assert.assertEquals(db.getFamilies(null),testGetFamilies);
Assert.assertEquals(db.getFamilies(testGetPartialFamiliesIds),testGetPartialFamilies); Assert.assertEquals(db.getFamilies(testGetPartialFamiliesIds),testGetPartialFamilies);
@ -218,8 +239,8 @@ public class SampleDBUnitTest extends BaseTest {
@Test() @Test()
public void testGetChildrenWithParents() public void testGetChildrenWithParents()
{ {
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies2)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies2))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(db.getChildrenWithParents(), testKidsWithParentsFamilies2); Assert.assertEquals(db.getChildrenWithParents(), testKidsWithParentsFamilies2);
Assert.assertEquals(db.getChildrenWithParents(false), testKidsWithParentsFamilies2); Assert.assertEquals(db.getChildrenWithParents(false), testKidsWithParentsFamilies2);
Assert.assertEquals(db.getChildrenWithParents(true), new HashSet<Sample>(Arrays.asList(new Sample("kid", "fam1", "dad", "mom", Gender.MALE, Affection.AFFECTED)))); Assert.assertEquals(db.getChildrenWithParents(true), new HashSet<Sample>(Arrays.asList(new Sample("kid", "fam1", "dad", "mom", Gender.MALE, Affection.AFFECTED))));
@ -227,16 +248,16 @@ public class SampleDBUnitTest extends BaseTest {
@Test() @Test()
public void testGetFounderIds(){ public void testGetFounderIds(){
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies2)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies2))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Assert.assertEquals(db.getFounderIds(), new HashSet<String>(Arrays.asList("dad","mom","dad2","mom2","dad4"))); Assert.assertEquals(db.getFounderIds(), new HashSet<String>(Arrays.asList("dad","mom","dad2","mom2","dad4")));
} }
@Test() @Test()
public void loadFamilyIDs() { public void loadFamilyIDs() {
builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies)); final SampleDB db = builder.addSamplesFromPedigreeStrings(Arrays.asList(testPEDMultipleFamilies))
SampleDB db = builder.getFinalSampleDB(); .getFinalSampleDB();
Map<String, Set<Sample>> families = db.getFamilies(); final Map<String, Set<Sample>> families = db.getFamilies();
Assert.assertEquals(families.size(), 3); Assert.assertEquals(families.size(), 3);
Assert.assertEquals(families.keySet(), new TreeSet<String>(Arrays.asList("fam1", "fam2", "fam3"))); Assert.assertEquals(families.keySet(), new TreeSet<String>(Arrays.asList("fam1", "fam2", "fam3")));