{ "cells": [ { "cell_type": "markdown", "id": "1ee80d82-557d-483f-98c4-a704a6d931c7", "metadata": {}, "source": [ "# Introduction\n", "\n", "Gempipe is a tool for drafting, curating and analyzing pan and multi-strain genome-scale metabolic models (GSMMs or GEMs).\n", "\n", "## In brief\n", "\n", "Gempipe can start from genomes or directly from proteomes, if a reliable annotation is available. Genomes are filtered for quality using both technical and biological metrics. Then, genes are annotated and grouped into clusters, and an extensive gene-recovery procedure is applied to counteract possible errors introduced during genome assembling or gene calling. \n", "\n", "Gene clusters are used to build a reference-free reconstruction based on the [CarveMe semi-curated universe](https://github.com/cdanielmachado/carveme), applying different rules for the generation of GPRs (gene-to-reaction associations), accounting for alternative isoforms and respecting the original enzyme complex definitions stored in [BiGG](http://bigg.ucsd.edu). \n", "\n", "The reference-free reconstruction is used as a source of new reactions for the expansion of an **optional** user-provided **reference**, thus taking into account the strain-specificity outside the scope of the reference itself. This expansion respects the design decision of the reference in terms of metabolites formula and charge and reactions balance. \n", "\n", "The resulting draft pan-GSMM is then annotated _de novo_ with accessions from many databases and duplicated metabolites and reactions are optionally removed. \n", "\n", "Unlike other tools like [CarveMe](https://carveme.readthedocs.io/en/latest/index.html) or [gapseq](https://gapseq.readthedocs.io/en/latest/), and even if a totally automated reconstruction mode ([`gempipe autopilot`](gempipe_autopilot.ipynb)) is provided, manual curation is strongly encouraged. To facilitate [manual curation](part_2_manual_curation.ipynb), Gempipe provides an application programming interface ([API](autoapi/gempipe/interface/index)) with dedicated functions. \n", "\n", "Once the pan-GSMM is finalized, it is used to derive a strain-specific GSMM for each input genome or proteome, exploiting the gene clusters information, eventually granting biomass production on a set of user-defined growth media. At this point, auxotrophies and growth-enabling substrates can be predicted, and [BiologĀ® screenings](https://www.biolog.com/products/metabolic-characterization-microplates/microbial-phenotype/) can be simulated.\n", "\n", "Finally, specific functions of the Gempipe [API](autoapi/gempipe/interface/index) can be used to analyze the deck of strain-specific GSMMs: phylometabolic trees can be created, strains can be divided in homogeneous metabolic groups, discriminative metabolic features can be extracted, core metabolism of species can be identified, etc.\n", "\n", "## Components and workflow\n", "\n", "Gempipe is composed by 3 command-line programs and an API. The Gempipe workflow is divided in four parts: \n", "\n", "* [**Part 1.**](part_1_gempipe_recon.ipynb) Creation of the **draft pan-GSMM** and the presence/absence matrix (**PAM**), starting either from genomes or proteomes (command line program [`gempipe recon`](part_1_gempipe_recon.ipynb)).\n", "* [**Part 2.**](part_2_manual_curation.ipynb) Manual curation of the draft pan-GSMM, for example using functions provided by the [Gempipe API](autoapi/gempipe/interface/index). \n", "* [**Part 3.**](part_3_gempipe_derive.ipynb) Derivation of strain-specific GSMMs, starting from the PAM and the curated pan-GSMM (command line program [`gempipe derive`](part_3_gempipe_derive.ipynb)). \n", "* [**Part 4.**](part_4_multi_strain_analysis.ipynb) Analysis of the deck of strain-specific GSMMs, for example using functions provided by the [Gempipe API](autoapi/gempipe/interface/index). \n", "\n", "As a (_discouraged_) alternative to the manual curation, the additional command line program [`gempipe autopilot`](gempipe_autopilot.ipynb) is provided, which internally calls [`gempipe recon`](part_1_gempipe_recon.ipynb) and [`gempipe derive`](part_3_gempipe_derive.ipynb), linking them together performing an automated gap-filling on the draft pan-GSMM. \n", "\n", "Below it is reported the **interactive** flowchart of Gempipe. It can be **zoomed** and **panned** to see the details. Some nodes are **clickable** and point to the corresponding doc section. " ] }, { "cell_type": "code", "execution_count": 1, "id": "1b67e8db-da1c-4830-85f1-e788ae66cae2", "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "%load_ext autoreload\n", "%aimport gempipe, gempipe.flowchart\n", "%autoreload 1" ] }, { "cell_type": "code", "execution_count": 2, "id": "a962bf80-7c09-4868-bd4c-d87229e79691", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", "\n", "
\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from gempipe import Flowchart\n", "\n", "file = open('flowcharts/part_1.flowchart', 'r')\n", "part_1 = file.read()\n", "file.close()\n", "\n", "file = open('flowcharts/part_2.flowchart', 'r')\n", "part_2 = file.read()\n", "file.close()\n", "\n", "file = open('flowcharts/part_3.flowchart', 'r')\n", "part_3 = file.read()\n", "file.close()\n", "\n", "file = open('flowcharts/part_4.flowchart', 'r')\n", "part_4 = file.read()\n", "file.close()\n", "\n", "header = 'flowchart LR \\n'\n", "flowchart = Flowchart(header + part_1 + part_2 + part_3 + part_4)\n", "flowchart.render(height=300, zoom=2)" ] }, { "cell_type": "code", "execution_count": null, "id": "3f9ff72b-e82b-45a0-8c4a-ba438d9ca541", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.15" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }