"""
Example simulation experiment.
Various scans.
"""
from pathlib import Path
from typing import Dict
import numpy as np
from sbmlsim.data import Data
from sbmlsim.experiment import ExperimentRunner, SimulationExperiment
from sbmlsim.model import AbstractModel, RoadrunnerSBMLModel
from sbmlsim.plot import Axis, Figure
from sbmlsim.resources import DEMO_SBML
from sbmlsim.simulation import (
AbstractSim,
Dimension,
ScanSim,
Timecourse,
TimecourseSim,
)
from sbmlsim.simulation.sensitivity import ModelSensitivity
from sbmlsim.simulator import SimulatorSerialRR
from sbmlsim.task import Task
[docs]class DemoExperiment(SimulationExperiment):
"""Simple repressilator experiment."""
[docs] def models(self) -> Dict[str, AbstractModel]:
"""Define models."""
return {"model": RoadrunnerSBMLModel(source=DEMO_SBML, ureg=self.ureg)}
[docs] def tasks(self) -> Dict[str, Task]:
"""Define tasks."""
return {
f"task_{key}": Task(model="model", simulation=key)
for key in self.simulations()
}
[docs] def simulations(self) -> Dict[str, AbstractSim]:
"""Define simulations."""
return {
**self.sim_scans(),
}
[docs] def sim_scans(self) -> Dict[str, AbstractSim]:
Q_ = self.Q_
scan_init = ScanSim(
simulation=TimecourseSim(
[
Timecourse(
start=0, end=10, steps=100, changes={"[e__A]": Q_(10, "mM")}
),
Timecourse(
start=0, end=10, steps=100, changes={"[e__B]": Q_(10, "mM")}
),
]
),
dimensions=[
Dimension(
"dim_init", changes={"[e__A]": Q_(np.linspace(5, 15, num=11), "mM")}
),
ModelSensitivity.create_difference_dimension(
model=self._models["model"],
difference=0.5,
),
],
mapping={"dim_init": 0, "dim_sens": 0},
)
return {
"scan_init": scan_init,
}
[docs]def run_demo_experiments(output_path: Path) -> None:
"""Run the example."""
base_path = Path(__file__).parent
data_path = base_path
runner = ExperimentRunner(
DemoExperiment,
simulator=SimulatorSerialRR(),
data_path=data_path,
base_path=base_path,
)
_results = runner.run_experiments(
output_path=output_path / "results", show_figures=True, reduced_selections=False
)
if __name__ == "__main__":
[docs] output_path = Path(".")
run_demo_experiments(output_path=output_path)