Source code for ecoli.experiments.antibiotics_tests

import os
import numpy as np

from vivarium.core.control import run_library_cli
from vivarium.core.composition import EXPERIMENT_OUT_DIR
from vivarium.library.topology import get_in
from vivarium.core.serialize import deserialize_value
from vivarium.library.units import remove_units

from ecoli.experiments.ecoli_master_sim import EcoliSim, CONFIG_DIR_PATH
from ecoli.analysis.colony.snapshots import plot_snapshots


def test_antibiotics_tetracycline():
    sim = EcoliSim.from_file(CONFIG_DIR_PATH + "antibiotics_tetracycline.json")
    sim.emitter = "timeseries"
    sim.total_time = 2
    sim.build_ecoli()
    sim.run()
    data = sim.query()
    assert data is not None


[docs] def remove_empty_values(d): """remove {key: value} pairs with values that are None""" to_delete = [] for k, v in d.items(): if not v: to_delete.append(k) elif isinstance(v, dict): v2 = remove_empty_values(v) if not v2: to_delete.append(k) else: d[k] = v2 for k in to_delete: del d[k] return d
def test_lysis_rxn_dff_environment(total_time=10): beta_lactamase = "EG10040-MONOMER[p]" beta_lactam = "beta-lactam[p]" hydrolyzed_beta_lactam = "hydrolyzed-beta-lactam[p]" lysis_time = 4 sim = EcoliSim.from_file(CONFIG_DIR_PATH + "lysis_trigger.json") sim.emitter = "timeseries" sim.total_time = total_time # add to the timeline, triggering burst sim.process_configs["bulk-timeline"] = { "timeline": { 0: { ("bulk", beta_lactamase): 100, ("bulk", beta_lactam): 100, }, lysis_time: {("burst",): True}, } } sim.build_ecoli() bulk_array = sim.generated_initial_state["agents"]["0"]["bulk"] # For simplicity, estimate hydrolyzed beta-lactam as same mass sim.generated_initial_state["agents"]["0"]["bulk"] = np.append( bulk_array, np.array( [ (beta_lactam, 0, 0, 0, 0, 0, 0, 0, 5.8e-7, 0, 0), (hydrolyzed_beta_lactam, 0, 0, 0, 0, 0, 0, 0, 5.8e-7, 0, 0), ], dtype=bulk_array.dtype, ), ) mass_listener = sim.ecoli.steps["agents"]["0"]["ecoli-mass-listener"] mass_listener._bulk_molecule_by_compartment = np.stack( [ np.core.defchararray.chararray.endswith( mass_listener.bulk_ids, abbrev + "]" ) for abbrev in mass_listener.compartment_abbrev_to_index ] ) sim.run() # retrieve data and pre-process for plotting query = [ ("dimensions", "bounds"), ("fields", beta_lactamase[:-3]), ("fields", beta_lactam[:-3]), ("fields", hydrolyzed_beta_lactam[:-3]), ("agents", "0", "boundary"), ("agents", "0", "burst"), ("agents", "0", "bulk", beta_lactamase), ("agents", "0", "bulk", beta_lactam), ] data = sim.query(query=query) data = deserialize_value(data) data = remove_units(data) for t, v in data.items(): if "agents" not in v: data[t]["agents"] = {} # add empty agents back in assert ( "0" in data[0.0]["agents"] and len(data[0.0]["agents"]) == 1 ) # agent 0 is present at time=0 after_lysis = remove_empty_values(data[lysis_time + 2.0]["agents"]) assert len(after_lysis) == 0 # no agents after lysis_time # plot out_dir = os.path.join(EXPERIMENT_OUT_DIR, "lysis_environment") if not os.path.exists(out_dir): os.makedirs(out_dir) plot_snapshots( n_snapshots=6, bounds=get_in(data, (max(data), "dimensions", "bounds")), agents={time: d["agents"] for time, d in data.items()}, fields={time: d["fields"] for time, d in data.items()}, out_dir=out_dir, filename="snapshots", colorbar_decimals=8, ) library = { "1": test_antibiotics_tetracycline, "2": test_lysis_rxn_dff_environment, } # python ecoli/experiments/antibiotics_tests.py -n library_id if __name__ == "__main__": run_library_cli(library)