Mercurial > repos > iuc > gem_check_memote
comparison gem_flux_distribution.py @ 0:927af80d5e38 draft default tip
planemo upload for repository https://github.com/AlmaasLab/elixir-galaxy-tools-systemsbiology commit 3f7bec1264a86e1488ee1315dbac0f44675f5171
| author | iuc |
|---|---|
| date | Fri, 13 Dec 2024 21:32:42 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:927af80d5e38 |
|---|---|
| 1 import argparse | |
| 2 | |
| 3 import cobra | |
| 4 import pandas as pd | |
| 5 | |
| 6 | |
| 7 def __main__(): | |
| 8 parser = argparse.ArgumentParser( | |
| 9 prog="FluxDistribution", | |
| 10 description="This program calculates the flux distribution of a GEM", | |
| 11 epilog="Adding an epilog, but doubt it's needed.", | |
| 12 ) | |
| 13 parser.add_argument( | |
| 14 "-m", | |
| 15 "--cb_model_location", | |
| 16 dest="cb_model_location", | |
| 17 action="store", | |
| 18 type=str, | |
| 19 default=None, | |
| 20 required=True, | |
| 21 help="The model to use." | |
| 22 ) | |
| 23 parser.add_argument( | |
| 24 "-output", | |
| 25 "--output", | |
| 26 dest="out_file", | |
| 27 action="store", | |
| 28 type=str, | |
| 29 default=None, | |
| 30 required=True, | |
| 31 help="The output file." | |
| 32 ) | |
| 33 parser.add_argument( | |
| 34 "-u", | |
| 35 "--uptake_constraints_file", | |
| 36 dest="uptake_constraints_file", | |
| 37 action="store", | |
| 38 type=str, | |
| 39 default=None, | |
| 40 required=False, | |
| 41 help="File containing new uptake constraits." | |
| 42 ) | |
| 43 | |
| 44 args = parser.parse_args() | |
| 45 | |
| 46 try: | |
| 47 cb_model = cobra.io.read_sbml_model(args.cb_model_location) | |
| 48 except Exception as e: | |
| 49 raise Exception( | |
| 50 "The model could not be read. Ensure " | |
| 51 "it is in correct SBML format." | |
| 52 ) from e | |
| 53 | |
| 54 if args.uptake_constraints_file is not None\ | |
| 55 and args.uptake_constraints_file != "None": | |
| 56 constraints_df = pd.read_csv( | |
| 57 args.uptake_constraints_file, | |
| 58 sep=";", | |
| 59 header=0, | |
| 60 index_col=False | |
| 61 ) | |
| 62 for _, row in constraints_df.iterrows(): | |
| 63 cb_model.reactions.get_by_id( | |
| 64 row["reaction_id"] | |
| 65 ).lower_bound = row["lower_bound"] | |
| 66 cb_model.reactions.get_by_id( | |
| 67 row["reaction_id"] | |
| 68 ).upper_bound = row["upper_bound"] | |
| 69 | |
| 70 # do pFBA | |
| 71 solution = cobra.flux_analysis.pfba(cb_model) | |
| 72 | |
| 73 # make a dataframe with the reaction names, | |
| 74 # reaction ids, and flux distribution | |
| 75 flux_distribution = pd.DataFrame( | |
| 76 columns=["reaction_name", "reaction_id", "flux"] | |
| 77 ) | |
| 78 | |
| 79 flux_distribution["reaction_name"] = \ | |
| 80 [reaction.name for reaction in cb_model.reactions] | |
| 81 flux_distribution["reaction_id"] = \ | |
| 82 [reaction.id for reaction in cb_model.reactions] | |
| 83 flux_distribution["flux"] = \ | |
| 84 [solution.fluxes[reaction.id] for reaction in cb_model.reactions] | |
| 85 | |
| 86 flux_distribution.to_csv(args.out_file, sep=";", index=False) | |
| 87 | |
| 88 | |
| 89 if __name__ == "__main__": | |
| 90 __main__() |
