comparison COBRAxy/utils/model_utils.py @ 505:96f512dff490 draft

Uploaded
author francesco_lapi
date Wed, 01 Oct 2025 11:15:00 +0000
parents 8dd07e59f631
children ffc234ec80db
comparison
equal deleted inserted replaced
504:ef3df9b697b1 505:96f512dff490
267 267
268 pathway_data.append(row) 268 pathway_data.append(row)
269 269
270 return pd.DataFrame(pathway_data) 270 return pd.DataFrame(pathway_data)
271 271
272 272 def set_annotation_pathways_from_data(model: cobraModel, df: pd.DataFrame):
273 """Set reaction pathways based on 'Pathway_1', 'Pathway_2', ... columns in the dataframe."""
274 pathway_cols = [col for col in df.columns if col.startswith('Pathway_')]
275 if not pathway_cols:
276 print("No 'Pathway_' columns found, skipping pathway annotation")
277 return
278
279 pathway_data = defaultdict(list)
280
281 for idx, row in df.iterrows():
282 reaction_id = str(row['ReactionID']).strip()
283 if reaction_id not in model.reactions:
284 continue
285
286 pathways = []
287 for col in pathway_cols:
288 if pd.notna(row[col]) and str(row[col]).strip():
289 pathways.append(str(row[col]).strip())
290
291 if pathways:
292
293 reaction = model.reactions.get_by_id(reaction_id)
294 if len(pathways) == 1:
295 reaction.annotation['pathways'] = pathways[0]
296 else:
297 reaction.annotation['pathways'] = pathways
298
299 pathway_data[reaction_id] = pathways
300
301 print(f"Annotated {len(pathway_data)} reactions with pathways.")
273 302
274 def build_cobra_model_from_csv(csv_path: str, model_id: str = "new_model") -> cobraModel: 303 def build_cobra_model_from_csv(csv_path: str, model_id: str = "new_model") -> cobraModel:
275 """ 304 """
276 Build a COBRApy model from a tabular file with reaction data. 305 Build a COBRApy model from a tabular file with reaction data.
277 306
364 393
365 # set objective function 394 # set objective function
366 set_objective_from_csv(model, df, obj_col="ObjectiveCoefficient") 395 set_objective_from_csv(model, df, obj_col="ObjectiveCoefficient")
367 396
368 set_medium_from_data(model, df) 397 set_medium_from_data(model, df)
398
399 set_annotation_pathways_from_data(model, df)
369 400
370 print(f"Model completed: {len(model.reactions)} reactions, {len(model.metabolites)} metabolites") 401 print(f"Model completed: {len(model.reactions)} reactions, {len(model.metabolites)} metabolites")
371 402
372 return model 403 return model
373 404