def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') simplify(model) make_irreversible(model) simplify(model) #remove directionally blocked reactions model2 = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') make_irreversible(model2) simplify(model2) self.assertEqual(model.id, model2.id) self.assertListEqual(list(model.metabolites.keys()), list(model2.metabolites.keys())) self.assertListEqual(list(model.reactions.keys()), list(model2.reactions.keys())) self.assertListEqual(list(model.genes.keys()), list(model2.genes.keys())) for r1, r2 in zip(list(model.reactions.values()), list(model2.reactions.values())): self.assertEqual(r1.name, r2.name) self.assertEqual(r1.reversible, r2.reversible) self.assertDictEqual(r1.stoichiometry, r2.stoichiometry) self.assertEqual(r1.lb, r2.lb) self.assertEqual(r1.ub, r2.ub) self.assertEqual(str(r1.gpr), str(r2.gpr)) self.assertSetEqual(set(model.genes.keys()), set(model2.genes.keys()))
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') write_model_to_file(model, PLAIN_TEXT_COPY) model_copy = read_model_from_file(PLAIN_TEXT_COPY, kind='cb') solution = FBA(model_copy) self.assertEqual(solution.status, Status.OPTIMAL) self.assertAlmostEqual(solution.fobj, GROWTH_RATE, places=2)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') make_irreversible(model) self.assertTrue(all([not reaction.reversible for reaction in model.reactions.values()])) solution = FBA(model) self.assertEqual(solution.status, Status.OPTIMAL) self.assertAlmostEqual(solution.fobj, GROWTH_RATE, places=2)
def reac_ko_medium_optim_CM(isMultiProc=False, size=(1, 1), withCobraPy=False): SBML_FILE = basePath + "Data/EC_SC_model.xml" modelaux = load_cbmodel(SBML_FILE, exchange_detection_mode="R_EX_") model = fix_exchange_reactions_model(modelaux) fileRes = basePath + "Results/optim_Comunity_KO_medium_pFBA.csv" for r_id, rxn in model.reactions.items(): if r_id.startswith( 'R_EX_'): # ou tambem podes fazer if rxn.is_exchange: rxn.lb = -1000 if rxn.lb is None else rxn.lb rxn.ub = 1000 if rxn.ub is None else rxn.ub simulProb = StoicSimulationProblem(model, objective={"R_BM_total_Synth": 1}, withCobraPy=withCobraPy) res = simulProb.simulate() print(res.print()) evalFunc = build_evaluation_function("BP_MinModifications", "R_BM_total_Synth", "R_EX_succ_medium_") result = cbm_strain_optim(simulProb, evaluationFunc=evalFunc, levels=None, type=optimType.MEDIUM_REACTION_KO, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') variability = FVA(model) self.assertTrue( all([ lb <= ub if lb is not None and ub is not None else True for lb, ub in variability.values() ]))
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') solution = gene_deletion(model, DOUBLE_GENE_KO, 'pFBA') self.assertEqual(solution.status, Status.OPTIMAL) self.assertAlmostEqual(solution.values[model.biomass_reaction], DOUBLE_KO_GROWTH_RATE, 2) self.assertAlmostEqual(solution.values['R_EX_succ_e'], DOUBLE_KO_SUCC_EX, 2)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') r_id1 = 'R_PGI' r_id2 = 'R_G6PDH2r' ratio = 2.0 model.add_ratio_constraint(r_id1, r_id2, ratio) solution = FBA(model, get_shadow_prices=True, get_reduced_costs=True) self.assertEqual(solution.status, Status.OPTIMAL) self.assertEqual(solution.values[r_id1] / solution.values[r_id2], ratio)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') solution1 = pFBA(model) solution2 = FBA(model) self.assertEqual(solution1.status, Status.OPTIMAL) self.assertEqual(solution2.status, Status.OPTIMAL) growth1 = solution1.values[model.biomass_reaction] growth2 = solution2.values[model.biomass_reaction] self.assertAlmostEqual(growth1, growth2, places=4) norm1 = sum([abs(solution1.values[r_id]) for r_id in model.reactions]) norm2 = sum([abs(solution2.values[r_id]) for r_id in model.reactions]) self.assertLessEqual(norm1, norm2 + 1e-6)
def medium_Lactate_optim(isMultiProc=False, size=1, withCobraPy=False): SBML_FILE = "../../../examples/models/Ec_iAF1260.xml" modelaux = load_cbmodel(SBML_FILE, flavor="cobra") model = fix_exchange_reactions_model(modelaux) fileRes = basePath + "Results/optim_Ec_iAF1260_medium_lactate.csv" simulProb = StoicSimulationProblem( model, objective={"R_Ec_biomass_iAF1260_core_59p81M": 1}, withCobraPy=withCobraPy) fba = simulProb.simulate() # calculate the essential uptake reactions to biomass production essential = simulProb.find_essential_drains() print(essential) if simulProb.constraints: simulProb.constraints.update( {reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential}) # put essential reactions as constraints else: simulProb.constraints = { reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential } criticalReacs = essential # set the minimum production of biomass simulProb.set_objective_function({"R_EX_lac_L_e": 1}) simulProb.constraints.update({ "R_Ec_biomass_iAF1260_core_59p81M": (fba.get_fluxes_distribution()["R_Ec_biomass_iAF1260_core_59p81M"] * 0.75, 9999) }) minObjective = {"R_EX_lac_L_e": 1e-5} print( "Biomass: " + str(fba.get_fluxes_distribution()["R_Ec_biomass_iAF1260_core_59p81M"] * 0.75)) build_evaluation_function evalFunc = build_evaluation_function("MinNumberReac", size, minObjective) cbm_strain_optim(simulProb, evaluationFunc=evalFunc, levels=None, type=optimType.MEDIUM, criticalReacs=criticalReacs, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes)
def cbm_simualtion_iAF(): SBML_FILE = "../../../examples/models/Ec_iAF1260.xml" model = load_cbmodel(SBML_FILE, flavor="cobra") constraints = {'R_Ec_biomass_iAF1260_core_59p81M': (0.55, 9999)} res = FBA(model, objective={"R_EX_succ_e": 1}, constraints=constraints) for r, f in res.values.items(): if f != 0: print(r + " --> " + str(f)) print(res.values["R_EX_succ_e"]) print(res.values["R_Ec_biomass_iAF1260_core_59p81M"])
def framed_optim(isMultiProc, size): model = load_cbmodel(SBML_FILE, flavor="cobra") fileRes = basePath + "Results/optim_Ec_iAF1260_ko.csv" simulProb = StoicSimulationProblem( model, objective={"R_Ec_biomass_iAF1260_core_59p81M": 1}) objFunc = build_evaluation_function("targetFlux", ["R_Ec_biomass_iAF1260_core_59p81M"]) cbm_strain_optim(simulProb, evaluationFunc=objFunc, levels=None, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes)
def medium_SC_Etanol_Levels_optim(isMultiProc=False, size=1, withCobraPy=False): SBML_FILE = "../../../examples/models/iMM904.xml" model = load_cbmodel(SBML_FILE, flavor="fbc2") fileRes = basePath + "Results/optim_iMM904_etanol_levels.csv" simulProb = StoicSimulationProblem(model, objective={"R_BIOMASS_SC5_notrace": 1}, withCobraPy=withCobraPy) fba = simulProb.simulate() print("Biomass: " + str(fba.get_fluxes_distribution()["R_BIOMASS_SC5_notrace"])) # calculate the essential uptake reactions to biomass production essential = simulProb.find_essential_drains() print(essential) if simulProb.constraints: simulProb.constraints.update( {reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential}) # put essential reactions as constraints else: simulProb.constraints = { reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential } criticalReacs = essential # set the minimum production of biomass simulProb.set_objective_function({"R_EX_etoh_e": 1}) simulProb.constraints.update({ "R_BIOMASS_SC5_notrace": (fba.get_fluxes_distribution()["R_BIOMASS_SC5_notrace"] * 0.75, 9999) }) print("Biomass: " + str(fba.get_fluxes_distribution()["R_BIOMASS_SC5_notrace"] * 0.75)) evalFunc = build_evaluation_function( "MinNumberReacAndMaxFluxWithLevels", size, LEVELS, {"R_EX_etoh_e": model.reactions["R_EX_etoh_e"].ub}) cbm_strain_optim(simulProb, evaluationFunc=evalFunc, levels=LEVELS, type=optimType.MEDIUM_LEVELS, criticalReacs=criticalReacs, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes)
def medium_reac_ko_optim(isMultiProc=False, size=[5, 5], withCobraPy=False): SBML_FILE = "../../../examples/models/Ec_iAF1260.xml" model = load_cbmodel(SBML_FILE, flavor="cobra") newModel = fix_exchange_reactions_model(model) fileRes = basePath + "Results/optim_Ec_iAF1260_medium_ko_succ.csv" simulProb = StoicSimulationProblem( newModel, objective={"R_Ec_biomass_iAF1260_core_59p81M": 1}, withCobraPy=withCobraPy) # set the minimum production of biomass fba = simulProb.simulate() # calculate the essential uptake reactions to biomass production essential = simulProb.find_essential_drains() print(essential) if simulProb.constraints: simulProb.constraints.update( {reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential}) # put essential reactions as constraints else: simulProb.constraints = { reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential } simulProb.set_objective_function({"R_EX_succ_e_": 1}) simulProb.constraints.update({ "R_Ec_biomass_iAF1260_core_59p81M": (fba.get_fluxes_distribution()["R_Ec_biomass_iAF1260_core_59p81M"] * 0.25, 9999) }) print( "Biomass: " + str(fba.get_fluxes_distribution()["R_Ec_biomass_iAF1260_core_59p81M"] * 0.25)) evalFunc = build_evaluation_function( "MinNumberReacAndMaxFlux", sum(size), {"R_EX_succ_e": model.reactions["R_EX_succ_e"].ub}) cbm_strain_optim(simulProb, evaluationFunc=evalFunc, levels=None, type=optimType.MEDIUM_REACTION_KO, criticalReacs=essential, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes) # KO_Reaction by default
def cbm_simualtion(): SBML_FILE = "../../../examples/models/iMM904.xml" model = load_cbmodel(SBML_FILE, flavor="fbc2") constraints = { 'R_EX_so4_e': (-10000, 0), 'R_EX_o2_e': (-50, 0), 'R_EX_gam6p_e': (-10, 0), 'R_EX_melib_e': (-5, 0) } constraints.update({"R_BIOMASS_SC5_notrace": (0.21, 9999)}) res = FBA(model, objective={"R_EX_etoh_e": 1}, constraints=constraints) print(res.values["R_EX_etoh_e"]) print(res.values["R_BIOMASS_SC5_notrace"]) print(res.values["R_EX_so4_e"]) print(res.values["R_EX_gam6p_e"]) print(res.values["R_EX_o2_e"]) print(res.values["R_EX_melib_e"])
def medium_SC_optim(isMultiProc=False, size=1, withCobraPy=False): SBML_FILE = "../../../examples/models/iMM904.xml" model = load_cbmodel(SBML_FILE, flavor="fbc2") fileRes = basePath + "Results/optim_iMM904_medium.csv" simulProb = StoicSimulationProblem(model, objective={"R_BIOMASS_SC5_notrace": 1}, withCobraPy=withCobraPy) fba = simulProb.simulate() # calculate the essential uptake reactions to biomass production essential = simulProb.find_essential_drains() print(essential) if simulProb.constraints: simulProb.constraints.update( {reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential}) # put essential reactions as constraints else: simulProb.constraints = { reac: (StoicConfigurations.DEFAULT_LB, 0) for reac in essential } criticalReacs = essential # set the minimum production of biomass minObjective = { "R_BIOMASS_SC5_notrace": fba.get_fluxes_distribution()["R_BIOMASS_SC5_notrace"] * 0.75 } evalFunc = build_evaluation_function("MinNumberReac", size, minObjective) cbm_strain_optim(simulProb, evaluationFunc=evalFunc, levels=None, type=optimType.MEDIUM, criticalReacs=criticalReacs, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes)
def reac_ko_optim(isMultiProc=False, size=1, withCobraPy=False): SBML_FILE = "../../../examples/models/Ec_iAF1260.xml" if withCobraPy: model = read_sbml_model(SBML_FILE) fileRes = basePath + "Results/optim_Ec_iAF1260_ko_cobra.csv" else: model = load_cbmodel(SBML_FILE, flavor="cobra") fileRes = basePath + "Results/optim_Ec_iAF1260_ko.csv" simulProb = StoicSimulationProblem( model, objective={"Ec_biomass_iAF1260_core_59p81M": 1}, withCobraPy=withCobraPy) evalFunc = build_evaluation_function("targetFlux", ["Ec_biomass_iAF1260_core_59p81M"]) result = cbm_strain_optim(simulProb, evaluationFunc=evalFunc, levels=None, isMultiProc=isMultiProc, candidateSize=size, resultFile=fileRes) # KO_Reaction by default result.print()
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') solution = FBA(model, get_shadow_prices=True, get_reduced_costs=True) self.assertEqual(solution.status, Status.OPTIMAL) self.assertAlmostEqual(solution.fobj, GROWTH_RATE, places=2)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') essential = essential_genes(model) self.assertListEqual(essential, ESSENTIAL_GENES)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') solution = gene_deletion(model, ROOM_GENE_KO, 'ROOM') self.assertEqual(solution.status, Status.OPTIMAL) self.assertTrue(solution.values['R_EX_succ_e'] > 1e-3)
def medium_test(): SBML_FILE = "../../../examples/models/EC_SC_model.xml" model = load_cbmodel(SBML_FILE) model2 = fix_exchange_reactions_model(model) for r in model2.reactions: print(r) for r_id, rxn in model2.reactions.items(): if r_id.startswith( 'R_EX_'): # ou tambem podes fazer if rxn.is_exchange: rxn.lb = 0 rxn.ub = 1000 \ #if rxn.ub is None else rxn.ub #sol 1 constraints = { 'R_EX_mn2_e__mod1': (-1000, 0), 'R_EX_cobalt2_e__mod1': (-1000, 0), 'R_EX_cl_e__mod1': (-1000, 0), 'R_EX_xyl_D_medium_': (-12, 0), 'R_EX_mobd_e__mod1': (-1000, 0), 'R_EX_mg2_e__mod1': (-1000, 0), 'R_EX_o2_medium_': (-2, 0), 'R_EX_k_medium_': (-1000, 0), 'R_EX_nh4_medium_': (-1000, 0), 'R_EX_fe3_e__mod1': (-1000, 0), 'R_EX_zn2_e__mod1': (-1000, 0), 'R_EX_ca2_e__mod1': (-1000, 0), 'R_EX_so4_medium_': (-1000, 0), 'R_EX_pi_medium_': (-1000, 0), 'R_EX_cu2_e__mod1': (-1000, 0) } #sol2 constraints = { 'R_EX_mn2_e__mod1': (-1000, 0), 'R_EX_cobalt2_e__mod1': (-1000, 0), 'R_EX_cl_e__mod1': (-1000, 0), 'R_EX_mobd_e__mod1': (-1000, 0), 'R_EX_cu_e__mod1': (-1000, 0), 'R_EX_mg2_e__mod1': (-1000, 0), 'R_EX_glc_D_medium_': (-12, 0), 'R_EX_o2_medium_': (-2, 0), 'R_EX_k_medium_': (-1000, 0), 'R_EX_nh4_medium_': (-1000, 0), 'R_EX_fe3_e__mod1': (-1000, 0), 'R_EX_zn2_e__mod1': (-1000, 0), 'R_EX_ca2_e__mod1': (-1000, 0), 'R_EX_so4_medium_': (-1000, 0), 'R_EX_pi_medium_': (-1000, 0) } res = pFBA(model2, objective={"R_BM_total_Synth": 1}, constraints=constraints) #res = FBA(model2, objective={"R_BM_total_Synth": 1}) for r, f in res.values.items(): print(r + " --> " + str(f)) print(res.values["R_EX_succ_medium_"]) print(res.values["R_BM_total_Synth"]) print(res.values["R_EX_glc_D_medium_"])
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') simplify(model) solution = FBA(model) self.assertEqual(solution.status, Status.OPTIMAL) self.assertAlmostEqual(solution.fobj, GROWTH_RATE, places=2)
def testRun(self): model = load_cbmodel(SMALL_TEST_MODEL, flavor='cobra') variability = FVA(model) self.assertTrue(all([lb <= ub if lb is not None and ub is not None else True for lb, ub in variability.values()]))
def main(mode, noheuristics=False, nothermo=False, allow_unbalanced=False, allow_blocked=False, biomass=None, biomass_db_path=None, normalize_biomass=False, taxa=None, outputfile=None): if mode == 'draft': if outputfile: universe_draft = outputfile model_specific_data = os.path.splitext(outputfile)[0] + '.csv' bigg_gprs = os.path.splitext(outputfile)[0] + '_gprs.csv' else: universe_draft = project_dir + config.get('generated', 'universe_draft') model_specific_data = project_dir + config.get( 'generated', 'model_specific_data') bigg_gprs = project_dir + config.get('generated', 'bigg_gprs') build_bigg_universe_model(universe_draft) data = download_model_specific_data(model_specific_data) create_gpr_table(data, outputfile=bigg_gprs) elif mode == 'thermo': universe_draft = project_dir + config.get('generated', 'universe_draft') equilibrator_compounds = project_dir + config.get( 'input', 'equilibrator_compounds') if outputfile: bigg_gibbs = outputfile else: bigg_gibbs = project_dir + config.get('generated', 'bigg_gibbs') compute_bigg_gibbs_energy(universe_draft, equilibrator_compounds, bigg_gibbs) elif mode == 'curated': universe_draft = project_dir + config.get('generated', 'universe_draft') model_specific_data = project_dir + config.get('generated', 'model_specific_data') if not biomass: if taxa == 'archaea': biomass = 'archaea' else: biomass = config.get('universe', 'default_biomass') if outputfile: universe_final = outputfile else: tag = taxa if taxa != 'bacteria' else biomass universe_final = "{}{}universe_{}.xml.gz".format( project_dir, config.get('generated', 'folder'), tag) bigg_models = project_dir + config.get('input', 'bigg_models') bigg_models = pd.read_csv(bigg_models, index_col=0) manual_curation = project_dir + config.get('input', 'manually_curated') manually_curated = pd.read_csv(manual_curation, index_col=0) unbalanced = project_dir + config.get('input', 'unbalanced_metabolites') unbalanced = pd.read_csv(unbalanced, header=None) unbalanced = unbalanced[0].tolist() try: model = load_cbmodel(universe_draft, flavor=config.get('sbml', 'default_flavor')) model_specific_data = pd.read_csv(model_specific_data) except IOError: raise IOError( 'Universe draft not found. Please run --draft first to download BiGG data.' ) if biomass_db_path is None: biomass_db_path = project_dir + config.get('input', 'biomass_library') biomass_db = load_biomass_db(biomass_db_path, normalize_weight=normalize_biomass, model=model) if biomass not in biomass_db: valid_ids = ','.join(biomass_db.keys()) raise RuntimeError( 'Biomass identifier not in database. Currently in database: ' + valid_ids) biomass_eq = biomass_db[biomass] if nothermo: thermodynamics_data = None metabolomics_data = None else: try: bigg_gibbs = project_dir + config.get('generated', 'bigg_gibbs') thermodynamics_data = pd.read_csv(bigg_gibbs, index_col=0) except IOError: raise IOError( 'Thermodynamic data not found. Please run --thermo first to generate thermodynamic data.' ) metabolomics = project_dir + config.get('input', 'metabolomics') metabolomics_data = pd.read_csv(metabolomics, index_col=1) curate_universe(model, taxa=taxa, outputfile=universe_final, model_specific_data=model_specific_data, bigg_models=bigg_models, thermodynamics_data=thermodynamics_data, metabolomics_data=metabolomics_data, manually_curated=manually_curated, unbalanced_metabolites=unbalanced, biomass_eq=biomass_eq, use_heuristics=(not noheuristics), remove_unbalanced=(not allow_unbalanced), remove_blocked=(not allow_blocked)) else: print('Unrecognized option:', mode)