Mercurial > repos > bimib > cobraxy
diff 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 |
line wrap: on
line diff
--- a/COBRAxy/utils/model_utils.py Tue Sep 30 18:08:56 2025 +0000 +++ b/COBRAxy/utils/model_utils.py Wed Oct 01 11:15:00 2025 +0000 @@ -269,7 +269,36 @@ return pd.DataFrame(pathway_data) +def set_annotation_pathways_from_data(model: cobraModel, df: pd.DataFrame): + """Set reaction pathways based on 'Pathway_1', 'Pathway_2', ... columns in the dataframe.""" + pathway_cols = [col for col in df.columns if col.startswith('Pathway_')] + if not pathway_cols: + print("No 'Pathway_' columns found, skipping pathway annotation") + return + + pathway_data = defaultdict(list) + + for idx, row in df.iterrows(): + reaction_id = str(row['ReactionID']).strip() + if reaction_id not in model.reactions: + continue + + pathways = [] + for col in pathway_cols: + if pd.notna(row[col]) and str(row[col]).strip(): + pathways.append(str(row[col]).strip()) + + if pathways: + + reaction = model.reactions.get_by_id(reaction_id) + if len(pathways) == 1: + reaction.annotation['pathways'] = pathways[0] + else: + reaction.annotation['pathways'] = pathways + pathway_data[reaction_id] = pathways + + print(f"Annotated {len(pathway_data)} reactions with pathways.") def build_cobra_model_from_csv(csv_path: str, model_id: str = "new_model") -> cobraModel: """ @@ -366,6 +395,8 @@ set_objective_from_csv(model, df, obj_col="ObjectiveCoefficient") set_medium_from_data(model, df) + + set_annotation_pathways_from_data(model, df) print(f"Model completed: {len(model.reactions)} reactions, {len(model.metabolites)} metabolites")