{
"cells": [
{
"cell_type": "markdown",
"id": "8f264dc3",
"metadata": {
"lines_to_next_cell": 0
},
"source": [
"Create repressilator using SED-ML\n",
"\n",
"SED-ML encodes in a computer-readable exchange format the information required by MIASE to enable reproduction of simulation experiments.\n",
"\n",
"\n",
"https://sed-ml.org/"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "960777ed",
"metadata": {
"execution": {
"iopub.execute_input": "2023-04-17T14:02:08.304711Z",
"iopub.status.busy": "2023-04-17T14:02:08.304436Z",
"iopub.status.idle": "2023-04-17T14:02:08.400948Z",
"shell.execute_reply": "2023-04-17T14:02:08.401446Z"
},
"lines_to_next_cell": 2
},
"outputs": [],
"source": [
"import os\n",
"from pathlib import Path\n",
"\n",
"import libsedml"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a38e30fd",
"metadata": {
"execution": {
"iopub.execute_input": "2023-04-17T14:02:08.404467Z",
"iopub.status.busy": "2023-04-17T14:02:08.403551Z",
"iopub.status.idle": "2023-04-17T14:02:08.420034Z",
"shell.execute_reply": "2023-04-17T14:02:08.420505Z"
}
},
"outputs": [],
"source": [
"\n",
"\n",
"def create_repressilator(sedml_path: Path) -> libsedml.SedDocument:\n",
" \"\"\"Create repressilator using SED-ML.\"\"\"\n",
" # create the document\n",
" doc = libsedml.SedDocument(1, 4)\n",
"\n",
" # create a first model referencing an sbml file\n",
"\n",
" \"\"\"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \"\"\"\n",
" # create simulation\n",
" tc = doc.createUniformTimeCourse()\n",
" tc.setId(\"sim1\")\n",
" tc.setInitialTime(0.0)\n",
" tc.setOutputStartTime(0.0)\n",
" tc.setOutputEndTime(1000.0)\n",
" tc.setNumberOfPoints(1000)\n",
" # need to set the correct KISAO Term\n",
" alg = tc.createAlgorithm()\n",
" alg.setKisaoID(\"KISAO:0000019\")\n",
"\n",
" \"\"\"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \"\"\"\n",
" # create a first model referencing an sbml file\n",
" model = doc.createModel()\n",
" model.setId(\"model1\")\n",
" model.setSource(\n",
" \"https://www.ebi.ac.uk/biomodels/model/download/BIOMD0000000012?filename=BIOMD0000000012_url.xml\"\n",
" )\n",
" model.setLanguage(\"urn:sedml:language:sbml.level-3.version-1\")\n",
"\n",
" # create a second model modifying a variable of that other sbml file\n",
" model = doc.createModel()\n",
" model.setId(\"model2\")\n",
" model.setSource(\"#model1\")\n",
" model.setLanguage(\"urn:sedml:language:sbml.level-3.version-1\")\n",
"\n",
" change = model.createChangeAttribute()\n",
" change.setTarget(\n",
" \"/sbml:sbml/sbml:model/sbml:listOfParameters/sbml:parameter[@id='ps_0']/@value\"\n",
" )\n",
" change.setNewValue(\"1.3e-05\")\n",
"\n",
" change = model.createChangeAttribute()\n",
" change.setTarget(\n",
" \"/sbml:sbml/sbml:model/sbml:listOfParameters/sbml:parameter[@id='ps_a']/@value\"\n",
" )\n",
" change.setNewValue(\"0.013\")\n",
"\n",
" \"\"\"\n",
" \n",
" \n",
" \n",
" \n",
" \"\"\"\n",
" # create a task that uses the simulation and the model above\n",
" task = doc.createTask()\n",
" task.setId(\"task1\")\n",
" task.setModelReference(\"model1\")\n",
" task.setSimulationReference(\"sim1\")\n",
"\n",
" # create a task that uses the simulation and the model above\n",
" task = doc.createTask()\n",
" task.setId(\"task2\")\n",
" task.setModelReference(\"model2\")\n",
" task.setSimulationReference(\"sim1\")\n",
"\n",
" \"\"\"\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \"\"\"\n",
" # add a DataGenerator to hold the output for time\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_0_0_0\")\n",
" dg.setName(\"task1.time\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____time\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setSymbol(\"urn:sedml:symbol:time\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____time\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_0_0_1\")\n",
" dg.setName(\"PX (lacI)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PX\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PX']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____PX\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_0_1_1\")\n",
" dg.setName(\"PZ (cI)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PZ\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PZ']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____PZ\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_0_2_1\")\n",
" dg.setName(\"PY (tetR)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PY\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PY']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____PY\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_1_0_0\")\n",
" dg.setName(\"time\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task2_____time\")\n",
" var.setSymbol(\"urn:sedml:symbol:time\")\n",
" var.setTaskReference(\"task2\")\n",
" dg.setMath(libsedml.parseFormula(\"task2_____time\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_1_0_1\")\n",
" dg.setName(\"PX (lacI)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task2_____PX\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PX']\")\n",
" var.setTaskReference(\"task2\")\n",
" var.setModelReference(\"model2\")\n",
" dg.setMath(libsedml.parseFormula(\"task2_____PX\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_1_1_1\")\n",
" dg.setName(\"PZ (cI)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task2_____PZ\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PZ']\")\n",
" var.setTaskReference(\"task2\")\n",
" var.setModelReference(\"model2\")\n",
" dg.setMath(libsedml.parseFormula(\"task2_____PZ\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_1_2_1\")\n",
" dg.setName(\"PY (tetR)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task2_____PY\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PY']\")\n",
" var.setTaskReference(\"task2\")\n",
" var.setModelReference(\"model2\")\n",
" dg.setMath(libsedml.parseFormula(\"task2_____PY\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_2_0_0\")\n",
" dg.setName(\"PX/max(PX) (lacI normalized)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PX\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PX']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PX_max\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PX']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" var.setDimensionTerm(\"KISAO:0000828\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____PX / task1_____PX_max\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_2_0_1\")\n",
" dg.setName(\"PZ/max(PZ) (cI normalized)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PZ\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PZ']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PZ_max\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PX']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" var.setDimensionTerm(\"KISAO:0000828\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____PZ / task1_____PZ_max\"))\n",
"\n",
" dg = doc.createDataGenerator()\n",
" dg.setId(\"dg_2_1_0\")\n",
" dg.setName(\"PY/max(PY) (tetR normalized)\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PY\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PY']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" var = dg.createVariable()\n",
" var.setId(\"task1_____PY_max\")\n",
" var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='PY']\")\n",
" var.setTaskReference(\"task1\")\n",
" var.setModelReference(\"model1\")\n",
" var.setDimensionTerm(\"KISAO:0000828\")\n",
" dg.setMath(libsedml.parseFormula(\"task1_____PY / task1_____PY_max\"))\n",
"\n",
" # add a 2d plot\n",
" plot = doc.createPlot2D()\n",
" plot.setId(\"timecourse\")\n",
" plot.setName(\"Timecourse of repressilator\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_0__plot_0_0_0__plot_0_0_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_0_0_0\")\n",
" curve.setYDataReference(\"dg_0_0_1\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_0__plot_0_0_0__plot_0_1_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_0_0_0\")\n",
" curve.setYDataReference(\"dg_0_1_1\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_0__plot_0_0_0__plot_0_2_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_0_0_0\")\n",
" curve.setYDataReference(\"dg_0_2_1\")\n",
"\n",
" # add a 2d plot\n",
" plot = doc.createPlot2D()\n",
" plot.setId(\"preprocessing\")\n",
" plot.setName(\"Timecourse after pre-processing\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_1__plot_1_0_0__plot_1_0_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_1_0_0\")\n",
" curve.setYDataReference(\"dg_1_0_1\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_1__plot_1_0_0__plot_1_1_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_1_0_0\")\n",
" curve.setYDataReference(\"dg_1_1_1\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_1__plot_1_0_0__plot_1_2_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_1_0_0\")\n",
" curve.setYDataReference(\"dg_1_2_1\")\n",
"\n",
" # add a 2d plot\n",
" plot = doc.createPlot2D()\n",
" plot.setId(\"postprocessing\")\n",
" plot.setName(\"Timecourse after post-processing\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_2__plot_2_0_0__plot_2_0_1\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_2_0_0\")\n",
" curve.setYDataReference(\"dg_2_0_1\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_2__plot_2_1_0__plot_2_0_0\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_2_1_0\")\n",
" curve.setYDataReference(\"dg_2_0_0\")\n",
" curve = plot.createCurve()\n",
" curve.setId(\"plot_2__plot_2_0_1__plot_2_1_0\")\n",
" curve.setLogX(False)\n",
" curve.setLogY(False)\n",
" curve.setXDataReference(\"dg_2_0_1\")\n",
" curve.setYDataReference(\"dg_2_1_0\")\n",
"\n",
" # write doc\n",
" os.makedirs(os.path.dirname(str(sedml_path)), exist_ok=True)\n",
" libsedml.writeSedML(doc, str(sedml_path))\n",
" return doc"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "fb2c8745",
"metadata": {
"execution": {
"iopub.execute_input": "2023-04-17T14:02:08.422678Z",
"iopub.status.busy": "2023-04-17T14:02:08.422028Z",
"iopub.status.idle": "2023-04-17T14:02:08.444222Z",
"shell.execute_reply": "2023-04-17T14:02:08.444653Z"
}
},
"outputs": [],
"source": [
"if __name__ == \"__main__\":\n",
" from combine_notebooks import RESULTS_DIR\n",
"\n",
" create_repressilator(sedml_path=RESULTS_DIR / \"repressilator_sedml.xml\")"
]
}
],
"metadata": {
"jupytext": {
"cell_metadata_filter": "-all",
"main_language": "python",
"notebook_metadata_filter": "-all"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}