comparison COBRAxy/flux_simulation.py @ 147:3fca9b568faf draft

Uploaded
author bimib
date Wed, 06 Nov 2024 13:57:24 +0000
parents accda943dfb9
children ebd2065dbdc2
comparison
equal deleted inserted replaced
146:88cf4543e210 147:3fca9b568faf
9 from joblib import Parallel, delayed, cpu_count 9 from joblib import Parallel, delayed, cpu_count
10 from cobra.sampling import OptGPSampler 10 from cobra.sampling import OptGPSampler
11 import sys 11 import sys
12 12
13 ################################# process args ############################### 13 ################################# process args ###############################
14 def process_args(args :List[str]) -> argparse.Namespace: 14 def process_args(args :List[str] = None) -> argparse.Namespace:
15 """ 15 """
16 Processes command-line arguments. 16 Processes command-line arguments.
17 17
18 Args: 18 Args:
19 args (list): List of command-line arguments. 19 args (list): List of command-line arguments.
86 parser.add_argument('-ota', '--output_type_analysis', 86 parser.add_argument('-ota', '--output_type_analysis',
87 type = str, 87 type = str,
88 required = False, 88 required = False,
89 help = 'output type analysis') 89 help = 'output type analysis')
90 90
91 ARGS = parser.parse_args() 91 parser.add_argument(
92 '-idop', '--output_path',
93 type = str,
94 default='result',
95 help = 'output path for maps')
96
97 ARGS = parser.parse_args(args)
92 return ARGS 98 return ARGS
93 99
94 ########################### warning ########################################### 100 ########################### warning ###########################################
95 def warning(s :str) -> None: 101 def warning(s :str) -> None:
96 """ 102 """
107 print(s) 113 print(s)
108 114
109 115
110 def write_to_file(dataset: pd.DataFrame, name: str, keep_index:bool=False)->None: 116 def write_to_file(dataset: pd.DataFrame, name: str, keep_index:bool=False)->None:
111 dataset.index.name = 'Reactions' 117 dataset.index.name = 'Reactions'
112 dataset.to_csv(ARGS.output_folder + name + ".csv", sep = '\t', index = keep_index) 118 dataset.to_csv(ARGS.output_path + name + ".csv", sep = '\t', index = keep_index)
113 119
114 ############################ dataset input #################################### 120 ############################ dataset input ####################################
115 def read_dataset(data :str, name :str) -> pd.DataFrame: 121 def read_dataset(data :str, name :str) -> pd.DataFrame:
116 """ 122 """
117 Read a dataset from a CSV file and return it as a pandas DataFrame. 123 Read a dataset from a CSV file and return it as a pandas DataFrame.
154 """ 160 """
155 161
156 for i in range(0, n_batches): 162 for i in range(0, n_batches):
157 optgp = OptGPSampler(model, thinning, seed) 163 optgp = OptGPSampler(model, thinning, seed)
158 samples = optgp.sample(n_samples) 164 samples = optgp.sample(n_samples)
159 samples.to_csv(ARGS.output_folder + model_name + '_'+ str(i)+'_OPTGP.csv', index=False) 165 samples.to_csv(ARGS.output_path + model_name + '_'+ str(i)+'_OPTGP.csv', index=False)
160 seed+=1 166 seed+=1
161 samplesTotal = pd.DataFrame() 167 samplesTotal = pd.DataFrame()
162 for i in range(0, n_batches): 168 for i in range(0, n_batches):
163 samples_batch = pd.read_csv(ARGS.output_folder + model_name + '_'+ str(i)+'_OPTGP.csv') 169 samples_batch = pd.read_csv(ARGS.output_path + model_name + '_'+ str(i)+'_OPTGP.csv')
164 samplesTotal = pd.concat([samplesTotal, samples_batch], ignore_index = True) 170 samplesTotal = pd.concat([samplesTotal, samples_batch], ignore_index = True)
165 171
166 write_to_file(samplesTotal.T, model_name, True) 172 write_to_file(samplesTotal.T, model_name, True)
167 173
168 for i in range(0, n_batches): 174 for i in range(0, n_batches):
169 os.remove(ARGS.output_folder + model_name + '_'+ str(i)+'_OPTGP.csv') 175 os.remove(ARGS.output_path + model_name + '_'+ str(i)+'_OPTGP.csv')
170 pass 176 pass
171 177
172 178
173 def CBS_sampler(model:cobra.Model, model_name:str, n_samples:int=1000, n_batches:int=1, seed:int=0)-> None: 179 def CBS_sampler(model:cobra.Model, model_name:str, n_samples:int=1000, n_batches:int=1, seed:int=0)-> None:
174 """ 180 """
197 utils.logWarning( 203 utils.logWarning(
198 "Warning: GLPK solver has failed for " + model_name + ". Trying with COBRA interface. Error:" + str(e), 204 "Warning: GLPK solver has failed for " + model_name + ". Trying with COBRA interface. Error:" + str(e),
199 ARGS.out_log) 205 ARGS.out_log)
200 CBS_backend.randomObjectiveFunctionSampling_cobrapy(model, n_samples, df_coefficients.iloc[:,i*n_samples:(i+1)*n_samples], 206 CBS_backend.randomObjectiveFunctionSampling_cobrapy(model, n_samples, df_coefficients.iloc[:,i*n_samples:(i+1)*n_samples],
201 samples) 207 samples)
202 utils.logWarning(ARGS.output_folder + model_name + '_'+ str(i)+'_CBS.csv', ARGS.out_log) 208 utils.logWarning(ARGS.output_path + model_name + '_'+ str(i)+'_CBS.csv', ARGS.out_log)
203 samples.to_csv(ARGS.output_folder + model_name + '_'+ str(i)+'_CBS.csv', index=False) 209 samples.to_csv(ARGS.output_path + model_name + '_'+ str(i)+'_CBS.csv', index=False)
204 210
205 samplesTotal = pd.DataFrame() 211 samplesTotal = pd.DataFrame()
206 for i in range(0, n_batches): 212 for i in range(0, n_batches):
207 samples_batch = pd.read_csv(ARGS.output_folder + model_name + '_'+ str(i)+'_CBS.csv') 213 samples_batch = pd.read_csv(ARGS.output_path + model_name + '_'+ str(i)+'_CBS.csv')
208 samplesTotal = pd.concat([samplesTotal, samples_batch], ignore_index = True) 214 samplesTotal = pd.concat([samplesTotal, samples_batch], ignore_index = True)
209 215
210 write_to_file(samplesTotal.T, model_name, True) 216 write_to_file(samplesTotal.T, model_name, True)
211 217
212 for i in range(0, n_batches): 218 for i in range(0, n_batches):
213 os.remove(ARGS.output_folder + model_name + '_'+ str(i)+'_CBS.csv') 219 os.remove(ARGS.output_path + model_name + '_'+ str(i)+'_CBS.csv')
214 pass 220 pass
215 221
216 222
217 def model_sampler(model_input_original:cobra.Model, bounds_path:str, cell_name:str)-> List[pd.DataFrame]: 223 def model_sampler(model_input_original:cobra.Model, bounds_path:str, cell_name:str)-> List[pd.DataFrame]:
218 """ 224 """
242 CBS_sampler(model_input, name, ARGS.n_samples, ARGS.n_batches, ARGS.seed) 248 CBS_sampler(model_input, name, ARGS.n_samples, ARGS.n_batches, ARGS.seed)
243 249
244 df_mean, df_median, df_quantiles = fluxes_statistics(name, ARGS.output_types) 250 df_mean, df_median, df_quantiles = fluxes_statistics(name, ARGS.output_types)
245 251
246 if("fluxes" not in ARGS.output_types): 252 if("fluxes" not in ARGS.output_types):
247 os.remove(ARGS.output_folder + name + '.csv') 253 os.remove(ARGS.output_path + name + '.csv')
248 254
249 returnList = [] 255 returnList = []
250 returnList.append(df_mean) 256 returnList.append(df_mean)
251 returnList.append(df_median) 257 returnList.append(df_median)
252 returnList.append(df_quantiles) 258 returnList.append(df_quantiles)
276 282
277 df_mean = pd.DataFrame() 283 df_mean = pd.DataFrame()
278 df_median= pd.DataFrame() 284 df_median= pd.DataFrame()
279 df_quantiles= pd.DataFrame() 285 df_quantiles= pd.DataFrame()
280 286
281 df_samples = pd.read_csv(ARGS.output_folder + model_name + '.csv', sep = '\t', index_col = 0).T 287 df_samples = pd.read_csv(ARGS.output_path + model_name + '.csv', sep = '\t', index_col = 0).T
282 df_samples = df_samples.round(8) 288 df_samples = df_samples.round(8)
283 289
284 for output_type in output_types: 290 for output_type in output_types:
285 if(output_type == "mean"): 291 if(output_type == "mean"):
286 df_mean = df_samples.mean() 292 df_mean = df_samples.mean()
361 df_sensitivity.loc[model_name] = newRow 367 df_sensitivity.loc[model_name] = newRow
362 df_sensitivity = df_sensitivity.astype(float).round(6) 368 df_sensitivity = df_sensitivity.astype(float).round(6)
363 return df_pFBA, df_FVA, df_sensitivity 369 return df_pFBA, df_FVA, df_sensitivity
364 370
365 ############################# main ########################################### 371 ############################# main ###########################################
366 def main() -> None: 372 def main(args :List[str] = None) -> None:
367 """ 373 """
368 Initializes everything and sets the program in motion based on the fronted input arguments. 374 Initializes everything and sets the program in motion based on the fronted input arguments.
369 375
370 Returns: 376 Returns:
371 None 377 None
374 os.makedirs('flux_simulation/') 380 os.makedirs('flux_simulation/')
375 381
376 num_processors = cpu_count() 382 num_processors = cpu_count()
377 383
378 global ARGS 384 global ARGS
379 ARGS = process_args(sys.argv) 385 ARGS = process_args(args)
380 386
381 ARGS.output_folder = 'flux_simulation/'
382
383 387
384 model_type :utils.Model = ARGS.model_selector 388 model_type :utils.Model = ARGS.model_selector
385 if model_type is utils.Model.Custom: 389 if model_type is utils.Model.Custom:
386 model = model_type.getCOBRAmodel(customPath = utils.FilePath.fromStrPath(ARGS.model), customExtension = utils.FilePath.fromStrPath(ARGS.model_name).ext) 390 model = model_type.getCOBRAmodel(customPath = utils.FilePath.fromStrPath(ARGS.model), customExtension = utils.FilePath.fromStrPath(ARGS.model_name).ext)
387 else: 391 else: