Skip to content
Snippets Groups Projects
Commit 8ece54bb authored by lcottret's avatar lcottret
Browse files

Add parseGenes option to FBCparser

The parsing of the gene association is often the most time consuming step of the sbml reading.
Setting the parseGenes option to false allows not to parse genes when it's not useful
parent f7816b37
No related branches found
No related tags found
No related merge requests found
......@@ -91,6 +91,11 @@ public class FBCParser implements PackageParser, PrimaryDataTag, ReaderSBML3Comp
*/
public FBCModelPlugin fbcModel;
/**
* Indicates if the genes are parsed or not
*/
public Boolean parseGenes = true;
/** {@inheritDoc} */
@Override
public String getAssociatedPackageName() {
......@@ -103,6 +108,17 @@ public class FBCParser implements PackageParser, PrimaryDataTag, ReaderSBML3Comp
return model.isPackageURIEnabled(PackageNamespace);
}
public FBCParser(Boolean parseGenes) {
this.parseGenes = parseGenes;
}
public FBCParser() {
this.parseGenes = true;
}
/**
* {@inheritDoc}
*
......@@ -129,7 +145,10 @@ public class FBCParser implements PackageParser, PrimaryDataTag, ReaderSBML3Comp
this.setStrictFromFbcModel();
this.parseParameters();
this.parseListOfGeneProducts();
if(parseGenes) {
this.parseListOfGeneProducts();
}
try {
this.parseFluxReactions();
} catch (GeneSetException | Met4jSbmlReaderException e) {
......@@ -239,7 +258,7 @@ public class FBCParser implements PackageParser, PrimaryDataTag, ReaderSBML3Comp
GeneAssociation geneAssociation = new GeneAssociation();
// System.err.println(rxn.getId());
if (rxnPlugin.isSetGeneProductAssociation()) {
if (parseGenes && rxnPlugin.isSetGeneProductAssociation()) {
geneAssociation = this.computeGeneAssocations(rxnPlugin.getGeneProductAssociation().getAssociation());
}
// System.err.println("out of recursion");
......
......@@ -37,11 +37,15 @@
package fr.inrae.toulouse.metexplore.met4j_io.jsbml.reader;
import fr.inrae.toulouse.metexplore.met4j_core.biodata.BioNetwork;
import fr.inrae.toulouse.metexplore.met4j_io.jsbml.reader.plugin.FBCParser;
import fr.inrae.toulouse.metexplore.met4j_io.jsbml.reader.plugin.PackageParser;
import org.junit.Test;
import org.sbml.jsbml.SBMLDocument;
import javax.xml.stream.XMLStreamException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import static org.junit.Assert.*;
import static org.mockito.Mockito.doReturn;
......@@ -65,10 +69,33 @@ public class JsbmlReaderTest {
assertEquals(3, network.getReactionsView().size());
assertEquals(2, network.getGenesView().size());
// Other tests are done on JsbmlToBioNetwork
}
@Test
public void readWithoutGenes() throws IOException, XMLStreamException, Met4jSbmlReaderException {
JsbmlReader reader = spy(new JsbmlReader("test"));
SbmlDocMock docMockGenerator = new SbmlDocMock();
SBMLDocument doc = docMockGenerator.doc;
doReturn(doc).when(reader).sbmlRead();
BioNetwork network = reader.read(new ArrayList<PackageParser>(Arrays.asList(new FBCParser(false))));
assertNotNull(network);
assertEquals(3, network.getReactionsView().size());
assertEquals(0, network.getGenesView().size());
}
@Test
public void readWithoutNotes() throws IOException, XMLStreamException, Met4jSbmlReaderException {
JsbmlReader reader = spy(new JsbmlReader("test"));
......
......@@ -35,9 +35,13 @@
*/
package fr.inrae.toulouse.metexplore.met4j_io.jsbml.reader;
import fr.inrae.toulouse.metexplore.met4j_io.utils.StringUtils;
import org.sbml.jsbml.*;
import org.sbml.jsbml.ext.fbc.*;
import javax.xml.stream.XMLStreamException;
import java.util.ArrayList;
import java.util.List;
public class SbmlDocMock {
......@@ -51,7 +55,7 @@ public class SbmlDocMock {
public SbmlDocMock() {
doc = new SBMLDocument(3, 1);
doc = new SBMLDocument(3, 2);
model = doc.createModel();
......@@ -83,6 +87,21 @@ public class SbmlDocMock {
m1.setInitialAmount(2.0);
m2.setInitialAmount(3.0);
// Create genes
FBCModelPlugin fbcModel = (FBCModelPlugin) model.getPlugin("http://www.sbml.org/sbml/level3/version1/fbc/version2");
GeneProduct gene1 = fbcModel.createGeneProduct();
gene1.setId("g1");
gene1.setName("g1");
gene1.setLabel("g1");
fbcModel.addGeneProduct(gene1);
GeneProduct gene2 = fbcModel.createGeneProduct();
gene2.setId("g2");
gene2.setName("g2");
gene2.setLabel("g2");
fbcModel.addGeneProduct(gene2);
r1 = model.createReaction("r1");
r1.setName("name1");
......@@ -90,8 +109,22 @@ public class SbmlDocMock {
r1.setSBOTerm("SBO:0000167");
GeneProductRef geneRef1 = new GeneProductRef();
geneRef1.setGeneProduct(StringUtils.convertToSID("g1"));
FBCReactionPlugin rxnPlugin = (FBCReactionPlugin) r1.getPlugin("fbc");
GeneProductAssociation GPA = rxnPlugin.createGeneProductAssociation();
GPA.setAssociation(geneRef1);
r2 = model.createReaction("r2");
GeneProductRef geneRef2 = new GeneProductRef();
geneRef2.setGeneProduct(StringUtils.convertToSID("g2"));
FBCReactionPlugin rxn2Plugin = (FBCReactionPlugin) r2.getPlugin("fbc");
GeneProductAssociation GPA2 = rxnPlugin.createGeneProductAssociation();
GPA.setAssociation(geneRef2);
SpeciesReference m1Ref = new SpeciesReference(m1);
m1Ref.setStoichiometry(2.0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment