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")