{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Simple SED-ML example" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This notebook creates a simple model in [SED-ML version 1 level 4](https://sed-ml.org/specifications.html). It builds a model of metabolite A degrading." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 1) Including libraries" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from combine_notebooks import RESULTS_DIR\n", "import libsedml\n", "import tellurium as te\n", "import tempfile, os" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 2) Declaring the SED-ML model" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "First we create a SED-ML document at version 1 level 4." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "doc = libsedml.SedDocument(1, 4)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Create a first model referencing an sbml file." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = doc.createModel()\n", "model.setId(\"model1\")\n", "model.setSource(\"sbml.xml\")\n", "model.setLanguage(\"urn:sedml:language:sbml.level-3.version-1\") " ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Create a simulation and set the important parameters (e.g. inital time, number of steps). We also specify that we want to use the CVODE algorithm, which is a method for integrating ordinary differential equations." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create simulation\n", "tc = doc.createUniformTimeCourse()\n", "tc.setId(\"sim1\")\n", "tc.setInitialTime(0.0)\n", "tc.setOutputStartTime(0.0)\n", "tc.setOutputEndTime(5.0)\n", "tc.setNumberOfSteps(100)\n", "# need to set the correct KISAO Term\n", "alg = tc.createAlgorithm()\n", "alg.setName(\"CVODE\")\n", "alg.setKisaoID(\"KISAO:0000019\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Create a task that uses the simulation and the model above." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "task = doc.createTask()\n", "task.setId(\"task1\")\n", "task.setModelReference(\"model1\")\n", "task.setSimulationReference(\"sim1\")\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Add three DataGenerator to hold the outputs." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dg = doc.createDataGenerator()\n", "dg.setId(\"plot_0_0_0\")\n", "dg.setName(\"time\")\n", "var = dg.createVariable()\n", "var.setId(\"time\")\n", "var.setTaskReference(\"task1\")\n", "var.setModelReference(\"model1\")\n", "var.setSymbol(\"urn:sedml:symbol:time\")\n", "dg.setMath(libsedml.parseFormula(\"time\"))\n", "\n", "dg = doc.createDataGenerator()\n", "dg.setId(\"plot_0_0_1\")\n", "dg.setName(\"S1\")\n", "var = dg.createVariable()\n", "var.setId(\"S1\")\n", "var.setTaskReference(\"task1\")\n", "var.setModelReference(\"model1\")\n", "var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S1']\")\n", "dg.setMath(libsedml.parseFormula(\"S1\"))\n", "\n", "dg = doc.createDataGenerator()\n", "dg.setId(\"plot_0_1_1\")\n", "dg.setName(\"S2\")\n", "var = dg.createVariable()\n", "var.setId(\"S2\")\n", "var.setTaskReference(\"task1\")\n", "var.setModelReference(\"model1\")\n", "var.setTarget(\"/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id='S2']\")\n", "dg.setMath(libsedml.parseFormula(\"S2\"))\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we will create a 2d plot with two curves." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot = doc.createPlot2D()\n", "plot.setId(\"plot_0\")\n", "plot.setName(\"Figure 1\")\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(\"plot_0_0_0\")\n", "curve.setYDataReference(\"plot_0_0_1\")\n", "\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(\"plot_0_0_0\")\n", "curve.setYDataReference(\"plot_0_1_1\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 3) Write and print the generated model" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And we're done creating the basic model.\n", "Now save a text string containing the model into a SED-ML file." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " time \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " S1 \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " S2 \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n" ] } ], "source": [ "sedml_loc = str(RESULTS_DIR) + '/hello_world_sedml.sedml'\n", "os.makedirs(os.path.dirname(sedml_loc), exist_ok=True)\n", "libsedml.writeSedML(doc, sedml_loc)\n", "sedml_str = open(sedml_loc).read()\n", "print(sedml_str)\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 4) Simulating the model" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SBML written to temporary file\n" ] } ], "source": [ "te.setDefaultPlottingEngine('matplotlib')\n", "\n", "# Load a SBML model we want to simulate\n", "sbml_loc = str(RESULTS_DIR) + \"/hello_world_sbml.xml\"\n", "sbml_str = open(sbml_loc).read()\n", "\n", "# Load SED-ML string created in section 2\n", "sedml_str = open(sedml_loc).read()\n", "\n", "# Create a temporary directory to store SED-ML and SBML files\n", "workingDir = tempfile.mkdtemp(suffix=\"_sedml\")\n", "\n", "# Get paths for a temporary file, the filename here should \n", "# match what is in our SED-ML document\n", "sbml_file = os.path.join(workingDir, 'sbml.xml')\n", "\n", "# Save SBML to the temporary file\n", "with open(sbml_file, 'wb') as f:\n", " f.write(sbml_str.encode('utf-8'))\n", " f.flush()\n", " print('SBML written to temporary file')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Read SED-ML file, number of errors: 0\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAAIjCAYAAABCoq4TAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwA0lEQVR4nO3dd3hUZeL28e+UzKRPSCckoffeQarSVCwg9t5XF9vPrbq76rYXd911cRfLrg2sWLFSBBFQpEOA0DuBVALpfWbeP04IoICEJHOSzP25rnOdM2faDSjcPDznORav1+tFRERERER8wmp2ABERERERf6ICLiIiIiLiQyrgIiIiIiI+pAIuIiIiIuJDKuAiIiIiIj6kAi4iIiIi4kMq4CIiIiIiPqQCLiIiIiLiQyrgIiIiIiI+pAIuImKCJUuWYLFYsFgs3H777WbHERERH1IBFxGpJ0899VRNqT7dFhERYXZEnzh69CiPPfYYo0aNIjg4WH/REBH5AbvZAURE/FHfvn359ttvAYiLizM5Tf06ePAgTz/9tNkxREQaLRVwEZEGcMkll/D444+fcs5uP/FbrsvlYvjw4b6OdUbFxcWEhITUy2c5HA5GjhzJBRdcQHZ2Nq+99lq9fK6ISHOhKSgiIg0gNjaW4cOHn7INGTKk5vmzzQFfunQpAwcOJDAwkPbt2zNjxgxmzpxZ8/qnnnqq5rVt2rSpOX+y22+/veb8kiVLas4fP9emTRs2b97MuHHjCA0NZeLEiTWv2bdvH/fccw+tW7fG6XQSGxvLddddx7Zt287px96tWzeWLl3KtGnTGDhw4Ln/pImI+AmNgIuINCIrV65kwoQJlJeXA7B3714efPBBevfuXa/fk5eXx4UXXkhubu4p59evX8+YMWPIy8urOZeTk8P777/P3Llz+frrrxk0aFC9ZhER8TcaARcRaQCzZs360UWY53IR4qOPPlpTvi+88EI+//xz/vjHP7J58+Z6zZefn4/NZuN///sfCxYs4O6778br9XLbbbfVlO9f/OIXfPXVV/ztb3/DZrNRVFTEHXfcgdfrrdcsIiL+RiPgIiKNRHZ2NitWrADA6XTywQcfEBUVxWWXXca2bduYPXt2vX7fW2+9xbhx42oep6SkkJqaCkCfPn2YNGkSABdccAGDBg1ixYoVbN26lfXr19O/f/96zSIi4k9UwEVEGsDpLsL8qdVO9u7dW3Pcvn17oqKiah4PHTq0Xgt4YGDgKeUbYOfOnTXHKSkpjBgx4rTv3bZtmwq4iEgdqICLiDSA4xdhnq8fXlR5Lq9zu93YbDYAjhw58pP5zldxcfF5v1dERDQHXESk0Wjfvn3N8Z49ezh27FjN4+NTU37I5XLVHGdmZgJQWFjI8uXLz/pdpyv4nTp1qjkeNWoUXq/3R1txcTE/+9nPzu0HJCIip6URcBGRRiImJoYLLriA77//nrKyMq6//noeeugh1q9fz/vvv3/a93To0IGNGzcCcOuttzJlyhTefPPNU1YxOVe9e/emR48epKamsnTpUm699VauueYaAgIC2L9/P6tXr2bOnDmn/MXgdEpKSpg7dy4AGzZsqDl/4MABPvzwQwAGDhxI69ata51RRKQ5UAEXEWlE/vnPfzJq1CgqKir46quv+OqrrwDo1asXmzZt+tHr7733Xj766CMAFi9ezOLFi7Hb7XTo0IHdu3fX6rstFguzZs2qWYbwzTff5M0336z1jyE7O5trrrnmR+eXLFlSsyb566+/rlvTi4jf0hQUEZFGZMiQISxYsIABAwbgcDho06YN06dP584776x5TXBwcM3x+PHjmT59OomJiTidTgYNGsSCBQsYNmzYeX1/v379SElJ4b777qNdu3Y4HA4iIiLo0aMH9913H19//XWdf4wiIv7O4tWCriIijYbX6z3t/Ozrr7+e9957D4CPP/6YyZMn+zqaiIjUE01BERFpRA4cOMD999/PfffdR8+ePSkrK+ODDz6omQMeGRnJ2LFjTU4pIiJ1oRFwEZFGZP/+/bRt2/a0zzkcDt57772aG+SIiEjTpDngIiKNSGRkJHfffTddunQhNDQUh8NB69atufXWW1mzZo3Kt4hIM6ARcBERERERH9IIuIiIiIiID6mAi4iIiIj4kM9XQfF4PKSnpxMWFnbapbZERERERJoar9dLYWEhCQkJWK1nH+P2eQFPT08nKSnJ118rIiIiItLg0tLSSExMPOtrfF7Aw8LCACNceHi4r79eRERERKTeFRQUkJSUVNN1z8bnBfz4tJPw8HAVcBERERFpVs5lirUuwhQRERER8SEVcBERERERH1IBFxERERHxIRVwEREREREfUgEXEREREfEhFXARERERER9SARcRERER8SEVcBERERERH1IBFxER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Ji4u7pTzcXFxZGZmnvY906ZNw+Vy1WxJSUnnn7au4nqAK9m4/byIiIiIiAka/D6tjz32GPn5+TVbWlpaQ3/lmY3/MzyyCaI7mJdBRERERPxarWbqR0dHY7PZyMrKOuV8VlYW8fHxp32P0+nE6ayfJXzqhdanFBERERET1WoE3OFw0L9/f77++uuacx6Ph6+//pqhQ4fWezgRERERkeam1mvVPProo9x2220MGDCAQYMGMX36dIqLi7njjjsaIp+IiIiISLNS6wJ+3XXXkZOTwxNPPEFmZiZ9+vRh/vz5P7owU0REREREfqzW64DXlanrgIuIiIiINIAGWwdcRERERETqRgVcRERERMSHVMBFRERERHxIBVxERERExIdUwEVEREREfEgFXERERETEh1TARURERER8SAVcRERERMSHVMBFRERERHxIBVxERERExIdUwEVEREREfEgFXERERETEh1TARURERER8yO7rL/R6vQAUFBT4+qtFRERERBrE8W57vOuejc8LeGFhIQBJSUm+/moRERERkQZVWFiIy+U662ss3nOp6fXI4/GQnp5OWFgYFovFl19NQUEBSUlJpKWlER4e7tPvFnPp195/6dfef+nX3n/p194/mf3r7vV6KSwsJCEhAav17LO8fT4CbrVaSUxM9PXXniI8PFz/Q/op/dr7L/3a+y/92vsv/dr7JzN/3X9q5Ps4XYQpIiIiIuJDKuAiIiIiIj7kVwXc6XTy5JNP4nQ6zY4iPqZfe/+lX3v/pV97/6Vfe//UlH7dfX4RpoiIiIiIP/OrEXAREREREbOpgIuIiIiI+JAKuIiIiIiID6mAi4iIiIj4kF8V8Oeff542bdoQGBjI4MGDWb16tdmRpIEtW7aMyy+/nISEBCwWC5988onZkcRHpk2bxsCBAwkLCyM2NpZJkyaxY8cOs2NJA3vxxRfp1atXzY04hg4dyrx588yOJSZ4+umnsVgsPPLII2ZHkQb21FNPYbFYTtm6dOlidqyz8psC/t577/Hoo4/y5JNPsn79enr37s2ECRPIzs42O5o0oOLiYnr37s3zzz9vdhTxsaVLlzJ16lRWrlzJwoULqaysZPz48RQXF5sdTRpQYmIiTz/9NOvWrWPt2rVcdNFFXHnllWzZssXsaOJDa9as4b///S+9evUyO4r4SPfu3cnIyKjZvvvuO7MjnZXfLEM4ePBgBg4cyIwZMwDweDwkJSXx4IMP8tvf/tbkdOILFouFOXPmMGnSJLOjiAlycnKIjY1l6dKljBw50uw44kORkZE888wz3HXXXWZHER8oKiqiX79+vPDCC/zlL3+hT58+TJ8+3exY0oCeeuopPvnkE1JSUsyOcs78YgS8oqKCdevWMXbs2JpzVquVsWPHsmLFChOTiYiv5OfnA0YZE//gdruZPXs2xcXFDB061Ow44iNTp05l4sSJp/yZL83frl27SEhIoF27dtx0000cPHjQ7EhnZTc7gC8cOXIEt9tNXFzcKefj4uLYvn27SalExFc8Hg+PPPIIw4YNo0ePHmbHkQa2efNmhg4dSllZGaGhocyZM4du3bqZHUt8YPbs2axfv541a9aYHUV8aPDgwcycOZPOnTuTkZHBH//4R0aMGEFqaiphYWFmxzstvyjgIuLfpk6dSmpqaqOfEyj1o3PnzqSkpJCfn8+HH37IbbfdxtKlS1XCm7m0tDQefvhhFi5cSGBgoNlxxIcuueSSmuNevXoxePBgWrduzfvvv99op575RQGPjo7GZrORlZV1yvmsrCzi4+NNSiUivvDAAw/wxRdfsGzZMhITE82OIz7gcDjo0KEDAP3792fNmjU899xz/Pe//zU5mTSkdevWkZ2dTb9+/WrOud1uli1bxowZMygvL8dms5mYUHwlIiKCTp06sXv3brOjnJFfzAF3OBz079+fr7/+uuacx+Ph66+/1rxAkWbK6/XywAMPMGfOHBYvXkzbtm3NjiQm8Xg8lJeXmx1DGtiYMWPYvHkzKSkpNduAAQO46aabSElJUfn2I0VFRezZs4eWLVuaHeWM/GIEHODRRx/ltttuY8CAAQwaNIjp06dTXFzMHXfcYXY0aUBFRUWn/A143759pKSkEBkZSXJysonJpKFNnTqVd955h08//ZSwsDAyMzMBcLlcBAUFmZxOGspjjz3GJZdcQnJyMoWFhbzzzjssWbKEBQsWmB1NGlhYWNiPrvEICQkhKipK1340c7/85S+5/PLLad26Nenp6Tz55JPYbDZuuOEGs6Odkd8U8Ouuu46cnByeeOIJMjMz6dOnD/Pnz//RhZnSvKxdu5YLL7yw5vGjjz4KwG233cbMmTNNSiW+8OKLLwIwevToU86//vrr3H777b4PJD6RnZ3NrbfeSkZGBi6Xi169erFgwQLGjRtndjQRaSCHDh3ihhtuIDc3l5iYGIYPH87KlSuJiYkxO9oZ+c064CIiIiIijYFfzAEXEREREWksVMBFRERERHxIBVxERERExIdUwEVEREREfEgFXERERETEh1TARURERER8SAVcRERERMSHVMBFRERERHxIBVxEpIlZsmQJFosFi8XC/v37zY4jIiK1pAIuItKI3X777VgsFkaPHl1zLjw8nMGDBzN48GCcTqd54URE5LzYzQ4gIiK1069fP1auXGl2DBEROU8aARcRaaTatGnDrFmzAFi6dGnNtJPTTUE5PlJ+/D1JSUmEh4fzyCOPUFpayiOPPILL5SI5OZmXXnrplO9JT0/nzjvvJCEhAYfDQbt27fjzn/9MVVWVr3/IIiJ+QSPgIiKNVN++fSkuLubIkSOEhYXRrVs3ANavX3/G92RkZPDzn/+cli1bUlhYyHPPPcdXX33F4cOHcblcpKWlMXXqVEaNGkXXrl3Jzc1lyJAhpKWlERYWRteuXdm6dStPPPEE+/bt47XXXvPVD1dExG9oBFxEpJGaM2cOEydOBE5MO1m5ciX9+vU743sqKir46quv2LlzJ0lJSQDs3r2bjRs3snXrVgIDA/F4PCxduhSAGTNmkJaWRlxcHHv27GHjxo18+OGHAMycOZPdu3c38I9SRMT/qICLiDQjLVq0YNiwYVitVpKTkwHo0aMHbdq0ITQ0lNjYWACysrIAWL16dc3j2NhYLBYLkyZNAsDr9bJq1Srf/yBERJo5TUEREWlGwsPDa47tdvuPzlksFsAo1yc7eYrLyYKDgxsipoiIX1MBFxFpxI4X4OLi4gb5/IEDBzJ37lzsdjuzZ8+mTZs2ABQWFjJnzhwmT57cIN8rIuLPNAVFRKQR69KlCwBr166lZ8+eDBkyhNLS0nr7/KlTp9KqVSuOHTtG586d6dOnD+3btycqKorbbrut3r5HREROUAEXEWnE7rzzTqZMmYLL5SI1NZVVq1bhdrvr7fNjYmJYuXIld9xxB1FRUWzZsoXS0lJGjBjBv/71r3r7HhEROcHi/eFEQBERERERaTAaARcRERER8SEVcBERERERH1IBFxERERHxIRVwEREREREfUgEXEREREfEhFXARERERER9SARcRERER8SEVcBERERERH1IBFxERERHxIRVwEREREREfUgEXEREREfGh/w8iJMiSl6qPWAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Validate our SED-ML\n", "n_errors = doc.getErrorLog().getNumFailsWithSeverity(libsedml.LIBSEDML_SEV_ERROR)\n", "print('Read SED-ML file, number of errors: {}'.format(n_errors))\n", "if n_errors > 0:\n", " print(doc.getErrorLog().toString())\n", "\n", "# execute SED-ML using Tellurium\n", "te.executeSEDML(sedml_str, workingDir=workingDir)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }