Mercurial > repos > tduigou > get_sbml_model
comparison get_infos.py @ 8:768ed7cc0978 draft
planemo upload for repository https://github.com/brsynth/synbiocad-galaxy-wrappers commit aa5a9ac47997d9c1718b9c7eaff1b83c63ac1d58
author | tduigou |
---|---|
date | Fri, 29 Sep 2023 09:03:09 +0000 |
parents | 8dc4d3964ab5 |
children | 6a2871e89352 |
comparison
equal
deleted
inserted
replaced
7:8dc4d3964ab5 | 8:768ed7cc0978 |
---|---|
3 readSBMLFromFile | 3 readSBMLFromFile |
4 ) | 4 ) |
5 from requests import get as r_get | 5 from requests import get as r_get |
6 | 6 |
7 | 7 |
8 def entry_point(): | 8 def get_biomass_rxn(sbml_doc): |
9 ''' | |
10 Returns the biomass reaction of the model | |
11 | |
12 Parameters | |
13 ---------- | |
14 sbml_doc: libsbml.SBMLDocument | |
15 SBML model | |
16 | |
17 Returns | |
18 ------- | |
19 biomass_rxn: libsbml.Reaction | |
20 Biomass reaction | |
21 ''' | |
22 reactions = sbml_doc.getModel().getListOfReactions() | |
23 # Search for 'biomass' keyword in reaction name | |
24 for rxn in reactions: | |
25 if 'biomass' in rxn.getName().lower(): | |
26 return rxn | |
27 # Search for 'biomass' keyword in products | |
28 # AND not in reactants | |
29 for rxn in reactions: | |
30 in_reactants = False | |
31 for reac in rxn.getListOfReactants(): | |
32 if 'biomass' in reac.getSpecies().lower(): | |
33 in_reactants = True | |
34 break | |
35 if not in_reactants: | |
36 for prod in rxn.getListOfProducts(): | |
37 if 'biomass' in prod.getSpecies().lower(): | |
38 return rxn | |
39 return None | |
40 | |
41 | |
42 def get_taxon_id(hostid): | |
43 ''' | |
44 Returns the taxonomy ID of the host organism | |
45 | |
46 Parameters | |
47 ---------- | |
48 hostid: str | |
49 Extended name of the host organism | |
50 | |
51 Returns | |
52 ------- | |
53 taxid: str | |
54 Taxonomy ID of the host organism | |
55 ''' | |
56 taxid = get_taxon_id(hostid) | |
57 hostname = '' | |
58 # Extended Name | |
59 server = 'http://bigg.ucsd.edu/api/v2/models/' | |
60 ext = hostid | |
61 r = r_get(server+ext, headers={ "Content-Type" : "application/json"}) | |
62 if not r.ok: | |
63 print(f"Warning: unable to retrieve host name for id {hostid}") | |
64 else: | |
65 try: | |
66 hostname = r.json()["organism"] | |
67 except KeyError: | |
68 print(f"Warning: unable to retrieve host name for id {hostid}") | |
69 if not hostname: | |
70 taxid = '' | |
71 else: | |
72 # TAXON ID | |
73 server = 'https://rest.ensembl.org' | |
74 ext = f'/taxonomy/id/{hostname}?' | |
75 r = r_get(server+ext, headers={ "Content-Type" : "application/json"}) | |
76 if not r.ok: | |
77 print(f"Warning: unable to retrieve taxonomy ID for host organism {hostname}") | |
78 else: | |
79 try: | |
80 taxid = r.json()["id"] | |
81 except KeyError: | |
82 print(f"Warning: unable to retrieve taxonomy ID for host organism {hostname}") | |
83 taxid = '' | |
84 return taxid | |
85 | |
86 | |
87 def args(): | |
9 parser = ArgumentParser('Returns cell informations') | 88 parser = ArgumentParser('Returns cell informations') |
10 parser.add_argument( | 89 parser.add_argument( |
11 'infile', | 90 'infile', |
12 type=str, | 91 type=str, |
13 help='SBML input file (xml)' | 92 help='SBML input file (xml)' |
27 '--biomass', | 106 '--biomass', |
28 type=str, | 107 type=str, |
29 help='Path to store biomass reaction ID' | 108 help='Path to store biomass reaction ID' |
30 ) | 109 ) |
31 parser.add_argument( | 110 parser.add_argument( |
111 '--biomass-id', | |
112 type=str, | |
113 help='ID of biomass reaction' | |
114 ) | |
115 parser.add_argument( | |
32 '--hostid', | 116 '--hostid', |
33 type=str, | 117 type=str, |
34 help='Extended name of the host organism' | 118 help='Extended name of the host organism' |
35 ) | 119 ) |
36 parser.add_argument( | 120 parser.add_argument( |
37 '--taxid', | 121 '--taxid', |
38 type=str, | 122 type=str, |
39 help='Path to store host taxonomy ID' | 123 help='Path to store host taxonomy ID' |
40 ) | 124 ) |
41 params = parser.parse_args() | 125 params = parser.parse_args() |
126 return params | |
127 | |
128 | |
129 def entry_point(): | |
130 | |
131 params = args() | |
42 | 132 |
43 sbml_doc = readSBMLFromFile(params.infile) | 133 sbml_doc = readSBMLFromFile(params.infile) |
44 | 134 |
135 compartments = sbml_doc.getModel().getListOfCompartments() | |
136 comp_str = '' | |
137 for comp in compartments: | |
138 comp_str += f'{comp.getId()}\t{comp.getName()}\n' | |
45 if params.comp: | 139 if params.comp: |
46 compartments = sbml_doc.getModel().getListOfCompartments() | |
47 with open(params.comp, 'w') as f: | 140 with open(params.comp, 'w') as f: |
48 f.write('#ID\tNAME\n') | 141 f.write('#ID\tNAME\n') |
49 for comp in compartments: | 142 f.write(comp_str) |
50 f.write(f'{comp.getId()}\t{comp.getName()}\n') | 143 else: |
144 print('Compartments:') | |
145 for comp in compartments: | |
146 print(f'{comp.getId()}\t{comp.getName()}'.replace('\n', ' | ')) | |
51 | 147 |
148 if params.biomass_id: | |
149 biomass_rxn = sbml_doc.getModel().getReaction(params.biomass_id) | |
150 else: | |
151 biomass_rxn = get_biomass_rxn(sbml_doc) | |
152 if not biomass_rxn: | |
153 print('Warning: unable to retrieve biomass reaction') | |
154 biomass_id = '' | |
155 else: | |
156 biomass_id = biomass_rxn.getId() | |
52 if params.biomass: | 157 if params.biomass: |
53 reactions = sbml_doc.getModel().getListOfReactions() | |
54 with open(params.biomass, 'w') as f: | 158 with open(params.biomass, 'w') as f: |
55 f.write('#ID\n') | 159 f.write('#ID\n') |
56 for rxn in reactions: | 160 f.write(f'{biomass_id}\n') |
57 if 'biomass' in rxn.getId().lower(): | 161 else: |
58 f.write(f'{rxn.getId()}\n') | 162 print(f'Biomass reaction ID: {biomass_id}') |
163 | |
164 # Model from BiGG | |
165 if params.bigg: | |
166 taxid = get_taxon_id(params.hostid) | |
167 # Model from user | |
168 else: | |
169 taxid = params.hostid | |
59 | 170 |
60 if params.taxid: | 171 if params.taxid: |
61 hostname = '' | |
62 | |
63 # Model from BiGG | |
64 if params.bigg: | |
65 # Extended Name | |
66 server = 'http://bigg.ucsd.edu/api/v2/models/' | |
67 ext = params.hostid | |
68 r = r_get(server+ext, headers={ "Content-Type" : "application/json"}) | |
69 if not r.ok: | |
70 print(f"Warning: unable to retrieve host name for id {params.hostid}") | |
71 else: | |
72 try: | |
73 hostname = r.json()["organism"] | |
74 except KeyError: | |
75 print(f"Warning: unable to retrieve host name for id {params.hostid}") | |
76 if not hostname: | |
77 taxid = '' | |
78 else: | |
79 # TAXON ID | |
80 server = 'https://rest.ensembl.org' | |
81 ext = f'/taxonomy/id/{hostname}?' | |
82 r = r_get(server+ext, headers={ "Content-Type" : "application/json"}) | |
83 if not r.ok: | |
84 print(f"Warning: unable to retrieve taxonomy ID for host organism {hostname}") | |
85 else: | |
86 try: | |
87 taxid = r.json()["id"] | |
88 except KeyError: | |
89 print(f"Warning: unable to retrieve taxonomy ID for host organism {hostname}") | |
90 taxid = '' | |
91 | |
92 # Model from user | |
93 else: | |
94 taxid = params.hostid | |
95 | |
96 with open(params.taxid, 'w') as f: | 172 with open(params.taxid, 'w') as f: |
97 f.write('#ID\n') | 173 f.write('#ID\n') |
98 f.write(f'{taxid}\n') | 174 f.write(f'{taxid}\n') |
175 else: | |
176 print(f'Taxonomy ID: {taxid}') | |
99 | 177 |
100 | 178 |
101 if __name__ == "__main__": | 179 if __name__ == "__main__": |
102 entry_point() | 180 entry_point() |