{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simple SBGN example"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook creates a simple model in [SBGN](https://sbgn.github.io/specifications). It models an irreversible reacton. The enzyme catalyses an irreversible metabolic process which consumes substrate S1 and produces product P1. The enzyme is a represented as a macromolecule connected to the process glyph by a catalysis arc. The substrate and the product of the biochemical reaction are represented by simple chemical glyphs. Then we renders a graphical representation and print the SBGN xml."
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1) Including libraries"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import libsbgnpy.libsbgn as libsbgn\n",
"from IPython.display import Image\n",
"from libsbgnpy.libsbgnTypes import ArcClass, GlyphClass, Language\n",
"from combine_notebooks import RESULTS_DIR\n",
"from libsbgnpy import render\n",
"import os"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2) Declaring the SBGN model"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Create empty sbgn."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"sbgn: libsbgn.sbgn = libsbgn.sbgn()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Create map, set language and set in sbgn."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"map = libsbgn.map()\n",
"map.set_language(Language.PD)\n",
"sbgn.set_map(map)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Create four glyphs. We label three of the glyphs as S1, P1, and enzyme."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"g = libsbgn.glyph(class_=GlyphClass.SIMPLE_CHEMICAL, id=\"glyph0\")\n",
"g.set_label(libsbgn.label(text=\"S1\"))\n",
"g.set_bbox(libsbgn.bbox(y=\"105.0\", x=\"25.0\", h=\"60.0\", w=\"60.0\"))\n",
"map.add_glyph(g)\n",
"\n",
"g = libsbgn.glyph(class_=GlyphClass.MACROMOLECULE, id=\"glyph2\")\n",
"g.set_label(libsbgn.label(text=\"enzyme\"))\n",
"g.set_bbox(libsbgn.bbox(y=\"30.0\", x=\"115.0\", h=\"40.0\", w=\"80.0\"))\n",
"map.add_glyph(g)\n",
"\n",
"g = libsbgn.glyph(class_=GlyphClass.PROCESS, id=\"glyph3\")\n",
"g.set_bbox(libsbgn.bbox(y=\"123.0\", x=\"143.0\", h=\"24.0\", w=\"24.0\"))\n",
"g.add_port(libsbgn.port(y=\"135.0\", x=\"131.0\", id=\"glyph3.1\"))\n",
"g.add_port(libsbgn.port(y=\"135.0\", x=\"179.0\", id=\"glyph3.2\"))\n",
"map.add_glyph(g)\n",
"\n",
"g = libsbgn.glyph(class_=GlyphClass.SIMPLE_CHEMICAL, id=\"glyph1\")\n",
"g.set_label(libsbgn.label(text=\"P1\"))\n",
"g.set_bbox(libsbgn.bbox(y=\"105.0\", x=\"225.0\", h=\"60.0\", w=\"60.0\"))\n",
"map.add_glyph(g)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Add three arcs linking the glyphs together."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"a = libsbgn.arc(class_=ArcClass.CONSUMPTION, target=\"glyph3.1\", source=\"glyph0\", id=\"arc0\")\n",
"a.set_start(libsbgn.startType(y=\"135.0\", x=\"85.0\"))\n",
"a.set_end(libsbgn.endType(y=\"135.0\", x=\"131.0\"))\n",
"map.add_arc(a)\n",
"\n",
"a = libsbgn.arc(class_=ArcClass.CATALYSIS, target=\"glyph3\", source=\"glyph2\", id=\"arc1\")\n",
"a.set_start(libsbgn.startType(y=\"70.0\", x=\"155.0\"))\n",
"a.set_end(libsbgn.endType(y=\"123.0\", x=\"155.0\"))\n",
"map.add_arc(a)\n",
"\n",
"a = libsbgn.arc(class_=ArcClass.PRODUCTION, target=\"glyph1\", source=\"glyph3.2\", id=\"arc2\")\n",
"a.set_start(libsbgn.startType(y=\"135.0\", x=\"179.0\"))\n",
"a.set_end(libsbgn.endType(y=\"135.0\", x=\"225.0\"))\n",
"map.add_arc(a)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3) Write, print and render the generated file "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Save SBGN model as text and then print that model."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" \n",
"\n",
"\n"
]
}
],
"source": [
"sbgn_path = str(RESULTS_DIR) + \"/hello_world_sbgn.sbgn\"\n",
"os.makedirs(os.path.dirname(sbgn_path), exist_ok=True)\n",
"f_out = sbgn_path\n",
"sbgn.write_file(f_out)\n",
"xml = open(f_out).read()\n",
"print(xml)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Render the SBGN model."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SBGN rendered: /home/vboxuser/Documents/compbiolibs/combine-notebooks/results/hello_world_sbgn.png\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmwAAAGGCAYAAADGot1cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADFUSURBVHhe7d15kFTVvcBxNBaQqqhUqZFoqaRiFE1pMDEJCYQZyqTUKhdUyoD+IQLDsLiMigi44EOQRc1Ek5JULMWXysuwqGhFg1ERFQaIIq644L7ividmrfP4dfftuff27Z4+Z3pmfuf091P1q/cCqND3Hs63b9/u7mOMadwxlzMMwzAMwzA6R4JN/h8AAAAoRbABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABAAAoR7ABntm4caNZsmSJmTNnDsM4TWtrq1m7dm3hjALgA4IN8IBsskOHDjV9+vRhmJrOkCFDzOTJk83HH39cONsAaESwAYo9++yzhBrTIzNw4ECzevXqwpkHQBuCDVBq6dKlpn///pmbK8N018jVNgD6EGyAQnJlrVysDRgwwDQ0NJjLLrvMXHrppWXnkksuyZyLL744c2bPnp05s2bNKjszZ87MnIsuuihzZsyYkTkXXnhh2Zk+fXrmXHDBBZlz/vnnZ855551XcVpaWirOueeemznnnHNO2Tn77LMz56yzzsqcadOmZc7UqVPLzpQpUzJHwitrmpubzU9+8hOzxx57ZJ5fMvJkAYAuBBugzJdffpm7ryi9iR599NHmpZdeMv/5z3+K8+9//7s4//rXv4rzz3/+szj/+Mc/iiP/7vj8/e9/L87f/va34nzxxRfF+fzzz4vz2WefFefTTz8tzieffFIcuRcqPh999FFxPvzww+J88MEHxXn//feL89577xXn3XffLc4777xTnO3btyfm7bffLs5bb71VnDfffLM4b7zxRmJef/31xLz22muJefXVVxPzyiuvFOfll18ujhyTaF588cXivPDCC8XZtm1bcZ5//vniPPfcc4mRUI/mmWeeKc7WrVuL8/TTTxfnqaeeKs6TTz5ZnCeeeKI4jz/+eGIee+yx4tx7773mtNNOKznX5EmBPK4A9CDYAGXkDQbpDVSupv33v/8tG2suwWYbay7BZhtrLsGmMdZcgs021lyCLR5rW7ZsKc6vf/1r07dv38Q5N2rUqMIZCUADgg1QZvDgwYmNU66sSaxVCjbbWHMJNttYcwk221jTGmy2seYSbLaxVinYHn300dxLtfHzTkbOEwA6EGyAIhI56U1T4oOra1xdi8eaS7BVirVo0ve1ya8FoAPBBigiH2Ya3zAHDRrE1bUysaY12GxjzSXYbGOt2mBrbGxMnH/yAc0AdCDYAEXkE+jjG+aJJ57I1bUywaYx1lyCzTbWXIKtmljbvHmzGTduXOL8k/spAehAsAGKpN9w0NmbDWxjzSXYbGPNJdhsY01rsNnGmkuw2caaTbBNmjQpcf4RbIAeBBugSFawlYs1l2CzjTWXYLONNZdg0xhrLsFmG2suwVZtrBFsgG4EG6CITbDZxppLsNnGmkuw2caa1mCzjTWXYLONNYINCAfBBihSKdjiseYSbLax5hJstrHmEmwaY80l2GxjzSXYbGKNYAN0I9gARaoNNttYcwk221hzCTbbWNMabLax5hJstrHmEmxNTU2J849gA/Qg2ABFygVbPNZcgs021lyCzTbWXIJNY6y5BJttrLkEm22sEWyAbgQboEg1wWYbay7BZhtrLsFmG2tag8021lyCzTbWXILtkUceIdgAxQg2QJGsYIvHmkuw2caaS7DZxppLsGmMNZdgs401l2CzjTWCDdCPYAMU6SzYbGPNJdhsY80l2GxjTWuw2caaS7DZxppLsEmsEWyAbgQboEg62C699NIuBZttrLkEm22suQSbxlhzCTbbWHMJNttYI9gAPxBsgCKVgs021lyCzTbWXILNNta0BpttrLkEm22suQRbFGsEG6AbwQYoUstgs401l2CzjTWXYNMYay7BZhtrLsFmG2sE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WuEjPNIz7iarl0Jdgs021gg2wC8EG6BIVrDZxppLsNnGWjLY9H1naPqjPEpiLTYlV9cKE923lry6VvgKquil0ESs+XvvmsQawQboRrABitQi2GxjzSXYbGOtZ4Otwkd5pILNNtZcgs021lyCzTbWCDbAPwQboEilYKsm1lyCzTbWXIKt52Kt4/616KM8ysWaS7DZxppLsNnGmkuwZcWazPjxHW+ekCHYAD0INkCRrgabbay5BJttrPVssK0vvEO0wpsNHGPNJdhsY80l2GxjjWAD/ESwAYqUC7ZqYs0l2GxjzSXYei7W8iORFk25WHMJNttYcwk221hzCbZysdbe3k6wAYoRbIAiXQk221hzCTbbWNMabLax5hJstrHmEmy2sUawAf4i2ABFsoKtmlhzCTbbWHMJNo2x5hJstrHmEmy2seYSbJVijWADdCPYAEVcg8021lyCzTbWtAabbay5BJttrLkEm22sEWyA3wg2QJF0sM2ePZurazWMNZdgs401l2CzjTWXYOss1gg2QDeCDVDEJdhsY80l2GxjTWuw2caaS7DZxppLsNnGGsEG+I9gAxQpF2zlYs0l2GxjzSXYNMaaS7DZxppLsNnGmkuwVRNr69evJ9gAxQg2QBHbYLONNZdgs401rcFmG2suwWYbay7BZhtrBBsQBoINUCQr2MrFmkuw2caaS7BpjDWXYLONNZdgs401l2CrNtYINkA3gg1QxCbYbGPNJdhsY01rsNnGmkuw2caaS7DZxhrBBoSDYAMUqRRs8VhzCTbbWHMJNo2x5hJstrHmEmy2seYSbDaxRrABuhFsgCLVBpttrLkEm22saQ0221hzCTbbWHMJNttYcwm2M888M3H+EWyAHgQboEi5YIvHmkuw2caaS7BpjDWXYLONNZdgs401l2CzjTWCDdCNYAMUqSbYbGPNJdhsY01rsNnGmkuw2caaS7DZxppLsK1bt45gAxQj2ABFsoItHmsuwWYbay7BpjHWXILNNtZcgs021lyCzTbWCDZAP4INUKSzYLONNZdgs401rcFmG2suwWYbay7BZhtrLsEmsUawAboRbIAi6WCbNWtWl4LNNtZcgk1jrLkEm22suQSbbay5BJttrBFsgB8INkCRSsFmG2suwWYba1qDzTbWXILNNtZcgs021lyCLYo1gg3QjWADFKllsNnGmkuwaYw1l2Cz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",
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {
"image/png": {
"width": 300
}
},
"output_type": "execute_result"
}
],
"source": [
"# render SBGN\n",
"f_png: str = str(RESULTS_DIR) + '/hello_world_sbgn.png'\n",
"os.makedirs(os.path.dirname(f_png), exist_ok=True)\n",
"render.render_sbgn(sbgn, image_file=f_png, file_format=\"png\")\n",
"Image(f_png, width=300)"
]
}
],
"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
}