1
+
1
2
from __future__ import with_statement , print_function
2
3
#cobra.flux_analysis.double_deletion.py
3
4
#runs flux variablity analysis on a Model object.
@@ -28,7 +29,7 @@ def moma(*args, **kwargs):
28
29
29
30
def double_reaction_deletion_fba (cobra_model , reaction_list1 = None ,
30
31
reaction_list2 = None , solver = None ,
31
- n_processes = None , return_frame = True ):
32
+ number_of_processes = None , return_frame = False ):
32
33
"""setting n_processes=1 explicitly disables multiprocessing"""
33
34
if reaction_list1 is None :
34
35
reaction_indexes1 = range (len (cobra_model .reactions ))
@@ -53,27 +54,28 @@ def double_reaction_deletion_fba(cobra_model, reaction_list1=None,
53
54
results = numpy .empty ((n_results , n_results ))
54
55
results .fill (numpy .nan )
55
56
56
- if n_processes == 1 : # explicitly disable multiprocessing
57
- pool = CobraDeletionMockPool ( cobra_model , n_processes = n_processes , solver = solver )
57
+ if number_of_processes == 1 : # explicitly disable multiprocessing
58
+ PoolClass = CobraDeletionMockPool
58
59
else :
59
- pool = CobraDeletionPool (cobra_model , n_processes = n_processes , solver = solver )
60
- # submit jobs
61
-
62
- for r1_index , r2_index in product (reaction_indexes1 , reaction_indexes2 ):
63
- r1_result_index = reaction_to_result [r1_index ]
64
- r2_result_index = reaction_to_result [r2_index ]
65
- if r2_result_index >= r1_result_index : # upper triangle only
66
- pool .submit ((r1_index , r2_index ), label = (r1_result_index , r2_result_index ))
67
- # if it's a point only in the lower triangle, compute it
68
- # and put it in the upper triangle
69
- elif r1_result_index not in column_index_set or r2_result_index not in row_index_set :
70
- pool .submit ((r1_index , r2_index ), label = (r2_result_index , r1_result_index ))
71
-
72
- # get results
73
- for result in pool .receive_all ():
74
- results [result [0 ]] = result [1 ]
60
+ PoolClass = CobraDeletionPool
61
+ with PoolClass (cobra_model , n_processes = number_of_processes ,
62
+ solver = solver ) as pool :
63
+ # submit jobs
64
+
65
+ for r1_index , r2_index in product (reaction_indexes1 , reaction_indexes2 ):
66
+ r1_result_index = reaction_to_result [r1_index ]
67
+ r2_result_index = reaction_to_result [r2_index ]
68
+ if r2_result_index >= r1_result_index : # upper triangle only
69
+ pool .submit ((r1_index , r2_index ), label = (r1_result_index , r2_result_index ))
70
+ # if it's a point only in the lower triangle, compute it
71
+ # and put it in the upper triangle
72
+ elif r1_result_index not in column_index_set or r2_result_index not in row_index_set :
73
+ pool .submit ((r1_index , r2_index ), label = (r2_result_index , r1_result_index ))
74
+
75
+ # get results
76
+ for result in pool .receive_all ():
77
+ results [result [0 ]] = result [1 ]
75
78
76
- del pool
77
79
78
80
# reflect results
79
81
triu1 , triu2 = numpy .triu_indices (n_results )
@@ -92,7 +94,8 @@ def double_reaction_deletion_fba(cobra_model, reaction_list1=None,
92
94
"data" : results }
93
95
94
96
def double_gene_deletion_fba (cobra_model , gene_list1 = None , gene_list2 = None ,
95
- solver = None , n_processes = None , return_frame = True ):
97
+ solver = None , number_of_processes = None ,
98
+ return_frame = False ):
96
99
if gene_list1 is None :
97
100
gene_list1 = cobra_model .genes
98
101
else :
@@ -127,27 +130,28 @@ def double_gene_deletion_fba(cobra_model, gene_list1=None, gene_list2=None,
127
130
results = numpy .empty ((n_results , n_results ))
128
131
results .fill (numpy .nan )
129
132
130
- if n_processes == 1 : # explicitly disable multiprocessing
131
- pool = CobraDeletionMockPool ( cobra_model , n_processes = n_processes , solver = solver )
133
+ if number_of_processes == 1 : # explicitly disable multiprocessing
134
+ PoolClass = CobraDeletionMockPool
132
135
else :
133
- pool = CobraDeletionPool (cobra_model , n_processes = n_processes , solver = solver )
134
-
135
- for gene1 , gene2 in product (gene_list1 , gene_list2 ):
136
- g1_result_index = gene_id_to_result [gene1 .id ]
137
- g2_result_index = gene_id_to_result [gene2 .id ]
138
- if g2_result_index >= g1_result_index : # upper triangle only
139
- ko_reactions = find_gene_knockout_reactions (cobra_model , (gene1 , gene2 ))
140
- ko_indexes = [cobra_model .reactions .index (i ) for i in ko_reactions ]
141
- pool .submit (ko_indexes , label = (g1_result_index , g2_result_index ))
142
- # if it's a point only in the lower triangle, compute it
143
- # and put it in the upper triangle
144
- elif g1_result_index not in column_index_set or g2_result_index not in row_index_set :
145
- ko_reactions = find_gene_knockout_reactions (cobra_model , (gene1 , gene2 ))
146
- ko_indexes = [cobra_model .reactions .index (i ) for i in ko_reactions ]
147
- pool .submit (ko_indexes , label = (g2_result_index , g1_result_index ))
148
-
149
- for result in pool .receive_all ():
150
- results [result [0 ]] = result [1 ]
136
+ PoolClass = CobraDeletionPool
137
+ with PoolClass (cobra_model , n_processes = number_of_processes ,
138
+ solver = solver ) as pool :
139
+ for gene1 , gene2 in product (gene_list1 , gene_list2 ):
140
+ g1_result_index = gene_id_to_result [gene1 .id ]
141
+ g2_result_index = gene_id_to_result [gene2 .id ]
142
+ if g2_result_index >= g1_result_index : # upper triangle only
143
+ ko_reactions = find_gene_knockout_reactions (cobra_model , (gene1 , gene2 ))
144
+ ko_indexes = [cobra_model .reactions .index (i ) for i in ko_reactions ]
145
+ pool .submit (ko_indexes , label = (g1_result_index , g2_result_index ))
146
+ # if it's a point only in the lower triangle, compute it
147
+ # and put it in the upper triangle
148
+ elif g1_result_index not in column_index_set or g2_result_index not in row_index_set :
149
+ ko_reactions = find_gene_knockout_reactions (cobra_model , (gene1 , gene2 ))
150
+ ko_indexes = [cobra_model .reactions .index (i ) for i in ko_reactions ]
151
+ pool .submit (ko_indexes , label = (g2_result_index , g1_result_index ))
152
+
153
+ for result in pool .receive_all ():
154
+ results [result [0 ]] = result [1 ]
151
155
152
156
del pool
153
157
@@ -169,47 +173,58 @@ def double_gene_deletion_fba(cobra_model, gene_list1=None, gene_list2=None,
169
173
170
174
def double_deletion (cobra_model , element_list_1 = None , element_list_2 = None ,
171
175
method = 'fba' , single_deletion_growth_dict = None ,
172
- element_type = 'gene' , solver = None , error_reporting = None ,
173
- number_of_processes = 1 ):
174
- """Wrapper for double_gene_deletion and double_reaction_deletion
176
+ element_type = 'gene' , solver = None ,
177
+ number_of_processes = None ,
178
+ return_frame = False , ** kwargs ):
179
+ """Run double gene or reaction deletions
175
180
176
181
cobra_model: a cobra.Model object
177
182
178
- element_list_1: Is None or a list of elements (genes or reactions)
179
-
180
- element_list_2: Is None or a list of elements (genes or reactions)
183
+ element_list_1: None or a list of elements (genes or reactions)
181
184
182
- method: 'fba' or 'moma' to run flux balance analysis or minimization
183
- of metabolic adjustments.
185
+ element_list_2: None or a list of elements (genes or reactions)
184
186
185
- single_deletion_growth_dict: A dictionary that provides the growth
186
- rate information for single gene knock outs. This can speed up
187
- simulations because nonviable single deletion strains imply that all
188
- double deletion strains will also be nonviable.
187
+ method: 'fba' or 'moma'
188
+ Whether to compute growth rates using flux balance analysis or
189
+ minimization of metabolic adjustments.
190
+
191
+ number_of_processes: None or int
192
+ The number of processor core to use. Setting 1 explicitly disables
193
+ use of the multiprocessing library. By default, up to 4 cores will be
194
+ used if available.
189
195
190
196
element_type: 'gene' or 'reaction'
191
197
192
- solver: 'glpk', 'gurobi', or 'cplex'.
198
+ solver: 'glpk', 'cglpk', ' gurobi', 'cplex' or None
193
199
194
- error_reporting: None or True
200
+ return_frame: bool
201
+ If True, format data as a pandas Dataframe
195
202
196
203
Returns a dictionary of the elements in the x dimension (x), the y
197
204
dimension (y), and the growth simulation data (data).
198
205
199
206
"""
207
+
208
+ if "error_reporting" in kwargs :
209
+ warn ("error_reporting option removed" )
210
+ kwargs .pop ("error_reporting" )
211
+ if "single_deletion_growth_dict" in kwargs :
212
+ warn ("single_deletion_growth_dict option removed" )
213
+ kwargs .pop ("single_deletion_growth_dict" )
214
+
200
215
if method == "fba" :
201
216
if element_type == "gene" :
202
217
return double_gene_deletion_fba (cobra_model ,
203
218
gene_list1 = element_list_1 ,
204
219
gene_list2 = element_list_2 , solver = solver ,
205
- return_frame = False ,
206
- n_processes = number_of_processes )
220
+ return_frame = return_frame ,
221
+ number_of_processes = number_of_processes )
207
222
elif element_type == "reaction" :
208
223
return double_reaction_deletion_fba (cobra_model ,
209
224
reaction_list1 = element_list_1 ,
210
225
reaction_list2 = element_list_2 , solver = solver ,
211
- return_frame = False ,
212
- n_processes = number_of_processes )
226
+ return_frame = return_frame ,
227
+ number_of_processes = number_of_processes )
213
228
else :
214
229
raise ValueError ("element_type %s not gene or reaction" % element_type )
215
230
0 commit comments