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"));
+ }
+}