From 791b6fafd086cd828e13a8c0c67a7c7cf3134369 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 7 Feb 2018 16:22:42 +0100 Subject: [PATCH] parsing of sbo terms for modifiers added --- .../sbml/reaction/SBOTermModifierType.java | 50 ++++++++++++++++ .../sbml/reaction/SbmlReactionParser.java | 13 ++++- .../model/sbml/AllSbmlConverterTests.java | 2 + .../sbml/reaction/SbmlReactionParserTest.java | 57 +++++++++++++++++++ .../testFiles/small/modifier/catalysis.xml | 45 +++++++++++++++ .../testFiles/small/modifier/inhibition.xml | 45 +++++++++++++++ .../small/modifier/unknown_catalysis.xml | 45 +++++++++++++++ .../small/modifier/unknown_inhibition.xml | 45 +++++++++++++++ 8 files changed, 299 insertions(+), 3 deletions(-) create mode 100644 converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java create mode 100644 converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParserTest.java create mode 100644 converter-sbml/testFiles/small/modifier/catalysis.xml create mode 100644 converter-sbml/testFiles/small/modifier/inhibition.xml create mode 100644 converter-sbml/testFiles/small/modifier/unknown_catalysis.xml create mode 100644 converter-sbml/testFiles/small/modifier/unknown_inhibition.xml diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java new file mode 100644 index 0000000000..605f4b8c5f --- /dev/null +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java @@ -0,0 +1,50 @@ +package lcsb.mapviewer.converter.model.sbml.reaction; + +import java.util.HashSet; +import java.util.Set; + +import org.apache.log4j.Logger; + +import lcsb.mapviewer.model.map.modifier.Catalysis; +import lcsb.mapviewer.model.map.modifier.Inhibition; +import lcsb.mapviewer.model.map.modifier.UnknownCatalysis; +import lcsb.mapviewer.model.map.modifier.UnknownInhibition; +import lcsb.mapviewer.model.map.reaction.Modifier; + +public enum SBOTermModifierType { + CATALYSIS(Catalysis.class, new String[] { "SBO:0000013" }), // + INHIBITION(Inhibition.class, new String[] { "SBO:0000537" }), // + UNKNOWN_CATALYSIS(UnknownCatalysis.class, new String[] { "SBO:0000462" }), // + UNKNOWN_INHIBITION(UnknownInhibition.class, new String[] { "SBO:0000536" }), // + ; + + private static Logger logger = Logger.getLogger(SBOTermModifierType.class); + private Set<String> sboTerms = new HashSet<>(); + Class<? extends Modifier> clazz; + + private SBOTermModifierType(Class<? extends Modifier> clazz, String[] inputSboTerms) { + this.clazz = clazz; + for (String string : inputSboTerms) { + sboTerms.add(string); + } + } + + public static Class<? extends Modifier> getTypeSBOTerm(String sboTerm) { + if (sboTerm == null || sboTerm.isEmpty()) { + return Modifier.class; + } + Class<? extends Modifier> result = null; + for (SBOTermModifierType term : values()) { + for (String string : term.sboTerms) { + if (string.equalsIgnoreCase(sboTerm)) { + result = term.clazz; + } + } + } + if (result == null) { + logger.warn("Don't know how to handle SBOTerm " + sboTerm + " for modifier"); + result = Modifier.class; + } + return result; + } +} diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java index bbd35ecbd8..d92ca8f6ea 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java @@ -235,7 +235,7 @@ public class SbmlReactionParser extends SbmlBioEntityParser { operator.setLine(line); reactionWithLayout.addNode(operator); } - minervaModel.addReaction(new StateTransitionReaction(reactionWithLayout)); + minervaModel.addReaction(reactionWithLayout); } catch (InvalidArgumentException e) { throw new InvalidInputDataExecption(e); } @@ -295,7 +295,14 @@ public class SbmlReactionParser extends SbmlBioEntityParser { for (ModifierSpeciesReference modifier : sbmlReaction.getListOfModifiers()) { Species element = minervaModel.getElementByElementId(modifier.getSpecies()); - reaction.addModifier(new Modifier(element)); + Class<? extends Modifier> nodeClass = SBOTermModifierType.getTypeSBOTerm(modifier.getSBOTermID()); + try { + Modifier newNode = nodeClass.getConstructor(Element.class).newInstance(element); + reaction.addModifier(newNode); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e) { + throw new InvalidInputDataExecption("Problem with creating modifier", e); + } } return reaction; @@ -306,7 +313,7 @@ public class SbmlReactionParser extends SbmlBioEntityParser { result.setDefinition(kineticLaw.getMath().toMathML()); SbmlParameterParser parameterParser = new SbmlParameterParser(minervaModel); - result.addParameters(parameterParser.parseList((Collection<LocalParameter>)kineticLaw.getListOfLocalParameters())); + result.addParameters(parameterParser.parseList((Collection<LocalParameter>) kineticLaw.getListOfLocalParameters())); try { Node node = super.getXmlDocumentFromString(result.getDefinition()); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/AllSbmlConverterTests.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/AllSbmlConverterTests.java index c6ec3e57c9..8996139330 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/AllSbmlConverterTests.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/AllSbmlConverterTests.java @@ -4,6 +4,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; +import lcsb.mapviewer.converter.model.sbml.reaction.SbmlReactionParserTest; import lcsb.mapviewer.converter.model.sbml.species.SbmlSpeciesParserTest; @RunWith(Suite.class) @@ -12,6 +13,7 @@ import lcsb.mapviewer.converter.model.sbml.species.SbmlSpeciesParserTest; SbmlExporterTest.class, // SbmlPareserForInvalidReactionTest.class, // SbmlParserTest.class, // + SbmlReactionParserTest.class, // SbmlSpeciesParserTest.class,// }) public class AllSbmlConverterTests { diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParserTest.java new file mode 100644 index 0000000000..ac66ea7393 --- /dev/null +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParserTest.java @@ -0,0 +1,57 @@ +package lcsb.mapviewer.converter.model.sbml.reaction; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.FileNotFoundException; + +import org.apache.log4j.Logger; +import org.junit.Test; + +import lcsb.mapviewer.converter.ConverterParams; +import lcsb.mapviewer.converter.InvalidInputDataExecption; +import lcsb.mapviewer.converter.model.sbml.SbmlParser; +import lcsb.mapviewer.model.map.model.Model; +import lcsb.mapviewer.model.map.modifier.Catalysis; +import lcsb.mapviewer.model.map.modifier.Inhibition; +import lcsb.mapviewer.model.map.modifier.UnknownCatalysis; +import lcsb.mapviewer.model.map.modifier.UnknownInhibition; +import lcsb.mapviewer.model.map.reaction.Reaction; + +public class SbmlReactionParserTest { + Logger logger = Logger.getLogger(SbmlReactionParserTest.class); + SbmlParser parser = new SbmlParser(); + + @Test + public void testParseCatalysis() throws FileNotFoundException, InvalidInputDataExecption { + Model model = parser.createModel(new ConverterParams().filename("testFiles/small/modifier/catalysis.xml")); + Reaction reaction = model.getReactions().iterator().next(); + assertNotNull(reaction); + assertTrue(reaction.getModifiers().iterator().next() instanceof Catalysis); + } + + @Test + public void testParseInhibition() throws FileNotFoundException, InvalidInputDataExecption { + Model model = parser.createModel(new ConverterParams().filename("testFiles/small/modifier/inhibition.xml")); + Reaction reaction = model.getReactions().iterator().next(); + assertNotNull(reaction); + assertTrue(reaction.getModifiers().iterator().next() instanceof Inhibition); + } + + @Test + public void testParseUnknownCatalysis() throws FileNotFoundException, InvalidInputDataExecption { + Model model = parser.createModel(new ConverterParams().filename("testFiles/small/modifier/unknown_catalysis.xml")); + Reaction reaction = model.getReactions().iterator().next(); + assertNotNull(reaction); + assertTrue(reaction.getModifiers().iterator().next() instanceof UnknownCatalysis); + } + + @Test + public void testParseUnknownInhibition() throws FileNotFoundException, InvalidInputDataExecption { + Model model = parser.createModel(new ConverterParams().filename("testFiles/small/modifier/unknown_inhibition.xml")); + Reaction reaction = model.getReactions().iterator().next(); + assertNotNull(reaction); + assertTrue(reaction.getModifiers().iterator().next() instanceof UnknownInhibition); + } + +} diff --git a/converter-sbml/testFiles/small/modifier/catalysis.xml b/converter-sbml/testFiles/small/modifier/catalysis.xml new file mode 100644 index 0000000000..5e7ce9c465 --- /dev/null +++ b/converter-sbml/testFiles/small/modifier/catalysis.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" level="2" version="4"> + <model id="TestGEN"> + <annotation/> + <listOfCompartments> + <compartment constant="true" id="cell" name="cell" sboTerm="SBO:0000290" size="1"> + <annotation> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqmodel="http://biomodels.net/model-qualifiers/" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"> + <rdf:Description rdf:about="#"> + <bqbiol:isVersionOf> + <rdf:Bag> + <rdf:li rdf:resource="urn:miriam:obo.go:GO:0005623"/> + </rdf:Bag> + </bqbiol:isVersionOf> + </rdf:Description> + </rdf:RDF> + </annotation> + </compartment> + </listOfCompartments> + <listOfSpecies> + <species compartment="cell" initialConcentration="1" id="s1" name="nm1"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s2" name="nm2"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s3" name="nm3"> + <annotation/> + </species> + </listOfSpecies> + <listOfReactions> + <reaction id="re1"> + <listOfReactants> + <speciesReference species="s1" stoichiometry="1"/> + </listOfReactants> + <listOfProducts> + <speciesReference species="s2" stoichiometry="1"/> + </listOfProducts> + <listOfModifiers> + <modifierSpeciesReference species="s3" sboTerm="SBO:0000013"/> + </listOfModifiers> + </reaction> + </listOfReactions> + </model> +</sbml> \ No newline at end of file diff --git a/converter-sbml/testFiles/small/modifier/inhibition.xml b/converter-sbml/testFiles/small/modifier/inhibition.xml new file mode 100644 index 0000000000..e40bd9cb5f --- /dev/null +++ b/converter-sbml/testFiles/small/modifier/inhibition.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" level="2" version="4"> + <model id="TestGEN"> + <annotation/> + <listOfCompartments> + <compartment constant="true" id="cell" name="cell" sboTerm="SBO:0000290" size="1"> + <annotation> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqmodel="http://biomodels.net/model-qualifiers/" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"> + <rdf:Description rdf:about="#"> + <bqbiol:isVersionOf> + <rdf:Bag> + <rdf:li rdf:resource="urn:miriam:obo.go:GO:0005623"/> + </rdf:Bag> + </bqbiol:isVersionOf> + </rdf:Description> + </rdf:RDF> + </annotation> + </compartment> + </listOfCompartments> + <listOfSpecies> + <species compartment="cell" initialConcentration="1" id="s1" name="nm1"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s2" name="nm2"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s3" name="nm3"> + <annotation/> + </species> + </listOfSpecies> + <listOfReactions> + <reaction id="re1"> + <listOfReactants> + <speciesReference species="s1" stoichiometry="1"/> + </listOfReactants> + <listOfProducts> + <speciesReference species="s2" stoichiometry="1"/> + </listOfProducts> + <listOfModifiers> + <modifierSpeciesReference species="s3" sboTerm="SBO:0000537"/> + </listOfModifiers> + </reaction> + </listOfReactions> + </model> +</sbml> \ No newline at end of file diff --git a/converter-sbml/testFiles/small/modifier/unknown_catalysis.xml b/converter-sbml/testFiles/small/modifier/unknown_catalysis.xml new file mode 100644 index 0000000000..d3f6a2c8e1 --- /dev/null +++ b/converter-sbml/testFiles/small/modifier/unknown_catalysis.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" level="2" version="4"> + <model id="TestGEN"> + <annotation/> + <listOfCompartments> + <compartment constant="true" id="cell" name="cell" sboTerm="SBO:0000290" size="1"> + <annotation> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqmodel="http://biomodels.net/model-qualifiers/" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"> + <rdf:Description rdf:about="#"> + <bqbiol:isVersionOf> + <rdf:Bag> + <rdf:li rdf:resource="urn:miriam:obo.go:GO:0005623"/> + </rdf:Bag> + </bqbiol:isVersionOf> + </rdf:Description> + </rdf:RDF> + </annotation> + </compartment> + </listOfCompartments> + <listOfSpecies> + <species compartment="cell" initialConcentration="1" id="s1" name="nm1"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s2" name="nm2"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s3" name="nm3"> + <annotation/> + </species> + </listOfSpecies> + <listOfReactions> + <reaction id="re1"> + <listOfReactants> + <speciesReference species="s1" stoichiometry="1"/> + </listOfReactants> + <listOfProducts> + <speciesReference species="s2" stoichiometry="1"/> + </listOfProducts> + <listOfModifiers> + <modifierSpeciesReference species="s3" sboTerm="SBO:0000462"/> + </listOfModifiers> + </reaction> + </listOfReactions> + </model> +</sbml> \ No newline at end of file diff --git a/converter-sbml/testFiles/small/modifier/unknown_inhibition.xml b/converter-sbml/testFiles/small/modifier/unknown_inhibition.xml new file mode 100644 index 0000000000..ae574907ea --- /dev/null +++ b/converter-sbml/testFiles/small/modifier/unknown_inhibition.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" level="2" version="4"> + <model id="TestGEN"> + <annotation/> + <listOfCompartments> + <compartment constant="true" id="cell" name="cell" sboTerm="SBO:0000290" size="1"> + <annotation> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqmodel="http://biomodels.net/model-qualifiers/" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"> + <rdf:Description rdf:about="#"> + <bqbiol:isVersionOf> + <rdf:Bag> + <rdf:li rdf:resource="urn:miriam:obo.go:GO:0005623"/> + </rdf:Bag> + </bqbiol:isVersionOf> + </rdf:Description> + </rdf:RDF> + </annotation> + </compartment> + </listOfCompartments> + <listOfSpecies> + <species compartment="cell" initialConcentration="1" id="s1" name="nm1"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s2" name="nm2"> + <annotation/> + </species> + <species compartment="cell" initialConcentration="1" id="s3" name="nm3"> + <annotation/> + </species> + </listOfSpecies> + <listOfReactions> + <reaction id="re1"> + <listOfReactants> + <speciesReference species="s1" stoichiometry="1"/> + </listOfReactants> + <listOfProducts> + <speciesReference species="s2" stoichiometry="1"/> + </listOfProducts> + <listOfModifiers> + <modifierSpeciesReference species="s3" sboTerm="SBO:0000536"/> + </listOfModifiers> + </reaction> + </listOfReactions> + </model> +</sbml> \ No newline at end of file -- GitLab