From 81ee73fe34687f1ae3f0897208dfbe2f4a99b89b Mon Sep 17 00:00:00 2001 From: Jeremy Nguyen Xuan Date: Fri, 16 Dec 2016 18:05:53 -0800 Subject: [PATCH] [#24] need some cleaning --- .../org/monarchinitiative/owlsim/io/OWLLoader.java | 400 +++++++++++---------- .../owlsim/kb/impl/BMKnowledgeBaseOWLAPIImpl.java | 34 +- .../compute/eval/data/MakeBackgroundDataTest.java | 5 +- .../compute/eval/data/SimulatedDataTest.java | 4 +- .../matcher/perf/AbstractProfileMatcherPerfIT.java | 6 +- .../owlsim/compute/mica/MICAStoreBench.java | 8 +- .../owlsim/compute/mica/perf/MICAStorePerfIT.java | 4 +- .../compute/stats/CoAnnotationStatsTest.java | 5 +- .../owlsim/compute/stats/ICDistributionTest.java | 5 +- .../owlsim/compute/stats/ICStorePerfTest.java | 4 +- .../owlsim/services/OwlSimServiceApplication.java | 2 - .../services/resources/AncestorResource.java | 32 +- .../owlsim/services/resources/MatchResource.java | 59 +-- 13 files changed, 257 insertions(+), 311 deletions(-) diff --git a/owlsim-core/src/main/java/org/monarchinitiative/owlsim/io/OWLLoader.java b/owlsim-core/src/main/java/org/monarchinitiative/owlsim/io/OWLLoader.java index 7cbe84e..e17da31 100644 --- a/owlsim-core/src/main/java/org/monarchinitiative/owlsim/io/OWLLoader.java +++ b/owlsim-core/src/main/java/org/monarchinitiative/owlsim/io/OWLLoader.java @@ -6,15 +6,17 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; -import java.nio.charset.Charset; +import java.util.HashMap; import java.util.List; import java.util.zip.GZIPInputStream; +import javax.inject.Inject; + import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.IRI; @@ -27,212 +29,214 @@ import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; import com.google.common.base.Preconditions; -import com.google.common.io.Files; /** * Object for loading OWL ontologies into a {@link BMKnowledgeBase} * - * Note that a KB consists of classes and individuals, both of which can be loaded - * from an ontology + * Note that a KB consists of classes and individuals, both of which can be loaded from an ontology * * @author cjm * */ public class OWLLoader { - private Logger LOG = Logger.getLogger(OWLLoader.class); - - OWLOntologyManager manager; - OWLOntology owlOntology; - OWLOntology owlDataOntology; - OWLReasoner owlReasoner; - OWLReasonerFactory owlReasonerFactory = new ElkReasonerFactory(); - - /** - * @param iri - * @return OWL Ontology - * @throws OWLOntologyCreationException - */ - public OWLOntology loadOWL(IRI iri) throws OWLOntologyCreationException { - return getOWLOntologyManager().loadOntology(iri); - } - - /** - * @param file - * @return OWL Ontology - * @throws OWLOntologyCreationException - */ - public OWLOntology loadOWL(File file) throws OWLOntologyCreationException { - IRI iri = IRI.create(file); - return getOWLOntologyManager().loadOntologyFromOntologyDocument(iri); - } - - - - /** - * Loads an OWL ontology from a URI or file - * - * @param path - * @return OWL Ontology - * @throws OWLOntologyCreationException - */ - public OWLOntology loadOWL(String path) throws OWLOntologyCreationException { - if (path.startsWith("http")) { - return loadOWL(IRI.create(path)); - } - else { - File file = new File(path); - return loadOWL(file); - } - } - - /** - * @param iri - * @throws OWLOntologyCreationException - */ - public void load(IRI iri) throws OWLOntologyCreationException { - owlOntology = getOWLOntologyManager().loadOntology(iri); - Preconditions.checkNotNull(owlOntology); - } - - /** - * @param file - * @throws OWLOntologyCreationException - */ - public void load(File file) throws OWLOntologyCreationException { - owlOntology = loadOWL(file); - Preconditions.checkNotNull(owlOntology); - } - - public void loadGzippdOntology(String path) throws FileNotFoundException, IOException, OWLOntologyCreationException { - GZIPInputStream gis = new GZIPInputStream(new FileInputStream(path)); - BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8")); - owlOntology = getOWLOntologyManager().loadOntologyFromOntologyDocument(gis); - Preconditions.checkNotNull(owlOntology); + private Logger LOG = Logger.getLogger(OWLLoader.class); + + OWLOntologyManager manager; + OWLOntology owlOntology; + OWLOntology owlDataOntology; + OWLReasoner owlReasoner; + OWLReasonerFactory owlReasonerFactory = new ElkReasonerFactory(); + + @Inject + CurieUtil curieUtil; + + /** + * @param iri + * @return OWL Ontology + * @throws OWLOntologyCreationException + */ + public OWLOntology loadOWL(IRI iri) throws OWLOntologyCreationException { + return getOWLOntologyManager().loadOntology(iri); + } + + /** + * @param file + * @return OWL Ontology + * @throws OWLOntologyCreationException + */ + public OWLOntology loadOWL(File file) throws OWLOntologyCreationException { + IRI iri = IRI.create(file); + return getOWLOntologyManager().loadOntologyFromOntologyDocument(iri); + } + + + + /** + * Loads an OWL ontology from a URI or file + * + * @param path + * @return OWL Ontology + * @throws OWLOntologyCreationException + */ + public OWLOntology loadOWL(String path) throws OWLOntologyCreationException { + if (path.startsWith("http")) { + return loadOWL(IRI.create(path)); + } else { + File file = new File(path); + return loadOWL(file); + } + } + + /** + * @param iri + * @throws OWLOntologyCreationException + */ + public void load(IRI iri) throws OWLOntologyCreationException { + owlOntology = getOWLOntologyManager().loadOntology(iri); + Preconditions.checkNotNull(owlOntology); + } + + /** + * @param file + * @throws OWLOntologyCreationException + */ + public void load(File file) throws OWLOntologyCreationException { + owlOntology = loadOWL(file); + Preconditions.checkNotNull(owlOntology); + } + + public void loadGzippdOntology(String path) + throws FileNotFoundException, IOException, OWLOntologyCreationException { + GZIPInputStream gis = new GZIPInputStream(new FileInputStream(path)); + BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8")); + owlOntology = getOWLOntologyManager().loadOntologyFromOntologyDocument(gis); + Preconditions.checkNotNull(owlOntology); + } + + /** + * Loads an OWL ontology from a URI or file + * + * @param path + * @throws OWLOntologyCreationException + */ + public void load(String path) throws OWLOntologyCreationException { + owlOntology = loadOWL(path); + Preconditions.checkNotNull(owlOntology); + } + + /** + * Loads OWL ontologies from a URI or file + * + * @param path + * @throws OWLOntologyCreationException + */ + public void loadOntologies(String... paths) throws OWLOntologyCreationException { + for (String path : paths) + mergeOntology(loadOWL(path)); + Preconditions.checkNotNull(owlOntology); + } + + + /** + * Loads an OWL ontology from a URI or file + * + * @param path + * @throws OWLOntologyCreationException + */ + public void loadData(String... paths) throws OWLOntologyCreationException { + for (String path : paths) + mergeData(loadOWL(path)); + Preconditions.checkNotNull(owlDataOntology); + } + + public void loadDataFromTsv(String path) throws OWLOntologyCreationException, IOException { + File f = new File(path); + // Files.readLines(f, Charset.defaultCharset()); + List lines = FileUtils.readLines(f); + for (String line : lines) { + String[] vals = line.split("\t", 2); + String[] terms = vals[1].split(";"); + for (String t : terms) { + addInstanceOf(vals[0], t); + } + } + Preconditions.checkNotNull(owlDataOntology); + } + + public void loadDataFromTsvGzip(String path) throws OWLOntologyCreationException, IOException { + GZIPInputStream gis = new GZIPInputStream(new FileInputStream(path)); + BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8")); + String line; + while ((line = bf.readLine()) != null) { + String[] vals = line.split("\t", 2); + String[] terms = vals[1].split(";"); + for (String t : terms) { + addInstanceOf(vals[0], t); + } + } + Preconditions.checkNotNull(owlDataOntology); + } + + + + private IRI getIRI(String id) { + // TODO - use json-ld + if (id.contains(":")) { + return IRI.create("http://purl.obolibrary.org/obo/" + id.replace(":", "_")); + } else { + return IRI.create(id); + } + } + + private void mergeOntology(OWLOntology o) { + if (owlOntology == null) { + LOG.info("Ont ontology=" + o); + owlOntology = o; + } else { + LOG.info("Merging ont axioms from=" + o); + owlOntology.getOWLOntologyManager().addAxioms(owlOntology, o.getAxioms()); } + } - /** - * Loads an OWL ontology from a URI or file - * - * @param path - * @throws OWLOntologyCreationException - */ - public void load(String path) throws OWLOntologyCreationException { - owlOntology = loadOWL(path); - Preconditions.checkNotNull(owlOntology); - } - - /** - * Loads OWL ontologies from a URI or file - * - * @param path - * @throws OWLOntologyCreationException - */ - public void loadOntologies(String... paths) throws OWLOntologyCreationException { - for (String path : paths) - mergeOntology( loadOWL(path) ); - Preconditions.checkNotNull(owlOntology); - } - - - /** - * Loads an OWL ontology from a URI or file - * - * @param path - * @throws OWLOntologyCreationException - */ - public void loadData(String... paths) throws OWLOntologyCreationException { - for (String path : paths) - mergeData( loadOWL(path) ); - Preconditions.checkNotNull(owlDataOntology); - } - - public void loadDataFromTsv(String path) throws OWLOntologyCreationException, IOException { - File f = new File(path); - //Files.readLines(f, Charset.defaultCharset()); - List lines = FileUtils.readLines(f); - for (String line : lines) { - String[] vals = line.split("\t", 2); - String[] terms = vals[1].split(";"); - for (String t : terms) { - addInstanceOf(vals[0], t); - } - } - Preconditions.checkNotNull(owlDataOntology); - } - - public void loadDataFromTsvGzip(String path) throws OWLOntologyCreationException, IOException { - GZIPInputStream gis = new GZIPInputStream(new FileInputStream(path)); - BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8")); - String line; - while ((line=bf.readLine())!=null) { - String[] vals = line.split("\t", 2); - String[] terms = vals[1].split(";"); - for (String t : terms) { - addInstanceOf(vals[0], t); - } - } - Preconditions.checkNotNull(owlDataOntology); + private void addInstanceOf(String i, String c) { + if (owlDataOntology == null) { + owlDataOntology = owlOntology; + } + OWLDataFactory f = manager.getOWLDataFactory(); + OWLClassAssertionAxiom ax = + f.getOWLClassAssertionAxiom(f.getOWLClass(getIRI(c)), f.getOWLNamedIndividual(getIRI(i))); + manager.addAxiom(owlOntology, ax); + } + + + private void mergeData(OWLOntology o) { + if (owlDataOntology == null) { + LOG.info("Data ontology=" + o); + owlDataOntology = o; + } else { + LOG.info("Merging data axioms from=" + o); + owlDataOntology.getOWLOntologyManager().addAxioms(owlDataOntology, o.getAxioms()); } - - - - - private IRI getIRI(String id) { - // TODO - use json-ld - if (id.contains(":")) { - return IRI.create("http://purl.obolibrary.org/obo/"+id.replace(":", "_")); - } - else { - return IRI.create(id); - } - } - - private void mergeOntology(OWLOntology o) { - if (owlOntology == null) { - LOG.info("Ont ontology="+o); - owlOntology = o; - } - else { - LOG.info("Merging ont axioms from="+o); - owlOntology.getOWLOntologyManager().addAxioms(owlOntology, o.getAxioms()); - } - } - - private void addInstanceOf(String i, String c) { - if (owlDataOntology == null) { - owlDataOntology = owlOntology; - } - OWLDataFactory f = manager.getOWLDataFactory(); - OWLClassAssertionAxiom ax = f.getOWLClassAssertionAxiom(f.getOWLClass(getIRI(c)), f.getOWLNamedIndividual(getIRI(i))); - manager.addAxiom(owlOntology, ax); - } - - - private void mergeData(OWLOntology o) { - if (owlDataOntology == null) { - LOG.info("Data ontology="+o); - owlDataOntology = o; - } - else { - LOG.info("Merging data axioms from="+o); - owlDataOntology.getOWLOntologyManager().addAxioms(owlDataOntology, o.getAxioms()); - } - } - - private OWLOntologyManager getOWLOntologyManager() { - if (manager == null) - manager = OWLManager.createOWLOntologyManager(); - return manager; - } - - /** - * @return handle for a Bitmap-based Knowledge Base - */ - public BMKnowledgeBase createKnowledgeBaseInterface() { - // TODO: use factories, or injection - - return BMKnowledgeBaseOWLAPIImpl.create(owlOntology, owlDataOntology, owlReasonerFactory); - } - - + } + + private OWLOntologyManager getOWLOntologyManager() { + if (manager == null) + manager = OWLManager.createOWLOntologyManager(); + return manager; + } + + /** + * @return handle for a Bitmap-based Knowledge Base + */ + public BMKnowledgeBase createKnowledgeBaseInterface() { + // TODO: use factories, or injection + // TODO hack for unit tests + if (curieUtil == null) { + curieUtil = new CurieUtil(new HashMap()); + } + return BMKnowledgeBaseOWLAPIImpl.create(owlOntology, owlDataOntology, owlReasonerFactory, + curieUtil); + } + + } diff --git a/owlsim-core/src/main/java/org/monarchinitiative/owlsim/kb/impl/BMKnowledgeBaseOWLAPIImpl.java b/owlsim-core/src/main/java/org/monarchinitiative/owlsim/kb/impl/BMKnowledgeBaseOWLAPIImpl.java index df40a4f..2964443 100644 --- a/owlsim-core/src/main/java/org/monarchinitiative/owlsim/kb/impl/BMKnowledgeBaseOWLAPIImpl.java +++ b/owlsim-core/src/main/java/org/monarchinitiative/owlsim/kb/impl/BMKnowledgeBaseOWLAPIImpl.java @@ -142,9 +142,9 @@ public BMKnowledgeBaseOWLAPIImpl(@IndicatesOwlOntologies OWLOntology owlOntology } } - public static BMKnowledgeBase create(OWLOntology owlOntology, OWLReasonerFactory rf) { - return new BMKnowledgeBaseOWLAPIImpl(owlOntology, null, rf, - new CurieUtil(new HashMap())); // TODO CURIE support? + public static BMKnowledgeBase create(OWLOntology owlOntology, OWLReasonerFactory rf, + CurieUtil curieUtil) { + return new BMKnowledgeBaseOWLAPIImpl(owlOntology, null, rf, curieUtil); } /** @@ -154,9 +154,8 @@ public static BMKnowledgeBase create(OWLOntology owlOntology, OWLReasonerFactory * @return */ public static BMKnowledgeBase create(OWLOntology owlOntology, OWLOntology owlDataOntology, - OWLReasonerFactory rf) { - return new BMKnowledgeBaseOWLAPIImpl(owlOntology, owlDataOntology, rf, - new CurieUtil(new HashMap())); // TODO CURIE support? + OWLReasonerFactory rf, CurieUtil curieUtil) { + return new BMKnowledgeBaseOWLAPIImpl(owlOntology, owlDataOntology, rf, curieUtil); } @@ -174,9 +173,8 @@ public void setKbMetdata(KBMetadata kbMetdata) { private String getShortForm(IRI iri) { - LOG.info("getShortForm: " + iri.toString()); - //return curieUtil.getCurie(iri.toString()).or(iri.toString()); - return curieMapper.getShortForm(iri); + // TODO not great to have a mix of IRI and CURIE + return curieUtil.getCurie(iri.toString()).or(iri.toString()); } private void populateLabelsFromOntology(LabelMapper labelMapper, OWLOntology ontology) { @@ -393,8 +391,7 @@ private void setPropertyValues(OWLOntology ont, OWLNamedIndividual i) { if (obj instanceof OWLLiteral) { addPropertyValue(pvm, pid, ((OWLLiteral) obj).getLiteral()); } else if (obj instanceof OWLNamedIndividual) { - addPropertyValue(pvm, pid, - getShortForm(((OWLNamedIndividual) obj).getIRI())); + addPropertyValue(pvm, pid, getShortForm(((OWLNamedIndividual) obj).getIRI())); } @@ -404,8 +401,7 @@ private void setPropertyValues(OWLOntology ont, OWLNamedIndividual i) { if (obj instanceof OWLLiteral) { addPropertyValue(pvm, pid, ((OWLLiteral) obj).getLiteral()); } else if (obj instanceof OWLNamedIndividual) { - addPropertyValue(pvm, pid, - getShortForm(((OWLNamedIndividual) obj).getIRI())); + addPropertyValue(pvm, pid, getShortForm(((OWLNamedIndividual) obj).getIRI())); } @@ -995,12 +991,14 @@ protected String getIdentifier(OWLNamedObject obj) { } /** - * @param id + * @param id CURIE-style * @return OWLAPI Class object */ protected OWLClass getOWLClass(String id) { Preconditions.checkNotNull(id); - return getOWLClass(IRI.create(id)); + // TODO not great to have a mix of IRI and CURIE + String iri = curieUtil.getIri(id).or(id); + return getOWLClass(IRI.create(iri)); } /** @@ -1020,12 +1018,14 @@ protected OWLNamedIndividual getOWLNamedIndividual(IRI iri) { } /** - * @param id + * @param id CURIE-style * @return OWLAPI Class object */ public OWLNamedIndividual getOWLNamedIndividual(String id) { Preconditions.checkNotNull(id); - return getOWLNamedIndividual(IRI.create(id)); + // TODO not great to have a mix of IRI and CURIE + String iri = curieUtil.getIri(id).or(id); + return getOWLNamedIndividual(IRI.create(iri)); } public Attribute getAttribute(String id) { diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/MakeBackgroundDataTest.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/MakeBackgroundDataTest.java index 434cdd0..144b58f 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/MakeBackgroundDataTest.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/MakeBackgroundDataTest.java @@ -1,5 +1,7 @@ package org.monarchinitiative.owlsim.compute.eval.data; +import java.util.HashMap; + import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.apache.log4j.Logger; import org.junit.Assert; @@ -8,6 +10,7 @@ import org.monarchinitiative.owlsim.eval.data.BackgroundData; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -59,7 +62,7 @@ private void create(int numClasses, int avgParents, int numIndividuals) throws O OWLOntology ontology = RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); } } diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/SimulatedDataTest.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/SimulatedDataTest.java index e96ca29..24e8c63 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/SimulatedDataTest.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/eval/data/SimulatedDataTest.java @@ -1,5 +1,6 @@ package org.monarchinitiative.owlsim.compute.eval.data; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -24,6 +25,7 @@ import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; import org.monarchinitiative.owlsim.kb.impl.CURIEMapperImpl; import org.monarchinitiative.owlsim.kb.impl.LabelMapperImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -420,7 +422,7 @@ private void create(int numClasses, int avgParents, int numIndividuals) throws O OWLOntology ontology = RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); } } diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/matcher/perf/AbstractProfileMatcherPerfIT.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/matcher/perf/AbstractProfileMatcherPerfIT.java index 855e6b0..e8e4007 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/matcher/perf/AbstractProfileMatcherPerfIT.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/matcher/perf/AbstractProfileMatcherPerfIT.java @@ -1,10 +1,13 @@ package org.monarchinitiative.owlsim.compute.matcher.perf; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.inject.Inject; + import org.apache.log4j.Logger; import org.junit.Test; import org.monarchinitiative.owlsim.compute.matcher.ProfileMatcher; @@ -16,6 +19,7 @@ import org.monarchinitiative.owlsim.model.match.MatchSet; import org.monarchinitiative.owlsim.model.match.ProfileQuery; import org.monarchinitiative.owlsim.model.match.impl.ProfileQueryImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -96,7 +100,7 @@ private void create(int numClasses, int avgParents, int numIndividuals) throws O OWLOntology ontology = RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); profileMatcher = createProfileMatcher(kb); } diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/MICAStoreBench.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/MICAStoreBench.java index efdace0..d0b7b44 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/MICAStoreBench.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/MICAStoreBench.java @@ -1,11 +1,16 @@ package org.monarchinitiative.owlsim.compute.mica; +import java.util.HashMap; + +import javax.inject.Inject; + import org.apache.log4j.Logger; import org.monarchinitiative.owlsim.compute.mica.impl.MICAStoreImpl; import org.monarchinitiative.owlsim.compute.mica.impl.NoRootException; import org.monarchinitiative.owlsim.eval.RandomOntologyMaker; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -28,7 +33,6 @@ private Logger LOG = Logger.getLogger(MICAStoreBench.class); protected boolean writeToStdout = false; - public static class Benchmark1 { void timeNanoTime(int reps) { for (int i = 0; i < reps; i++) { @@ -55,7 +59,7 @@ private void create(int numClasses, int avgParents, int numIndividuals) throws O OWLOntology ontology = RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); LOG.info("creating MICAStore"); MICAStore micaStore = new MICAStoreImpl(kb); LOG.info("created MICAStore"); diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/perf/MICAStorePerfIT.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/perf/MICAStorePerfIT.java index 63ad007..bb3cdcb 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/perf/MICAStorePerfIT.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/mica/perf/MICAStorePerfIT.java @@ -1,6 +1,7 @@ package org.monarchinitiative.owlsim.compute.mica.perf; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.apache.log4j.Logger; @@ -14,6 +15,7 @@ import org.monarchinitiative.owlsim.io.JSONWriter; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -82,7 +84,7 @@ private MICARun create(int numClasses, int avgParents, int numIndividuals) throw OWLOntology ontology = RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); kbsc = new KBStatsCalculator(kb); LOG.info("creating MICAStore"); long t1 = System.currentTimeMillis(); diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/CoAnnotationStatsTest.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/CoAnnotationStatsTest.java index 5b89462..5bcb84c 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/CoAnnotationStatsTest.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/CoAnnotationStatsTest.java @@ -1,11 +1,14 @@ package org.monarchinitiative.owlsim.compute.stats; +import java.util.HashMap; + import org.apache.log4j.Logger; import org.junit.Test; import org.monarchinitiative.owlsim.compute.mica.impl.NoRootException; import org.monarchinitiative.owlsim.eval.RandomOntologyMaker; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -50,7 +53,7 @@ private void create(int numClasses, int avgParents, int numIndividuals, .addRandomIndividuals(numIndividuals, avgClassesPerIndividual) .getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); LOG.info("Knowledge base ready ..."); } diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICDistributionTest.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICDistributionTest.java index 9a01070..27e4268 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICDistributionTest.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICDistributionTest.java @@ -1,6 +1,7 @@ package org.monarchinitiative.owlsim.compute.stats; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Random; @@ -9,11 +10,11 @@ import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.apache.log4j.Logger; import org.junit.Assert; -import org.junit.Test; import org.monarchinitiative.owlsim.compute.mica.impl.NoRootException; import org.monarchinitiative.owlsim.eval.RandomOntologyMaker; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -241,7 +242,7 @@ private void create(int numClasses, int avgParents, int numIndividuals, int avgC this.ontology = RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals, avgClassesPerIndividual).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); icc = new ICStatsCalculator(kb); LOG.info("creating ICStoreSummary"); icc.calculateICSummary(); diff --git a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICStorePerfTest.java b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICStorePerfTest.java index 39c2eb8..26368c5 100644 --- a/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICStorePerfTest.java +++ b/owlsim-core/src/test/java/org/monarchinitiative/owlsim/compute/stats/ICStorePerfTest.java @@ -1,6 +1,7 @@ package org.monarchinitiative.owlsim.compute.stats; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -12,6 +13,7 @@ import org.monarchinitiative.owlsim.io.JSONWriter; import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.impl.BMKnowledgeBaseOWLAPIImpl; +import org.prefixcommons.CurieUtil; import org.semanticweb.elk.owlapi.ElkReasonerFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; @@ -83,7 +85,7 @@ private ICRun create(int numClasses, int avgParents, int numIndividuals, int avg RandomOntologyMaker.create(numClasses, avgParents).addRandomIndividuals(numIndividuals, avgClassesPerIndividual).getOntology(); OWLReasonerFactory rf = new ElkReasonerFactory(); - kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf); + kb = BMKnowledgeBaseOWLAPIImpl.create(ontology, rf, new CurieUtil(new HashMap())); icc = new ICStatsCalculator(kb); LOG.info("creating ICStoreSummary"); long t1 = System.currentTimeMillis(); diff --git a/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/OwlSimServiceApplication.java b/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/OwlSimServiceApplication.java index 22ca708..9210c1e 100644 --- a/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/OwlSimServiceApplication.java +++ b/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/OwlSimServiceApplication.java @@ -101,8 +101,6 @@ public void run(ApplicationConfiguration configuration, Environment environment) configureSwagger(environment); configureJackson(environment); - System.out.println(configuration.getCuries()); - Concurrency concurrency = Concurrency.CONCURRENT; LOG.info("Creating injector..."); Injector i = Guice.createInjector( diff --git a/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/AncestorResource.java b/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/AncestorResource.java index f63f3bf..b075295 100644 --- a/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/AncestorResource.java +++ b/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/AncestorResource.java @@ -1,18 +1,3 @@ -/** - * Copyright (C) 2014 The OwlSim authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.monarchinitiative.owlsim.services.resources; import java.util.Set; @@ -33,7 +18,6 @@ import org.monarchinitiative.owlsim.kb.BMKnowledgeBase; import org.monarchinitiative.owlsim.kb.filter.UnknownFilterException; import org.monarchinitiative.owlsim.model.match.MatchSet; -import org.prefixcommons.CurieUtil; import com.codahale.metrics.annotation.Timed; import com.googlecode.javaewah.EWAHCompressedBitmap; @@ -54,9 +38,6 @@ @Inject BMKnowledgeBase knowledgeBase; - @Inject - CurieUtil curieUtil; - @GET @Path("/ancestors") @Timed @@ -71,10 +52,7 @@ @ApiParam(value = "cutoff limit", required = false) @QueryParam("limit") Integer limit) throws UnknownFilterException, IncoherentStateException { - - Set resolvedClassIds = - classIds.stream().map(id -> curieUtil.getIri(id).or(id)).collect(Collectors.toSet()); - EWAHCompressedBitmap superBM = knowledgeBase.getSuperClassesBM(resolvedClassIds); + EWAHCompressedBitmap superBM = knowledgeBase.getSuperClassesBM(classIds); return knowledgeBase.getClassIds(superBM); } @@ -92,14 +70,8 @@ public ClassInformationContentPair getMatches( @ApiParam(value = "cutoff limit", required = false) @QueryParam("limit") Integer limit) throws UnknownFilterException, IncoherentStateException { - - Set resolvedClassIds1 = - classIds1.stream().map(id -> curieUtil.getIri(id).or(id)).collect(Collectors.toSet()); - Set resolvedClassIds2 = - classIds2.stream().map(id -> curieUtil.getIri(id).or(id)).collect(Collectors.toSet()); - ClassInformationContentPair mica = - micaCalculator.getMostInformativeCommonAncestorWithIC(resolvedClassIds1, resolvedClassIds2); + micaCalculator.getMostInformativeCommonAncestorWithIC(classIds1, classIds2); return mica; } diff --git a/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/MatchResource.java b/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/MatchResource.java index 91905f8..5e1f863 100644 --- a/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/MatchResource.java +++ b/owlsim-services/src/main/java/org/monarchinitiative/owlsim/services/resources/MatchResource.java @@ -1,16 +1,3 @@ -/** - * Copyright (C) 2014 The OwlSim authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ package org.monarchinitiative.owlsim.services.resources; import java.util.Collection; @@ -18,7 +5,6 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import javax.inject.Inject; import javax.ws.rs.GET; @@ -39,7 +25,6 @@ import org.monarchinitiative.owlsim.model.match.ProfileQueryFactory; import org.monarchinitiative.owlsim.services.exceptions.NonNegatedMatcherException; import org.monarchinitiative.owlsim.services.exceptions.UnknownMatcherException; -import org.prefixcommons.CurieUtil; import com.codahale.metrics.annotation.Timed; import com.wordnik.swagger.annotations.Api; @@ -57,9 +42,6 @@ @Inject Map matchers = new HashMap<>(); - @Inject - CurieUtil curieUtil; - @GET @Path("/matchers") @ApiOperation(value = "Get registered profile matchers", response = Collection.class, @@ -92,20 +74,12 @@ public MatchSet getMatches( } ProfileMatcher matcher = matchers.get(matcherName); - Set resolvedIds = - ids.stream().map(id -> curieUtil.getIri(id).or(id)).collect(Collectors.toSet()); - Set resolvedNegatedIds = - negatedIds.stream().map(id -> curieUtil.getIri(id).or(id)).collect(Collectors.toSet()); - Set resolvedTargetClassIds = - targetClassIds.stream().map(id -> curieUtil.getIri(id).or(id)).collect(Collectors.toSet()); - // Verify that matcher is negation aware if negated IDs are used - if (!resolvedNegatedIds.isEmpty() + if (!negatedIds.isEmpty() && !NegationAwareProfileMatcher.class.isAssignableFrom(matcher.getClass())) { throw new NonNegatedMatcherException(matcherName); } - ProfileQuery query = - ProfileQueryFactory.createQueryWithNegation(resolvedIds, resolvedNegatedIds); + ProfileQuery query = ProfileQueryFactory.createQueryWithNegation(ids, negatedIds); if (limit != null) query.setLimit(limit); @@ -113,36 +87,13 @@ public MatchSet getMatches( TypeFilter filter = new TypeFilter(filterId, false, false); query.setFilter(filter); } - if (!resolvedTargetClassIds.isEmpty()) { - ProfileQuery targetPQ = ProfileQueryFactory.createQuery(resolvedTargetClassIds); + if (!targetClassIds.isEmpty()) { + ProfileQuery targetPQ = ProfileQueryFactory.createQuery(targetClassIds); AnonIndividualFilter filter = new AnonIndividualFilter(targetPQ); query.setFilter(filter); } - MatchSet matchSet = matcher.findMatchProfile(query); - - // TODO have something more generic - // replacing with CURIEs when found - ProfileQuery pq = matchSet.getQuery(); - Set classIdsCurie = iriToCurie(pq.getQueryClassIds()); - Set individualIdsCurie = iriToCurie(pq.getReferenceIndividualIds()); - pq.setQueryClassIds(classIdsCurie); - pq.setReferenceIndividualIds(individualIdsCurie); - matchSet.setQuery(pq); - matchSet.setMatches(matchSet.getMatches().stream().map(match -> { - String curie = curieUtil.getCurie(match.getMatchId()).or(match.getMatchId()); - match.setMatchId(curie); - return match; - }).collect(Collectors.toList())); - - return matchSet; - } - - private Set iriToCurie(Set s) { - if (s == null) { - return null; - } - return s.stream().map(iri -> curieUtil.getCurie(iri).or(iri)).collect(Collectors.toSet()); + return matcher.findMatchProfile(query); } // TODO - API for comparing two entities