{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# IUPAC to Glycan\n", "\n", "In this tutorial we will build a Glycan 3D model from a IUPAC string input. The process is actually as simple as one line of code:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import glycosylator as gl\n", "gl.visual.set_backend('py3dmol')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's build the glycan with [GlyCosmos ID G06969ZX](https://glycosmos.org/glycans/show/G06969ZX) from it's IUPAC string descriptor:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# the glycan's IUPAC string is given by:\n", "# (just copy/past from GlyCosmos)\n", "iupac = \"Gal(b1-4)GlcNAc(b1-2)[Gal(b1-4)GlcNAc(b1-4)]Man(a1-3)[GlcNAc(b1-2)Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVAAAAGFCAYAAACrG6tFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAw1UlEQVR4nO3de1RU9d4/8PeeYQTiIsXFEbygkJefCHLwZ5mWVITHfFC7qGGHVZjZOU/GycdDZrTOU3bMHz7rPIGarjqPl/WcvHeO4aULJ6sFlbXKEMgLhEoYYhgIDF6Amfn8/picQvEym9kzw/B+rTVr5Z49+/v9znfPu+9m7/3diogIiIjIYTp3V4CIqKdigBIRqcQAJSJSiQFKRKQSA5SISCUGKBGRSgxQIiKVGKBERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglBigRkUoMUCIilRigREQqMUCJiFRigBIRqcQAJSJSiQFKRKQSA5SISCUGKBGRSgxQIiKVGKBERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglH3dXgAgARAQdHR2oqqpCYWEh9uzZg9LSUjQ1NQEAQkJCEB8fj7S0NKSmpiI2NhYGgwGKori34r0I++hKioiIuytBvZeIoLW1FRs3bkR+fj6qq6thtVohIvDRA3q97cdnsQjMFkBRFCiKgiFDhuCZZ55BZmYmgoKCvPpH6m7so6tjgJLbWCwWbNu2DdnZ2airq4NeD8QM9MXEpGCMHR2I6ChfBAfqAQAtrRZU17bh6/JWfHqgBcdOtsFiAYxGI1asWIH09HTo9Xo3t8j7sI+ujQFKbtHc3IwnnngCO3fuhE4nmJgUhD+k98OdY4PtP8jLRyyXdtWWVgs+PWDC2i2n8enXJlisCmbMmIH169ejb9++Lm+Lt2IfXR8DlFzup59+QkpKCsrKyhAZYcCL/z4AD//2Fvj76m74ME9EcKHNip2FjVj6+g+o/bEDo0ePxocffojw8HCNW+D92Ec3hgFKLtXc3IxJkyahrKwMY0behLUvDUHcsJtU/31MRHDouwv4w0vHUXL4PEaPHo2ioiKvGuW4GvvoxvEyJnIZi8WCJ554wv7D/Pt/xXbrhwnYDiFH3eqPv/9XLBL/z00oLy9HZmYmzGazE2vee7CPHMMAJZcQEWzbtg07d+5EZIQBa18agugoX6ecmVUUBYMjfbHmpaGIjDCgoKAAW7duBQ+uHMM+chwP4cklTCYTRowYgfr6Oqz+8xD8blqY0y9rERFs2vUTFiw9gdCwfqioqEBwcLBTy/Bm7CPHcQRKmhMRbNy4EXV1dbgzKQgPTb5Fk2sCFUXBQ5NvwZ1jg/Djjz9iw4YNPX6E4yrsI3UYoKS5jo4O5OfnQ68Hfp9uhL+vdrudn68Ov083wkcPrFq1Ch0dHZqV5U3YR+owQElzVVVVqK6uRsxAX9w5Vts7UhRFwcSkIMQM8sOJEydQWVmpWVnehH2kDgOUNFdYWAir1YqJSb9cgK2l4EA9Jo4NgoigsLBQ8/K8AftIHQYoaW7Pnj0QEYwdHeiyMv/v6ECICPbu3euyMnsy9pE6DFDSXGlpKXz0cNolMdejKAqio3zh46OgrKxM8/K8AftIHQYoaa6pqQl6vYK+Ljg0vCQ4UA+9Dvap1uja2EfqMEDJddwwm5k3TqGmKfaRQxigpLmQkBBYLIJmk8VlZba0WmCxwivut3YF9pE6DFDSXHx8PMwWoLq2zSUXTYsIvq9tg9ksiI+P17w8b8A+UocBSppLS0uDoij4urzVZWV+Vd4KRVEwdepUl5XZk7GP1GGAkuZSU1OhKAo+PdCCllbtDxFbWi0o/toERVGQmpqqeXnegH2kDgOUNBcbG4shQ4bg2Mk2fHrApOkhoojgswMmHKu5iOjoaAwbNkyzsrwJ+0gdBihpzmAwICsrCxYLsHbLaVxos2pW1sU2wdotp2G2AFlZWTAYDJqV5U3YR+owQElziqLg8ccfR//+/fHp1yb884NGTUY4IoJ/Fjag+GsT+vXrh8zMzB59iYwrsY/UYYCSSwQFBSE3NxcWq4Klr/+AQ99dcOoPVERwqOoClr7+AyxWBbm5uQgKCnLa9nsD9pHjGKDkEoqiID09HQ888ABO1XfgD/953GmXzIgIvj/Vjn//z+Oo/bED06ZNw5w5c3r0yMYd2EeO44z05FLNzc246667UF5ejsSRN2HNy0MRd6t/9x5YVnUB//6fx/HN4fOIi4tDUVERQkJCnFvxXoR9dOMYoORyZ86cQUpKCsrLyxEZYcCfnx6AByc7/sjci22Cnf9qwMurbY/MjYuLw759+7zmkbnuxD66MQxQcovm5mZkZmaioKAAep1g4tgg/D7diDuTguzzUV7+Q720q7a0WvDZNyas3XwaxV+bYLEqmDZtGjZs2OAVoxpPwT66PgYouY3ZbMbWrVvx3HPP4fTp0/DRAzGD/DBxbBD+7+hAREf52n+oLa0WfF/bhq/KW1H8te0aQrMF6NevH3JzczFnzhz4+Pi4uUXeh310bQxQcisRQWtrK9avX49Vq1bhxIkTEBGICHx8FOh/Ps1psQJms0BRFNtcktHReOaZZzB37lwEBWn7CIrejn10dQxQ8ggigo6ODlRWVqKwsBC7d+/GJ598AgDw8fFBSEgI4uPjMXXqVKSmpmLYsGEwGAxe+aP0VJf30d69e1FaWoqGhgYAQGhoKBISEnpVHzFAySOdO3cOgYG2x0u0trYiICDAzTWirvT2fuJ1oEREKjFAiYhUYoASEanEAKVuM5vNyM7ORlRUFIKDg5GcnHzFkxYrKipgNBphMpluaJsBAQH2M73O+rtaW1sbBg0ahAMHDjhlez0N+0kDQtRNb7zxhvj5+ck//vEPqaqqknnz5smIESM6rfPQQw/J0qVL7f++cOGCPPbYYxIXFyd6vV6mT5/u1DrNnz9fAMhrr73WaXl+fr7ce++9Ti2rp2A/OR9HoNRt+/btQ1paGh588EHExMRg4cKFOHr0KBobGwEAP/zwA3bt2oXMzEz7ZywWC/z9/ZGVlYWUlBSn1uedd97Bl19+icjIyCvee/TRR1FcXIwjR444tcyegP3kfAxQ6rb6+vpOP4K6ujoAgF5vu0Nl+/btSEhIwIABA+zrBAQEYO3atXjyySdhNBodLrOioqLL5bW1tViwYAE2bdrU5US9oaGhuOOOO7BlyxaHy+zp2E/OxwClbpNfXUpcWVmJJUuWYPz48fbH1RYVFWHs2LFOK89kMmHChAlYvnx5p+VWqxUZGRnIzs7GqFGjrvr5cePGobi42Gn16SnYT87nXTemklstXrwYK1asgKIo2LFjh315dXU1kpKSnFZOUFAQ3nvvPaSmpkJE8MILLwAAcnNz4ePjg6ysrGt+PioqCtXV1U6rT0/DfnIeBig5zaJFi5CWloZ3330X6enpeOuttzBr1ixcuHABfn5+Dm8vLCzMfpvg1eTk5OC+++6DTqdDfn4+vvnmm+veOujv74/z5887XB9vwX5yHgYoOU1ERAQiIiIwceJE1NfXY82aNZg1axbCwsJw9uxZh7f3xRdfwGw2d/leTU0NZs+ejenTpyMpKQkrV65EfX09Bg0aZF/HYrFg0aJFyMvL6zSSaWxs9Jr5KNVgPzkPA5Sc4vIfkMFgsI9mEhMTcfjwYYe3GRsb2+XylpYWTJkyBTNmzMC6deug0+mQkZFxxVniyZMnIyMjo9NZZQD49ttvkZiY6HB9vAH7ybkYoOQUGzduxNixY3H33XejtLQUmzdvxtKlSwHYfiDz5s2DxWKxn/EFgMOHD6O9vR2NjY0wmUw4ePAgAGDMmDHXLCs4OBirV6/GlClToNPZzoOGhoYiNDS003oGgwFGoxHDhw/vtLy4uBivvPJKN1vcM7GfnMy9l6GSN5g0aZLcdtttMmrUKPHz85Po6Gh58cUXxWw2i4iI2WyWqKgoef/99zt9bvDgwQLgipezDB48+IoLtD///HMJCQmR8+fPO62cnoL95Hyczo66LTk5GWPGjEFeXt5V11mzZg0KCgrwwQcfuK5iXZg5cyYSExPtZ4R7E/aT8/EQnlxi/vz5OHv2LEwmk9ueBd7W1oaEhAQsXLjQLeX3BOwnx3AESt12IyMbcj/2k/MxQMkj9faZznuK3t5PvJWTiEglBigRkUo8hPcw7n6CoRa7gze2yduwj9ThWXhPpe8DKC46QBABLG3al+ONbfI27COHMEA9kb4PQtK3QB82zCXFWRqq0LT5EW13Zm9sk7dhHzmMAeqJFB30YbEwGONcVJ5ie2lahhe2yduwjxzGk0hERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglBigRkUoMUCIilRigREQqMUCJiFRigBIRqcQAJSJSiQFKRKQSA5SISCUGKBGRSgxQIiKVGKBERCr5uLsC1AWxwtJwHIrimu6xNBwDRLQtxBvb5G3YRw5TRHp4C7yMoii2/9D7AoqrDhCsgLkNAKDF7uCNbfImJ0+exKBBg2z/YB85hCNQT2Vpc3cNnM9NbVq/fj3mzp3rlrI93cmTJ5GcnPzLAm/c7zTEv4F6GBFR9WptbbVvo7W1VfV2PKlN3XlZrVYsWLAAADBv3jysX79ek7b1ZJfC8/jx4xg6dChqamrc0lc9dfQJcARKXkpRFKxcuRIAsHr1asybNw8AOBL92eXh+cknn2DgwIHurlaPwwAlr8UQ7RrD03l4EomISCX+DdTFzGYzsrOzERUVheDgYCQnJ6OsrKzTOhUVFTAajTCZTG6qJdDW1oZBgwbhwIEDbqvD5bzxu/PGNvUqQi71xhtviJ+fn/zjH/+QqqoqmTdvnowYMaLTOg899JAsXbrU/u8LFy7IY489JnFxcaLX62X69OndqkN7e7s899xzEhcXJzfddJP0799fMjIypLa2ttN6+fn5cu+993arLGfyhO/ucvPnzxcA8tprr3VafqPfnSe0qafuD56AAepis2bNkpkzZ9r/fejQIQEgDQ0NIiJy8uRJMRgMcvLkSfs6ra2t8vvf/17efPNNmTx5crd/ME1NTZKSkiLbtm2To0ePyv79++W2226TpKSkTuv99NNP0qdPHzl8+HC3ynMWT/jufm3nzp2SkJAgkZGRVwTojX53ntCmnro/eAIewrtYfX09IiMj7f+uq6sDAOj1egDA9u3bkZCQgAEDBtjXCQgIwNq1a/Hkk0/CaDQ6XGZFRUWnf/ft2xf/+te/MGvWLAwfPhy33347Vq1ahQMHDqCmpsa+XmhoKO644w5s2bLF4TK14Anf3SW1tbVYsGABNm3aBIPBcMX7N/rdeUKbeur+4AkYoC4mvzpnV1lZiSVLlmD8+PHo27cvAKCoqAhjx451WnkmkwkTJkzA8uXLr7lec3MzFEVBSEhIp+Xjxo1DcXGx0+rTHZ7y3VmtVmRkZCA7OxujRo266udv5LvzlDZdrifsD56AlzG5yeLFi7FixQooioIdO3bYl1dXVyMpKclp5QQFBeG9995DamoqRAQvvPDCFetcvHgRzz//PObMmYPg4OBO70VFRaG6utpp9XEGd393ubm58PHxQVZW1jU/78h35+42/VpP2x/ciSNQN1m0aBGKi4vx/PPPIz09Hdu3bwcAXLhwAX5+fg5vLywsDIqidPkaN24cmpqakJOTg6+++qrT5zo6OvDII4/AarVizZo1V2zX398f58+fV9dIjbjzuztw4ADy8/OxcePGX+7xvwpHvjvuDz0TR6BuEhERgYiICEycOBH19fVYs2YNZs2ahbCwMJw9e9bh7X3xxRcwm81dvldTU4PZs2dj+vTpnUYzHR0dmDVrFk6cOIGPPvroitEGADQ2NiI8PNzh+mjJnd/dypUrUV9f/8vkGwAsFgsWLVqEvLy8TqMzR7477g89EwPUDS7fsQ0Gg32UkZiYiMOHDzu8zdjY2C6Xt7S0YMqUKZgxYwbWrVsHnc520HHpx/Ldd9/h448/RmhoaJef//bbb5GYmOhwfbTi7u8uIyMDKSkpndabPHkyMjIykJmZ2Wn5jX537m4T0HP3B7dz5yUAvdGkSZMkICBANmzYINXV1VJQUCDBwcGSl5cnIiK7du2SiIgIMZvNnT536NAhKSkpkbS0NElOTpaSkhIpKSm5oTL37NkjFovF/u+Ojg6ZNm2aDBgwQA4ePCh1dXX2V1tbW6fPDh48WP73f/+3e412Ek/47royePDgKy5jurT8et+dJ7Spp+4PnoAB6mKTJk2S2267TUaNGiV+fn4SHR0tL774ov0HYjabJSoqSt5///1Onxs8eLAAuOKlxokTJ7rcFgD5+OOP7et9/vnnEhISIufPn1fdXmfyhO+uK10F6I1+d57Qpp66P3gCBqiLTZo0Sf74xz9ec53XX39dUlNTXVOha3j44Ydl2bJl7q6GnTd+d97Ypt6EfwP1QPPnz8fZs2dhMpkQFBTkljq0tbUhISEBCxcudEv5annjd+eNbfIWvIzJA/n4+CAnJ8ehH8u5c+fsl6mcO3eu23Xw9fXFiy++CH9//25vy5XUfHdXIyJ45plnoCgKdDrdDU/K7Ozvrqs2nTx5EjExMVAUBTExMTh58qRTyrqanro/aI3T2XmJc+fOITAwEIBtRvqAgAA318g7iAiysrKwevVqKIqC//mf/3H7fKKcz9Nz8BCe6Bo8bVJmhqdnYYASXYenhCjD0/MwQHsgEUFHRweqqqpQWFiIPXv24ODBg/b3Bw8ejISEBKSlpSE1NRWxsbEwGAzXvfWQrs7REO2qj0pLS9HU1AQACAkJQXx8/A33EcPTQ7nzEgByjNVqlZaWFlm5cqXExMSIXq8XRVFs1+zpFYFBb3vpbcsURRGdTicxMTGSl5cnzc3NYrVa3d2MHs1qtcqCBQvs3++6deuueN/ZfVRTUyNDhw4VADJ06FCpqalxZZPpGngSqYewWCzYtm0bsrOzUVdXB9EpwIC+QGIUMMoIRAYDgX1sK7e2A3UtwKHTQEktcLIZilVgNBqxYsUKpKen2+ebJMfJVU4sadFHHHl6NgZoD9Dc3IwnnngCO3fuhFUH2w/y4XjgNwOAwD5QAODyQz8RCGD7oR6sBbaXAiW10FmBGTNmYP369fY5J8lxl4fohg0bsHv3bqf20auvvor777+f4enBGKAe7qeffkJKSgrKysog4QHA/NuBlFsBX58b/pumiABtZmBfFfDmfij15zB69Gh8+OGHnFmnGy6F6L/+9S+cOnUKra2tTu2jkJAQhIeHw2w2Mzw9FAPUgzU3N2PSpEm28BweDuTcC8SGqT4ZJCLAsQZg2YdQjp7B6NGjUVRUxJFoNzQ1NSEuLg61tbXAiAin9hGO1OPmm2/G/v37MXz4cCfXnJyBdyJ5KIvFgieeeOKX8Fw2pVs/TMB2JhkxocCyKZAR4SgvL0dmZuZV542ka7NYLJg3bx5OnTplC08n9xFGRqCpqQlLlixhH3koBqgHEhFs27YNO3futB0S5twLRAY75TIkRVGA/sFATgokPAAFBQXYunUreCDiGPYRATyE90gmkwkjRozAqfrTwPP3AFNHOv0aThEB3j0CLP8IxrAIVFRUdDkDOXWNfUQAR6AeR0SwceNG2+NtE6OAlFs1uQBeURTg3mHAb6Lw448/YsOGDRzh3CD2EV3CAPUwHR0dyM/Pt11DODMB8NXwZjFfPTAzAaJXsGrVKnR0dGhXlhdhH9ElDFAPU1VVZXsw2UDbBdha3n6pKIptBDUwBCdOnEBlZaVmZXkT9hFdwgD1MIWFhbBarcCYqF/uWtFSQB8gMQoigsLCQu3L8wLsI7qEAeph9uzZY/s71ygjXDH1hwIAo4wQEezdu9cFJfZ87CO6hAHqYUpLSwG9Yrtv2hWzJyk/l6XXoaysTPvyvAD7iC5hgHqYpqYmQKdzzaHhJYF9AL1in2qNro19RJcwQMmO84V6PvaRZ2GAepiQkBDAKrYZelyltR2wCO+Jv0HsI7qEAeph4uPjAYsVONUCuOKiaRFbWRarrWy6LvYRXcIA9TBpaWm2w7TDp+GKe04EAA6dhqIomDp1qgtK7PnYR3QJA9TDpKam2n6cJbWuOUQ81w6U1EJRFKSmpmpfnhdgH9ElDFAPExsbiyFDhgAnm4GSWk3vfRaRnx8n0YTo6GgMGzZMs7K8CfuILmGAehiDwYCsrCwoVgF2lNpmKddKmwXYUQrFYptZ3WAwaFeWF2Ef0SWczs4DtbS0YOTIkbap0pbcA9yv0VRp7x0FXt3HqdJUYB8RwBGoRwoKCkJubi50VgBvfAEca3DqYaL9sRFv7IfOCuTm5iIoKMhp2+8N2EcEMEA9kqIoSE9PxwMPPADlzDnb83FOtTjlByoiQJ0JWLYPSv05TJs2DXPmzOEF2g5iHxHAQ3iP1tzcjLvuugvl5eWQEeHACylAbKjTHlgWFhaG8vJyGI1GJ9e896ioqMD48eNx9uxZYGSEU/tIOXoGcXFxKCoqsl28Tx6HAerhzpw5g5SUFFuIduuRuRbgo++AN2yPzA0MDERkZCSioqKwe/du3HTTTRq3xPucPHkSycnJ8PHxwZkzZ9DU1OTUPoqLi8O+ffv46GkPxkN4DxceHo6ioiLMmDEDup/OA//vIyB7D1B8AtLaZvvhdfX/QBGICKS1Dfj0BPDcbuDVfdCdOY/p06dj9+7dqK2txUcffYS0tDScP3/e9Y3rwS6F5/Hjx2E2m7F//36n91FRURHD08NxBNpDmM1mbN26Fc899xxOnz4N0SvAwBDbbOWjjLbpzi7NDtTabrv179Bp+zWEikXQr18/5ObmYs6cOfDx8cFnn32G3/72t2htbcU999zDkegN+nV4Dh06FJ988gkGDhyoSR+RhxPqMaxWq7S0tEheXp7ExMSITqcTRVEEgECvE/TR2156nQAQRVFEp9PJ0KFD5bXXXpPm5maxWq2dtvnpp59KYGCgAJB77rlHzp0756bW9Qw1NTUydOhQASBDhw6VmpqaTu9r0UfkuTgC7YFEBB0dHaisrERhYSH27t2LsrIy+1yRISEhiI+Px9SpU5Gamophw4bBYDBc9e9xHInemKuNPLvi7D4iz8QAJQAM0etxJDyp9+BJJAIATJgwAe+//z4CAwN5YukyDE+6GgYo2TFEr8TwpGvhITwRkUocgfZy7e3tiI2NxWeffebWejz88MP47//+b6dsyxvbRJ6JAdrLvfnmmxg8eDAmTJhgX7Zs2TLccccduOmmm5x2C2FTUxOefvpp9O/fH35+fhg5ciTeffdd+/t//vOfsWzZMrS0tHS7LFe06Z///CfGjh2LkJAQBAQEYMyYMfj73//eaR1ntok8EwO0l1u1ahXmzZvXaVl7eztmzpyJP/zhD04po729Hffddx+qq6vx9ttvo6KiAn/7298QFRVlXyc+Ph7R0dHYtGlTt8tzRZtuueUW5OTkYP/+/SgrK0NmZiYyMzPxwQcf2NdxZpvIQ7nvElTSmslkkrlz50pQUJCEh4fLK6+8Ig0NDeLr6yv19fVy4MAB0el00tzc3OXnN2zYIH379nWozOPHj0tbW1unZWvXrpWhQ4dKe3v7NT/70ksvyZ133tkj2tSVxMREefHFFzstu5E2Uc/Fe8W82OOPP47y8nJ8/PHHqK+vx4MPPoiqqircdtttCA8Px6ZNmzBs2DCnTtL71FNPwc/PD2+//Tb69LHdtrhr1y6MHz8eTz/9NAoKChAeHo45c+Zg8eLF0Ov19s+OGzcOy5cvR1tbG3x9fT26Tb8mIvjoo49QUVGB3NzcTu/dSJuoB3N3gpM2zpw5I4qiyObNm+3L0tPTBYC89tprIiLyxz/+Ue65556rbkPNaO3MmTMSHx8v//Zv/2YftQ0fPlx8fX1l7ty58vXXX8uWLVvklltukZdffrnTZ0tLSwWAVFdXe3ybRESampokICBAfHx8xNfXV9atW3fFZ6/XJurZ+DdQL1VVVQURwfjx4+3Lxo0bBwB44IEHAAAXLlyAn5+fw9t++OGHoShKl6/w8HCUlZVhz549yM/PBwBYrVZERETgzTffRFJSEh555BHk5ORg7dq1nbbr7+8PAFe99tST2gTYZqU/ePAgvvrqKyxbtgz/8R//gU8++cShNlHPxkN4L3XpcPHXh5xhYWEYOHAgBg8ebP93eXm5w9teuXIl/vKXv3T5XltbGx577DEoioK5c+cCAPr37w+DwdDpcH3kyJE4ffo02tvb7XVsbGwEgKtO4eZJbQIAnU6H2NhYAMCYMWNw5MgRLF++HMnJyfZ1rtcm6tkYoF5qyJAh0Ol0+O677xAZGQkA2Lt3L+rq6uyhlZiYiLVr10JEHJrEIjIy0r7Nyz300EPQ6XT48MMPccsttwCw3eG0efNmWK1W6HS2g57Kykr079+/Uxh+++23GDBgAMLCwjy+TV0REbS1tXVadr02UQ/n1j8gkKYefvhhue++++T8+fNSVlYmgYGB0q9fP9m5c6eIiPz000/Sp08fKS8v7/S577//XkpKSuTll1+WwMBAKSkpkZKSEjGZTNct87PPPpOGhoZOy2pqaiQwMFAWLFggFRUVsmfPHomIiJC//OUvndZ77LHHZO7cuT2iTa+++qoUFhbKsWPH5MiRI/LXv/5VfHx85G9/+5vDbaKeiwHqxX788UeZPn263HLLLRIaGipr1qyRt99+W4xGo/z1r38VEZFHHnlEnn/++U6fe+yxx2zzV172+vjjj1XX5fPPP5fbbrtNfH19ZejQobJs2TIxm8329y9cuCDBwcGyf//+HtGmnJwciY2NFT8/P7n55ptl/PjxsnXr1k7r3GibqOfivfC9XHl5OVJSUlBVVeXWx+a+/vrrKCgoQGFhYbe35Y1tIs/Es/C93OjRo7FixQpUV1e7tR4GgwGrVq1yyra8sU3kmTgCJafx1EmZOSUdaYUjUHIaT5xPlOFJWmKAklN5UogyPElrPIQnTTh6OC8/P4StqqoKhYWF2LNnD0pLS694CFtaWhpSU1MRGxt7zYewMTzJJdx4BQB5uRt5ZPKlxwCvXLlSYmJiRK/X/+oxwIrAoLe99EqnxwDHxMRIXl5el48Bvt6jh4mchSNQ0tS1RqIWiwXbtm1DdnY26urqIDoFGNAXSIwCRhmByGAg8Oc7lVrbgboW4NBpoKQWONkMxSowGo1YsWIF0tPTodfrOfIkl2KAkua6CtGOjg488cQT2LlzJ6w62ELz4XjgNwOAwD5QAODyw3MRCGAL04O1wPZSoKQWOiswY8YMvPrqq7j//vsZnuQyDFByiV+HaHp6Og4dOoTy8nJIeAAw/3Yg5VbA1+eG718XEaDNDOyrAt7cD6X+HEJCQhAeHg6z2czwJJdggJLLfPbZZ5g/fz5qamrQ2toKjIgAcu4FYsMcmvjj10QEONYALPsQOFKPm2++Gfv378fw4cOdXHuiK/EyJnKZ22+/HVFRUb+E57Ip3QpPALbPxoTatjUyAk1NTViyZAnMZrMTa07UNQYouYSIYNu2bdi3bx8QEWgbeUYGdys8L1EUBegfDOSkQMIDUFBQgK1bt4IHV6Q1HsKTS5hMJowYMQKn6k8Dz98DTB3plPD8NREB3j0CLP8IxrAIVFRUOPXZSESX4wiUNCci2LhxI+rq6mxn21NudXp4Aj+PRO8dBvwmCj/++CM2bNjAUShpigFKmuvo6EB+fr7tOs+ZCYCvhg9C8NUDMxMgegWrVq1CR0eHdmVRr8cAJc1VVVXZppYbaLtIXovR5yWKothGuQNDcOLECVRWVmpWFhEDlDRXWFgIq9UKjIn65c4iLQX0ARKjICKczJg0xQAlze3Zs8f2t8hRRmg39vyFAgCjjBAR7N271wUlUm/FACXNlZaWAnrFdm+7hofvdsrPZel1KCsr07486rUYoKS5pqYmQKdzzeH7JYF9AL1inw6PSAsMUPJqWp6wImKAkuZCQkIAq9hmUXKV1nbAIujbt6/ryqRehwFKmouPjwcsVuBUC+CKC9tFbGVZrLayiTTCACXNpaWl2Q6lD5+GK+4LEgA4dBqKomDq1KkuKJF6KwYoaS41NdUWoCW1rjmMP9cOlNRCURSkpqZqXx71WgxQ0lxsbCyGDBkCnGwGSmo1vT9dRH5+5EcToqOjMWzYMM3KImKAkuYMBgOysrKgWAXYUWqbSV4rbRZgRykUiyArKwsGg0G7sqjX43R25BItLS0YOXKkbTq7JfcA92s0nd17R4FX93E6O3IJjkDJJYKCgpCbmwudFcAbXwDHGpx6KG9/tMcb+6GzArm5uQgKCnLa9om6wgAll1AUBenp6XjggQegnDlne4bRqRanhKiIAHUmYNk+KPXnMG3aNMyZM4cX0ZPmeAhPLtXc3Iy77rrL9kTOEeHACylAbKhTHiqnHD2DuLg4FBUV2S7eJ9IYA5Rc7syZM0hJSXHCY40twEffAW/YHmscFxeHffv2ITw8XOMWENkwQMktmpubkZmZiYKCAlh1sE2CPDMB+E0UENDHNiXd5WEqYrtI/ufrPLGjFPimFjorMG3aNGzYsIEjT3IpBii5jdlsxtatW/Hcc8/h9OnTEL0CDAyxhekoo21KukszOLW2227PPHTafp2nYhH069cPubm5mDNnDnx8NHxUCFEXGKDkViKC1tZWrF+/HqtWrcKJEycgIrZDdL3ONo8oAFgEsFihKAoURUF0dDSeeeYZzJ07F0FBQTxhRG7BACWPICLo6OhAZWUlCgsLsXv3bnzyyScAAB8fH4SEhCA+Ph5Tp05Famoqhg0bBoPBwOAkt2KAkkc6d+4cAgMDAQCtra0ICAhwc42IrsTrQImIVGKAEhGpxAAlIlKJfwMlIlKJI1DqNrPZjOzsbERFRSE4OBjJyclXPE64oqICRqMRJpPJTbUE2traMGjQIBw4cMBtdSDvwgClblu/fj1Wr16NVatWoaSkBLfeeitmz57daZ2cnBw8/fTT9hmSLl68iMcffxyjR4+Gj48PZsyY4dQ6PfXUU1AUBXl5efZlvr6++NOf/oTFixc7tSzqvRig1G379u1DWloaHnzwQcTExGDhwoU4evQoGhsbAQA//PADdu3ahczMTPtnLBYL/P39kZWVhZSUFKfW55133sGXX36JyMjIK9579NFHUVxcjCNHjji1TOqdGKDUbfX19Z3Cqq6uDgCg1+sBANu3b0dCQgIGDBhgXycgIABr167Fk08+CaPR6HCZFRUVXS6vra3FggULsGnTpi5now8NDcUdd9yBLVu2OFwm0eUYoNRtvz4PWVlZiSVLlmD8+PH2Z7IXFRVh7NixTivPZDJhwoQJWL58eaflVqsVGRkZyM7OxqhRo676+XHjxqG4uNhp9aHei7MvkNMsXrwYK1asgKIo2LFjh315dXU1kpKSnFZOUFAQ3nvvPaSmpkJE8MILLwCwzULv4+ODrKysa34+KioK1dXVTqsP9V4MUHKaRYsWIS0tDe+++y7S09Px1ltvYdasWbhw4QL8/Pwc3l5YWBgaGhquuU5OTg7uu+8+6HQ65Ofn45tvvrnu/fH+/v44f/68w/UhuhwDlJwmIiICERERmDhxIurr67FmzRrMmjULYWFhOHv2rMPb++KLL2A2d/0Ez5qaGsyePRvTp09HUlISVq5cifr6egwaNMi+jsViwaJFi5CXl9dpxNnY2MhJl8kpGKDkFJcHncFgsI86ExMTcfjwYYe3GRsb2+XylpYWTJkyBTNmzMC6deug0+mQkZFxxdn8yZMnIyMjo9PZfwD49ttvkZiY6HB9iC7HACWn2LhxI8aOHYu7774bpaWl2Lx5M5YuXQrAFmTz5s2DxWKxn5kHgMOHD6O9vR2NjY0wmUw4ePAgAGDMmDHXLCs4OBirV6/GlClToNPZzoOGhoYiNDS003oGgwFGoxHDhw/vtLy4uBivvPJKN1tMxFs5yQmSk5Nx8eJFtLa24tixYzAajfjd736Hl156CXq9HhaLBYMHD8a6deswefJk++eio6Px/fffX7E9Z+2S0dHRePbZZ/Hss8/al+3fvx/3338/Tp06BX9/f6eUQ70XA5S6LTk5GWPGjOl018/l1qxZg4KCAnzwwQeuq1gXZs6cicTERPuZe6Lu4CE8ucT8+fNx9uxZmEwm++2crtbW1oaEhAQsXLjQLeWT9+EIlLrtRkagjuKM9NQTMEDJIzFAqSfgrZxERCpxBEqac/eTM7mLk1Z4EolcR98HUFx00CMCWNpcUxb1WgxQcg19H4Skb4E+bJhLirM0VKFp8yMMUdIUA5RcQ9FBHxYLgzHOReUptheRhngSiYhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglBigRkUoMUCIilRigREQqMUCJiFRigBIRqcQAJSJSiQFKRKQSA5SISCUGKBGRSgxQIiKVGKBERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJR93V4B6CbHC0nAciuKaXc7ScAwQcUlZ1HspItzLSFuKotj+Q+8LKK466LEC5jYAAHdx0goDlDRnD1A34S5OWuEhPGlOTYCdO3cOgYGBAIDW1lYEBAQ4u1pE3caTSEREKjFAiYhUYoASEanEAKVuM5vNyM7ORlRUFIKDg5GcnIyysrJO61RUVMBoNMJkMt3QNgMCAiAiEBGn/f2zra0NgwYNwoEDB5yyPSIGKHXb+vXrsXr1aqxatQolJSW49dZbMXv27E7r5OTk4Omnn0ZQUBAA4OLFi3j88ccxevRo+Pj4YMaMGU6t01NPPQVFUZCXl2df5uvriz/96U9YvHixU8ui3osBSt22b98+pKWl4cEHH0RMTAwWLlyIo0ePorGxEQDwww8/YNeuXcjMzLR/xmKxwN/fH1lZWUhJSXFqfd555x18+eWXiIyMvOK9Rx99FMXFxThy5IhTy6TeiQFK3VZfX98prOrq6gAAer0eALB9+3YkJCRgwIAB9nUCAgKwdu1aPPnkkzAajQ6XWVFR0eXy2tpaLFiwAJs2bYLBYLji/dDQUNxxxx3YsmWLw2USXY4BSt326+s8KysrsWTJEowfPx59+/YFABQVFWHs2LFOK89kMmHChAlYvnx5p+VWqxUZGRnIzs7GqFGjrvr5cePGobi42Gn1od6LF9KT0yxevBgrVqyAoijYsWOHfXl1dTWSkpKcVk5QUBDee+89pKamQkTwwgsvAAByc3Ph4+ODrKysa34+KioK1dXVTqsP9V4MUHKaRYsWIS0tDe+++y7S09Px1ltvYdasWbhw4QL8/Pwc3l5YWBgaGhquuU5OTg7uu+8+6HQ65Ofn45tvvrnuraP+/v44f/68w/UhuhwDlJwmIiICERERmDhxIurr67FmzRrMmjULYWFhOHv2rMPb++KLL2A2m7t8r6amBrNnz8b06dORlJSElStXor6+HoMGDbKvY7FYsGjRIuTl5XUacTY2NiI8PNzh+hBdjgFKTnF50BkMBvuoMzExEYcPH3Z4m7GxsV0ub2lpwZQpUzBjxgysW7cOOp0OGRkZV5zNnzx5MjIyMjqd/QeAb7/9FomJiQ7Xh+hyDFByio0bN2Ls2LG4++67UVpais2bN2Pp0qUAbEE2b948WCwW+5l5ADh8+DDa29vR2NgIk8mEgwcPAgDGjBlzzbKCg4OxevVqTJkyBTqd7TxoaGgoQkNDO61nMBhgNBoxfPjwTsuLi4vxyiuvdLPFRJzOjpwgOTkZFy9eRGtrK44dOwaj0Yjf/e53eOmll6DX62GxWDB48GCsW7cOkydPtn8uOjoa33///RXbc9YuGR0djWeffRbPPvusfdn+/ftx//3349SpU/D393dKOdR7MUCp25KTkzFmzJhOd/1cbs2aNSgoKMAHH3zguop1YebMmUhMTLSfuSfqDh7Ck0vMnz8fZ8+ehclkst/O6WptbW1ISEjAwoUL3VI+eR+OQKnbbmQESuSNGKDkkTgjPfUEvJWTiEglBigRkUo8hCfN8amc5K14Fp5cR9/Hdc+FFwEsba4pi3otBii5hr4PQtK3QB82zCXFWRqq0LT5EYYoaYoBSq6h6KAPi4XBGOei8hTbi0hDPIlERKQSA5SISCUGKBGRSgxQIiKVGKBERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglBigRkUoMUCIilRigREQqMUCJiFRigBIRqcQAJSJSiQFKRKSSj7srQL2EWGFpOA5Fcc0uZ2k4Boi4pCzqvRQR7mWkLUVRbP+h9wUUVx30WAFzGwCAuzhphQFKmrMHqJtwFyet8BCeNMcAI2/Fk0hERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglBigRkUoMUCIilRigREQqMUCJiFRigBIRqcQAJSJSiQFKRKQSA5SISCUGKBGRSgxQIiKVGKBERCoxQImIVGKAEhGpxAAlIlKJAUpEpBIDlIhIJQYoEZFKDFAiIpUYoEREKjFAiYhUYoASEanEACUiUokBSkSkEgOUiEglBigRkUoMUCIilRigREQqMUCJiFRigBIRqcQAJSJSiQFKRKQSA5SISKX/D6hdgkr2frlyAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# and now pass the iupac string to the glycan function of glycosylator\n", "my_glycan = gl.glycan(iupac)\n", "\n", "# let's see\n", "my_glycan.draw2d()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There it is! Now let's see what it looks like in 3D..." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "my_glycan.show3d()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we are unhappy with parts of it, we can call on the `optimize` method to improve the conformation a little :-)\n", "To learn more about the optimization go check out the [BuildAMol tutorial](https://biobuild.readthedocs.io/en/latest/examples/optimization.html)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# optimize the conformation (if we are unhappy for some reason)\n", "# there are of course many additional options that can be passed to this method...\n", "my_glycan.optimize(rotatron_kws=dict(pushback=2, unfold=1))\n", "\n", "my_glycan.show3d()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While we are at it, let's check out if we can reverse-engineer the IUPAC string." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "new: Gal(b1-4)GlcNAc(b1-2)[Gal(b1-4)GlcNAc(b1-4)]Man(a1-3)[GlcNAc(b1-2)Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc(a1-\n", "orig: Gal(b1-4)GlcNAc(b1-2)[Gal(b1-4)GlcNAc(b1-4)]Man(a1-3)[GlcNAc(b1-2)Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc\n" ] } ], "source": [ "reverse = my_glycan.to_iupac()\n", "print(\"new: \", reverse)\n", "print(\"orig: \", iupac)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ah, Glycosylator added a `(a1-` at the end of the string. We did not specify any isomer in the original input so Glycosylator assumed it would be the alpha configuration. Actually, we could tell Glycosylator to drop this suffix if it bothers us for some reason using `add_terminal_conformation=False` when calling `to_iupac` ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we are happy now, maybe we want to use the structure for some other experiment like molecular dynamics. Let's export the structure to a PDB file so we can use it with other software..." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "my_glycan.to_pdb(\"./files/my_first_glycan.pdb\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While we are at it, we can also directly pass the GlyCosmos ID to the `glycan` function in order to obtain our desired output:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# this time we pass the ID directly so Glycosylator\n", "# will perform a query to obtain the IUPAC string for us\n", "my_glycan_again = gl.glycan(\"G06969ZX\")\n", "my_glycan_again.draw2d()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specifying Isomers\n", "Monosaccharides can be found in different configurations. If a specific sugar such as Galactose has multiple possible stereoisomers available such as _$\\alpha$-D-Galactose_ vs _$\\alpha$-L-Galactose_ Glycosylator will by default go and select the first matching component that fits the provided input, thus potentially adding an isomer other than the one desired. This can be prevented by specifying isomer information within the IUPAC string like so:\n", "\n", "1. add `d-` or `l-` in front of the monosaccharide code \n", "2. add `p` (pyranose) or `f` (furanose) after the monosaccharide code\n", "\n", "The pattern looks like this: `{d|l}-{code}{p|f}`, e.g. `d-Galp` for a D-configuration Galactopyranose. The information whether $\\alpha$ or $\\beta$ is required comes from the linkage that connects the given monosaccharide unit to the previous one in the glycan. Therefore `d-Galp(b1-4)GlcNAc` will connect a $\\beta$-D-Galactopyranose to the N-Acetylglucose." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# specify the stereochemistry of the terminal Galactose\n", "iupac_with_l = \"l-Galp(b1-4)GlcNAc\"\n", "iupac_with_d = \"d-Galp(b1-4)GlcNAc\"\n", "\n", "# make sure to disable internal coordinate usage\n", "# because these can only specify coordinates for one stereochemistry\n", "# which may lead to unexpected results\n", "gl.utils.dont_use_ic()\n", "\n", "glycan_with_l = gl.glycan(iupac_with_l)\n", "glycan_with_d = gl.glycan(iupac_with_d)\n", "\n", "# make a 3D visualization\n", "glycan_with_d.superimpose_to_residue(glycan_with_d.get_residue(1), glycan_with_l.get_residue(1))\n", "\n", "v = glycan_with_l.py3dmol()\n", "v += glycan_with_d.py3dmol()\n", "\n", "v.add(glycan_with_l.get_residue(-1), style={\"sphere\": {\"radius\": 1, \"opacity\": 0.4, \"color\": \"orange\"}})\n", "v.add(glycan_with_d.get_residue(-1), style={\"sphere\": {\"radius\": 1, \"opacity\": 0.4, \"color\": \"purple\"}})\n", "\n", "v.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And there we have two glycans with different isomers for Galactose!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specifying Modified or non-sugar Residues\n", "\n", "What if we are trying to build a glycan with a specially modified monosaccharide or even a hybrid structure containing some completely different fragment? In these cases we may not be able to make a IUPAC string that describes the glycan we want to build. \n", "\n", "In general it is advisable to make modifications on an existing structure or manually assemble hybrid structures instead of trying to \"hack\" the IUPAC-string parsing and assembly pipeline of Glycosylator. However, to allow modified sugar residues that cannot be represented by a canonical IUPAC string or which are not understood by Glycosylator in IUPAC format for some reason, you can also directly pass the compound IDs of the fragments to use within the IUPAC string. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# make a glycan by providing the PDB IDs of the monosaccharides we want to use\n", "# BGC = beta-D-Glucose, BMA = beta-D-Mannose\n", "pseudo_iupac = \"BGC(b1-4)BMA(b1-4)Gal\"\n", "gl.glycan(pseudo_iupac).show3d()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This method technically also supports any compound that can be obtained from the loaded component database and is not limited to IUPAC-representable sugars. However, in these cases we likely cannot use glycosidic linkages. So just like we can provide component IDs directly we can also provide linkage IDs directly. When providing custom linkage IDs we still have to provide `a` or `b` as prefix character so that downstream \"normal\" glycosidic linkages know which id's to reference when converting from IUPAC format (and custom linkage IDs must **not** contain `-`!). \n", "If that sounds weird and I lost you at this point. Let's make an example!" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": [ "
\n", "

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# let's say we want to make a pseudo-glycan which has a branched structure with a central benzene ring\n", "# we could manually assemble this (which is probably what we should be doing anyways)\n", "# but we can also \"hack\" our way through the IUPAC-string parsing pipeline to get it done \"automatically\"\n", "\n", "# make sure the benzene is loaded\n", "gl.load_small_molecules()\n", "\n", "# define the pseudo-IUPAC string which contains both the benzene (BNZ) and a bunch\n", "# of (as yet undefined) linkages %link1, %link2, %link3 all with a dummy prefix \"a\" to signify alpha-linkages\n", "# which is important for the downstream glycans that will have normal glycosidic linkages\n", "pseudo_iupac = \"Man(b1-6)Man(a%link3)[GalNAc(a1-6)GalNAc(a%link2)][Glc(b1-3)Glc(a%link1)]BNZ\"\n", "\n", "# now we define the linkages and add them to the default topology\n", "# so the system can find them when parsing the IUPAC string\n", "link1 = gl.linkage(\"C1\", \"O1\", id=\"%link1\")\n", "link2 = gl.linkage(\"C3\", \"O1\", id=\"%link2\")\n", "link3 = gl.linkage(\"C5\", \"O1\", id=\"%link3\")\n", "gl.add_linkage(link1)\n", "gl.add_linkage(link2)\n", "gl.add_linkage(link3)\n", "\n", "\n", "# # now we can parse the IUPAC string\n", "pseudo_glycan = gl.read_iupac(\"pseudo_glycan\", pseudo_iupac)\n", "pseudo_glycan.show3d()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And there we have a \"pseudo\" glycan with a central benzene ring. Again, even though this does work. If you have derivatives like this to make, you should really just use proper methods like `attach` to manually assemble the structure you are interested in! This kind of hacking may not be convenient or reliable depending on the situation. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And with that we have reached the end of this tutorial! To reacp: we can pass IUPAC-format strings to the top-level `glycan` function (or the `read_iupac` function, of course). We can even make modified glycans or pseudo-glycans in this fashion by including component and linkage IDs directly into the IUPAC strings, although this \"feature\" should not be relied on too heavily. Thanks for sticking round until the end and good luck with your project using Glycosylator! " ] } ], "metadata": { "kernelspec": { "display_name": "glyco2", "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.0" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }