diff COBRAxy/utils/model_utils.py @ 430:f49c951c9fe6 draft

Uploaded
author francesco_lapi
date Wed, 10 Sep 2025 14:53:36 +0000
parents 4a385fdb9e58
children 06564187fba3
line wrap: on
line diff
--- a/COBRAxy/utils/model_utils.py	Wed Sep 10 13:26:03 2025 +0000
+++ b/COBRAxy/utils/model_utils.py	Wed Sep 10 14:53:36 2025 +0000
@@ -254,9 +254,9 @@
     
     print(f"Aggiunte {reactions_added} reazioni, saltate {reactions_skipped} reazioni")
     
-    # Imposta l'obiettivo di biomassa
-    set_biomass_objective(model)
-    
+    # set objective function
+    set_objective_from_csv(model, df, obj_col="ObjectiveCoefficient")
+
     # Imposta il medium
     set_medium_from_data(model, df)
     
@@ -361,17 +361,31 @@
 
 
 
-def set_biomass_objective(model: cobraModel):
+def set_objective_from_csv(model: cobra.Model, df: pd.DataFrame, obj_col: str = "ObjectiveCoefficient"):
     """
-    Imposta la reazione di biomassa come obiettivo.
+    Sets the model's objective function based on a column of coefficients in the CSV.
+    Can be any reaction(s), not necessarily biomass.
     """
-    biomass_reactions = [r for r in model.reactions if 'biomass' in r.id.lower()]
+    obj_dict = {}
     
-    if biomass_reactions:
-        model.objective = biomass_reactions[0].id
-        print(f"Obiettivo impostato su: {biomass_reactions[0].id}")
-    else:
-        print("Nessuna reazione di biomassa trovata")
+    for idx, row in df.iterrows():
+        reaction_id = str(row['ReactionID']).strip()
+        coeff = float(row[obj_col]) if pd.notna(row[obj_col]) else 0.0
+        if coeff != 0:
+            # Assicuriamoci che la reazione esista nel modello
+            if reaction_id in model.reactions:
+                obj_dict[model.reactions.get_by_id(reaction_id)] = coeff
+            else:
+                print(f"Warning: reaction {reaction_id} not found in model, skipping for objective.")
+
+    if not obj_dict:
+        raise ValueError("No reactions found with non-zero objective coefficient.")
+
+    # Imposta la funzione obiettivo
+    model.objective = obj_dict
+    print(f"Objective set with {len(obj_dict)} reactions.")
+
+
 
 
 def set_medium_from_data(model: cobraModel, df: pd.DataFrame):