Closed CBRN-git closed 2 years ago
Yeah this is a bit odd. Just to give some more info here:
write_sbml_model
from a XXXX.1
formate to G_XXXX__46__1
which is okay and should happenXXXX_ATX
formatwrite_sbml_model
Maybe the one from VMH had a typo in the GPR that was fixed in BIGG? I suspect the error is because the GPR references a gene libSBML can't find...
Thank you @cdiener for your answer, and the provided details.
What is my best option to correct the .mat file by myself?
1-Should I load the mat lab object (with Cobrapy / R.matlab) and correct the different chemicalFormulas
strings ? Or errors from the SBML validator are just consequences of previous issues?
2-How can I find typo swithin the GPR that was fixed by BiGG ? Just by comparing the two .mat files ? or the .sbml files ?
Thank you for your help, and sorry for my potential non-relevant questions, I am confused with what is going on here.
Yes, I also suspect there is an incorrect gene identifier:
You can find the typos by parsing the genes via a regex from the complete string. I.e. something along the line of ^G[_0-9]*$
. Then you check which of the matches is not in the model.genes.
You could fix the formulas in cobrapy by updating the species.formula
before export.
Thank you @matthiaskoenig.
I will give this a try today and will update you with what I found.
I am running into the same problem when trying to convert Recon3D into xml file. @matthiaskoenig I am trying to look for where the GPR is stored. When I look at the gene_reaction_rule
of each cobra.core.reaction.Reaction
object in the model, the rule is in ####.#
format. Every id
attribute of cobra.core.gene.Gene
object in the model is also in ####.#
format. I checked that the set of genes from these GRPs and the set of model.genes are equal using the following code:
import cobra
import re
model = cobra.io.load_matlab_model("Recon3D_301.mat")
parsed_gid = set()
for rxn in model.reactions:
gene_reaction_rule = rxn.gene_reaction_rule
if gene_reaction_rule =='':
continue
gene_ids = re.findall(r'[.\d]+',gene_reaction_rule)
parsed_gid.update(gene_ids)
gid = {x.id for x in model.genes}
parsed_gid == gid
Where are genes in the G_XXXX__46__#
format stored?
using cobrapy 0.22.1 and python 3.8.10
So the GPR is correct as can be checked with.
from cobra.core.gene import eval_gpr, parse_gpr
tree, _ = parse_gpr(model.reactions.ATPS4mi.gene_reaction_rule)
active = eval_gpr(tree, {g.id for g in model.reactions.ATPS4mi.genes})
Everything checks out. Took me a while to figure out what was going on but the problem is some missing spaces in the GPR which libSBML can not deal with. It can be fixed with the following:
model.reactions.ATPS4mi.gene_reaction_rule = model.reactions.ATPS4mi.gene_reaction_rule.replace(")or", ") or")
After that you will be able to write the model with write_to_sbml. Just note that the current matlab reader in cobrapy will not read annotations, so you will loose a lot of information this way. The SBML from BIGG is thus recommended.
Looking at this I noticed that the SBML writer does not use the standard methods for converting GPRs such as ast2str. I'll send in a PR that fixes this. That will also allow converting Recon3 without adding the space into the GPR.
Hello ; I'm trying to convert the WBM model also to sbml file but I'm getting this error : code:
cobra.Configuration().upper_bound = 100000 human_model= cobra.io.load_matlab_model('Harvetta4.mat',inf= 100000) from cobra.io.sbml import write_sbml_model write_sbml_model(human_model,"test_file.xml") error: Do you have please any ideas to solve this errors please? Thank you;
Hello everyone,
As suggested by one of the contributors by email, I am posting this question here, it might help other people.
What I am trying to do : I have downloaded the .mat file from Recon3 database (https://www.vmh.life/), I am trying to convert it as a .sbml file.
What I have tried : I have searched for any keywords related to this task, but did not succeed, even after following this link : https://github.com/opencobra/cobrapy/issues/803 .
Here is my code :
I get this error :
In order to better the situation, I verified the .sbml file with http://www.sbml.org/validator/ .
Error when verifying the file :
I am using: Python 3.7.1 - Cobra '0.22.1' .
(I know there are already some .sbml files available on different databases, but I would like to learn how to do it by myself, and now more than never understand the origin of these errors).
Suggestion 1 - I might try, if someone confirms it is a good idea: is it a good idea to change the chemicalFormulas within the .Matlab that are problematic, or after loading the Recon Object? But I guess, sometimes I am not sure how to correctly correct these names and keep being "chemistrally/biologically" correct.
Thank you so much to everyone helping me with this issue.