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 ...@@ -10,7 +10,7 @@ minerva (12.3.0~alpha.0) unstable; urgency=low
* Small improvement: New comment dialog does not contain content of previous * Small improvement: New comment dialog does not contain content of previous
comment dialog (#680) comment dialog (#680)
* Small improvement: Left logo is configurable (#731) * 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) sorted (#758)
* Small improvement: Plugin API provides list of overview images (#702) * Small improvement: Plugin API provides list of overview images (#702)
* Small improvement: Plugin API allows to show/hide 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 ...@@ -37,13 +37,13 @@ minerva (12.3.0~alpha.0) unstable; urgency=low
(#591) (#591)
* Small improvement: uploading sbml file should automatically discover a file * Small improvement: uploading sbml file should automatically discover a file
type (#784) 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) 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) 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) 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) file" and "Map type" are merged (#700)
* Small improvement: allow admin to disable CORS check (#802) * Small improvement: allow admin to disable CORS check (#802)
* Bug fix: progress bar of gene genome mapping upload is refreshing properly * 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 ...@@ -54,13 +54,30 @@ minerva (12.3.0~alpha.0) unstable; urgency=low
"Unknown Inhibition" reactions (#664) "Unknown Inhibition" reactions (#664)
* Bug fix: "Unknown Catalysis" and "Unknown Inhibition" reaction end is * Bug fix: "Unknown Catalysis" and "Unknown Inhibition" reaction end is
slightly separated from target phenotype (#664) 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) 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 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) 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 minerva (12.2.2) stable; urgency=medium
* Bug fix: downloading overlays didn't work from admin panel when project * Bug fix: downloading overlays didn't work from admin panel when project
with different id than default map was accessed with different id than default map was accessed
......
...@@ -70,18 +70,18 @@ public class ChemicalParser extends CachableInterface implements IExternalServic ...@@ -70,18 +70,18 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
/** /**
* Home page of ctd database. * 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. * 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"; + "type=disease&acc=MESH%3A";
/** /**
* URL to get a list of chemicals by gene id. * 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="; + "d-1332398-e=5&view=disease&type=gene&assnType=curated&acc=";
/** /**
...@@ -404,10 +404,10 @@ public class ChemicalParser extends CachableInterface implements IExternalServic ...@@ -404,10 +404,10 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
} }
if (result != null) { if (result != null) {
MeSH mesh = meshParser.getMeSH(result.getChemicalId()); MeSH mesh = meshParser.getMeSH(result.getChemicalId());
if (mesh!=null) { if (mesh != null) {
result.addSynonyms(mesh.getSynonyms()); result.addSynonyms(mesh.getSynonyms());
} else { } 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 ...@@ -486,7 +486,7 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
if (entrez == null) { if (entrez == null) {
invalidHgnc.add(md); invalidHgnc.add(md);
} else { } 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(); + entrez.getResource();
String referencesPage = getWebPageContent(query); String referencesPage = getWebPageContent(query);
Matcher matcher = pattern.matcher(referencesPage); Matcher matcher = pattern.matcher(referencesPage);
...@@ -494,7 +494,7 @@ public class ChemicalParser extends CachableInterface implements IExternalServic ...@@ -494,7 +494,7 @@ public class ChemicalParser extends CachableInterface implements IExternalServic
idx.add(matcher.group(1)); idx.add(matcher.group(1));
} }
for (String string : idx) { 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;
String referencesPage2 = getWebPageContent(query2); String referencesPage2 = getWebPageContent(query2);
String[] lines = referencesPage2.split("\n"); String[] lines = referencesPage2.split("\n");
......
...@@ -57,7 +57,7 @@ public class PubmedParser extends CachableInterface implements IExternalService ...@@ -57,7 +57,7 @@ public class PubmedParser extends CachableInterface implements IExternalService
/** /**
* Version of the remote API that is supported by this connecting class. * 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/"; static final String API_URL = "https://www.ebi.ac.uk/europepmc/webservices/rest/";
......
...@@ -156,7 +156,6 @@ public class DrugbankHTMLParserTest extends AnnotationTestFunctions { ...@@ -156,7 +156,6 @@ public class DrugbankHTMLParserTest extends AnnotationTestFunctions {
assertNotNull(drug); assertNotNull(drug);
assertTrue(drug.getBrandNames().contains("PK-Merz")); assertTrue(drug.getBrandNames().contains("PK-Merz"));
assertTrue(drug.getBrandNames().contains("Symadine")); assertTrue(drug.getBrandNames().contains("Symadine"));
assertTrue(drug.getBrandNames().contains("Symmetrel"));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw e; throw e;
......
...@@ -37,6 +37,7 @@ import lcsb.mapviewer.converter.annotation.XmlAnnotationParser; ...@@ -37,6 +37,7 @@ import lcsb.mapviewer.converter.annotation.XmlAnnotationParser;
import lcsb.mapviewer.model.graphics.ArrowType; import lcsb.mapviewer.model.graphics.ArrowType;
import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.BioEntity;
import lcsb.mapviewer.model.map.InconsistentModelException; 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> { 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 ...@@ -80,18 +81,28 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
public void exportElements() throws InconsistentModelException { public void exportElements() throws InconsistentModelException {
Collection<T> speciesList = getElementList(); Collection<T> speciesList = getElementList();
for (T species : speciesList) { for (T bioEntity : speciesList) {
S sbmlElement = getSbmlElement(species); try {
S sbmlElement = getSbmlElement(bioEntity);
if (sbmlElementByElementId.get(species.getElementId()) != null) { if (sbmlElementByElementId.get(bioEntity.getElementId()) != null) {
throw new InconsistentModelException("More than one species with id: " + species.getElementId()); 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)) { if (isExtensionEnabled(SbmlExtension.LAYOUT)) {
for (T species : speciesList) { for (T bioEntity : speciesList) {
AbstractReferenceGlyph elementGlyph = createGlyph(species); try {
sbmlGlyphByElementId.put(species.getElementId(), elementGlyph); 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 ...@@ -293,7 +304,7 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
BoundingBox boundingBox = createBoundingBox(-2, 0, 4, 4); BoundingBox boundingBox = createBoundingBox(-2, 0, 4, 4);
result.getGroup().setFill(getColorDefinition(Color.WHITE).getId()); result.getGroup().setFill(getColorDefinition(Color.WHITE).getId());
result.setBoundingBox(boundingBox); result.setBoundingBox(boundingBox);
Ellipse ellipse= new Ellipse(); Ellipse ellipse = new Ellipse();
ellipse.setAbsoluteCx(false); ellipse.setAbsoluteCx(false);
ellipse.setAbsoluteCy(false); ellipse.setAbsoluteCy(false);
ellipse.setAbsoluteRx(true); ellipse.setAbsoluteRx(true);
...@@ -365,7 +376,7 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s ...@@ -365,7 +376,7 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
polygon.addElement(createRenderPoint(33, 100)); polygon.addElement(createRenderPoint(33, 100));
polygon.addElement(createRenderPoint(33, 0)); polygon.addElement(createRenderPoint(33, 0));
result.getGroup().addElement(polygon); result.getGroup().addElement(polygon);
Polygon crossBar = new Polygon(); Polygon crossBar = new Polygon();
crossBar.addElement(createRenderPoint(0, 0)); crossBar.addElement(createRenderPoint(0, 0));
crossBar.addElement(createRenderPoint(0, 100)); crossBar.addElement(createRenderPoint(0, 100));
...@@ -407,12 +418,11 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s ...@@ -407,12 +418,11 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s
} }
public void setProvideDefaults(boolean provideDefaults) { public void setProvideDefaults(boolean provideDefaults) {
this.provideDefaults= provideDefaults; this.provideDefaults = provideDefaults;
} }
protected boolean isProvideDefaults() { protected boolean isProvideDefaults() {
return provideDefaults; return provideDefaults;
} }
} }
...@@ -229,6 +229,7 @@ public class SbmlParser extends Converter { ...@@ -229,6 +229,7 @@ public class SbmlParser extends Converter {
} }
} }
} }
return true; return true;
} }
......
...@@ -49,6 +49,7 @@ import lcsb.mapviewer.model.map.reaction.Reactant; ...@@ -49,6 +49,7 @@ import lcsb.mapviewer.model.map.reaction.Reactant;
import lcsb.mapviewer.model.map.reaction.Reaction; import lcsb.mapviewer.model.map.reaction.Reaction;
import lcsb.mapviewer.model.map.reaction.ReactionNode; import lcsb.mapviewer.model.map.reaction.ReactionNode;
import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.Element;
import lcsb.mapviewer.modelutils.map.ElementUtils;
public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sbml.jsbml.Reaction> { public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sbml.jsbml.Reaction> {
/** /**
...@@ -218,8 +219,12 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb ...@@ -218,8 +219,12 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
assignStyleToGlyph(reactantGlyph, style); assignStyleToGlyph(reactantGlyph, style);
} }
Point p = reactantGlyph.getCurve().getCurveSegment(0).getStart(); if (reactantGlyph.getCurve().getCurveSegmentCount() > 0) {
reactantEndPoint = new Point2D.Double(p.getX(), p.getY()); 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) { if (reactionGlyph.getCurve().getCurveSegmentCount() > 0) {
Point p = reactionGlyph.getCurve().getCurveSegment(reactionGlyph.getCurve().getCurveSegmentCount() - 1).getEnd(); Point p = reactionGlyph.getCurve().getCurveSegment(reactionGlyph.getCurve().getCurveSegmentCount() - 1).getEnd();
...@@ -255,8 +260,12 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb ...@@ -255,8 +260,12 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
assignStyleToGlyph(productGlyph, style); assignStyleToGlyph(productGlyph, style);
} }
Point p = productGlyph.getCurve().getCurveSegment(0).getStart(); if (productGlyph.getCurve().getCurveSegmentCount() > 0) {
productStartPoint = new Point2D.Double(p.getX(), p.getY()); 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()) { if (segmentCount < reactionGlyph.getCurve().getCurveSegmentCount()) {
...@@ -361,6 +370,9 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb ...@@ -361,6 +370,9 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb
curve.addCurveSegment(segment); curve.addCurveSegment(segment);
} }
} }
if (curve.getCurveSegmentCount() == 0) {
logger.warn(new ElementUtils().getElementTag(node) + " Problematic line");
}
return curve; return curve;
} }
......
...@@ -31,7 +31,6 @@ import org.sbml.jsbml.ext.render.RenderGroup; ...@@ -31,7 +31,6 @@ import org.sbml.jsbml.ext.render.RenderGroup;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import lcsb.mapviewer.common.XmlParser; import lcsb.mapviewer.common.XmlParser;
import lcsb.mapviewer.common.exception.InvalidArgumentException;
import lcsb.mapviewer.common.exception.InvalidStateException; import lcsb.mapviewer.common.exception.InvalidStateException;
import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException;
import lcsb.mapviewer.converter.InvalidInputDataExecption; import lcsb.mapviewer.converter.InvalidInputDataExecption;
...@@ -154,8 +153,8 @@ public class SbmlReactionParser extends SbmlBioEntityParser { ...@@ -154,8 +153,8 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
} }
PolylineData line = getLineFromReferenceGlyph(speciesRefernceGlyph); PolylineData line = getLineFromReferenceGlyph(speciesRefernceGlyph);
if (line == null) { if (line.length() == 0) {
throw new InvalidArgumentException("Line undefined for element " + minervaElement.getElementId() logger.warn("Line undefined for element " + minervaElement.getElementId()
+ " in reaction " + reactionWithLayout.getElementId()); + " in reaction " + reactionWithLayout.getElementId());
} }
if (minervaNode instanceof Reactant) { if (minervaNode instanceof Reactant) {
...@@ -217,8 +216,9 @@ public class SbmlReactionParser extends SbmlBioEntityParser { ...@@ -217,8 +216,9 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
} }
getMinervaModel().addReaction(reactionWithLayout); getMinervaModel().addReaction(reactionWithLayout);
} catch (InvalidArgumentException e) { } catch (Exception e) {
throw new InvalidInputDataExecption(e); throw new InvalidInputDataExecption(
new ElementUtils().getElementTag(source) + "Problem with parsing reaction layout", e);
} }
} }
Set<Reaction> elementsToRemove = new HashSet<>(); Set<Reaction> elementsToRemove = new HashSet<>();
...@@ -450,6 +450,9 @@ public class SbmlReactionParser extends SbmlBioEntityParser { ...@@ -450,6 +450,9 @@ public class SbmlReactionParser extends SbmlBioEntityParser {
line.addPoint(end); line.addPoint(end);
} }
} }
if (line == null) {
return new PolylineData();
}
return line; return line;
} }
......
...@@ -679,6 +679,20 @@ public class SbmlExporterTest extends SbmlTestFunctions { ...@@ -679,6 +679,20 @@ public class SbmlExporterTest extends SbmlTestFunctions {
ListComparator<Line2D> comparator = new ListComparator<>(new LineComparator(Configuration.EPSILON)); ListComparator<Line2D> comparator = new ListComparator<>(new LineComparator(Configuration.EPSILON));
assertEquals(0, comparator.compare(lines1, lines2)); 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 { ...@@ -687,7 +701,7 @@ public class SbmlExporterTest extends SbmlTestFunctions {
Model originalModel = parser.createModel( Model originalModel = parser.createModel(
new ConverterParams().filename("testFiles/small/model_with_creator.xml")); new ConverterParams().filename("testFiles/small/model_with_creator.xml"));
Model model = getModelAfterSerializing(originalModel); Model model = getModelAfterSerializing(originalModel);
assertEquals(0, comparator.compare(model, originalModel)); assertEquals(0, comparator.compare(model, originalModel));
} }
......
...@@ -248,4 +248,32 @@ public class SbmlReactionParserTest { ...@@ -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/>