From 24efbac9f77dc16654bd1bebe17c1505c662b148 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 4 Jan 2019 15:38:27 +0100 Subject: [PATCH] export of modification residues in aliases contains info about alias reference id --- .../sbml/species/SbmlSpeciesExporter.java | 14 ++- .../model/sbml/species/SbmlSpeciesParser.java | 30 +++-- .../cd_for_multi/modification_in_aliases.xml | 109 ++++++++++++++++++ 3 files changed, 141 insertions(+), 12 deletions(-) create mode 100644 converter-sbml/testFiles/cd_for_multi/modification_in_aliases.xml diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java index a3c6131fb7..cb70338973 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java @@ -13,7 +13,9 @@ import org.sbml.jsbml.Model; import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph; import org.sbml.jsbml.ext.layout.BoundingBox; import org.sbml.jsbml.ext.layout.Dimensions; +import org.sbml.jsbml.ext.layout.GeneralGlyph; import org.sbml.jsbml.ext.layout.Point; +import org.sbml.jsbml.ext.layout.ReferenceGlyph; import org.sbml.jsbml.ext.multi.MultiModelPlugin; import org.sbml.jsbml.ext.multi.MultiSpeciesPlugin; import org.sbml.jsbml.ext.multi.MultiSpeciesType; @@ -453,14 +455,15 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j if (isExtensionEnabled(SbmlExtension.MULTI)) { if (element instanceof SpeciesWithModificationResidue) { for (ModificationResidue mr : ((SpeciesWithModificationResidue) element).getModificationResidues()) { - org.sbml.jsbml.Species sbmlSpecies = getSbmlModel().getSpecies(speciesGlyph.getReference()); - createModificationGlyph(mr, sbmlSpecies); + createModificationGlyph(mr, speciesGlyph); } } } } - private void createModificationGlyph(ModificationResidue mr, org.sbml.jsbml.Species sbmlSpecies) { + private void createModificationGlyph(ModificationResidue mr, AbstractReferenceGlyph speciesGlyph) { + org.sbml.jsbml.Species sbmlSpecies = getSbmlModel().getSpecies(speciesGlyph.getReference()); + MultiSpeciesPlugin speciesExtension = (MultiSpeciesPlugin) sbmlSpecies.getExtension("multi"); SpeciesFeature feature = null; String featureTypeId = MultiPackageNamingUtils.getModificationFeatureId(mr); @@ -477,8 +480,11 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j } } - AbstractReferenceGlyph modificationGlyph = getLayout().createGeneralGlyph("modification_" + (idCounter++), + GeneralGlyph modificationGlyph = getLayout().createGeneralGlyph("modification_" + (idCounter++), modificationFeatureValue.getId()); + ReferenceGlyph referenceGlyph = new ReferenceGlyph("modification_reference_" + (idCounter++)); + referenceGlyph.setReference(speciesGlyph.getId()); + modificationGlyph.addReferenceGlyph(referenceGlyph); double width, height; if (mr instanceof AbstractRegionModification) { width = ((AbstractRegionModification) mr).getWidth(); diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java index de9ba5546d..468348e344 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java @@ -12,6 +12,7 @@ import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph; import org.sbml.jsbml.ext.layout.CompartmentGlyph; import org.sbml.jsbml.ext.layout.GeneralGlyph; import org.sbml.jsbml.ext.layout.GraphicalObject; +import org.sbml.jsbml.ext.layout.ReferenceGlyph; import org.sbml.jsbml.ext.layout.SpeciesGlyph; import org.sbml.jsbml.ext.multi.MultiModelPlugin; import org.sbml.jsbml.ext.multi.MultiSpeciesPlugin; @@ -366,14 +367,7 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species> private void assignModificationResiduesLayout(Element element) { if (element instanceof SpeciesWithModificationResidue) { for (ModificationResidue mr : ((SpeciesWithModificationResidue) element).getModificationResidues()) { - GeneralGlyph residueGlyph = null; - for (GraphicalObject graphicalObject : getLayout().getListOfAdditionalGraphicalObjects()) { - if (graphicalObject instanceof GeneralGlyph) { - if (((GeneralGlyph) graphicalObject).getReference().equals(mr.getIdModificationResidue())) { - residueGlyph = (GeneralGlyph) graphicalObject; - } - } - } + GeneralGlyph residueGlyph = getResidueGlyphForModification(mr); if (residueGlyph != null) { if (residueGlyph.getBoundingBox() == null || residueGlyph.getBoundingBox().getDimensions() == null) { logger.warn(new ElementUtils().getElementTag(mr) + "Layout doesn't contain coordinates"); @@ -394,6 +388,26 @@ public class SbmlSpeciesParser extends SbmlElementParser<org.sbml.jsbml.Species> } + private GeneralGlyph getResidueGlyphForModification(ModificationResidue mr) { + GeneralGlyph residueGlyph = null; + for (GraphicalObject graphicalObject : getLayout().getListOfAdditionalGraphicalObjects()) { + if (graphicalObject instanceof GeneralGlyph) { + if (((GeneralGlyph) graphicalObject).getReference().equals(mr.getIdModificationResidue())) { + if (((GeneralGlyph) graphicalObject).getListOfReferenceGlyphs().size() > 0) { + // find a reference to the alias in layout, so we know it's the proper value + ReferenceGlyph referenceGlyph = ((GeneralGlyph) graphicalObject).getListOfReferenceGlyphs().get(0); + if (referenceGlyph.getReference().equals(mr.getSpecies().getElementId())) { + residueGlyph = (GeneralGlyph) graphicalObject; + } + } else { + residueGlyph = (GeneralGlyph) graphicalObject; + } + } + } + } + return residueGlyph; + } + private void assignCompartment(Element element, String compartmentId) { Compartment compartment = getMinervaModel().getElementByElementId(compartmentId); if (compartment == null && getLayout() != null) { diff --git a/converter-sbml/testFiles/cd_for_multi/modification_in_aliases.xml b/converter-sbml/testFiles/cd_for_multi/modification_in_aliases.xml new file mode 100644 index 0000000000..b2b1a3cf81 --- /dev/null +++ b/converter-sbml/testFiles/cd_for_multi/modification_in_aliases.xml @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:celldesigner="http://www.sbml.org/2001/ns/celldesigner" level="2" version="4"> +<model metaid="untitled" id="untitled"> +<annotation> +<celldesigner:extension> +<celldesigner:modelVersion>4.0</celldesigner:modelVersion> +<celldesigner:modelDisplay sizeX="600" sizeY="400"/> +<celldesigner:listOfCompartmentAliases/> +<celldesigner:listOfComplexSpeciesAliases/> +<celldesigner:listOfSpeciesAliases> +<celldesigner:speciesAlias id="sa1" species="s1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="120.0" y="168.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="0.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa3" species="s1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="267.0" y="165.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="0.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +</celldesigner:listOfSpeciesAliases> +<celldesigner:listOfGroups/> +<celldesigner:listOfProteins> +<celldesigner:protein id="pr1" name="s1" type="GENERIC"> +<celldesigner:listOfModificationResidues> +<celldesigner:modificationResidue angle="3.141592653589793" id="rs1" side="none"/> +</celldesigner:listOfModificationResidues> +</celldesigner:protein> +</celldesigner:listOfProteins> +<celldesigner:listOfGenes/> +<celldesigner:listOfRNAs/> +<celldesigner:listOfAntisenseRNAs/> +<celldesigner:listOfLayers/> +<celldesigner:listOfBlockDiagrams/> +</celldesigner:extension> +</annotation> +<listOfUnitDefinitions> +<unitDefinition metaid="substance" id="substance" name="substance"> +<listOfUnits> +<unit metaid="CDMT00001" kind="mole"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="volume" id="volume" name="volume"> +<listOfUnits> +<unit metaid="CDMT00002" kind="litre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="area" id="area" name="area"> +<listOfUnits> +<unit metaid="CDMT00003" kind="metre" exponent="2"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="length" id="length" name="length"> +<listOfUnits> +<unit metaid="CDMT00004" kind="metre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="time" id="time" name="time"> +<listOfUnits> +<unit metaid="CDMT00005" kind="second"/> +</listOfUnits> +</unitDefinition> +</listOfUnitDefinitions> +<listOfCompartments> +<compartment metaid="default" id="default" size="1" units="volume"/> +</listOfCompartments> +<listOfSpecies> +<species metaid="s1" id="s1" name="s1" compartment="default" initialAmount="0"> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr1</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +</listOfSpecies> +</model> +</sbml> -- GitLab