diff --git a/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/constants/hpo/HpoSubOntologyRootTermIds.java b/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/constants/hpo/HpoSubOntologyRootTermIds.java index 6bbbdf1d3..449d243b2 100644 --- a/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/constants/hpo/HpoSubOntologyRootTermIds.java +++ b/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/constants/hpo/HpoSubOntologyRootTermIds.java @@ -25,5 +25,7 @@ public final class HpoSubOntologyRootTermIds { /** {@link TermId} of sub ontology "mode of inheritance" (HP:0000005). */ public static final TermId MODE_OF_INHERITANCE = TermId.of("HP:0000005"); + /** {@link TermId} of sub ontology Past medical history (HP:0032443). */ + public static final TermId PAST_MEDICAL_HISTORY = TermId.of("HP:0032443"); private HpoSubOntologyRootTermIds(){} } diff --git a/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/io/hpo/Aspect.java b/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/io/hpo/Aspect.java index cf6d4bbcd..775283674 100644 --- a/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/io/hpo/Aspect.java +++ b/phenol-annotations/src/main/java/org/monarchinitiative/phenol/annotations/io/hpo/Aspect.java @@ -1,16 +1,39 @@ package org.monarchinitiative.phenol.annotations.io.hpo; +import org.monarchinitiative.phenol.ontology.data.TermId; + +import java.util.HashMap; +import java.util.Map; import java.util.Optional; +import static org.monarchinitiative.phenol.annotations.constants.hpo.HpoClinicalModifierTermIds.CLINICAL_COURSE; +import static org.monarchinitiative.phenol.annotations.constants.hpo.HpoModeOfInheritanceTermIds.INHERITANCE_ROOT; +import static org.monarchinitiative.phenol.annotations.constants.hpo.HpoSubOntologyRootTermIds.*; + /** * An enum for aspect column of {@link HpoAnnotationLine}. */ public enum Aspect { - P, - I, - C, - M; + P(PHENOTYPIC_ABNORMALITY), + I(INHERITANCE_ROOT), + C(CLINICAL_COURSE), + M(CLINICAL_MODIFIER), + H(PAST_MEDICAL_HISTORY); + + private final TermId termId; + private static final Map BY_TERMID = new HashMap<>(); + + + static { + for (Aspect e: values()) { + BY_TERMID.put(e.termId, e); + } + } + + Aspect(TermId termId) { + this.termId = termId; + } public static Optional parse(String aspect) { switch (aspect.toUpperCase()) { @@ -22,8 +45,15 @@ public static Optional parse(String aspect) { return Optional.of(Aspect.C); case "M": return Optional.of(Aspect.M); + case "H": + return Optional.of(Aspect.H); default: return Optional.empty(); } } + + public static Optional fromTermId(TermId termId) { + return Optional.ofNullable(BY_TERMID.get(termId)); + } + } diff --git a/phenol-annotations/src/test/java/org/monarchinitiative/phenol/annotations/io/hpo/AspectTest.java b/phenol-annotations/src/test/java/org/monarchinitiative/phenol/annotations/io/hpo/AspectTest.java new file mode 100644 index 000000000..a9dc5d825 --- /dev/null +++ b/phenol-annotations/src/test/java/org/monarchinitiative/phenol/annotations/io/hpo/AspectTest.java @@ -0,0 +1,24 @@ +package org.monarchinitiative.phenol.annotations.io.hpo; + +import org.junit.jupiter.api.Test; +import org.monarchinitiative.phenol.ontology.data.TermId; + +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; +import static org.monarchinitiative.phenol.annotations.constants.hpo.HpoClinicalModifierTermIds.CLINICAL_COURSE; +import static org.monarchinitiative.phenol.annotations.constants.hpo.HpoModeOfInheritanceTermIds.INHERITANCE_ROOT; +import static org.monarchinitiative.phenol.annotations.constants.hpo.HpoSubOntologyRootTermIds.*; + +public class AspectTest { + + @Test + public void test_aspect_from_termId() { + assertThat(Aspect.fromTermId(PHENOTYPIC_ABNORMALITY).get(), equalTo(Aspect.P)); + assertThat(Aspect.fromTermId(INHERITANCE_ROOT).get(), equalTo(Aspect.I)); + assertThat(Aspect.fromTermId(CLINICAL_COURSE).get(), equalTo(Aspect.C)); + assertThat(Aspect.fromTermId(CLINICAL_MODIFIER).get(), equalTo(Aspect.M)); + assertThat(Aspect.fromTermId(PAST_MEDICAL_HISTORY).get(), equalTo(Aspect.H)); + assertThat(Aspect.fromTermId(TermId.of("HP:0000000")).isEmpty(), equalTo(true)); + assertThat(Aspect.H.toString(), equalTo("H")); + } +}