SysBioChalmers / Human-GEM

The generic genome-scale metabolic model of Homo sapiens
https://sysbiochalmers.github.io/Human-GEM-guide/
Creative Commons Attribution 4.0 International
98 stars 41 forks source link

RNA formation #354

Closed PkiwiBird closed 2 years ago

PkiwiBird commented 2 years ago

Description of the issue:

  1. reaction MAR07161, representing gene transcription (RNA formation) is not happening in the nucleus
  2. there is no RNA in the nucleus and transport reaction of RNA from the nucleus to the cytoplasm
  3. not sure if reaction MAR07162 should exist as RNA formation from ribonucleoside diphosphates (instead of triphosphates) seems to have mainly happened for primordial nucleic acid biosynthesis (study here). Also, it is annotated to enzyme 2.7.7.8 in the metabolic atlas, which seems to catalyze the reverse reaction: brenda, keeg. In humans that enzyme seems to be involved in mRNA degradation in the cytoplasm: "In the cytoplasm, shows a 3'-to-5' exoribonuclease mediating mRNA degradation activity"(from here)

Expected feature/value/output:

  1. reaction MAR07161 could be moved to the nucleus, as gene transcription occurs in nucleus in humans.
  2. model could have an RNA[n] metabolite and create a transport reaction from the nucleus to the cytoplasm with bounds 0 to 1000 as RNA does not re-enter the nucleus once transported to the cytoplasm.
  3. maybe remove reaction MAR07162 or maybe allow it to be reversible?

Python code:

import cobra
from cobra import Metabolite, Reaction
from urllib.request import urlretrieve

# load human1.10 and save:
if not os.path.exists('data/models/human1_10.xml'):
    mdPthSBML='https://raw.githubusercontent.com/SysBioChalmers/Human-GEM/master/model/Human-GEM.xml' # path to generic SBML model
    modelPathSBML, _ = urlretrieve(mdPthSBML)
    m = cobra.io.read_sbml_model(modelPathSBML)
    cobra.io.write_sbml_model(m, 'data/models/human1_10.xml')
else:
    m = cobra.io.read_sbml_model('data/models/human1_10.xml')

# fva to identify blocked reactions:
blck_rc = cobra.flux_analysis.find_blocked_reactions(m)
len(blck_rc) # 1190

# move reaction MAR07161 to nucleus:
MAM02847n = Metabolite(
    'MAM02847n',
    formula='C15H22O19P3R3',
    name='RNA',
    compartment='n',
    charge= '-4')

m.reactions.MAR07161.add_metabolites(
    {
    'MAM01371n' : -0.18,
    'MAM01623n' : -0.3,
    'MAM02034n' : -0.34,
    'MAM03130n' : -0.18,
    'MAM02759n': 1.0,
    MAM02847n: 1.0
    }
)
m.reactions.MAR07161.subtract_metabolites(
    {
    'MAM01371c' : -0.18,
    'MAM01623c' : -0.3,
    'MAM02034c' : -0.34,
    'MAM03130c' : -0.18,
    'MAM02759c': 1.0,
    'MAM02847c': 1.0
    }
)

# create transport reaction for RNA[n]:
MAR13087 = Reaction('MAR13087')
MAR13087.add_metabolites({
    MAM02847n : -1,
    m.metabolites.MAM02847c : 1,
})
MAR13087.gene_reaction_rule = ''
MAR13087.bounds = (0.0, 1000.0) # RNA can only exit nucleus, not enter
m.add_reactions([MAR13087])

# see if reactions are blocked now:
blck_rc_end = cobra.flux_analysis.find_blocked_reactions(m)
len(blck_rc_end) # 1190

set(blck_rc_end) - set(blck_rc) # empty

I hereby confirm that I have:

JonathanRob commented 2 years ago

Thank you for this, @PkiwiBird - super helpful.

I agree with all of your suggestions. Regarding your 2nd suggestion:

model could have an RNA[n] metabolite and create a transport reaction from the nucleus to the cytoplasm ...

we could consider copying the gene rule from MAR08639 (DNA transport between cytoplasm and nucleus, which should eventually be deleted based on your discussion in #350) as the gene rule for the new reaction to transport RNA from nucleus to cytoplasm.

PkiwiBird commented 2 years ago

Thank you for this, @PkiwiBird - super helpful.

I agree with all of your suggestions. Regarding your 2nd suggestion:

model could have an RNA[n] metabolite and create a transport reaction from the nucleus to the cytoplasm ...

we could consider copying the gene rule from MAR08639 (DNA transport between cytoplasm and nucleus, which should eventually be deleted based on your discussion in #350) as the gene rule for the new reaction to transport RNA from nucleus to cytoplasm.

I'll make a pull request for those changes then. In that case, @JonathanRob do you think reaction MAR07162 should have the opposite direction only (Pi[c] + RNA[c] => 0.18 ADP [c] + 0.3 CDP [c] + 0.34 GDP [c] + 0.18 UDP [c])? Because that enzyme in the cytoplasm seems to only degrade RNA. It seems to have a polyadenylation role, but only shown up till now with mitochondrial mRNAs (here)

JonathanRob commented 2 years ago

Sure, you can swap the direction on MAR07162 to only degrade the RNA, since you've provided evidence to support such a change.

mihai-sysbio commented 2 years ago

Thank you @PkiwiBird for so very thoroughly describing the issue and for implementing the suggestions in the pull request, and thanks @JonathanRob for the review. And with the PR merged, I think this issue can be closed.