Exemple #1
0
def aa_count(filename, filetype):
    res_dict = {}
    f = open(filename)
    for record in SeqIO.parse(f, filetype):
        temp_dict = ProteinAnalysis(str(record.seq)).count_amino_acids()
        for key, val in temp_dict.items():
            if key in res_dict:
                res_dict[key] = res_dict[key] + val
            else:
                res_dict[key] = val
    return res_dict
     def add_prot_metabolism(model):
          prot_metab_rxns = []
          added_mets = []
          print('Model name:', model.name)
          print('1. Adding tRNAs ...')
          
          tRNA = Metabolite(id='tRNA_c',
                            formula = '',
                            name= 'tRNA',
                            compartment='c')
          
          tRNA_synthesis = Reaction(id= 'EX_tRNA', 
                                    name= 'tRNA synthesis(exchange)', 
                                    subsystem= 'tRNA metabolism',
                                    lower_bound=-INF,
                                    upper_bound= INF)
          
          tRNA_synthesis.add_metabolites({tRNA: 1})
          
          model.add_reaction(tRNA_synthesis)
          prot_metab_rxns.append(tRNA_synthesis.id)
          added_mets.append(tRNA)
     
          print('2. Adding Aminoacyl-tRNAs synthesis pathways...')
          
          ppi_c = model.metabolites.ppi_c
          pi_c = model.metabolites.pi_c
          atp_c = model.metabolites.atp_c
          adp_c = model.metabolites.adp_c
          amp_c = model.metabolites.adp_c
          
          aa_list = ['tyr_L_c','trp_L_c','thr_L_c','leu_L_c','ile_L_c','lys_L_c','ala_L_c','val_L_c','met_L_c','ser_L_c',
                     'asp_L_c','gly_c','pro_L_c','cys_L_c','glu_L_c','gln_L_c','arg_L_c','phe_L_c','his_L_c','asn_L_c']
          
          for aa in aa_list:
               
               Aminoacyl_tRNA = Metabolite(id= aa[0:3]+"_tRNA_c",
                                           formula='',
                                           name= "amminoacyl_"+aa+"_tRNA",
                                           compartment='c')
               
               aa_tRNA_synth = Reaction(id= aa[0:3]+'_tRNA_synth',
                                        name=aa[0:3]+' tRNA synthesis',
                                        subsystem='protein synthesis',
                                        lower_bound= -INF,
                                        upper_bound=  INF)
               
               aa_tRNA_synth.add_metabolites({               
                         model.metabolites.get_by_id(aa): -1,
                                                  atp_c : -1,
                                                   tRNA : -1,
                                         Aminoacyl_tRNA : 1,
                                                  ppi_c : 1,
                                                  amp_c : 1                                        
                                                  })
    
               model.add_reaction(aa_tRNA_synth)
               prot_metab_rxns.append(aa_tRNA_synth.id)
               added_mets.append(Aminoacyl_tRNA)
               
          print('3. Adding muscle proteins synthesis pathways...')
          
          uniprot_id = ['P68133', # actin
                        'P12882', # myosin heavy chain I and IIx
                        'Q9UKX2', # myosin heavy chain IIa
                        'Q9Y623', # myosin heavy chain IIb
                        'Q96A32', # myosin light chain type 2
                        'P05976', # myosin light chain type 1
                        'Q9H1R3', # myosin light chain kinase
                        'P09493', # tropomyosin type 1 (slow)
                        'P67936', # tropomyosin type 2 (fast)
                        'P63316', # troponin C type 1 (slow)
                        'P02585', # troponin C type 2 (fast)
                        'P19237', # troponin I type 1 (slow)
                        'P48788', # troponin I type 2 (fast)
                        'P13805', # troponin T type 1 (slow)
                        'P45378', # troponin T type 1 (fast)
                        ]
          
          translate_1to3 = {'A': 'ala',
                            'R': 'arg', 
                            'N': 'asn',
                            'D': 'asp',
                            'C': 'cys',
                            'Q': 'gln',
                            'E': 'glu',
                            'G': 'gly',
                            'H': 'his',
                            'I': 'ile',
                            'L': 'leu',
                            'K': 'lys',
                            'M': 'met',
                            'F': 'phe',
                            'P': 'pro',
                            'S': 'ser',
                            'T': 'thr',
                            'W': 'trp',
                            'Y': 'tyr',
                            'V': 'val' } 
          MW = []
          for prot_id in uniprot_id:
               with ExPASy.get_sprot_raw(prot_id) as handle:  #<--- why so slow???
                    Seq_record = SeqIO.read(handle, 'swiss')
                    handle.close()
                    print('Adding: '+ Seq_record.description.split('=')[1].split(';')[0] )
                    MW.append(SeqUtils.molecular_weight(Seq_record.seq, 'protein'))
                    
                    aa_count = ProteinAnalysis((str(Seq_record.seq)),True).count_amino_acids()
                    
                    protein = Metabolite(id=Seq_record.name[0:5]+'_protein_c',
                                         formula='',
                                         name = Seq_record.description.split()[1].split('=')[1],
                                         compartment='c')
                    
                    protein_synth = Reaction(id=Seq_record.name[0:5]+'_protein_synth',
                                             name=Seq_record.description.split()[1].split('=')[1]+' synthesis',
                                             subsystem='protein metabolism',
                                             lower_bound= -INF,
                                             upper_bound=  INF)
                    
                    model.add_metabolites([protein])
                    model.add_reaction(protein_synth)
                    
                    stoich = {translate_1to3[k]+'_tRNA_c':-v for k,v in aa_count.items()}
                    stoich2 = {atp_c.id: -(len(str(Seq_record.seq))),
                              pi_c.id:  (len(str(Seq_record.seq))),
                              adp_c.id:  (len(str(Seq_record.seq))),
                              tRNA.id:  (len(str(Seq_record.seq))),
                              protein.id:  1}
                    
                    stoich.update(stoich2)
                    
                    protein_synth.add_metabolites(stoich)
          
                    prot_metab_rxns.append(protein_synth.id)
                    added_mets.append(protein)
                              
          print('4. Adding muscle fibers synthesis pathways...')
          
          actin = model.metabolites.ACTS__protein_c
          myosinHC1 = model.metabolites.MYH1__protein_c
          myosinHC2a = model.metabolites.MYH2__protein_c
          myosinHC2b = model.metabolites.MYH4__protein_c
          myosinLC2 = model.metabolites.MLRS__protein_c
          myosinLC1 = model.metabolites.MYL1__protein_c
          myosinK = model.metabolites.MYLK2_protein_c
          tropomyosin1 = model.metabolites.TPM1__protein_c
          tropomyosin2 = model.metabolites.TPM4__protein_c
          troponinC1 = model.metabolites.TNNC1_protein_c
          troponinC2 = model.metabolites.TNNC2_protein_c
          troponinI1 = model.metabolites.TNNI1_protein_c
          troponinI2 = model.metabolites.TNNI2_protein_c
          troponinT1 = model.metabolites.TNNT1_protein_c
          troponinT2 = model.metabolites.TNNT3_protein_c
               
          # Myosin Type 1 muscle fiber : 2 myosinHC1 + 2 myosinK + 2 myosinLC1 -> 1 myo_fiber_1
               
          myo_fiber_1 = Metabolite(id='myo_fiber_1_c',
                                  formula= '',
                                  name='Myosin fiber Type I',
                                  compartment = 'c')
         
          myo_fiber_1_synth = Reaction(id='myo_fiber_1_synth',
                                      name='Myosin fiber Type 1 synthesis',
                                      subsystem = 'protein metabolism',
                                      lower_bound = -INF,
                                      upper_bound =  INF)
         
          myo_fiber_1_synth.add_metabolites({
                   myosinHC1: -2,
                   myosinK: -2,
                   myosinLC1:-2,
                   myo_fiber_1: 1})
         
          model.add_reaction(myo_fiber_1_synth)
          
          prot_metab_rxns.append(myo_fiber_1_synth.id)
          added_mets.append(myo_fiber_1)
         
          # Myosin Type 2a muscle fiber: 2 myosinHC2a + 2 myosinK + 2 myosinLC2 -> 1 myo_fiber_2a
          
          myo_fiber_2a = Metabolite(id='myo_fiber_2a_c',
                                    formula= '',
                                    name='Myosin fiber Type IIa',
                                    compartment = 'c')
         
          myo_fiber_2a_synth = Reaction(id='myo_fiber_2a_synth',
                                        name='Myosin fiber Type 2a synthesis',
                                        subsystem = 'protein metabolism',
                                        lower_bound = -INF,
                                        upper_bound =  INF)
         
          myo_fiber_2a_synth.add_metabolites({
                   myosinHC2a: -2,
                   myosinK: -2,
                   myosinLC2:-2,
                   myo_fiber_2a: 1})
         
          model.add_reaction(myo_fiber_2a_synth)
          
          prot_metab_rxns.append(myo_fiber_2a_synth.id)
          added_mets.append(myo_fiber_2a)
              
         # Myosin Type 2b muscle fiber:  2 myosinHC2b + 2 myosinK + 2 myosinLC2 -> 1 myo_fiber_2b
          
         
          
          myo_fiber_2b = Metabolite(id='myo_fiber_2b_c',
                                    formula= '',
                                    name='Myosin fiber Type IIb',
                                    compartment = 'c')
         
          myo_fiber_2b_synth = Reaction(id='myo_fiber_2b_synth',
                                        name='Myosin fiber Type 2b synthesis',
                                        subsystem = 'protein metabolism',
                                        lower_bound = -INF,
                                        upper_bound =  INF)
         
          myo_fiber_2b_synth.add_metabolites({
                    myosinHC2b: -2,
                    myosinK: -2,
                    myosinLC2:-2,
                    myo_fiber_2b: 1})
         
          model.add_reaction(myo_fiber_2b_synth)
          
          prot_metab_rxns.append(myo_fiber_2b_synth.id)
          added_mets.append(myo_fiber_2b)
         
         # Myosin Type 2x muscle fiber : 2 myosinHC1 + 2 myosinK + 2 myosinLC2 -> 1 myo_fiber_2x
          
         
          myo_fiber_2x = Metabolite(id='myo_fiber_2x_c',
                                    formula= '',
                                    name='Myosin fiber Type IIx',
                                    compartment = 'c')
         
          myo_fiber_2x_synth = Reaction(id='myo_fiber_2x_synth',
                                        name='Myosin fiber Type 2x synthesis',
                                        subsystem = 'protein metabolism',
                                        lower_bound = -INF,
                                        upper_bound =  INF)
         
          myo_fiber_2x_synth.add_metabolites({
                    myosinHC1: -2,
                    myosinK: -2,
                    myosinLC2:-2,
                    myo_fiber_2x: 1})
         
          model.add_reaction(myo_fiber_2x_synth)
          
          prot_metab_rxns.append(myo_fiber_2x_synth.id)
          added_mets.append(myo_fiber_2x)
             
          # Tropomyosin Type 1 complex: 2 tropomyosin1 ->  1 tropo_myo_fiber_1
             
          tropo_myo_fiber_1 = Metabolite(id="tropo_myo_fiber_1_c",
                                          formula='',
                                          name="Tropomyosin Type 1 complex",
                                          compartment= 'c')
           
          tropo_myo_fiber_1_synth = Reaction(id="tropo_myo_fiber_1_synth",
                                              name="Troponin type I complex synthesis",
                                              subsystem='protein metabolism',
                                              upper_bound=  INF,
                                              lower_bound= -INF)
           
          tropo_myo_fiber_1_synth.add_metabolites({
                     tropomyosin1: -2,
                     tropo_myo_fiber_1: 1})
                    
          model.add_reaction(tropo_myo_fiber_1_synth)    
         
          prot_metab_rxns.append(tropo_myo_fiber_1_synth.id)
          added_mets.append(tropo_myo_fiber_1)
          
         # Tropomyosin Type 2 complex: 2 tropomyosin2 -> 1 tr_myo_fiber_2
          
          tropo_myo_fiber_2 = Metabolite(id="tropo_myo_fiber_2_c",
                                          formula='',
                                          name="Tropomyosin Type 2 complex",
                                          compartment= 'c')
           
          tropo_myo_fiber_2_synth = Reaction(id="tropo_myo_fiber_2_synth",
                                              name="Troponin type II complex synthesis",
                                              subsystem='protein metabolism',
                                              upper_bound=  INF,
                                              lower_bound= -INF)
           
          tropo_myo_fiber_2_synth.add_metabolites({
                     tropomyosin2: -2,
                     tropo_myo_fiber_2: 1})
                    
          model.add_reaction(tropo_myo_fiber_2_synth)
          
          prot_metab_rxns.append(tropo_myo_fiber_2_synth.id)
          added_mets.append(tropo_myo_fiber_2)
          
         # Troponin complex Type 1: 1 troponinC1 + 1 troponinI1 + 1 troponinT1 -> 1 tropo_complex_1
          tropo_complex_1= Metabolite(id="tropo_complex_1_c",
                                          formula='',
                                          name="Troponin Type 1 complex",
                                          compartment= 'c')
           
          troponin_1_synth = Reaction(id="troponin_1_synth",
                                      name="Troponin I complex synthesis", 
                                      subsystem='protein metabolism',
                                      upper_bound=  INF,
                                      lower_bound= -INF)
           
          troponin_1_synth.add_metabolites({
                    troponinC1: -1,
                    troponinI1: -1,
                    troponinT1: -1,
                    tropo_complex_1:1})
                    
          model.add_reaction(troponin_1_synth)
          
          prot_metab_rxns.append(troponin_1_synth.id)
          added_mets.append(tropo_complex_1)
     
         # Troponin complex Type 2: 1 troponinC2 + 1 troponinI2 + 1 troponinT2 -> 1 tropo_complex_2
         
         
          tropo_complex_2= Metabolite(id="tropo_complex_2_c",
                                          formula='',
                                          name="Troponin Type 2 complex",
                                          compartment= 'c')
           
          troponin_2_synth = Reaction(id="troponin_2_synth",
                                      name="Troponin II complex synthesis", 
                                      subsystem='protein metabolism',
                                      upper_bound=  INF,
                                      lower_bound= -INF)
           
          troponin_2_synth.add_metabolites({
                    troponinC2: -1,
                    troponinI2: -1,
                    troponinT2: -1,
                    tropo_complex_2:1})
                    
          model.add_reaction(troponin_2_synth)
          
          prot_metab_rxns.append(troponin_2_synth.id)
          added_mets.append(tropo_complex_2)
          
         # Contractile unit type 1 : 7 actin + 7 myo_fiber_1 + 1 tropo_myo_fiber_1 + 1 tropo_complex_1 -> 1 contr_unit_1
          
          contr_unit_1 = Metabolite(id='contr_unit_1_c',
                                   formula = '',
                                   name='myofiber contractile unit type I',
                                   compartment='c')
         
          contr_unit_1_synth = Reaction(id='contr_unit_I_synth',
                                       name='Synthesis of myofiber contractile unit type I',
                                       subsystem= 'protein metabolism',
                                       upper_bound=  INF,
                                       lower_bound= -INF)
         
          contr_unit_1_synth.add_metabolites({
                    actin:-7,
                    myo_fiber_1: -7,
                    tropo_myo_fiber_1:-1,
                    tropo_complex_1:-1,
                    contr_unit_1:1})
                    
          model.add_reaction(contr_unit_1_synth)
          
          ###prot_metab_rxns.append(contr_unit_1_synth.id)
          added_mets.append(contr_unit_1)
          
         # Contractile unit type 2a: 7 actin + 7 myo_fiber_2a + 1 tropo_myo_fiber_2 + 1 tropo_complex_2 -> 1 contr_unit_2a
           
          contr_unit_2a = Metabolite(id='contr_unit_2a_c',
                                   formula = '',
                                   name='myofiber contractile unit type IIa',
                                   compartment='c')
         
          contr_unit_2a_synth = Reaction(id='contr_unit_IIa_synth',
                                       name='Synthesis of myofiber contractile unit type IIa',
                                       subsystem= 'protein metabolism',
                                       upper_bound=  INF,
                                       lower_bound= -INF)
         
          contr_unit_2a_synth.add_metabolites({
                    actin:-7,
                    myo_fiber_2a: -7,
                    tropo_myo_fiber_2:-1,
                    tropo_complex_2:-1,
                    contr_unit_2a:1})
                    
          model.add_reaction(contr_unit_2a_synth)
          
          ###prot_metab_rxns.append(contr_unit_2a_synth.id)
          added_mets.append(contr_unit_2a)
          
         # Contractile unit type 2b: 7 actin + 7 myo_fiber_2b + 1 tropo_myo_fiber_2 + 1 tropo_complex_2 -> 1 contr_unit_2b
         
          contr_unit_2b = Metabolite(id='contr_unit_2b_c',
                                   formula = '',
                                   name='myofiber contractile unit type IIb',
                                   compartment='c')
         
          contr_unit_2b_synth = Reaction(id='contr_unit_IIb_synth',
                                       name='Synthesis of myofiber contractile unit type IIb',
                                       subsystem= 'protein metabolism',
                                       upper_bound=  INF,
                                       lower_bound= -INF)
         
          contr_unit_2b_synth.add_metabolites({
                    actin:-7,
                    myo_fiber_2b: -7,
                    tropo_myo_fiber_2:-1,
                    tropo_complex_2:-1,
                    contr_unit_2b:1})
                    
          model.add_reaction(contr_unit_2b_synth)
          
          ###prot_metab_rxns.append(contr_unit_2b_synth.id)
          added_mets.append(contr_unit_2b)
          
         # Contractile unit type 2x: 7 actin + 7 myo_fiber_2x + 1 tropo_myo_fiber_2 + 1 tropo_complex_2 -> 1 contr_unit_2x
          
          contr_unit_2x = Metabolite(id='contr_unit_2x_c',
                                   formula = '',
                                   name='myofiber contractile unit type IIx',
                                   compartment='c')
         
          contr_unit_2x_synth = Reaction(id='contr_unit_IIx_synth',
                                       name='Synthesis of myofiber contractile unit type IIx',
                                       subsystem= 'protein metabolism',
                                       upper_bound=  INF,
                                       lower_bound= -INF)
         
          contr_unit_2x_synth.add_metabolites({
                    actin:-7,
                    myo_fiber_2x: -7,
                    tropo_myo_fiber_2:-1,
                    tropo_complex_2:-1,
                    contr_unit_2x:1})
                    
          model.add_reaction(contr_unit_2x_synth)
          
          
          ###prot_metab_rxns.append(contr_unit_2x_synth.id)
          added_mets.append(contr_unit_2x)
          ''' 
          print('5. Adding contractile units accumulation... (sink reactions)')
    
          # Contractile unit 1 sink: contr_unit_1 ->
          
          contr_unit_1_storage = Reaction(id='contr_unit_1_storage',
                                          name='contractile unit type 1 storage (sink)',
                                          subsystem='protein metabolism_',
                                          upper_bound= INF,
                                          lower_bound=-INF)
          
          contr_unit_1_storage.add_metabolites({
                    contr_unit_1: -1
                    })
                    
          model.add_reaction(contr_unit_1_storage)     
          
          prot_metab_rxns.append(contr_unit_1_storage.id)
          
           # Contractile unit 2a sink:  contr_unit_2a ->
           
          contr_unit_2a_storage = Reaction(id='contr_unit_2a_storage',
                                          name='contractile unit type 2a storage (sink)',
                                          subsystem='protein metabolism_',
                                          upper_bound= INF,
                                          lower_bound=-INF)
          
          contr_unit_2a_storage.add_metabolites({
                    contr_unit_2a: -1
                    })
                    
          model.add_reaction(contr_unit_2a_storage)
          
          prot_metab_rxns.append(contr_unit_2a_storage.id)
         
           # Contractile unit 2b sink: contr_unit_2b ->
          
          contr_unit_2b_storage = Reaction(id='contr_unit_2b_storage',
                                          name='contractile unit type 2b storage (sink)',
                                          subsystem='protein metabolism_',
                                          upper_bound= INF,
                                          lower_bound=-INF)
          
          contr_unit_2b_storage.add_metabolites({
                    contr_unit_2b: -1
                    })
                    
          model.add_reaction(contr_unit_2b_storage)
          
          prot_metab_rxns.append(contr_unit_2b_storage.id)
          
           # Contractile unit 2x sink: contr_unit_2x ->
          
          contr_unit_2x_storage = Reaction(id='contr_unit_2x_storage',
                                          name='contractile unit type 2x storage (sink)',
                                          subsystem='protein metabolism_',
                                          upper_bound= INF,
                                          lower_bound=-INF)
          
          contr_unit_2x_storage.add_metabolites({
                    contr_unit_2x: -1
                    })
                    
          model.add_reaction(contr_unit_2x_storage)
          
          prot_metab_rxns.append(contr_unit_2x_storage.id)
          '''
          
          print('5. Add contractile fibers accumulation (storage)*')
          
          myofibers_storage = Reaction(id='myofibers_storage',
                                          name='contractile units storage (sink)',
                                          subsystem='protein metabolism_',
                                          upper_bound= INF,
                                          lower_bound=-INF)
          
          myofibers_storage.add_metabolites({
                  contr_unit_1: -1,
                  contr_unit_2a: -1,
                  contr_unit_2b: -1,
                  contr_unit_2x: -1
                  })
          
          model.add_reaction(myofibers_storage)
          prot_metab_rxns.append(myofibers_storage.id)
          
          print('Adding ATP_expenditure reaction...')
         
          pi = model.metabolites.pi_c
          atp = model.metabolites.atp_c
          adp = model.metabolites.adp_c
                   
          ATP_expenditure = Reaction(id= 'ATP_expenditure',
                                     name= 'Total energy expenditure',
                                     subsystem = 'energy metabolism',
                                     upper_bound = INF,
                                     lower_bound = -INF)
                                     
          ATP_expenditure.add_metabolites({
                    atp: -1,
                    adp: 1,
                    pi: 1})

          model.add_reaction(ATP_expenditure)
          
          print('----------------------------------------')
          print(len(prot_metab_rxns)+4, "reactions have been added to the model")
          print(len(added_mets), "metabolites have been added to the model")
          print( 'All done!')
          print('----------------------------------------')
     
          return MW , prot_metab_rxns