{ "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", " task1_____time \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 }