Skip to content

Commit 734a8d4

Browse files
committed
Update PhenopacketPedigreeConverter to correctly handle zero values in pedigree indicating missing relations.
1 parent 70cfe37 commit 734a8d4

2 files changed

Lines changed: 39 additions & 47 deletions

File tree

exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/analysis/sample/PhenopacketPedigreeConverter.java

Lines changed: 26 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -60,23 +60,20 @@ private static Function<Person, Individual> toIndividual() {
6060
return person -> Individual.builder()
6161
.familyId(person.getFamilyId())
6262
.id(person.getIndividualId())
63-
.motherId(person.getMaternalId())
64-
.fatherId(person.getPaternalId())
63+
// PED and the phenopacket schema require a "0" value for missing relations
64+
.motherId(person.getMaternalId().equals("0") ? "" : person.getMaternalId())
65+
.fatherId(person.getPaternalId().equals("0") ? "" : person.getPaternalId())
6566
.sex(toExomiserSex(person.getSex()))
6667
.status(toExomiserStatus(person.getAffectedStatus()))
6768
.build();
6869
}
6970

7071
private static Individual.Status toExomiserStatus(AffectedStatus affectedStatus) {
71-
switch (affectedStatus) {
72-
case AFFECTED:
73-
return Individual.Status.AFFECTED;
74-
case UNAFFECTED:
75-
return Individual.Status.UNAFFECTED;
76-
case MISSING:
77-
default:
78-
return Individual.Status.UNKNOWN;
79-
}
72+
return switch (affectedStatus) {
73+
case AFFECTED -> Individual.Status.AFFECTED;
74+
case UNAFFECTED -> Individual.Status.UNAFFECTED;
75+
default -> Individual.Status.UNKNOWN;
76+
};
8077
}
8178

8279
public static org.phenopackets.schema.v1.core.Pedigree toPhenopacketPedigree(Pedigree pedigree) {
@@ -93,48 +90,36 @@ private static Function<Individual, Person> toPerson() {
9390
return individual -> Person.newBuilder()
9491
.setFamilyId(individual.familyId())
9592
.setIndividualId(individual.id())
96-
.setMaternalId(individual.motherId())
97-
.setPaternalId(individual.fatherId())
93+
// PED and the phenopacket schema require a "0" value for missing relations
94+
.setMaternalId(individual.motherId().isEmpty() ? "0" : individual.motherId())
95+
.setPaternalId(individual.fatherId().isEmpty() ? "0" : individual.fatherId())
9896
.setSex(toPhenopacketSex(individual.sex()))
9997
.setAffectedStatus(toPhenopacketStatus(individual.status()))
10098
.build();
10199
}
102100

103101
private static AffectedStatus toPhenopacketStatus(Individual.Status status) {
104-
switch (status) {
105-
case UNAFFECTED:
106-
return AffectedStatus.UNAFFECTED;
107-
case AFFECTED:
108-
return AffectedStatus.AFFECTED;
109-
case UNKNOWN:
110-
default:
111-
return AffectedStatus.MISSING;
112-
}
102+
return switch (status) {
103+
case UNAFFECTED -> AffectedStatus.UNAFFECTED;
104+
case AFFECTED -> AffectedStatus.AFFECTED;
105+
default -> AffectedStatus.MISSING;
106+
};
113107
}
114108

115109
public static Sex toPhenopacketSex(Individual.Sex sex) {
116-
switch (sex) {
117-
case FEMALE:
118-
return Sex.FEMALE;
119-
case MALE:
120-
return Sex.MALE;
121-
case UNKNOWN:
122-
default:
123-
return Sex.UNKNOWN_SEX;
124-
}
110+
return switch (sex) {
111+
case FEMALE -> Sex.FEMALE;
112+
case MALE -> Sex.MALE;
113+
default -> Sex.UNKNOWN_SEX;
114+
};
125115
}
126116

127117
public static Individual.Sex toExomiserSex(Sex sex) {
128-
switch (sex) {
129-
case FEMALE:
130-
return Individual.Sex.FEMALE;
131-
case MALE:
132-
return Individual.Sex.MALE;
133-
case OTHER_SEX:
134-
case UNKNOWN_SEX:
135-
default:
136-
return Individual.Sex.UNKNOWN;
137-
}
118+
return switch (sex) {
119+
case FEMALE -> Individual.Sex.FEMALE;
120+
case MALE -> Individual.Sex.MALE;
121+
default -> Individual.Sex.UNKNOWN;
122+
};
138123
}
139124

140125
}

exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/analysis/sample/PhenopacketPedigreeConverterTest.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,45 +45,52 @@ void singleProband() {
4545
Pedigree.Person proband = Pedigree.Person.newBuilder()
4646
.setSex(Sex.MALE)
4747
.setAffectedStatus(Pedigree.Person.AffectedStatus.AFFECTED)
48+
.setMaternalId("Mother")
49+
.setPaternalId("0")
4850
.setIndividualId("Zaphod")
4951
.build();
5052

51-
Pedigree.Person female = Pedigree.Person.newBuilder()
53+
Pedigree.Person mother = Pedigree.Person.newBuilder()
5254
.setSex(Sex.FEMALE)
5355
.setAffectedStatus(Pedigree.Person.AffectedStatus.UNAFFECTED)
54-
.setIndividualId("Female")
56+
.setIndividualId("Mother")
57+
.setMaternalId("0")
58+
.setPaternalId("0")
5559
.build();
5660

5761
Pedigree.Person other = Pedigree.Person.newBuilder()
5862
.setSex(Sex.OTHER_SEX)
5963
.setAffectedStatus(Pedigree.Person.AffectedStatus.MISSING)
6064
.setIndividualId("Other")
65+
.setMaternalId("0")
66+
.setPaternalId("0")
6167
.build();
6268

6369
Pedigree pedigree = Pedigree.newBuilder()
6470
.addPersons(proband)
65-
.addPersons(female)
71+
.addPersons(mother)
6672
.addPersons(other)
6773
.build();
6874

6975
Individual exProband = Individual.builder()
7076
.sex(Individual.Sex.MALE)
7177
.status(Status.AFFECTED)
7278
.id("Zaphod")
79+
.motherId("Mother")
7380
.build();
7481

75-
Individual exFemale = Individual.builder()
82+
Individual exMother = Individual.builder()
7683
.sex(Individual.Sex.FEMALE)
7784
.status(Status.UNAFFECTED)
78-
.id("Female")
85+
.id("Mother")
7986
.build();
8087

8188
Individual exOther = Individual.builder()
8289
.sex(Individual.Sex.UNKNOWN)
8390
.status(Status.UNKNOWN)
8491
.id("Other")
8592
.build();
86-
var exPedigree = org.monarchinitiative.exomiser.core.pedigree.Pedigree.of(exProband, exFemale, exOther);
93+
var exPedigree = org.monarchinitiative.exomiser.core.pedigree.Pedigree.of(exProband, exMother, exOther);
8794

8895
assertThat(PhenopacketPedigreeConverter.toExomiserPedigree(pedigree), equalTo(exPedigree));
8996
}

0 commit comments

Comments
 (0)