Source code for sbmlsim.examples.experiments.repressilator.repressilator

"""
Example simulation experiment.
"""
from pathlib import Path
from typing import Dict, Union

from sbmlsim.combine.sedml.report import Report

# from sbmlsim.combine.sedml.parser import SEDMLSerializer
# from sbmlsim.combine.sedml.runner import execute_sedml
from sbmlsim.data import Data
from sbmlsim.experiment import SimulationExperiment
from sbmlsim.experiment.runner import run_experiments
from sbmlsim.model import AbstractModel
from sbmlsim.plot import Figure, Plot
from sbmlsim.resources import REPRESSILATOR_SBML
from sbmlsim.simulation import AbstractSim, Timecourse, TimecourseSim
from sbmlsim.task import Task


[docs]class RepressilatorExperiment(SimulationExperiment): """Simple repressilator experiment."""
[docs] def models(self) -> Dict[str, Union[Path, AbstractModel]]: """Define models.""" return { "model1": REPRESSILATOR_SBML, "model2": AbstractModel( REPRESSILATOR_SBML, changes={ "ps_0": self.Q_(1.3e-5, "dimensionless"), "ps_a": self.Q_(0.013, "dimensionless"), }, ), }
[docs] def simulations(self) -> Dict[str, AbstractSim]: """Define simulations.""" tc = TimecourseSim( timecourses=Timecourse(start=0, end=1000, steps=1000), time_offset=0, ) return {"tc": tc}
[docs] def tasks(self) -> Dict[str, Task]: """Define tasks.""" tasks = dict() for model in ["model1", "model2"]: tasks[f"task_{model}_tc"] = Task(model=model, simulation="tc") return tasks
[docs] def data(self) -> Dict[str, Data]: """Define data generators.""" # direct access via id data = [] for model in ["model1", "model2"]: for selection in ["time", "PX", "PY", "PZ"]: data.append(Data(task=f"task_{model}_tc", index=selection)) # functions (calculated data generators) # FIXME: necessary to store units in the xres for sid in ["PX", "PY", "PZ"]: data.append( Data( index=f"f_{sid}_normalized", function=f"{sid}/max({sid})", variables={ sid: Data(index=f"{sid}", task="task_model1_tc"), }, parameters={ # 'p1': 1.0 }, ) ) data_dict = {d.sid: d for d in data} from pprint import pprint pprint(data_dict) return data_dict
[docs] def figures(self) -> Dict[str, Figure]: """Define figure outputs (plots).""" fig = Figure( experiment=self, sid="figure0", name="Repressilator", num_cols=2, num_rows=2, width=10, height=10, ) p0 = fig.add_subplot(Plot(sid="plot0", name="Timecourse"), row=1, col=1) p1 = fig.add_subplot(Plot(sid="plot1", name="Preprocessing"), row=1, col=2) p2 = fig.add_subplot( Plot(sid="plot2", name="Postprocessing"), row=2, col=1, col_span=2 ) p0.set_title(f"Timecourse") p0.set_xaxis("time", unit="second") p0.set_yaxis("data", unit="dimensionless") p1.set_title(f"Preprocessing") p1.set_xaxis("time", unit="second") p1.set_yaxis("data", unit="dimensionless") colors = ["tab:red", "tab:green", "tab:blue"] for k, sid in enumerate(["PX", "PY", "PZ"]): p0.curve( x=Data("time", task=f"task_model1_tc"), y=Data(f"{sid}", task=f"task_model1_tc"), label=f"{sid}", color=colors[k], ) p1.curve( x=Data("time", task=f"task_model2_tc"), y=Data(f"{sid}", task=f"task_model2_tc"), label=f"{sid}", color=colors[k], linewidth=2.0, ) p2.set_title(f"Postprocessing") p2.set_xaxis("data", unit="dimensionless") p2.set_yaxis("data", unit="dimensionless") colors2 = ["tab:orange", "tab:brown", "tab:purple"] for k, (sidx, sidy) in enumerate([("PX", "PZ"), ("PZ", "PY"), ("PY", "PX")]): p2.curve( x=self._data[f"f_{sidx}_normalized"], y=self._data[f"f_{sidy}_normalized"], label=f"{sidy}/max({sidy}) ~ {sidx}/max({sidx})", color=colors2[k], linewidth=2.0, ) print(fig, fig.name) return { fig.sid: fig, }
[docs] def reports(self) -> Dict[str, Report]: """Define reports. HashMap of DataGenerators. """ return {}
[docs]def run_repressilator_example(output_path: Path) -> None: """Run repressilator example.""" # run sbmlsim experiment run_experiments( experiments=RepressilatorExperiment, output_path=output_path / "sbmlsim", )
# # serialize to SED-ML/OMEX archive # omex_path = Path(__file__).parent / "results" / "repressilator.omex" # serializer = SEDMLSerializer( # exp_class=RepressilatorExperiment, # working_dir=output_path / "omex", # sedml_filename="repressilator_sedml.xml", # omex_path=omex_path, # ) # # # execute OMEX archive # execute_sedml( # path=omex_path, # working_dir=output_path / "sbmlsim_omex", # output_path=output_path / "sbmlsim_omex", # ) if __name__ == "__main__": run_repressilator_example(output_path=Path(__file__).parent / "results")