Commit 025c546f authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch 'merge-12.2.3' into 'master'

Merge 12.2.3

See merge request minerva/core!759
parents a4e4b117 420af462
Pipeline #10008 failed with stage
in 11 minutes and 42 seconds
......@@ -10,7 +10,7 @@ minerva (12.3.0~alpha.0) unstable; urgency=low
* Small improvement: New comment dialog does not contain content of previous
comment dialog (#680)
* Small improvement: Left logo is configurable (#731)
* Small improvement: list of element types in choose annotator dialog is
* Small improvement: list of element types in choose annotator dialog is
sorted (#758)
* Small improvement: Plugin API provides list of overview images (#702)
* Small improvement: Plugin API allows to show/hide overview images (#702)
......@@ -37,13 +37,13 @@ minerva (12.3.0~alpha.0) unstable; urgency=low
(#591)
* Small improvement: uploading sbml file should automatically discover a file
type (#784)
* Small improvement: when plugin listeners crash the system notifies user
* Small improvement: when plugin listeners crash the system notifies user
about problem with a plugin (#767)
* Small improvement: when exporting reaction and elements there is
* Small improvement: when exporting reaction and elements there is
possibility to filter by (sub)map (#615)
* Small improvement: during first opening of a map, the zoom level is
* Small improvement: during first opening of a map, the zoom level is
automatically computed if no default information is provided (#776)
* Small improvement: when adding new project columns "Root map", "Mapping
* Small improvement: when adding new project columns "Root map", "Mapping
file" and "Map type" are merged (#700)
* Small improvement: allow admin to disable CORS check (#802)
* Bug fix: progress bar of gene genome mapping upload is refreshing properly
......@@ -54,13 +54,30 @@ minerva (12.3.0~alpha.0) unstable; urgency=low
"Unknown Inhibition" reactions (#664)
* Bug fix: "Unknown Catalysis" and "Unknown Inhibition" reaction end is
slightly separated from target phenotype (#664)
* Bug fix: order of genomes in admin panel doesn't change after refreshing
* Bug fix: order of genomes in admin panel doesn't change after refreshing
list of genomes (#761)
* Bug fix: fixing situation when Molart started with variation overlay not
* Bug fix: fixing situation when Molart started with variation overlay not
having the aa change information
* Bug fix: plugin contect element width is adjusted when link to tabs are
* Bug fix: plugin contect element width is adjusted when link to tabs are
wrapped in more than one line (#758)
minerva (12.2.3) stable; urgency=medium
* Bug fix: sorting of entries in "Edit project->overlays" dialog fixed (#790)
* Bug fix: searching of chemicals stopped working due to expired SSL
certificate on https://ctdbase.org/
* Bug fix: remove button is disabled after starting removing of the data
overlay (#791)
* Bug fix: search autocomplete hint could be initially hidden (#793)
* Bug fix: updating terms of use could crash when list of users was removed
in separate tab or by another user (#797)
* Bug fix: name of the checkbox in ADD PROJECT window adjusted (#799)
* Bug fix: when user didn't have privileges to remove comments the button was
active on pages other than page 1 (#792)
* Bug fix: export of reaction to SBML didn't work when lines on the map were
too short (#805)
-- Piotr Gawron <piotr.gawron@uni.lu> Wed, 24 Apr 2019 17:00:00 +0200
minerva (12.2.2) stable; urgency=medium
* Bug fix: downloading overlays didn't work from admin panel when project
with different id than default map was accessed
......
......@@ -70,18 +70,18 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
/**
* Home page of ctd database.
*/
static final String URL = "https://ctdbase.org/";
static final String URL = "http://ctdbase.org/";
/**
* URL to get a list of chemicals by disease id.
*/
public static final String DISEASE_URL = "https://ctdbase.org/detail.go?6578706f7274=1&d-1332398-e=5&view=chem&"
public static final String DISEASE_URL = URL + "detail.go?6578706f7274=1&d-1332398-e=5&view=chem&"
+ "type=disease&acc=MESH%3A";
/**
* URL to get a list of chemicals by gene id.
*/
public static final String DISEASE_GENE_URL = "https://ctdbase.org/detail.go?slimTerm=all&6578706f7274=1&qid=3464576&"
public static final String DISEASE_GENE_URL = URL + "detail.go?slimTerm=all&6578706f7274=1&qid=3464576&"
+ "d-1332398-e=5&view=disease&type=gene&assnType=curated&acc=";
/**
......@@ -404,10 +404,10 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
}
if (result != null) {
MeSH mesh = meshParser.getMeSH(result.getChemicalId());
if (mesh!=null) {
result.addSynonyms(mesh.getSynonyms());
if (mesh != null) {
result.addSynonyms(mesh.getSynonyms());
} else {
logger.warn("Problematic mesh id: "+result.getChemicalId());
logger.warn("Problematic mesh id: " + result.getChemicalId());
}
}
......@@ -486,7 +486,7 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
if (entrez == null) {
invalidHgnc.add(md);
} else {
String query = "https://ctdbase.org/detail.go?type=gene&view=ixn&chemAcc=" + chemID.getResource() + "&acc="
String query = URL + "detail.go?type=gene&view=ixn&chemAcc=" + chemID.getResource() + "&acc="
+ entrez.getResource();
String referencesPage = getWebPageContent(query);
Matcher matcher = pattern.matcher(referencesPage);
......@@ -494,7 +494,7 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
idx.add(matcher.group(1));
}
for (String string : idx) {
String query2 = "https://ctdbase.org/detail.go?6578706f7274=1&d-1340579-e=5&type=relationship&ixnId="
String query2 = URL + "detail.go?6578706f7274=1&d-1340579-e=5&type=relationship&ixnId="
+ string;
String referencesPage2 = getWebPageContent(query2);
String[] lines = referencesPage2.split("\n");
......
......@@ -57,7 +57,7 @@ public class PubmedParser extends CachableInterface implements IExternalService
/**
* Version of the remote API that is supported by this connecting class.
*/
static final String SUPPORTED_VERSION = "6.0.3";
static final String SUPPORTED_VERSION = "6.1";
static final String API_URL = "https://www.ebi.ac.uk/europepmc/webservices/rest/";
......
......@@ -156,7 +156,6 @@ public class DrugbankHTMLParserTest extends AnnotationTestFunctions {
assertNotNull(drug);
assertTrue(drug.getBrandNames().contains("PK-Merz"));
assertTrue(drug.getBrandNames().contains("Symadine"));
assertTrue(drug.getBrandNames().contains("Symmetrel"));
} catch (Exception e) {
e.printStackTrace();
throw e;
......
......@@ -37,6 +37,7 @@ import lcsb.mapviewer.converter.annotation.XmlAnnotationParser;
import lcsb.mapviewer.model.graphics.ArrowType;
import lcsb.mapviewer.model.map.BioEntity;
import lcsb.mapviewer.model.map.InconsistentModelException;
import lcsb.mapviewer.modelutils.map.ElementUtils;
public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.sbml.jsbml.AbstractNamedSBase> {
/**
......@@ -80,18 +81,28 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
public void exportElements() throws InconsistentModelException {
Collection<T> speciesList = getElementList();
for (T species : speciesList) {
S sbmlElement = getSbmlElement(species);
for (T bioEntity : speciesList) {
try {
S sbmlElement = getSbmlElement(bioEntity);
if (sbmlElementByElementId.get(species.getElementId()) != null) {
throw new InconsistentModelException("More than one species with id: " + species.getElementId());
if (sbmlElementByElementId.get(bioEntity.getElementId()) != null) {
throw new InconsistentModelException("More than one species with id: " + bioEntity.getElementId());
}
sbmlElementByElementId.put(bioEntity.getElementId(), sbmlElement);
} catch (Exception e) {
throw new InconsistentModelException(new ElementUtils().getElementTag(bioEntity) +
"Problem with exporting bioEntity", e);
}
sbmlElementByElementId.put(species.getElementId(), sbmlElement);
}
if (isExtensionEnabled(SbmlExtension.LAYOUT)) {
for (T species : speciesList) {
AbstractReferenceGlyph elementGlyph = createGlyph(species);
sbmlGlyphByElementId.put(species.getElementId(), elementGlyph);
for (T bioEntity : speciesList) {
try {
AbstractReferenceGlyph elementGlyph = createGlyph(bioEntity);
sbmlGlyphByElementId.put(bioEntity.getElementId(), elementGlyph);
} catch (Exception e) {
throw new InconsistentModelException(new ElementUtils().getElementTag(bioEntity) +
"Problem with exporting bioEntity", e);
}
}
}
}
......@@ -293,7 +304,7 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
BoundingBox boundingBox = createBoundingBox(-2, 0, 4, 4);
result.getGroup().setFill(getColorDefinition(Color.WHITE).getId());
result.setBoundingBox(boundingBox);
Ellipse ellipse= new Ellipse();
Ellipse ellipse = new Ellipse();
ellipse.setAbsoluteCx(false);
ellipse.setAbsoluteCy(false);
ellipse.setAbsoluteRx(true);
......@@ -365,7 +376,7 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
polygon.addElement(createRenderPoint(33, 100));
polygon.addElement(createRenderPoint(33, 0));
result.getGroup().addElement(polygon);
Polygon crossBar = new Polygon();
crossBar.addElement(createRenderPoint(0, 0));
crossBar.addElement(createRenderPoint(0, 100));
......@@ -407,12 +418,11 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
}
public void setProvideDefaults(boolean provideDefaults) {
this.provideDefaults= provideDefaults;
this.provideDefaults = provideDefaults;
}
protected boolean isProvideDefaults() {
return provideDefaults;
}
}
......@@ -229,6 +229,7 @@ public class SbmlParser extends Converter {
}
}
}
return true;
}
......
......@@ -49,6 +49,7 @@ import lcsb.mapviewer.model.map.reaction.Reactant;
import lcsb.mapviewer.model.map.reaction.Reaction;
import lcsb.mapviewer.model.map.reaction.ReactionNode;
import lcsb.mapviewer.model.map.species.Element;
import lcsb.mapviewer.modelutils.map.ElementUtils;
public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sbml.jsbml.Reaction> {
/**
......@@ -218,8 +219,12 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
assignStyleToGlyph(reactantGlyph, style);
}
Point p = reactantGlyph.getCurve().getCurveSegment(0).getStart();
reactantEndPoint = new Point2D.Double(p.getX(), p.getY());
if (reactantGlyph.getCurve().getCurveSegmentCount() > 0) {
Point p = reactantGlyph.getCurve().getCurveSegment(0).getStart();
reactantEndPoint = new Point2D.Double(p.getX(), p.getY());
} else {
reactantEndPoint = new Point2D.Double(reactant.getElement().getCenterX(), reactant.getElement().getCenterY());
}
}
if (reactionGlyph.getCurve().getCurveSegmentCount() > 0) {
Point p = reactionGlyph.getCurve().getCurveSegment(reactionGlyph.getCurve().getCurveSegmentCount() - 1).getEnd();
......@@ -255,8 +260,12 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
assignStyleToGlyph(productGlyph, style);
}
Point p = productGlyph.getCurve().getCurveSegment(0).getStart();
productStartPoint = new Point2D.Double(p.getX(), p.getY());
if (productGlyph.getCurve().getCurveSegmentCount() > 0) {
Point p = productGlyph.getCurve().getCurveSegment(0).getStart();
productStartPoint = new Point2D.Double(p.getX(), p.getY());
} else {
productStartPoint = new Point2D.Double(product.getElement().getCenterX(), product.getElement().getCenterY());
}
}
if (segmentCount < reactionGlyph.getCurve().getCurveSegmentCount()) {
......@@ -361,6 +370,9 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
curve.addCurveSegment(segment);
}
}
if (curve.getCurveSegmentCount() == 0) {
logger.warn(new ElementUtils().getElementTag(node) + " Problematic line");
}
return curve;
}
......
......@@ -31,7 +31,6 @@ import org.sbml.jsbml.ext.render.RenderGroup;
import org.w3c.dom.Node;
import lcsb.mapviewer.common.XmlParser;
import lcsb.mapviewer.common.exception.InvalidArgumentException;
import lcsb.mapviewer.common.exception.InvalidStateException;
import lcsb.mapviewer.common.exception.InvalidXmlSchemaException;
import lcsb.mapviewer.converter.InvalidInputDataExecption;
......@@ -154,8 +153,8 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
}
PolylineData line = getLineFromReferenceGlyph(speciesRefernceGlyph);
if (line == null) {
throw new InvalidArgumentException("Line undefined for element " + minervaElement.getElementId()
if (line.length() == 0) {
logger.warn("Line undefined for element " + minervaElement.getElementId()
+ " in reaction " + reactionWithLayout.getElementId());
}
if (minervaNode instanceof Reactant) {
......@@ -217,8 +216,9 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
}
getMinervaModel().addReaction(reactionWithLayout);
} catch (InvalidArgumentException e) {
throw new InvalidInputDataExecption(e);
} catch (Exception e) {
throw new InvalidInputDataExecption(
new ElementUtils().getElementTag(source) + "Problem with parsing reaction layout", e);
}
}
Set<Reaction> elementsToRemove = new HashSet<>();
......@@ -450,6 +450,9 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
line.addPoint(end);
}
}
if (line == null) {
return new PolylineData();
}
return line;
}
......
......@@ -679,6 +679,20 @@ public class SbmlExporterTest extends SbmlTestFunctions {
ListComparator<Line2D> comparator = new ListComparator<>(new LineComparator(Configuration.EPSILON));
assertEquals(0, comparator.compare(lines1, lines2));
}
@Test
public void testExportIronMetabolismReaction() throws Exception {
try {
Model originalModel = new CellDesignerXmlParser()
.createModel(new ConverterParams().filename("testFiles/cell_designer_problems/iron_metabolism_reaction.xml"));
exporter.setProvideDefaults(false);
String xml = exporter.toXml(originalModel);
assertNotNull(xml);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
......@@ -687,7 +701,7 @@ public class SbmlExporterTest extends SbmlTestFunctions {
Model originalModel = parser.createModel(
new ConverterParams().filename("testFiles/small/model_with_creator.xml"));
Model model = getModelAfterSerializing(originalModel);
assertEquals(0, comparator.compare(model, originalModel));
}
......
......@@ -248,4 +248,32 @@ public class SbmlReactionParserTest {
}
}
@Test
public void testParseReactionWithProductWithoutLayout() throws Exception {
try {
Model model = parser
.createModel(new ConverterParams().filename("testFiles/small/reaction/product_without_layout.xml"));
Reaction reaction = model.getReactions().iterator().next();
assertNotNull(reaction);
assertTrue(reaction instanceof Reaction);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Test
public void testParseReactionWithReactantWithoutLayout() throws Exception {
try {
Model model = parser
.createModel(new ConverterParams().filename("testFiles/small/reaction/reactant_without_layout.xml"));
Reaction reaction = model.getReactions().iterator().next();
assertNotNull(reaction);
assertTrue(reaction instanceof Reaction);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
<?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="Dopamine_Neurotransmitter_Release_Cycle" id="A_comprehensive_Parkinsons_disease_map">
<annotation>
<celldesigner:extension>
<celldesigner:modelVersion>4.0</celldesigner:modelVersion>
<celldesigner:modelDisplay sizeX="9000" sizeY="5500"/>
<celldesigner:listOfCompartmentAliases/>
<celldesigner:listOfComplexSpeciesAliases>
<celldesigner:complexSpeciesAlias id="csa106" species="irme_458">
<celldesigner:activity>inactive</celldesigner:activity>
<celldesigner:bounds x="2247.5" y="2007.0" w="103.0" h="171.0"/>
<celldesigner:font size="12"/>
<celldesigner:view state="usual"/>
<celldesigner:backupSize w="0.0" h="0.0"/>
<celldesigner:backupView state="none"/>
<celldesigner:usualView>
<celldesigner:boxSize width="103.0" height="171.0"/>
<celldesigner:singleLine width="2.0"/>
<celldesigner:paint color="fff7f7f7" 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="2.0"/>
<celldesigner:paint color="fff7f7f7" scheme="Color"/>
</celldesigner:briefView>
<celldesigner:info state="empty" angle="-1.5707963267948966"/>
</celldesigner:complexSpeciesAlias>
</celldesigner:listOfComplexSpeciesAliases>
<celldesigner:listOfSpeciesAliases>
<celldesigner:speciesAlias id="sa10326" species="irme_72">
<celldesigner:activity>inactive</celldesigner:activity>
<celldesigner:bounds x="2378.000000000001" y="2072.166666666668" w="40.0" h="40.0"/>
<celldesigner:font size="12"/>
<celldesigner:view state="usual"/>
<celldesigner:usualView>
<celldesigner:boxSize width="40.0" height="40.0"/>
<celldesigner:singleLine width="1.0"/>
<celldesigner:paint color="ff9999ff" scheme="Color"/>
</celldesigner:usualView>
<celldesigner:briefView>
<celldesigner:innerPosition x="7906.815893308081" y="5845.130208333333"/>
<celldesigner:boxSize width="40.0" height="40.0"/>
<celldesigner:singleLine width="1.0"/>
<celldesigner:paint color="ff9999ff" scheme="Color"/>
</celldesigner:briefView>
<celldesigner:info state="empty" angle="-1.5707963267948966"/>
</celldesigner:speciesAlias>
</celldesigner:listOfSpeciesAliases>
<celldesigner:listOfGroups/>
<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="CDMT00539" kind="mole"/>
</listOfUnits>
</unitDefinition>
<unitDefinition metaid="volume" id="volume" name="volume">
<listOfUnits>
<unit metaid="CDMT00540" kind="litre"/>
</listOfUnits>
</unitDefinition>
<unitDefinition metaid="area" id="area" name="area">
<listOfUnits>
<unit metaid="CDMT00541" kind="metre" exponent="2"/>
</listOfUnits>
</unitDefinition>
<unitDefinition metaid="length" id="length" name="length">
<listOfUnits>
<unit metaid="CDMT00542" kind="metre"/>
</listOfUnits>
</unitDefinition>
<unitDefinition metaid="time" id="time" name="time">
<listOfUnits>
<unit metaid="CDMT00543" kind="second"/>
</listOfUnits>
</unitDefinition>
</listOfUnitDefinitions>
<listOfCompartments>
<compartment metaid="default" id="default" size="1" units="volume"/>
<compartment metaid="5" id="5" name="Mitochondrial_space_ROS_space_Metabolism" size="1" units="volume" outside="default"/>
</listOfCompartments>
<listOfSpecies>
<species metaid="irme_458" id="irme_458" name="labile iron pool" compartment="default" initialAmount="0">
<annotation>
<celldesigner:extension>
<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment>
<celldesigner:speciesIdentity>
<celldesigner:class>COMPLEX</celldesigner:class>
<celldesigner:hypothetical>true</celldesigner:hypothetical>
<celldesigner:name>labile iron pool</celldesigner:name>
</celldesigner:speciesIdentity>
</celldesigner:extension>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" xmlns:bqmodel="http://biomodels.net/model-qualifiers/">
<rdf:Description rdf:about="#irme_458">
<bqbiol:isDescribedBy>
<rdf:Bag>
<rdf:li rdf:resource="urn:miriam:pubmed:27293957"/>
</rdf:Bag>
</bqbiol:isDescribedBy>
</rdf:Description>
</rdf:RDF>
</annotation>
</species>
<species metaid="irme_72" id="irme_72" name="Fe2_plus_" compartment="default" initialAmount="0">
<annotation>
<celldesigner:extension>
<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment>
<celldesigner:speciesIdentity>
<celldesigner:class>ION</celldesigner:class>
<celldesigner:name>Fe2_plus_</celldesigner:name>
</celldesigner:speciesIdentity>
</celldesigner:extension>
</annotation>
</species>
</listOfSpecies>
<listOfReactions>
<reaction metaid="re4888" id="re4888" reversible="false">
<annotation>
<celldesigner:extension>
<celldesigner:reactionType>POSITIVE_INFLUENCE</celldesigner:reactionType>
<celldesigner:baseReactants>
<celldesigner:baseReactant species="irme_458" alias="csa106">
<celldesigner:linkAnchor position="E"/>
</celldesigner:baseReactant>
</celldesigner:baseReactants>
<celldesigner:baseProducts>
<celldesigner:baseProduct species="irme_72" alias="sa10326">
<celldesigner:linkAnchor position="W"/>
</celldesigner:baseProduct>
</celldesigner:baseProducts>
<celldesigner:connectScheme connectPolicy="square">
<celldesigner:listOfLineDirection>
<celldesigner:lineDirection index="0" value="horizontal"/>
<celldesigner:lineDirection index="1" value="vertical"/>
<celldesigner:lineDirection index="2" value="horizontal"/>
</celldesigner:listOfLineDirection>
</celldesigner:connectScheme>
<celldesigner:editPoints>0.8391667847539281,0.009990080770847953 0.8393084880263331,-0.0019129941901638858</celldesigner:editPoints>
<celldesigner:line width="1.0" color="ff000000"/>
</celldesigner:extension>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" xmlns:bqmodel="http://biomodels.net/model-qualifiers/">
<rdf:Description rdf:about="#re4888">
<bqbiol:isDescribedBy>
<rdf:Bag>
<rdf:li rdf:resource="urn:miriam:pubmed:25231526"/>
</rdf:Bag>
</bqbiol:isDescribedBy>
<bqbiol:isDescribedBy>
<rdf:Bag>
<rdf:li rdf:resource="urn:miriam:pubmed:26106291"/>
</rdf:Bag>
</bqbiol:isDescribedBy>
</rdf:Description>
</rdf:RDF>
</annotation>
<listOfReactants>
<speciesReference metaid="CDMT00414" species="irme_458">
<annotation>
<celldesigner:extension>
<celldesigner:alias>csa106</celldesigner:alias>
</celldesigner:extension>
</annotation>
</speciesReference>
</listOfReactants>
<listOfProducts>
<speciesReference metaid="CDMT00415" species="irme_72">
<annotation>
<celldesigner:extension>
<celldesigner:alias>sa10326</celldesigner:alias>
</celldesigner:extension>
</annotation>
</speciesReference>
</listOfProducts>
</reaction>
</listOfReactions>
</model>
</sbml>
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!-- Created by minerva version Unknown on 2019-04-25 at 08:13:40 CEST with
JSBML version 1.4. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core"
layout:required="false" level="3" multi:required="true"
render:required="false" version="2"
xmlns:layout="http://www.sbml.org/sbml/level3/version1/layout/version1"
xmlns:multi="http://www.sbml.org/sbml/level3/version1/multi/version1"
xmlns:render="http://www.sbml.org/sbml/level3/version1/render/version1">
<model id="A_comprehensive_Parkinsons_disease_map"
name="iron_metabolism_reaction">
<notes>
<body xmlns="http://www.w3.org/1999/xhtml">
<p />
</body>