# HG changeset patch
# User luca_milaz
# Date 1720453334 0
# Node ID 9d85c019db246c9dab294ca1af017dc149a9cc26
# Parent 12b5f2e957c8ce2c0d3c6e575827d3c388f75f57
Uploaded
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/flux_sampling.py
--- a/marea_2_0/flux_sampling.py Mon Jul 08 15:17:17 2024 +0000
+++ b/marea_2_0/flux_sampling.py Mon Jul 08 15:42:14 2024 +0000
@@ -31,8 +31,11 @@
type = str,
required = True,
help = 'your tool directory')
-
-
+
+
+
+
+
parser.add_argument('-in', '--input',
required = True,
type=str,
@@ -150,9 +153,9 @@
def model_sampler(model_input:str, model_name:str)-> List[pd.DataFrame]:
- model = load_custom_model(
- utils.FilePath.fromStrPath(model_input), utils.FilePath.fromStrPath(model_name).ext)
-
+ model_type = utils.Model.Custom
+ model = model_type.getCOBRAmodel(customPath = utils.FilePath.fromStrPath(model_input), customExtension = utils.FilePath.fromStrPath(model_name).ext)
+
utils.logWarning(
"Sampling model: " + model_name,
ARGS.out_log)
@@ -207,34 +210,6 @@
df_quantiles.index = [model_name]
return df_mean, df_median, df_quantiles
-
-
-################################- INPUT DATA LOADING -################################
-def load_custom_model(file_path :utils.FilePath, ext :Optional[utils.FileFormat] = None) -> cobra.Model:
- """
- Loads a custom model from a file, either in JSON or XML format.
-
- Args:
- file_path : The path to the file containing the custom model.
- ext : explicit file extension. Necessary for standard use in galaxy because of its weird behaviour.
-
- Raises:
- DataErr : if the file is in an invalid format or cannot be opened for whatever reason.
-
- Returns:
- cobra.Model : the model, if successfully opened.
- """
- ext = ext if ext else file_path.ext
- try:
- if ext is utils.FileFormat.XML:
- return cobra.io.read_sbml_model(file_path.show())
-
- if ext is utils.FileFormat.JSON:
- return cobra.io.load_json_model(file_path.show())
-
- except Exception as e: raise utils.DataErr(file_path, e.__str__())
- raise utils.DataErr(file_path,
- f"Fomat \"{file_path.ext}\" is not recognized, only JSON and XML files are supported.")
############################# main ###########################################
def main() -> None:
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/local/COBRA models/ENGRO2.xml
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/marea.xml
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/model_generator.py
--- a/marea_2_0/model_generator.py Mon Jul 08 15:17:17 2024 +0000
+++ b/marea_2_0/model_generator.py Mon Jul 08 15:42:14 2024 +0000
@@ -54,8 +54,12 @@
parser.add_argument('-ot', '--output_type',
type = str,
required = True,
+ help = 'output type')รน
+
+ parser.add_argument('-of', '--output_model_format',
+ type = str,
+ required = True,
help = 'output type')
-
ARGS = parser.parse_args()
return ARGS
@@ -79,8 +83,39 @@
dataset.to_csv(ARGS.output_folder + name + ".csv", sep = '\t', index = keep_index)
-def generate_model(cell_name, ras, medium):
- # compute FVA
+def generate_model(model, cell_name, ras, medium, output_model_format)->cobra.:
+ model_new = model.copy()
+ rxns_ids = []
+ for rxn in model.reactions:
+ rxns_ids.append(rxn.id)
+ for reaction in medium.keys():
+ if(medium[reaction] != None):
+ model_new.reactions.get_by_id(reaction).lower_bound=-float(medium[reaction])
+ df_FVA = cobra.flux_analysis.flux_variability_analysis(model_new,fraction_of_optimum=0,processes=1).round(8)
+ for reaction in rxns_ids:
+ model_new.reactions.get_by_id(reaction).lower_bound=float(df_FVA.loc[reaction,"minimum"])
+ model_new.reactions.get_by_id(reaction).upper_bound=float(df_FVA.loc[reaction,"maximum"])
+
+ for reaction in rxns_ids:
+ if reaction in ras.keys():
+ lower_bound=model_new.reactions.get_by_id(reaction).lower_bound
+ upper_bound=model_new.reactions.get_by_id(reaction).upper_bound
+ valMax=float((upper_bound)*ras[reaction])
+ valMin=float((lower_bound)*ras[reaction])
+ if upper_bound!=0 and lower_bound==0:
+ model_new.reactions.get_by_id(reaction).upper_bound=valMax
+ if upper_bound==0 and lower_bound!=0:
+ model_new.reactions.get_by_id(reaction).lower_bound=valMin
+ if upper_bound!=0 and lower_bound!=0:
+ model_new.reactions.get_by_id(reaction).lower_bound=valMin
+ model_new.reactions.get_by_id(reaction).upper_bound=valMax
+ return model_new
+
+ if(output_model_format == "SBML"):
+ cobra.io.write_sbml_model(model_new, ARGS.output_folder + cell_name+ "/" + cell_name + ".xml")
+ else:
+ cobra.io.save_json_model(model_new, ARGS.output_folder + cell_name+ "/" + cell_name + ".json")
+
pass
@@ -106,17 +141,20 @@
ras = pd.read_table(ARGS.input_ras, header=0, sep=r'\s+', index_col = 0).T
ras.replace("None", None, inplace=True)
+ ras = ras.astype(float)
#medium has rows cells and columns medium reactions, not common reactions set to None
medium = pd.read_csv(ARGS.input_medium, sep = '\t', header = 0, engine='python', index_col = 0)
+ medium = ras.astype(float)
model_type :utils.Model = ARGS.model_selector
if model_type is utils.Model.Custom:
model = model_type.getCOBRAmodel(customPath = utils.FilePath.fromStrPath(ARGS.model), customExtension = utils.FilePath.fromStrPath(ARGS.model_name).ext)
else:
model = model_type.getCOBRAmodel(toolDir=ARGS.tool_dir)
- '''for index, row in ras.iterrows(): #iterate over cells RAS
- generate_model(index, row, medium.loc[index])'''
+
+ for index, row in ras.iterrows(): #iterate over cells RAS
+ generate_model(model, index, row, medium.loc[index], ARGS.output_model_format)
pass
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/model_generator.xml
--- a/marea_2_0/model_generator.xml Mon Jul 08 15:17:17 2024 +0000
+++ b/marea_2_0/model_generator.xml Mon Jul 08 15:42:14 2024 +0000
@@ -18,6 +18,7 @@
--input_medium $input_medium
--input_ras $input_ras
--output_type "${",".join(map(str, $output_types))}"
+ --output_model_format $output_model_format
--out_log $log
#if $cond_model.model_selector == 'Custom'
--model $model
@@ -38,12 +39,18 @@
-
+
+
+
+
+
+
+
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/ras_generator.xml
--- a/marea_2_0/ras_generator.xml Mon Jul 08 15:17:17 2024 +0000
+++ b/marea_2_0/ras_generator.xml Mon Jul 08 15:42:14 2024 +0000
@@ -9,6 +9,7 @@
lxml
svglib
reportlab
+ cobra
pandas
lxml
numpy
+ cobra
cobra.Model:
diff -r 12b5f2e957c8 -r 9d85c019db24 marea_2_0/utils/model_generator.py
--- a/marea_2_0/utils/model_generator.py Mon Jul 08 15:17:17 2024 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-import argparse
-import utils.general_utils as utils
-from typing import Optional, List
-import os
-import numpy as np
-import pandas as pd
-import cobra
-from joblib import Parallel, delayed, cpu_count
-import sys
-
-################################# process args ###############################
-def process_args(args :List[str]) -> argparse.Namespace:
- """
- Processes command-line arguments.
-
- Args:
- args (list): List of command-line arguments.
-
- Returns:
- Namespace: An object containing parsed arguments.
- """
- parser = argparse.ArgumentParser(usage = '%(prog)s [options]',
- description = 'process some value\'s')
-
- parser.add_argument(
- '-ms', '--model_selector',
- type = utils.Model, default = utils.Model.ENGRO2, choices = [utils.Model.ENGRO2, utils.Model.Custom],
- help = 'chose which type of model you want use')
-
- parser.add_argument("-mo", "--model", type = str,
- help = "path to input file with custom rules, if provided")
-
- parser.add_argument("-mn", "--model_name", type = str, help = "custom mode name")
-
- parser.add_argument('-ol', '--out_log',
- help = "Output log")
-
- parser.add_argument('-td', '--tool_dir',
- type = str,
- required = True,
- help = 'your tool directory')
-
-
- parser.add_argument('-im', '--input_medium',
- required = True,
- type=str,
- help = 'input medium')
-
- parser.add_argument('-ir', '--input_ras',
- required = True,
- type=str,
- help = 'input ras')
-
- parser.add_argument('-ot', '--output_type',
- type = str,
- required = True,
- help = 'output type')
-
- ARGS = parser.parse_args()
- return ARGS
-
-########################### warning ###########################################
-def warning(s :str) -> None:
- """
- Log a warning message to an output log file and print it to the console.
-
- Args:
- s (str): The warning message to be logged and printed.
-
- Returns:
- None
- """
- with open(ARGS.out_log, 'a') as log:
- log.write(s + "\n\n")
- print(s)
-
-
-def write_to_file(dataset: pd.DataFrame, name: str, keep_index:bool=False)->None:
- dataset.to_csv(ARGS.output_folder + name + ".csv", sep = '\t', index = keep_index)
-
-
-def generate_model(cell_name, ras, medium):
- # compute FVA
- pass
-
-
-############################# main ###########################################
-def main() -> None:
- """
- Initializes everything and sets the program in motion based on the fronted input arguments.
-
- Returns:
- None
- """
- if not os.path.exists('model_generator'):
- os.makedirs('model_generator')
-
- num_processors = cpu_count()
-
- global ARGS
- ARGS = process_args(sys.argv)
-
- ARGS.output_folder = 'model_generator/'
-
- ARGS.output_types = ARGS.output_type.split(",")
-
- ras = pd.read_table(ARGS.input_ras, header=0, sep=r'\s+', index_col = 0).T
- ras.replace("None", None, inplace=True)
-
- #medium has rows cells and columns medium reactions, not common reactions set to None
- medium = pd.read_csv(ARGS.input_medium, sep = '\t', header = 0, engine='python', index_col = 0)
-
- model_type :utils.Model = ARGS.model_selector
- if model_type is utils.Model.Custom:
- model = model_type.getCOBRAmodel(utils.FilePath.fromStrPath(ARGS.model_name), utils.FilePath.fromStrPath(ARGS.model_name).ext)
- else:
- model = model_type.getCOBRAmodel()
-
- '''for index, row in ras.iterrows(): #iterate over cells RAS
- generate_model(index, row, medium.loc[index])'''
-
- pass
-
-##############################################################################
-if __name__ == "__main__":
- main()
\ No newline at end of file