{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "c9QFJ338xsQP" }, "source": [ "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/combine-org/combine-notebooks/main?labpath=%2Fnotebooks%2Fsedml.ipynb)\n", "\"Open" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "_4H3KfaPxsQT" }, "source": [ "# Simple SBOL example" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "mZjQHFnZxsQX" }, "source": [ "This notebook creates a simple model in [Synthetic Biology Open Language (SBOL) Version 3.0.1](https://sbolstandard.org/docs/SBOL3.0.1.pdf). SBOL is a free and open-source standard for the representation of biological designs. SBOL uses existing Semantic Web practices and resources, such as Uniform Resource Identifiers (URIs) and ontologies, to unambiguously identify and define genetic design elements. In this notebook we will be creating a simple sequence based on this [notebook](https://github.com/RudgeLab/LOICA/blob/master/notebooks/LOICA_DEMO_Operators.ipynb). We then create a diagram of the sequence (see below) using the SBOL Visual standard. SBOL Visual aims to organize and systematize conventions in order to produce a coherent language for expressing the structure and function of genetic designs.\n", "\n", "
\n", "\"SBML\n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "tF-cOdCmxsQZ" }, "source": [ "## 1) Including libraries and setup" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "gDrGE7GHcpfi" }, "source": [ "Note: Please change the `colab` flag to `True` if you are using Google Colab." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "FFJJyAbIxsQb" }, "outputs": [], "source": [ "colab = False\n", "if colab:\n", " %pip install git+https://github.com/combine-org/combine-notebooks\n", " %pip install pyflapjack --quiet\n", " %pip install loica --quiet\n", " %pip install sbol3 --quiet\n", " %pip install sbol_utilities --quiet" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "QpeLhn1exsQf", "outputId": "2864754c-764a-42de-b8c7-0e8d31a0f448" }, "outputs": [], "source": [ "from pathlib import Path\n", "\n", "import sbol3\n", "from sbol_utilities import component\n", "import parasbolv as psv\n", "import matplotlib.pyplot as plt\n", "\n", "from combine_notebooks import RESULTS_DIR, GLYPH_DIR\n", "\n", "%matplotlib inline" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "6ykS0hotxsQj" }, "source": [ "## 2) Declaring the SBOL model" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "mGFfPu52xsQp" }, "source": [ "A valid SBOL Document with the sequences and parts that we will use in the design. Here we create the J23101 Operator as an Engineered Region composed by the promoter J23101 and the BASIC RBS1 (derived from BBa_B0033). We create the GFP GeneProduct also as an Engineering Region now composed by GFP CDS, M0050 degradation tag and rrnbT1 terminator. First, we will decalre the SBOL document and set the namespace." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "id": "FC_Plc2nxsQr" }, "outputs": [], "source": [ "doc = sbol3.Document()\n", "sbol3.set_namespace('https://github.com/Gonza10V')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "YhxZ47w9xsQs" }, "source": [ "Next, we will create a promoter. A synthetic promoter is a sequence of DNA that does not exist in nature and which has been designed to control gene expression of a target gene." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "id": "JonkziJkxsQt" }, "outputs": [], "source": [ "j23101, j23101_seq = component.promoter('J23101','tttacagctagctcagtcctaggtattatgctagc ', description='https://synbiohub.org/public/igem/BBa_J23101/1')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Mjr67Nr2xsQu" }, "source": [ "Now, we will create a ribosome binding site (RBS), which is a sequence of nucleotides upstream of the start codon of an mRNA transcript that is responsible for the recruitment of a ribosome during the initiation of translation." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "id": "-IXdm_WExsQu" }, "outputs": [], "source": [ "rbs1, rbs1_seq = component.rbs('RBS1', 'ttgaacaccgtcTCAGGTAAGTATCAGTTGTAAatcacacaggacta', description='BASIC Linker RBS1')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "pXjx7lV3xsQv" }, "source": [ "Define the promoter and RBS as our first engineered region." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "id": "ewZcVtd_xsQw" }, "outputs": [], "source": [ "op_j23101 = component.engineered_region('operator_ptet', [j23101,rbs1], description= 'LOICA Operator J23101')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "1B3lYwtFxsQx" }, "source": [ "The next step is to create a CoDing Sequence (CDS). This is a region of DNA or RNA whose sequence determines the sequence of amino acids in a protein." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "id": "jLLQIAHZxsQx" }, "outputs": [], "source": [ "gfpm3, gfpm3_seq = component.cds('GFP_mut3', 'atgcgtaaaggagaagaacttttcactggagttgtcccaattcttgttgaattagatggtgatgttaatgggcacaaattttctgtcagtggagagggtgaaggtgatgcaacatacggaaaacttacccttaaatttatttgcactactggaaaactacctgttccatggccaacacttgtcactactttcggttatggtgttcaatgctttgcgagatacccagatcatatgaaacagcatgactttttcaagagtgccatgcccgaaggttatgtacaggaaagaactatatttttcaaagatgacgggaactacaagacacgtgctgaagtcaagtttgaaggtgatacccttgttaatagaatcgagttaaaaggtattgattttaaagaagatggaaacattcttggacacaaattggaatacaactataactcacacaatgtatacatcatggcagacaaacaaaagaatggaatcaaagttaacttcaaaattagacacaacattgaagatggaagcgttcaactagcagaccattatcaacaaaatactccaattggcgatggccctgtccttttaccagacaaccattacctgtccacacaatctgccctttcgaaagatcccaacgaaaagcgcgaccacatggtccttcttgagtttgtaacagctgctgggattacacatggcatggatgaactatacaaa', description='GFP mut3 Coding Sequence, no BsaI site, no stop codon')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "HrAx6Y2vxsQy" }, "source": [ "Next, we add a sequence that will ensure the resultant protein susceptible to very fast degradation." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "id": "IvYz701JxsQz" }, "outputs": [], "source": [ "m0050, m0050_seq = component.protein_stability_element('M0050', 'gctgctaacgacgaaaactacgctctggctgctTAAattgaacta', description='http://parts.igem.org/wiki/index.php?title=Part:BBa_M0050')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "sklG38m8xsQ0" }, "source": [ "Finally, we will create a terminator sequence. Terminators are genetic parts that usually occur at the end of a gene or operon and cause transcription to stop." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "id": "RaR9J5chxsQ1" }, "outputs": [], "source": [ "ter1, ter1_seq = component.terminator('TER1', 'GTCCatttgtcctactcaggagagcgttcaccgacaaacaacagataaaacgaaaggcccagtctttcgactgagcctttcgttttatttgTAAGGCTCG', description='rrnB T1 terminator from Potvin-Trottier pLPT119, extra stop codon')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "G5eESkDvxsQ1" }, "source": [ "Define the CDS, stability element, and terminator as our second engineered region." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "id": "8p9dXOq4xsQ2" }, "outputs": [], "source": [ "gp_gfp = component.engineered_region(f'geneproduct_{gfpm3.display_id}_{m0050.display_id}_{ter1.display_id}', [gfpm3, m0050, ter1], description='LOICA GeneProduct GFP')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "xq_PVU4mxsQ3" }, "source": [ "Add everything we have just created to the SBOL document." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hiPHV3cKxsQ4", "outputId": "1cdd6e80-1f7c-41b9-c6fc-7516c4cf4c38" }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "doc.add([j23101, j23101_seq, rbs1, rbs1_seq, op_j23101, gfpm3, gfpm3_seq, m0050, m0050_seq, ter1, ter1_seq, gp_gfp])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "dfrFOgv8xsQ4" }, "source": [ "## 3) Validate, save and display SBOL document" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "28ExKwqUxsQ4" }, "source": [ "Print out all object identities in the SBOL document. Then validate the document." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kcl1Ypo8xsQ4", "outputId": "adffbd1c-ae83-4154-96b4-8040f59d5ab0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://github.com/Gonza10V/J23101\n", "https://github.com/Gonza10V/J23101_seq\n", "https://github.com/Gonza10V/RBS1\n", "https://github.com/Gonza10V/RBS1_seq\n", "https://github.com/Gonza10V/operator_ptet\n", "https://github.com/Gonza10V/GFP_mut3\n", "https://github.com/Gonza10V/GFP_mut3_seq\n", "https://github.com/Gonza10V/M0050\n", "https://github.com/Gonza10V/M0050_seq\n", "https://github.com/Gonza10V/TER1\n", "https://github.com/Gonza10V/TER1_seq\n", "https://github.com/Gonza10V/geneproduct_GFP_mut3_M0050_TER1\n", "0\n" ] } ], "source": [ "for obj in doc.objects:\n", " print(obj.identity)\n", "report_sbol3 = doc.validate()\n", "print(len(report_sbol3))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "lHyPoHKOCUHs" }, "source": [ "We can save this SBOL as an XML file which is in RDF format. An RDF file is a document written in the Resource Description Framework (RDF) language, which is used to represent information about resources on the web. As you can see in the text, most tags are pointing to a specific URI on the internet." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "nwF8XYxwCTXV", "outputId": "12744983-d1d6-4cd1-ce1b-78b0026439cf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " \n", " TER1\n", " rrnB T1 terminator from Potvin-Trottier pLPT119, extra stop codon\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " Constraint1\n", " \n", " \n", " \n", " \n", " \n", " \n", " Constraint1\n", " \n", " \n", " \n", " \n", " \n", " \n", " GFP_mut3_seq\n", " \n", " \n", " atgcgtaaaggagaagaacttttcactggagttgtcccaattcttgttgaattagatggtgatgttaatgggcacaaattttctgtcagtggagagggtgaaggtgatgcaacatacggaaaacttacccttaaatttatttgcactactggaaaactacctgttccatggccaacacttgtcactactttcggttatggtgttcaatgctttgcgagatacccagatcatatgaaacagcatgactttttcaagagtgccatgcccgaaggttatgtacaggaaagaactatatttttcaaagatgacgggaactacaagacacgtgctgaagtcaagtttgaaggtgatacccttgttaatagaatcgagttaaaaggtattgattttaaagaagatggaaacattcttggacacaaattggaatacaactataactcacacaatgtatacatcatggcagacaaacaaaagaatggaatcaaagttaacttcaaaattagacacaacattgaagatggaagcgttcaactagcagaccattatcaacaaaatactccaattggcgatggccctgtccttttaccagacaaccattacctgtccacacaatctgccctttcgaaagatcccaacgaaaagcgcgaccacatggtccttcttgagtttgtaacagctgctgggattacacatggcatggatgaactatacaaa\n", " \n", " \n", " \n", " M0050_seq\n", " \n", " \n", " gctgctaacgacgaaaactacgctctggctgctTAAattgaacta\n", " \n", " \n", " \n", " GFP_mut3\n", " GFP mut3 Coding Sequence, no BsaI site, no stop codon\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " SubComponent1\n", " \n", " \n", " \n", " \n", " SubComponent1\n", " \n", " \n", " \n", " \n", " J23101\n", " https://synbiohub.org/public/igem/BBa_J23101/1\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " TER1_seq\n", " \n", " \n", " GTCCatttgtcctactcaggagagcgttcaccgacaaacaacagataaaacgaaaggcccagtctttcgactgagcctttcgttttatttgTAAGGCTCG\n", " \n", " \n", " \n", " RBS1_seq\n", " \n", " \n", " ttgaacaccgtcTCAGGTAAGTATCAGTTGTAAatcacacaggacta\n", " \n", " \n", " \n", " SubComponent3\n", " \n", " \n", " \n", " \n", " M0050\n", " http://parts.igem.org/wiki/index.php?title=Part:BBa_M0050\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " J23101_seq\n", " \n", " \n", " tttacagctagctcagtcctaggtattatgctagc \n", " \n", " \n", " \n", " geneproduct_GFP_mut3_M0050_TER1\n", " LOICA GeneProduct GFP\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " RBS1\n", " BASIC Linker RBS1\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " operator_ptet\n", " LOICA Operator J23101\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " SubComponent2\n", " \n", " \n", " \n", " \n", " SubComponent2\n", " \n", " \n", " \n", "\n", "\n" ] } ], "source": [ "RESULTS_DIR.mkdir(parents=True, exist_ok=True)\n", "sbol_file = RESULTS_DIR / 'hello_world_sbol.xml'\n", "doc.write(sbol_file)\n", "with open(sbol_file) as f:\n", " print(f.read())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 4) SBOL Visual" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "In this section we will be using the [SBOL visual standard](https://sbolstandard.org/docs/SBOL-Visual-3.0.pdf). SBOL Visual aims to organize and systematize such conventions in order to produce a coherent language for expressing the structure and function of genetic designs. At the same time, it aim to make this language simple and easy to use, allowing a high degree of flexibility and freedom in how such diagrams are organized, presented, and styled—in particular, it is easy to create diagrams either by hand or using a wide variety of software programs.\n", "\n", "We will be using the paraSBOLv library to draw a simple diagram. SBOL visual is made up of glyphs, each of which will correspond to something in SBOL. Below we will create four glyphs in isolation, then we will chain them together to create a model similar to the above SBOL model.\n", "\n", "Firstly, we will create an object to render the glyths." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "renderer = psv.GlyphRenderer()\n", "renderer = psv.GlyphRenderer(glyph_path = str(GLYPH_DIR))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This glyth is a promoter. It is created using the `renderer.draw_glyph` function." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 20.0)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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u3JycjR58uTz9uXk5MjD4/+71Hfffad7771Xubm5uvbaaxUWFqbdu3erU6dONRENAAAYqkZvFL5S3H2jkQm4URgAUNu5++83z34CAABGoNQAAAAjUGoAAIARKDUAAMAIlBoAAGAESg0AADACpQYAABiBUgMAAIxAqQEAAEag1AAAACNQagAAgBEoNQAAwAiUGgAAYARKDQAAMAKlBgAAGIFSAwAAjECpAQAARqDUAAAAI1BqAACAESg1AADACJQaAABgBEoNAAAwAqUGAAAYgVIDAACMQKkBAABGoNQAAAAjUGoAAIARKDUAAMAIlBoAAGAESg0AADACpQYAABiBUgMAAIxAqQEAAEag1AAAACNQagAAgBHcXmrmz58vm81WYQkNDb3oMa+//rpCQ0Pl7e2trl276u2333Z3LAAAYLgaeaemc+fO+vrrr13Lrl27Ljh29+7dio6O1pQpU/Txxx8rKipKUVFROnjwYE1EAwAAhqqRUtOgQQP5+fm5lhYtWlxw7LPPPqtbb71VM2fOVMeOHfXoo4+qV69eWr58eU1EAwAAhqqRUpOVlaWAgABdf/31GjdunHJyci44ds+ePYqIiKiwLTIyUnv27LngMSUlJXI4HBUWAABQv7m91ISHhyspKUlbt27VypUrlZ2drYEDB+r777+vdHxubq58fX0rbPP19VVubu4Ff0ZiYqLsdrtrCQwMdOscAABA3eP2UjN8+HDdeeed6tatmyIjI/X222+roKBAr732mtt+RkJCggoLC13LiRMn3HZuAABQNzWo6R9wzTXXKCQkREePHq10v5+fn/Ly8ipsy8vLk5+f3wXP6eXlJS8vL7fmBAAAdVuNf09NUVGRjh07Jn9//0r39+/fX8nJyRW2bdu2Tf3796/paAAAwCBuLzUzZsxQSkqKvvzyS+3evVt33HGHPD09FR0dLUkaP368EhISXOMffPBBbd26VU899ZSOHDmi+fPna//+/YqNjXV3NAAAYDC3X346efKkoqOj9c0336hly5YaMGCAUlNT1bJlS0lSTk6OPDz+v0vdeOONWrdunR555BE9/PDDat++vTZt2qQuXbq4OxoAADCYzel0Oq0OUV0Oh0N2u12FhYXy8fGxOk6tkJ6errCwMKWlpalXr15WxwEA4Dzu/vvNs58AAIARKDUAAMAIlBoAAGAESg0AADACpQYA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "bounds, end_point = renderer.draw_glyph(ax, 'Promoter', (2.5, 2.5))\n", "\n", "ax.set_xlim([bounds[0][0] - 2.5, bounds[1][0] + 2.5])\n", "ax.set_ylim([bounds[0][1] - 2.5, bounds[1][1] + 2.5])\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This glyth is a ribosome entry site." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 15.000000000000004)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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nTtXixcvVr169bRv3z4NGzZMfn5+evrpp+39drCQkydPqlOnTkpOTtbq1avVsGFDsyMBKAIeHh765z//qeDgYL3wwgv65ZdftHjxYpUoUcLsaLAguxeXnTt3qkePHurSpYskqVq1alqxYoW+++47e78VLGTPnj3q2rWrypYtq3Xr1ikkJMTsSACK2LBhwxQUFKSxY8eqQ4cOio6OVvny5c2OBYux+6aili1bKiYmRsePH5f0v6v6bt++XeHh4fmOT09PV3Jycp4bXMv69evVrl07hYaGKjo6mtICuLHw8HCtXLlSR48eVevWrTlcGoVm9+Ly/PPPa8CAAapTp448PT113333acKECYqIiMh3fGRkpPz8/HJv/Ki5ljVr1qhnz5566KGH9Mknn/C/KwBq2rSp1qxZo6tXr6pNmzY6c+aM2ZFgIXYvLitXrtSyZcu0fPlyHThwQIsXL9bMmTO1ePHifMdPmTJFSUlJubezZ8/aOxJMsnr1avXp00edOnXS/PnzVbJkSbMjAXASNWrU0OrVq5WRkaE2bdrov//9r9mRYBE2w86H+4SEhOj555/X2LFjcx979dVXtXTpUv3444+3fH1ycrL8/PyUlJQkX19fe0ZDEfr0008VERGh7t2769133+X0/QDyde7cOfXt21dZWVnasmWLatSoYXYk3KGi+v22+xqXtLQ0eXjknWyxYsU4/M2NLF26VIMGDVLv3r313nvvUVoAFOgvf/mLVq9eLS8vL7Vp0yZ3/0igIHYvLt26ddNrr72mL7/8Uv/9738VFRWlt99+W7169bL3W8EJLVq0SEOGDFG/fv309ttvc2I5ALdUqVIlrVq1SqVKlVLbtm1va+083JfdNxVdvXpVU6dOVVRUlC5evKjg4GANHDhQ06ZNk5eX1y1fz6Yi61qwYIGeeOIJDR48WJGRkTeseQOAm7l06ZL69++vX3/9VVu2bOHaZRZTVL/fdi8ud4viYk2rVq1Sv379NGTIEL3++uuy2WxmRwJgQVeuXFG/fv2UnJysHTt2qGrVqmZHwm2y7D4ucD8xMTGKiIhQz5499dprr1FaANwxf39/LV++XMWKFVOHDh106dIlsyPByVBccFf27dunnj17qlWrVnrnnXfYPATgrgUGBmrFihX67bff1LlzZ129etXsSHAi/MrgjsXFxSk8PFx16tTRRx99dFv7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n35aixcvznd8ZGSk/Pz8cm8hISH2juRWkpKSNHPmTEVERCg4ONjsOABgCX379lXVqlU1ffp0s6PgFuy+qcjLy0tNmzbVzp07cx97+umntXfvXu3ateuG8enp6UpPT8+9n5ycrJCQEDYV3aHXX39dL7/8snbt2qWgoCCz4wCAZXz66aeaOHGiDh8+rPr165sdx3Isu6moUqVKuvfee/M8VrduXZ05cybf8d7e3vL19c1zw525fv26PvjgAz366KOUFgAopF69eikoKEjvvPOO2VFwE3YvLq1atbrhePjjx49zSG4RWLlypc6fP68RI0aYHQUALMfLy0vDhg3TsmXLdPHiRbPjoAB2Ly4TJ07U7t279frrr+vkyZNavny55s+fr7Fjx9r7rfAHhmHonXfeUZs2bVS7dm2z4wCAJQ0ePFgeHh768MMPzY6CAti9uDzwwAOKiorSihUrVL9+fb3yyiuaNWuWIiIi7P1W+IPt27frwIEDGjlypNlRAMCyypUrp759+2r27Nl59r+E87D7zrl3i/O43JnevXvryJEj2rJlizw8uJIDANypEydOqE2bNlq0aJGGDh1qdhzLsOzOuSh6p06dUnR0tJ544glKCwDcpZo1a6p9+/aaNWuWnOz/9hDFxSW89957Klu2rB599FGzowCASxgxYoQOHTqkrVu3mh0Ff0Jxsbjk5GQtWLBAjz32mEqVKmV2HABwCQ899JBq167NodFOiOJicStWrFBqairbYQHAjmw2m4YPH65169bp3LlzZsfBH1BcLG7RokVq166dKlWqZHYUAHApPXr0kLe3t/7zn/+YHQV/QHGxsGPHjmn37t3q37+/2VEAwOX4+Pioc+fOWrhwITvpOhGKi4UtXrxYZcuW1SOPPGJ2FABwSf369dPx48e1e/dus6Pg/1BcLCozM1NLlixRz5495e3tbXYcAHBJrVq1UuXKlbVgwQKzo+D/UFwsauPGjTp//rwGDBhgdhQAcFkeHh7q06ePVq5cqbS0NLPjQBQXy1q0aJHq1KmjBg0amB0FAFxav379lJycrOjoaLOjQBQXS/r1118VHR2tfv36yWazmR0HAFxatWrV1Lx5czYXOQmKiwV98sknysrK4ky5AFBE+vfvr82bN+vMmTNmR3F7FBcLWrFihdq2bauKFSuaHQUA3ELXrl3l7e2tlStXmh3F7VFc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xPXr1yVJ3t7eJicBANwNLy8vZWRkyDAMs6O4JIqLk8jOzpYkeXiwSADAynK+xykujsGvpJOguACAa8j5Hs/5Xod98SvpJCguAOAaKC6OVdzsAPifnH/gWVlZyszMNDkNAOBO5Wwiorg4BsXFSeQcBn3vvfeanAQAcLdKliwpm81mdgyXRHFxEl26dFFUVJSSkpLMjgIAuEv169fnKFEHobg4CZvNpp49e5odAwAAp8aeoAAAwDIoLgAAwDIoLgAAwDIoLgAAwDIoLgAAwDIoLgAAwDLsXlwiIyP1wAMPyMfHRwEBAerZs6fi4uLs/TYAAMAN2b24bN26VWPHjtXu3bu1ceNGZWRkqEOHDkpNTbX3WwEAADdjMxx83e1Lly4pICBAW7du1UMPPXTL8cnJyfLz81NSUpJ8fX0dGQ0AANhJUf1+O/zMuTmnsC9fvny+z6enpys9PT33fnJysqMjAQAAi3LozrnZ2dmaMGGCWrVqpfr16+c7JjIyUn5+frm3kJAQR0YCAAAW5tBNRaNHj9ZXX32l7du3q3LlyvmOyW+NS0hICJuKAACwEMtvKho3bpzWrVunbdu2FVhaJMnb25sraAIAgNti9+JiGIaeeuopRUVFKTY2VqGhofZ+CwAA4KbsXlzGjh2r5cuXa82aNfLx8VFCQoIkyc/PTyVLlrT32wEAADdi931cbDZbvo8vXLhQjz/++C1fz+HQAABYj2X3cXHwaWEAAIAb41pFAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMiguAADAMhxWXGbPnq1q1aqpRIkSat68ub777jtHvRUAAHATDikun376qSZNmqTp06frwIEDatSokTp27KiLFy864u0AAICbcEhxefvttzVixAgNGzZM9957r+bNm6dSpUppwYIFjng7AADgJorbe4LXr1/X/v37NWXK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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "bounds, end_point = renderer.draw_glyph(ax, 'RibosomeEntrySite', (2.5, 2.5))\n", "\n", "ax.set_xlim([bounds[0][0] - 2.5, bounds[1][0] + 2.5])\n", "ax.set_ylim([bounds[0][1] - 2.5, bounds[1][1] + 2.5])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This glyth is a CoDing Sequence (CDS)." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-7.5, 12.5)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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zZo3b56io6N1//33m45jFNNSAAC4ud9++039+/dXy5YtNXToUNNxjKPcAADgxq5923daWpqWLFmS5cuoCyumpQAAcGPvvfeevvjiC3388ce64447TMdxCdQ7AADc1OHDhxUVFaUePXroqaeeMh3HZVBuAABwQ9eWfQcGBur11183HcelMC0FAIAbmjJlin744Qdt3bpVpUuXNh3HpVBuAABwM1999ZXmz5+vqVOnqlGjRqbjuBympQAAcCO//vqrBgwYoFatWikiIsJ0HJdEuQEAwE1YlqUhQ4boypUrLPvOBdNSAAC4iaVLl+pf//qXVq5cqYCAANNxXBaVDwAAN3Do0CGNGTNGL7/8stq1a2c6jkuj3AAA4OLS0tLUt29fVatWTTNmzDAdx+UxLQUAgIubPHmyDh06pG3btqlUqVKm47g8yg0AAC5s48aNWrBggaZPn66GDRuajuMWmJYCAMBF/frrrxo4cKAeeeQRDRw40HQct0G5AQDABVmWpUGDBikjI0OxsbEs+84DpqUAAHBBb7/9ttauXatPP/1U/v7+puO4FWogAAAu5uDBgxo3bpz69Omjv/71r6bjuB3KDQAALuTSpUsKCwtTjRo1NH36dNNx3BLTUgAAuJBJkyYpPj5e27dvV8mSJU3HcUuUGwAAXMSGDRv05ptv6vXXX1f9+vVNx3FbTEsBAOACTp8+rYEDB6pt27bq37+/6ThujXIDAIBh15Z9OxwOxcbGyuFwmI7k1piWAgDAsMWLF2vdunX6/PPPVblyZdNx3B5XbgAAMOjAgQMaP368wsPD9dhjj5mOYwsFUm5iYmJUrVo1lShRQsHBwdq+fXuu45cvX67atWurRIkSqlevnr744ouCiAkAQIG6ePGiwsLCdNddd2nq1Kmm49iG08vNhx9+qIiICEVFRWn37t1q0KCB2rRpo59//jnb8Vu2bFGHDh3UvXt37dmzR6GhoQoNDdX+/fudHRUAgAI1ceJEHTlyRO+//75KlChhOo5tOL3czJgxQz179tSLL76ounXr6o033lCpUqW0aNGibMfPmjVLbdu21dChQ1WnTh2NHz9ejRo10ty5c50dFQCAArN27VotWrRI06ZN07333ms6jq04tdxcvnxZu3btUuvWrf//BxYpotatWysuLi7bfeLi4rKMl6Q2bdrkOD4tLU0pKSlZNgAAXNnP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3HGH6ThwE1RgAIBLOnTokKKiotSzZ0+FhoaajgM3QrkBALictLQ0hYWFKSgoSDNnzjQdB26GaSkAgMuZMmWKDh48qG3btrHsG3lGuQEAuJRNmzbpjTfe0LRp03TfffeZjgM3xLQUAMBl/Prrrxo4cKAefvhhDRo0yHQcuCnKDQDAJViWpcGDB+vq1at6++23WfaNW8a0FADAJbzzzjv68ssvtWrVKvn7+5uOAzdGLQYAGPef//xHY8aMUe/evfXkk0+ajgM3R7kBABh1bdl39erVNX36dNNxYANMSwEAjIqOjtahQ4e0fft2lSpVynQc2ADlBgBgzMaNG7Vw4ULNnDlTDRo0MB0HNsG0FADAiNOnT2vAgAFq06aN+vfvbzoObMRp5aZatWpyOBxZtsmTJ+e6z6VLlxQWFqYKFSrIy8tL7du316lTp5wVEQBgiGVZioiIkCTFxsay7Bv5yqln07hx45SYmJi59evXL9fxgwYN0qeffqrly5dr06ZNOnnypJ5++mlnRgQAGBAbG6u1a9dq0aJF8vPzMx0HNuPUe27KlClz0ydtcnKy3nrrLb333nv6y1/+IklavHix6tSpo61bt+pPf/qTM6MCAArIwYMHNX78eIWFhemvf/2r6TiwIYdlWZYz3rhatWq6dOmS0tPTVbVqVXXs2FGDBg1SsWLZ96n169erVatWOnPmjMqWLZv5fFBQkAYOHJjjx3CnpaUpLS0t83FKSooCAwOVnJwsb2/vfP2d8io1NVVeXl4KCQlR1apVjWYBAFexbds2eXl5afv27SpZsqTpOHARKSkp8vHxyZe/3067ctO/f381atRI5cuX15YtWxQZGanExETNmDEj2/FJSUny8PDIUmwkqXLlykpKSsrx50RHR2vs2LH5GT3flCxZUv3799eOHTuUkJBgOg4AuAR/f38tWLCAYgOnyVO5GTFihKZMmZLrmAMHDqh27dqZN4pJUv369eXh4aGXX35Z0dHR8vT0vLW02YiMjMzys65duXEFRYoU0axZs0zHAACgUMlTuRk8eLC6deuW65gaNWpk+3xwcLCuXLmio0ePqlatWte97ufnp8uXL+vs2bNZrt6cOnUq1/t2PD0987UsAQAA95ancuPr6ytfX99b+kF79+5VkSJFVKlSpWxfb9y4sYoXL65169apffv2kn6/6SwhIUEhISG39DMBAEDh45R7buLi4rRt2za1bNlSZcqUUVxcnAYNGqTOnTurXLlykqSffvpJrVq10pIlS9S0aVP5+Pioe/fuioiIUPny5eXt7a1+/fopJCSElVIAAOCmOaXceHp66oMPPtCYMWOUlpam6tWra9CgQVnujUlPT9fBgwd14cKFzOdmzpypIkWKqH379kpLS1ObNm00b948Z0QEAAA25bSl4Kbk51IyAABQMPLz7zefdw0AAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGyFcgMAAGzFKeVm48aNcjgc2W47duzIcb8WLVpcN753797OiAgAAGyqmDPetFmzZkpMTMzy3KhRo7Ru3Trdf//9ue7bs2dPjRs3LvNxqVKlnBERAADYlFPKjYeHh/z8/DIfp6ena9WqVerXr58cDkeu+5YqVSrLvjeSlpamtLS0zMfJycmSpJSUlDymBgAAplz7u21Z1u2/mVUAPvroI6tIkSLW8ePHcx3XvHlzq2LFilaFChWse+65xxoxYoSVmpqa6z5RUVGWJDY2NjY2NjYbbPHx8bfdOxyWlR8VKXePPfaYJOmLL77IddzChQsVFBSkgIAA7du3T8OHD1fTpk318ccf57jPH6/cnD17VkFBQUpISJCPj0/+/AI2kZKSosDAQB0/flze3t6m47gUjk3OODY549jkjGOTPY5LzpKTk1W1alWdOXNGZcuWva33ytO01IgRIzRlypRcxxw4cEC1a9fOfHzixAn961//0rJly274/r169cr8d7169eTv769WrVopPj5eNWvWzHYfT09PeXp6Xve8j48PJ04OvL29OTY54NjkjGOTM45Nzjg22eO45KxIkdtf65SncjN48GB169Yt1zE1atTI8njx4sWqUKGCnnzyyTyHCw4OliQdPnw4x3IDAADwv/JUbnx9feXr63vT4y3L0uLFi9WlSxcVL148z+H27t0rSfL398/zvgAAoHBy6of4rV+/XkeOHFGPHj2ue+2nn35S7dq1tX37dklSfHy8xo8fr127duno0aP65JNP1KVLFz300EOqX7/+Tf9MT09PRUVFZTtVVdhxbHLGsckZxyZnHJuccWyyx3HJWX4eG6feUNyxY0cdO3ZMmzdvvu61o0ePqnr16tqwYYNatGih48ePq3Pnztq/f79SU1MVGBiop556Sq+++irzkgAA4KYVyGopAACAgsJ3SwEAAFuh3AAAAFuh3AAAAFuh3AAAAFuxXbmJiYlRtWrVVKJECQUHB2cuNS/MxowZI4fDkWX730+RLky++uorPfHEEwoICJDD4dDKlSuzvG5ZlkaPHi1/f3+VLFlSrVu31qFDh8yELWA3OjbdunW77jxq27atmbAFKDo6Wk2aNFGZMmVUqVIlhYaG6uDBg1nGXLp0SWFhYapQoYK8vLzUvn17nTp1ylDignMzx6ZFixbXnTe9e/c2lLjgzJ8/X/Xr18/8JOKQkBD985//zHy9sJ4z0o2PTX6cM7YqNx9++KEiIiIUFRWl3bt3q0GDBmrTpo1+/vln09GMu+eee5SYmJi5ffPNN6YjGZGamqoGDRooJiYm29dfe+01zZ49W2+88Ya2bdum0qVLq02bNrp06VIBJy14Nzo2ktS2bdss59H7779fgAnN2LRpk8LCwrR161atWbNG6enpeuSRR5Sampo5ZtCgQfr000+1fPlybdq0SSdPntTTTz9tMHXBuJljI0k9e/bMct689tprhhIXnCpVqmjy5MnatWuXdu7cqb/85S9q166dvv/+e0mF95yRbnxspHw4Z277qzddSNOmTa2wsLDMx1evXrUCAgKs6Ohog6nMi4qKsho0aGA6hsuRZK1YsSLzcUZGhuXn52dNnTo187mzZ89anp6e1vvvv28goTl/PDaWZVldu3a12rVrZySPK/n5558tSdamTZssy/r9HClevLi1fPnyzDEHDhywJFlxcXGmYhrxx2NjWZbVvHlza8CAAeZCuZBy5cpZb775JudMNq4dG8vKn3PGNlduLl++rF27dql169aZzxUpUkStW7dWXFycwWSu4dChQwoICFCNGjXUqVMnJSQkmI7kco4cOaKkpKQs55CPj4+Cg4M5h/5r48aNqlSpkmrVqqU+ffro119/NR2pwCUnJ0uSypcvL0natWuX0tPTs5w3tWvXVtWqVQvdefPHY3PNu+++q4oVK+ree+9VZGSkLly4YCKeMVevXtUHH3yg1NRUhYSEcM78jz8em2tu95zJ03dLubLTp0/r6tWrqly5cpbnK1eurB9++MFQKtcQHBys2NhY1apVS4mJiRo7dqwefPBB7d+/X2XKlDEdz2UkJSVJUrbn0LXXCrO2bdvq6aefVvXq1RUfH6+RI0fq0UcfVVxcnIoWLWo6XoHIyMjQwIED9cADD+jee++V9Pt54+HhobJly2YZW9jOm+yOjfT7J9UHBQUpICBA+/bt0/Dhw3Xw4EF9/PHHBtMWjO+++04hISG6dOmSvLy8tGLFCtWtW1d79+4t9OdMTsdGyp9zxjblBjl79NFHM/9dv359BQcHKygoSMuWLVP37t0NJoM7eeGFFzL/Xa9ePdWvX181a9bUxo0b1apVK4PJCk5YWJj2799faO9Zy01Ox6ZXr16Z/65Xr578/f3VqlUrxcfHq2bNmgUds0DVqlVLe/fuVXJysj766CN17dpVmzZtMh3LJeR0bOrWrZsv54xtpqUqVqyookWLXne3+alTp+Tn52colWsqW7as7r77bh0+fNh0FJdy7TzhHLo5NWrUUMWKFQvNeRQeHq7PPvtMGzZsUJUqVTKf9/Pz0+XLl3X27Nks4wvTeZPTsclOcHCwJBWK88bDw0N33nmnGjdurOjoaDVo0ECzZs3inFHOxyY7t3LO2KbceHh4qHHjxlq3bl3mcxkZGVq3bl2WeTxI58+fV3x8vPz9/U1HcSnVq1eXn59flnMoJSVF27Zt4xzKxokTJ/Trr7/a/jyyLEvh4eFasWKF1q9fr+rVq2d5vXHjxipevHiW8+bgwYNKSEiw/Xlzo2OTnb1790qS7c+b7GRkZCgtLa1QnzM5uXZssnNL58xt3+LsQj744APL09PTio2Ntf79739bvXr1ssqWLWslJSWZjmbU4MGDrY0bN1pHjhyxNm/ebLVu3dqqWLGi9fPPP5uOVuDOnTtn7dmzx9qzZ48lyZoxY4a1Z88e69ixY5ZlWdbkyZOtsmXLWqtWrbL27dtntWvXzqpevbp18eJFw8mdL7djc+7cOWvIkCFWXFycdeTIEWvt2rVWo0aNrLvuusu6dOmS6ehO1adPH8vHx8fauHGjlZiYmLlduHAhc0zv3r2tqlWrWuvXr7d27txphYSEWCEhIQZTF4wbHZvDhw9b48aNs3bu3GkdOXLEWrVqlVWjRg3roYceMpzc+UaMGGFt2rTJOnLkiLVv3z5rxIgRlsPhsL788kvLsgrvOWNZuR+b/DpnbFVuLMuy5syZY1WtWtXy8PCwmjZtam3dutV0JOOef/55y9/f3/Lw8LDuuOMO6/nnn7cOHz5sOpYRGzZssCRdt3Xt2tWyrN+Xg48aNcqqXLmy5enpabVq1co6ePCg2dAFJLdjc+HCBeuRRx6xfH19reLFi1tBQUFWz549C8X/OGR3TCRZixcvzhxz8eJFq2/fvla5cuWsUqVKWU899ZSVmJhoLnQBudGxSUhIsB566CGrfPnylqenp3XnnXdaQ4cOtZKTk80GLwAvvfSSFRQUZHl4eFi+vr5Wq1atMouNZRXec8aycj82+XXOOCzLsvJw5QgAAMCl2eaeGwAAAIlyAwAAbIZyAwAAbIVyAwAAbIVyAwAAbIVyAwAAbIVyAwAAbIVyAwAAbIVyAwAAbIVyAwAAbIVyAwAAbOX/APjj+LYC8bhxAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "bounds, end_point = renderer.draw_glyph(ax, 'CDS', (2.5, 2.5))\n", "\n", "ax.set_xlim([bounds[0][0] - 2.5, bounds[1][0] + 2.5])\n", "ax.set_ylim([bounds[0][1] - 2.5, bounds[1][1] + 2.5])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This glyph is a terminator." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 15.0)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "bounds, end_point = renderer.draw_glyph(ax, 'Terminator', (2.5, 2.5))\n", "\n", "ax.set_xlim([bounds[0][0] - 2.5, bounds[1][0] + 2.5])\n", "ax.set_ylim([bounds[0][1] - 2.5, bounds[1][1] + 2.5])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now we will combine these into a single sequence. Starting with a promoter, ending with a terminator, and containing both ribosome entry site and CDS components in between." ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from collections import namedtuple\n", "from matplotlib.pyplot import figure\n", "\n", "part_list = []\n", "Part = namedtuple('part', ['glyph_type', 'orientation', 'user_parameters', 'style_parameters'])\n", "part_list.append(Part('Promoter', 'forward', None, None))\n", "part_list.append(Part('RibosomeEntrySite', 'forward', None, None))\n", "part_list.append(Part('CDS', 'forward', None, None))\n", "part_list.append(Part('Terminator', 'forward', None, None))\n", "\n", "construct = psv.Construct(part_list, renderer)\n", "\n", "fig, ax, baseline_start, baseline_end, bounds = construct.draw(False)\n", "fig.dpi = 400\n", "\n", "ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0,0,0), linewidth=1.5, zorder=0)\n", "\n", "plt.savefig(str(RESULTS_DIR / 'hello_world_sbol_visual.png'))" ] } ], "metadata": { "colab": { "provenance": [] }, "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.11.1" } }, "nbformat": 4, "nbformat_minor": 0 }