Source code for ecoli.processes.environment.exchange

from vivarium.core.process import Process
from vivarium.library.units import units


[docs] class Exchange(Process): """Exchange A minimal exchange process that moves molecules between two ports. """ defaults = { "molecules": [], "uptake_rate": {}, "secrete_rate": {}, "default_uptake_rate": 1e-1, "default_secrete_rate": 1e-4, # calculated in derive_globals assuming mass = 1000 fg, density = 1100 g/L "mmol_to_counts": 547467.342 * units.L / units.mmol, } def __init__(self, parameters=None): super().__init__(parameters) self.uptake_rate = self.parameters["uptake_rate"] self.secrete_rate = self.parameters["secrete_rate"] for mol_id in self.parameters["molecules"]: if mol_id not in self.uptake_rate: self.uptake_rate[mol_id] = self.parameters["default_uptake_rate"] if mol_id not in self.secrete_rate: self.secrete_rate[mol_id] = self.parameters["default_secrete_rate"]
[docs] def ports_schema(self): return { "exchanges": { mol_id: {"_default": 0, "_updater": "accumulate"} for mol_id in self.parameters["molecules"] }, "external": { mol_id: {"_default": 0.0, "_emit": True} for mol_id in self.parameters["molecules"] }, "internal": { mol_id: {"_default": 0.0, "_emit": True} for mol_id in self.parameters["molecules"] }, }
[docs] def next_update(self, timestep, states): external_molecules = states["external"] internal_molecules = states["internal"] delta_in = { mol_id: mol_ex * self.uptake_rate[mol_id] - internal_molecules[mol_id] * self.secrete_rate[mol_id] * timestep for mol_id, mol_ex in external_molecules.items() } # convert delta concentrations to exchange counts # assumes concentrations in mmol/L exchanges_counts = {} for molecule, concentration in delta_in.items(): exchanges_counts[molecule] = ( -(concentration * self.parameters["mmol_to_counts"]) .to("counts") .magnitude ) return {"internal": delta_in, "exchanges": exchanges_counts}