From 081f0d0f60639e32522e088ed56572221435c6e8 Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Thu, 27 Feb 2020 14:38:43 +0100 Subject: [PATCH] import sbgn creates antisense rna when possibly --- CHANGELOG | 2 + .../model/sbgnml/SbgnmlXmlParser.java | 34 +++++--- .../model/sbgnml/CellDesignerToSbgnTest.java | 18 +++- .../testFiles/cellDesigner/antisense_rna.xml | 86 +++++++++++++++++++ 4 files changed, 126 insertions(+), 14 deletions(-) create mode 100644 converter-SBGNML/testFiles/cellDesigner/antisense_rna.xml diff --git a/CHANGELOG b/CHANGELOG index ae7fcb762..760cc113b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,8 @@ minerva (15.0.0~beta.2) stable; urgency=medium * Bug fix: catalysis to protein was not parsed from SBGN file (#1116) * Bug fix: upload logs for SBGN parser were not translated properly to new structured log form + * Bug fix: antisenseRNA shape is infered from SBGN when antisenseRNA text is + present in glyph label (#1114) -- Piotr Gawron Wed, 27 Feb 2020 14:00:00 +0200 diff --git a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java index 336af000f..0dc45afeb 100644 --- a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java +++ b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java @@ -407,20 +407,15 @@ public class SbgnmlXmlParser { parseSpecies(g, newSpecies, false, model); break; case NUCLEIC_ACID_FEATURE: - if (isRNA(g)) { - newSpecies = new Rna(g.getId()); - } else { - newSpecies = new Gene(g.getId()); - } - parseSpecies(g, newSpecies, true, model); - break; case NUCLEIC_ACID_FEATURE_MULTIMER: - if (isRNA(g)) { + if (isAntisenseRNA(g)) { + newSpecies = new AntisenseRna(g.getId()); + } else if (isRNA(g)) { newSpecies = new Rna(g.getId()); } else { newSpecies = new Gene(g.getId()); } - parseSpecies(g, newSpecies, false, model); + parseSpecies(g, newSpecies, true, model); break; case PERTURBING_AGENT: newSpecies = new Phenotype(g.getId()); @@ -1043,18 +1038,33 @@ public class SbgnmlXmlParser { * @return true if input is RNA */ private boolean isRNA(Glyph g) { - boolean rna = false; + boolean isRna = false; // Check all the children nodes looking for unit of information List children = g.getGlyph(); for (Glyph child : children) { if (GlyphClazz.fromClazz(child.getClazz()) == GlyphClazz.UNIT_OF_INFORMATION) { if (child.getLabel().getText().toLowerCase().contains("rna")) { - rna = true; + isRna = true; + } + } + } + + return isRna; + } + + private boolean isAntisenseRNA(Glyph g) { + boolean isAntiseneRna = false; + // Check all the children nodes looking for unit of information + List children = g.getGlyph(); + for (Glyph child : children) { + if (GlyphClazz.fromClazz(child.getClazz()) == GlyphClazz.UNIT_OF_INFORMATION) { + if (child.getLabel().getText().toLowerCase().contains("antisenserna")) { + isAntiseneRna = true; } } } - return rna; + return isAntiseneRna; } /** diff --git a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/CellDesignerToSbgnTest.java b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/CellDesignerToSbgnTest.java index 245d8bea1..0de85753b 100644 --- a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/CellDesignerToSbgnTest.java +++ b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/CellDesignerToSbgnTest.java @@ -20,8 +20,7 @@ import lcsb.mapviewer.converter.ConverterParams; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.model.Model; -import lcsb.mapviewer.model.map.species.Element; -import lcsb.mapviewer.model.map.species.Protein; +import lcsb.mapviewer.model.map.species.*; import lcsb.mapviewer.model.map.species.field.ModificationResidue; import lcsb.mapviewer.model.map.species.field.StructuralStateComparator; import lcsb.mapviewer.modelutils.map.ElementUtils; @@ -149,4 +148,19 @@ public class CellDesignerToSbgnTest extends SbgnmlTestFunctions { new File(output).delete(); } + @Test + public void serializeAntisenseRna() throws Exception { + Converter converter = new CellDesignerXmlParser(); + Converter sbgnmlConverter = new SbgnmlXmlConverter(); + + Model model = converter.createModel(new ConverterParams().filename("testFiles/cellDesigner/antisense_rna.xml")); + + String sbgn = sbgnmlConverter.model2String(model); + Model model2 = sbgnmlConverter.createModel( + new ConverterParams().inputStream(new ByteArrayInputStream(sbgn.getBytes(StandardCharsets.UTF_8)))); + + assertTrue(model2.getElements().iterator().next() instanceof AntisenseRna); + } + + } diff --git a/converter-SBGNML/testFiles/cellDesigner/antisense_rna.xml b/converter-SBGNML/testFiles/cellDesigner/antisense_rna.xml new file mode 100644 index 000000000..1dda92eca --- /dev/null +++ b/converter-SBGNML/testFiles/cellDesigner/antisense_rna.xml @@ -0,0 +1,86 @@ + + + + + +4.0 + + + + + +inactive + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +inside + +ANTISENSE_RNA +arn1 + + + + + + + -- GitLab