From 66185e9a8694b13b628976fb2e0c72ce3ae24539 Mon Sep 17 00:00:00 2001 From: iimpulse Date: Wed, 17 Apr 2024 12:21:51 -0600 Subject: [PATCH 1/3] updates to aspect and sub root ontology --- .../hpo/HpoSubOntologyRootTermIds.java | 2 + .../phenol/annotations/io/hpo/Aspect.java | 41 +++++++++++++++++-- .../phenol/annotations/io/hpo/AspectTest.java | 23 +++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 phenol-annotations/src/test/java/org/monarchinitiative/phenol/annotations/io/hpo/AspectTest.java 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..d2a709fb2 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); + + public final TermId termId; + private static final Map BY_TERMID = new HashMap<>(); + + + static { + for (Aspect e: values()) { + BY_TERMID.put(String.valueOf(e.termId), e); + } + } + + Aspect(TermId termId) { + this.termId = termId; + } public static Optional parse(String aspect) { switch (aspect.toUpperCase()) { @@ -22,8 +45,18 @@ 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) { + if (BY_TERMID.containsKey(termId.toString())){ + return Optional.of(BY_TERMID.get(termId.toString())); + } + return Optional.empty(); + } + } 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..ebe0fc35a --- /dev/null +++ b/phenol-annotations/src/test/java/org/monarchinitiative/phenol/annotations/io/hpo/AspectTest.java @@ -0,0 +1,23 @@ +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)); + } +} From bb3dd2ff1468a620f6175f9bca910b5e9e2019e9 Mon Sep 17 00:00:00 2001 From: iimpulse Date: Wed, 17 Apr 2024 13:07:34 -0600 Subject: [PATCH 2/3] adding a test case for sanity --- .../monarchinitiative/phenol/annotations/io/hpo/AspectTest.java | 1 + 1 file changed, 1 insertion(+) 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 index ebe0fc35a..a9dc5d825 100644 --- 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 @@ -19,5 +19,6 @@ public void test_aspect_from_termId() { 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")); } } From d543085dd8a00072b2ce9a9656e3b231c7bf796c Mon Sep 17 00:00:00 2001 From: iimpulse Date: Wed, 17 Apr 2024 14:48:05 -0600 Subject: [PATCH 3/3] review updates --- .../phenol/annotations/io/hpo/Aspect.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) 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 d2a709fb2..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 @@ -21,13 +21,13 @@ public enum Aspect { M(CLINICAL_MODIFIER), H(PAST_MEDICAL_HISTORY); - public final TermId termId; - private static final Map BY_TERMID = new HashMap<>(); + private final TermId termId; + private static final Map BY_TERMID = new HashMap<>(); static { for (Aspect e: values()) { - BY_TERMID.put(String.valueOf(e.termId), e); + BY_TERMID.put(e.termId, e); } } @@ -53,10 +53,7 @@ public static Optional parse(String aspect) { } public static Optional fromTermId(TermId termId) { - if (BY_TERMID.containsKey(termId.toString())){ - return Optional.of(BY_TERMID.get(termId.toString())); - } - return Optional.empty(); + return Optional.ofNullable(BY_TERMID.get(termId)); } }