{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Loopless FBA" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The goal of this procedure is identification of a thermodynamically consistent flux state without loops, as implied by the name. You can find a more detailed description in the [method](#Method) section at the end of the notebook." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import plot_helper\n", "\n", "from cobra.io import load_model\n", "from cobra import Reaction, Metabolite, Model\n", "from cobra.flux_analysis.loopless import add_loopless, loopless_solution\n", "from cobra.flux_analysis import pfba" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Loopless solution" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Classical loopless approaches as described below are computationally expensive to solve due to the added mixed-integer constraints. A much faster, and pragmatic approach is instead to post-process flux distributions to simply set fluxes to zero wherever they can be zero without changing the fluxes of any exchange reactions in the model. [CycleFreeFlux](http://dx.doi.org/10.1093/bioinformatics/btv096) is an algorithm that can be used to achieve this and in cobrapy it is implemented in the `cobra.flux_analysis.loopless_solution` function. `loopless_solution` will identify the closest flux distribution (using only loopless elementary flux modes) to the original one. Note that this will not remove loops which you explicitly requested, for instance by forcing a loop reaction to carry non-zero flux. \n", "\n", "Using a larger model than the simple example above, this can be demonstrated as follows" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "salmonella = load_model('salmonella')\n", "nominal = salmonella.optimize()\n", "loopless = loopless_solution(salmonella)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import pandas\n", "\n", "df = pandas.DataFrame(dict(loopless=loopless.fluxes, nominal=nominal.fluxes))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+CmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUgNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgNDEzLjI4NTYyNSAzMTAuODU1NzUgXSAvQ29udGVudHMgOSAwIFIgL0Fubm90cyAxMCAwIFIgPj4KZW5kb2JqCjkgMCBvYmoKPDwgL0xlbmd0aCAxMiAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnic7V1LcyW3dd7zV9xlskAPzguPpRXFqnJVFrZV8SKVhUuRFav0iDxl6+/nO+g7w24ZzWaTvJyeEaaKEvvjd3HReJwHcHDw5vOv//HXr77+wxefXf7tj3dv7p++entHl2/x880lXr7Fz88XunyBn2/uIp6+v1OSiYslNjx+t3wUilMxywY4rp7+9+7uL3dvfoNC3uJDX9zdaZlqmj+UJ1MBCyXHNMWyRr9boVGmdC1yUcICbV/006VTvFieiC+c0kT4/9++vvzp8sPlzW+41Ql/Ikslcba7OGm6/sv4S45WCotxvfztG7TDt/j5efWJy+Yn7v7wxSOZKPvuJ7S6tzFdqKYps6okK3IhzVPSXGpK1fLlq+8vb/4jXj7/8T3d//vB0SnGmiPFStoeMnMpOZcON6zIYYd9sBboXaucY221KFJqzWjffo0xRmoSs/agVLWWpBs1plRKqTHNNca3FK1W5cO3/MeGtu7OVqjM7W7K1AZ6l5ulJhWb+9OMyCQTbfRRIVZ0VJ37KEVwI1frlqxSCaWl5LUQzhxLVepxUZZgFGGAUGF/4pqLasT03KiHVI1ZFe/kT1wlaY3damwOYyZO+BjPMwvfhRnDW0PzPTnssE8xAM6LoufQs5VTcfEcuXCUEmtPfIQVOeywT/F2N2s1VUxo/BMX/SLCGP6FH6+qfEox5mLGVE/+RNB3tQgkQ/f7TAligbJ/nU/DIjFRX8ZbFIEBkJLXLJsrmhq74oMmzsSRs5bidah4KaNYjszbE6CouWUqML20NDGonEhTzfKq8uCABHMLCWo1J8pt1kFjR6qizxXbzx+tYUUOTxrbjNdDnaMmNMeFDA0TFSPdDvRHQCFWXftIsYqhapMPaoO8STeZkKdAMSzQs6nCBPBh4WYAxEPtvvHWVFgUEZ5Uhk1uPmYYeobfkwt7I4ldjbDkhjQVKH6qJaa+QqCJcoqqCQN/YwYVdLk0TyESTCAi+AtbJsA7btgh36zcMwyZjYEkUC1QEUkKHtzfglUIa77PxTtqVmluDCucLlcffeMU1igELcOS9Q8WzHP4HXnDOF2Qwz47QVVlGBM2SyHYGaJJrTtSTtDGqpOae0eQ3XIR8YkH70pr7dqsoHPxBoG+xaPwVGs1swJPoMOnCoJhpqDvMFnQclNufjPmY1duQ32gBgUyl+BF4xmfcPlpIlEPuGwHRk5YkcPeODtBnw10oK8jfzHNYazrbI5gTlJizIsNr2pBDjvsU7zdp4HCRI9skuA7zA8EaU62tcBxTw47bP8zQYNCvs9LcgSZGMvWKhu4MI+Zr+uC7jLE3LXX5r/DAuZ35onXKuOn72TEVk0oAX330KyZ7ZJNxez9k0Z3JW/jsiVfFy4Mr9YqdIfCSTAY+hKt+40Mb5lTJbchYEb6SncS66+eWoERA83a1iouUIMa2d2B3O+sFxlIrAzVx2Xu7gKfm2qvvzdaY1VEeFIZA/2U0GMudFjTw9Nc7mNj3qJVxuyNzRFwYeeG5obUWpDDDvsMrf8S7XNeA2C16rez6BdowjiKhef9BQhcSFFY+Rs6BJUm9//n5URKvl8EkXYruYtBVKqQrz+j1aBtoTyrPt758DcS10KosbVx6nsWIrxlA6ScjKTq/GS+PcKxv7Z6bCHmyMLPBDeyahJu64xJtEhW7poAvqZbSMCFoza/LnFGo3WXjo+xZzL+SOrN71z0Re56v+39pMIOknp9P8pwhTdMokMt9/iJtjkIPjb7+9e3nrXRDmdYLp2dAXOZev0dtn93AzYsqeFh7inad6ADHehABzrQgQ4UKAnBmyePMPQgwpqnFrqQuytV4Rfs8DCdGT5VIi5wIuRCaVIxyeLrGr3C1/Swxz9D6w10oAP9+NHAZTKGJ2c5JsgepolNSFKpubt9saLvsW9W6+RLf74XJRCUbdPFN1I4sXYjONf0PfYr98uhaLuYKjztEq1xjQx82Vox+2RCqgfaUJmKFa4et1wuPJVs0TSV7j5jWJHDDvv5dWOdyBeRq0f3XgjmUcFA1tofE2t22KHfqj2P7MWGFTnssM8wWgY60JdWVdAOxBD2LWhSq/nBOCiKxyvuVRHhSWUM9Ck99/jIjhvGcEy+O5VS27VpWzgRBkyyrSM69+Swwz5DG2uacvIwWDG1i+hUNFc/edg/guRWqAeZw3TOBnUtvgtpXKvmfljsRFA4SSS3/a+CXzP5dukHf/Gtzoa9bbXG1LaTMHqowPjoHmTQKRf8ldmowsqxBBpasd9uk1jy8ajSrBzWZKwUN86ApGIpw/qco7hhLOec9SM7TPES0z/DuMd4KfNRTAwzyZux0DEVGDrec3N0AOz8hN547vR/7eAwTq5eyGN0YrpQnfxkQIkYWt2xsqaHPf5tS39+P2JOmcGipuon6P0kvUUm7Up8yCpO6hLFT0iDXJOfjyZ+/pnux1sMx2wDXzQl8+gRiFhqi6b4rGCqm/Tkxpq+x+6/zVIE70hgP5HoETg5iTbZU5Ofk4Yy6J8X8tdGUZabYqzGmIG6cfjoBPJkoJ8SeiD65EXiTLrorA8y5Bld14lg8UlKcWO9KkYxTJlr6FDklIVpKyzxSMmv3PaPT71xuDUfn6bj3kzasZKGRXVzdBI0bq5aNg5Gh13GqPDlaXLtXWBn2I/sbAdWDB7Nu8MukSqXV90FeV304BZ4W+jXWHLMevXffQDAJu2JilZ2O1ok6IFLLZ7+h/TUSZM+MhQGaYQrBzvfmvVa8X+zjQD4FTnssF9GCz7v4NHNRv2ZDzRNBOcROr0UnoWdxZhyPhY1fF9EeFIZp0BPYcFuyU0/tpdSjkLpegyFIe9yNx8AT/DZ2TuAfUuqFEhEX1HcOm7je7qqElvvQWOxuN/Y3RD0N/XMItZOVvlSAmszoDec8dOOjKPxUsouzTyXUNR6YZsqJS1RS/+gwS+OoNUJZgvFDG/h+VPeoOWqWCy2YeGHXcaHlxq+8IRhhtHTYgWi+lHflrGxO44UZPghRWzOwlOgWWoq/TMwi3NXNz92hbkIN9BnY5qPCtcKj5IV39+dmZE9TgOT0ZWpxVQo+vGl4SUdHoEus9BAHrjisSSFk3m/9/sIDY3Wi0mbtM41mUTjA5bIqoidEsKqcmGndgdH24EcZVAanvWLYS4nX3cky6hUP3XRa59WPAN6JA/lkU5aFRxesORfIXpkmt9s2r3+uDzBPvtABzrQgQ7014suVzk8+SX8SRiUecNJWy6J7LBP8XYDvfHoGcm0b4tSnQpcuihm8DTYF0Yq+cGPjQTXoFtST5jiGU2cz5ZEa+lH9Hwi2TLOmx/EnXlPFxrbnjlHuN+FNsKrVuSwwz5Fuw90oAN9vJQ6Q9rER2fv8QBfV9hu8LX1+2xcU95M65nEQ6e4zHERmpOKZjl2I8ojpbhOZilmDwC/yCTVmVS7eaI3WlLb9gbFXFt0OL4olpxp6+V8cw1qdc6Dxm7E4N0OLPZ9IoqWIk0ppuIRqxhz2aZMojan+O6ZI2t+2PvAy0wy8gg+qvwuFa0fyNvMLvueHHbYtxQLGVqfkswPxslUaOuw7j057LBvNgqmZEwF5ruHl/erqalQbldzeRBJYc619rP2+haHn+jAOKlp3hLLysJpK7CQqkAo4b3bRg+sIzyodEOq1ikMvblQr+THnbsv204xWKwl+pbu8xrpJU7AHz11fwYRcYZp8oD2/OCTZ6ADHehAPz70JbKjHM3Icob3fgH0tbe4l2mNXzYH8s1aiOB/wfp2v6BlpIm+ENa9Hy6syGGH/bo9/ZSM0o/rp2OteavjlO08FTzfzHNMX/SLeJl4y/i+J4cddnOQS1Ejmx80ZvazSRsl+9nWaFXk6k4L7OJ+dOJ87kIr3ItYr08yh9n2XzAyPH2Pt5rXRwqqtHnFccxwPvTd2Sl4D6ZZj8zUD55LuXVSTHAsrh0qxa9j2e7QmRt2yAfrQEWrz+rr0k/OGArdY8VhRQ477DjfLyN8HVUetYWhvT1e35PDDnseVCWlmNP8IAlq7YHLZt6Rww77+sXVE83PD+ZxxtRd3fITwX7/mabGrX6tnUeO97kl++5QnOvw0OnhcORaNLZJzG9n96hyz/AkeNWClux78Gu653iyIhUiSI8sFr6Ayomcs1SmdpsCtEnKfjhra+Tfk8MOGw1t0YrKvJJJxBxrom4oc1vBgHx0yTevZ8DTj+IrjJszsEI+Xw/cRM/Txvhwf3D4aTNoGL8cvT34oqxuH1Wzqp6s7TpEwazC3csLn9/6p8kD1k6QEcb29c6oFP0ixm4Mf1iRww7b18Ax1aR4DLvvfXPBLC2b/artRga6CgghDAToku11S7LqZ62u4qRgWudNlR0t13wVruhY4Shbb+iR6xh+rDavtfkVwyrdA9Np8m/VhNbwi1MhrgpEZ0m9N/SNabwUxJTfUUuedSJBeUC5djs8y0SZ/fJUtPAlGGQEW3QDqVuTYzl1Nkw39ZBoJjGCKYExV6fKMF0wj7ujTP1ojN8eVhR/B7skgn0Dob7RC6VAzrFPVV+VTOizIp9GqP/t5tCxWhybb+/JYYfdxKx4RMVVpmYutJnz8p4bdsirabwzi4/PeReV7lvMDwwFFLszM6zIYYc9pOijpOizW9QNMIORm6DldJbLGc91w2lZcHeoB2YUwwasMOVcjl5owkD22KO4mb718ee4PUtmNak1tqulUDa5uWE28vsNdKAfE7rMcBEfTnARVuSww/7wSyNlYr9+PEPsFxi7BBUFPUT9Q9Yrcthhn6Hn8qTsqznVc4l1bXAneLrFlOgD9cCmbjwQTPP4qKLHjzh30xUaDt5G+1jOHjWgpb+cw6bVM0BnbWswtabSArieq/VfdbgcSGq32WtoBYKL6Atqvuzsp7vJ4pYpd394vBl2D5we93X0UrJCsJTLfMWlB9JunblekMMO+3YlhxNnTuijPJkv2bkB7jknPKcPUy3SXfFckcMO+4aXx45FvgU3TVYhqQTCK1/U81tAA1ROXScmTU0KZWZ3YsBGa/hNsdIveUHe4R4redPs4AyxnupsdnBsCRk2zY57cthht36tENapRYyhX80/3V+mailA0J6W0rVbrfgK2PZ2GL401vpuoaC21Mdb+1DoVs+na9duLeB3U05c1249G+v92i18sbp1njgnvFCpZQ4iNl9oK3njEqkleZf7oS22U1gRJxDVt0J1Uk8sXDyeEuZx8azrnuutOypX5LDDvtl7nCO69oCXdDuP6qD/dYLxdmp0L1b4idHEq4jljV5cxTQ/dCv7bmlt+ZVLxaCfpeCDpe29dGh7IvgusMpuA7hZWI2SzocDaIL6yhiPqW8I+OT0s8blGqlgmuBJdI0zLzibW9fQ214ufDMorbI56w+kwH38vvh6Ez3ssI/JkypSKgy5ZtYm6H68Q9VuLQiSFy+T3PxuyawqFZfCG3bH40s+VuNTtNunjB5wojYtoiOu1QvU+KMbE+c9aPyqKGV4kkJwkjz4i/z8HLwkz7Te9TjmS2ukWok2H1LPLp5NqJt7jNIkpbAfy8rsrmVhI/Wd9dd1D8xP+cEBm9MVqOIN/E7Cvp5dkPe4J+jAF5kKZ0hhdUQRrsjhJZXbGdADOTHDoVSANJFQcuMrtsN86vkGY+rfpLQihx32Kdptc/b7XTeq1+y/KgpDNW4IOFec1Te707z5nci3ykm7J5Jhj5LfYAXh1pJOGnvG7DPcc3rAsVh7IY9wHB6NskA7VFjrMFmza5rsAR9c+i77mh126H6QWzxk2fLmydUdxhlGp0/frHhFj7DdeI0lA/MbfpbHZxxZyAhP/NyvDW0Lv+rxTNfles/KLUk3tjruuXvUY1PXE1XDJ57LjTA9tsI2fatJ4Dlnms/aVEqZ+5E3YXXj1F7Q+C1NjRu8HKh+f7UW2K2NWiqM9I1s3yty2GHfcqSdoDt+feiBe9fCagSG3fm1GNphb2zf6PU8bzSlxJBF1JYR4LPCU+uvlq3IYYc9/OUnTfIjltWRxeCbTY9TuIIbdcvSNmVjM4RMS8mMCmztjN6Tww77DGNloC8p4s96NcxABzrQgQ50oAP9hNGPKn5uoAN96fH/0cUDvMQ7i18BZ/Okh1/MJaturKYcSOtEfnizSiyR83w0QSyR6OuuDHwa6KRo9Jy4tnYXvwrQzOrGvtiCHHbYp3i7M6AjTf5ABzrQgQ709XQO9LKIn+LrEsIugyc/SiGF/CptmvwkBVfZOF0IMivMLw+wbUHZhWLxw72b9ylQ9Sxp84kuTdSuBt9ML0cq2WMmr08xk8bt44UedKTC75PRwViRrYtu2ykRX+/O757m9e4DLe2nTsSjUa4PlGHj9g+OzmQVPx/5zrWF1RvjWFsf6EAHOtCBDnSgAx3oQAd6GD1ztNqh9zjFbsmk2W+b9fwkLQ9lwte0jLjdlq8iKcGlbrk8UzXfwzhwbd/z0RZZyvhSSXrdOq3R79PNG76yecqcSmVmwwkmzzw/nNGBDnSgv0J0skyeV0NbqmflRJr80owjInhRRNgr48D3zSkLuHKt8yECNTPyWy82Sq6VElQiWzuznTRb3sjhuFAa+zpjoebCjp4LKwUa9jTojTrqYJecYRgOdKADHehABzrQgQ50oAMd6EAHOtCBDnSgAx3oQAc60IEOdKADHehABzrQgQ50oAMd6EAHOtCPGg0yJTUrOcVyCTZ5BCVrrtI7h7/k7lDP8G4DHehABzrQgQ50oOdGDxhXh4y2M7zbQAc60IEOdKADHehABzrQgb4YOkUitsq5XbMdY5Hid0T3bzmN0RLXJGbz9ahUtZa0lcOIUimlxqTX/Dfm131X+fDv/NotHGuOFCtpe8jMpeS8eTPne3LYYY9+/gjQc/T+Vt2kavSLP9rtg1wlae1eCR9W3PAw2TNYS/VcHu3iWjJ8sGrR3ohoNylwSqnkVNsdh0aRqhFt3kD0fmiGnbHZ0qgV0kJ5vsGZ0bpat3KRqBmam1GZlhFFqpWE7+qXrJo5459ou0xFGO9YuJdrhfDn5NdxJPMPVhSbGbXeuvA5S0aXl8LXGx8txpS7qb8CT8ImnLJJ9eTeWTiroKV7daYyZcPULGiCcimeeSYX9E3uJoihPGEKUzFxGRHwVCJ6sZg9P0PMwWuNn3v19MToWC1G5vnfCGPW76/pLw+uyGGPLZP/lXykqPcGqkqVI2kvm8+KvMM9heQa6ECfPMcZkshT77f7jylBoEfWeChd16KI8KQyjuppKAi/WUGvD+Q3K2zorAU57LBP0R+fBnrk1rKtUbUoIjypjCOoa2iBEeFi3pqGViLyO5x7+mRF3uG+dsvnaIX8IjfX2QZHQoXLVvbaBTnssG9X48featnut2OKRjXN99tR8rtGevYZbDlzXvVfQSoQR/3cfc02g2UqNbvBvNObs60fU6Ikc92Nk6lQf1iGXcaBIZqbyS21shuRhmoXNwyla2KtyDvcU4iMlxA6t0p4/ElfP0fMkylGKbyXmC7Vb4ZkuEFaa9/hWPPD3gdeexS4O1sNFrs2JwIuAjojbzipC3LYYZ+hrz4RdCoRyrMU+Np4gBBHL0TN/SWuQ05oFfcBKda2RAFLtEL4o1efr6TE2v1d1GoBTz5zqt1lhLAihx22DzqLUDfCzQBXE4EhrRslU9GcE5c5dSw0JSQWyZaLDN1Dvuqg1yUYKayYtJtLMD72Jcuc9r4SC6TiphKEgoSuvqa9hyzNvuCzabAb5ZTK9QGWXdbuQsmKHHbYrz1qIfASGrRqe/BeI47dC3PDihx22KeYkwP9ONHVdsHGUDyyoXC/RzA2FG7SX8/Nj/589PAlFxF+l6Kz69zPKRqkPXedtFsmLH/8xSzb732b61rUl72YBAKf5MJ1wmyDM6HSfeuwpoc9fvJLw6G6KVstFzVok4JZhl7oLnqt6WGPf4pZMdCBDnSgA/1I0cBpgu1HzS2Ec0p1yipQrwzPsMNf0/fYZ3jDM6C+dV1N0GbNr6QpU1QYNBZ7Kxwr8g73DG830Af7/uCa9eNXw8/wdgMd6EAHenJ0oggFWpn6i/ltUf5hxoGvO3GkC0wL5lRJCilMCw+/TGIb0bIrcnB2rBW/bywJveSm+a1QnmK2mItaqnh/U7w/3qgfkrsihx12//uagWxUUjK0CSmMOREtGQX1vnFND3v8rfHHKZrb5y00g2BFYnTJ1qbXghx22K/cgyN6el1yUfwzuS794mv8YP3jx0WLzVL2EOx5c4vRQCW17c6uIXpP3uOeYGYPdKDb6O/vfn/56fLmN3z55i3+8A0I33o8w+VnPH3hyF2Nvpbh+2uSIeo9mOT7JahTbOB3d3ef4Vt+vvvpbtZ6KKu44EzFJHlECvPU9ljuPvvy7s1voQTi5cu/3JVJsu+5+a20ly//5+6/Lv/C8V8v/3358nd3//7l3U9tE69V+/0vXv/fUvj862///J9//+Off3gbvv/rD39/ixe64IXuWv3vSGXKHgooy4ov0YdqDvUyUckcc4qUH191epGq1zRlVlRuVfUF+mDVq+Azml0yyUbN4/sKL+r77ush06BfIUNp+fVL9KGvZ7QwxLySWdL976dOBSSyh3KS2rICS/TBCqCdRA2KyWCh7FaAexUw82AbratBv0QfqoCgpURgOAisvrpbAVlVYPki0aMe2/Cq7dgGP1TMdz/++H/fff327T+/jZapukVrl1SmlH2VEm+jNukv0W5zopCMqQCe4rci0YOdXm0a31eeYpkoEYTJqvYL+OHqU9QJxk9KRG4NvdZkXryA5inBuKp5/QL3cHc0YdDFmSdT8aMIfiIhH5vSi0oUDCrx+LN1Je7h/pyCpZNaKxZMb8lSYAD9cyM+PK/vawH/aYJOSDCblrVYwA/XAubXVFgyLLHa4r+OzO5FNVKCf5tq/kU17uGdaiSeBIZvFDRJOTDHZ6/GFTJcmeqCBBN98ji5h6b4Dz9ifP35u2VRfPkd/vxOZ7/5/Ot//PWrr//wxWeXr94u3nMhxBZgFLiuNguxP95pTFMs/0RfoL/gd0vvFPJL9vtiHir993f/D0HE4pUKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago2NzYzCmVuZG9iagoxMCAwIG9iagpbIF0KZW5kb2JqCjE4IDAgb2JqCjw8IC9MZW5ndGggMzA3IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nD2SS24DMQxD9z6FLhDA+tme86Qoupjef9snJemKHNkWRWqWukxZUx6QNJOEf+nwcLGd8jtsz2Zm4Fqil4nllOfQFWLuonzZzEZdWSfF6oRmOrfoUTkXBzZNqp+rLKXdLngO1yaeW/YRP7zQoB7UNS4JN3RXo2UpNGOq+3/Se/yMMuBqTF1sUqt7HzxeRFXo6AdHiSJjlxfn40EJ6UrCaFqIlXdFA0Hu8rTKewnu295qyLIHqZjOOylmsOt0Ui5uF4chHsjyqPDlo9hrQs/4sCsl9EjYhjNyJ+5oxubUyOKQ/t6NBEuPrmgh8+CvbtYuYLxTOkViZE5yrGmLVU73UBTTucO9DBD1bEVDKXOR1epfw84La5ZsFnhK+gUeo90mSw5W2duoTu+tPNnQ9x9a13QfCmVuZHN0cmVhbQplbmRvYmoKMTkgMCBvYmoKPDwgL0xlbmd0aCAyNDkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicPVA7jkQhDOs5hS/wJPIjcB5Gqy1m79+uA5opUEx+tjMk0BGBRwwxlK/jJa2groG/i0LxbuLrg8Igq0NSIM56D4h07KY2kRM6HZwzP2E3Y47ARTEGnOl0pj0HJjn7wgqEcxtl7FZIJ4mqIo7qM44pnip7n3gWLO3INlsnkj3kIOFSUonJpZ+Uyj9typQKOmbRBCwSueBkE004y7tJUowZlDLqHqZ2In2sPMijOuhkTc6sI5nZ00/bmfgccLdf2mROlcd0Hsz4nLTOgzkVuvfjiTYHTY3a6Oz3E2kqL1K7HVqdfnUSld0Y5xgSl2d/Gd9k//kH/odaIgplbmRzdHJlYW0KZW5kb2JqCjIwIDAgb2JqCjw8IC9MZW5ndGggNzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicMzK3UDBQsDQBEoYWJgrmZgYKKYZcQL6piblCLhdIDMTKAbMMgLQlnIKIZ4CYIG0QxSAWRLGZiRlEHZwBkcvgSgMAJdsWyQplbmRzdHJlYW0KZW5kb2JqCjIxIDAgb2JqCjw8IC9MZW5ndGggNDcgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicMzK3UDBQsDQBEoYWJgrmZgYKKYZclhBWLhdMLAfMAtGWcAoinsGVBgC5Zw0nCmVuZHN0cmVhbQplbmRvYmoKMjIgMCBvYmoKPDwgL0xlbmd0aCAyNTggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRZFLcgQgCET3noIjgPzkPJNKZTG5/zYNzmQ2dpeo/YRKI6YSLOcUeTB9yfLNZLbpdzlWOxsFFEUomMlV6LECqztTxJlriWrrY2XkuNM7BsUbzl05qWRxo4x1VHUqcEzPlfVR3fl2WZR9Rw5lCtiscxxs4MptwxgnRput7g73iSBPJ1NHxe0g2fAHJ419lasrcJ1s9tFLMA4E/UITmOSLQOsMgcbNU/TkEuzj43bngWBveRFI2RDIkSEYHYJ2nVz/4tb5vf9xhjvPtRmuHO/id5jWdsdfYpIVcwGL3Cmo52suWtcZOt6TM8fkpvuGzrlgl7uDTO/5P9bP+v4DHilm+gplbmRzdHJlYW0KZW5kb2JqCjIzIDAgb2JqCjw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9CQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvTGVuZ3RoIDM5Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nOMyNDBTMDY1VcjlMjc2ArNywCwjcyMgCySLYEFkM7jSABXzCnwKZW5kc3RyZWFtCmVuZG9iagoyNCAwIG9iago8PCAvTGVuZ3RoIDE2MyAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJxFkDsSAyEMQ3tOoSP4IwM+z2YyKTb3b2PYbFLA01ggg7sTgtTagonogoe2Jd0F760EZ2P86TZuNRLkBHWAVqTjaJRSfbnFaZV08Wg2cysLrRMdZg56lKMZoBA6Fd7touRypu7O+UNw9V/1v2LdOZuJgcnKHQjN6lPc+TY7orq6yf6kx9ys134r7FVhaVlLywm3nbtmQAncUznaqz0/Hwo69gplbmRzdHJlYW0KZW5kb2JqCjI1IDAgb2JqCjw8IC9MZW5ndGggMjE4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nD1QuY0EMQzLXYUaWMB67alnFotLpv/0SPn2ItEWRVIqNZmSKS91lCVZU946fJbEDnmG5W5kNiUqRS+TsCX30ArxfYnmFPfd1ZazQzSXaDl+CzMqqhsd00s2mnAqE7qg3MMz+g1tdANWhx6xWyDQpGDXtiByxw8YDMGZE4siDEpNBv+uco+fXosbPsPxQxSRkg7mNf9Y/fJzDa9TjyeRbm++4l6cqQ4DERySmrwjXVixLhIRaTVBTc/AWi2Au7de/hu0I7oMQPaJxHGaUo6hv2twpc8v5SdT2AplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2JqCjw8IC9MZW5ndGggODMgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRYy7DcAwCER7pmAEfib2PlGUwt6/DRAlbrgn3T1cHQmZKW4zw0MGngwshl1xgfSWMAtcR1COneyjYdW+6gSN9aZS8+8PlJ7srOKG6wECQhpmCmVuZHN0cmVhbQplbmRvYmoKMjcgMCBvYmoKPDwgL0xlbmd0aCAyMzkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicTVDJbQQxDPu7CjUwwOgcux4Hizyy/X9DygmSl2hL4qHylFuWymX3IzlvybrlQ4dOlWnybtDNr7H+owwCdv9QVBCtJbFKzFzSbrE0SS/ZwziNl2u1juepe4RZo3jw49jTKYHpPTLBZrO9OTCrPc4OkE64xq/q0zuVJAOJupDzQqUK6x7UJaKPK9uYUp1OLeUYl5/oe3yOAD3F3o3c0cfLF4xGtS2o0WqVOA8wE1PRlXGrkYGUEwZDZ0dXNAulyMp6QjXCjTmhmb3DcGADy7OEpKWtUrwPZQHoAl3aOuM0SoKOAMLfKIz1+gaq/F43CmVuZHN0cmVhbQplbmRvYmoKMjggMCBvYmoKPDwgL0xlbmd0aCAzMzQgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicLVJLcsUgDNtzCl2gM/gH5DzpdLp4vf+2kpNFRg5g9DHlholKfFkgt6PWxLeNzECF4a+rzIXPSNvIOojLkIu4ki2Fe0Qs5DHEPMSC76vxHh75rMzJswfGL9l3Dyv21IRlIePFGdphFcdhFeRYsHUhqnt4U6TDqSTY44v/PsVzLQQtfEbQgF/kn6+O4PmSFmn3mG3TrnqwTDuqpLAcbE9zXiZfWme5Oh7PB8n2rtgRUrsCFIW5M85z4SjTVka0FnY2SGpcbG+O/VhK0IVuXEaKI5CfqSI8oKTJzCYK4o+cHnIqA2Hqmq50chtVcaeezDWbi7czSWbrvkixmcJ5XTiz/gxTZrV5J89yotSpCO+xZ0vQ0Dmunr2WWWh0mxO8pITPxk5PTr5XM+shORUJqWJaV8FpFJliCdsSX1NRU5p6Gf778u7xO37+ASxzfHMKZW5kc3RyZWFtCmVuZG9iagoyOSAwIG9iago8PCAvTGVuZ3RoIDM0MCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1UjluBDEM6/0KfSCAbtvv2SBIkfy/DanZFANxdFKUO1pUdsuHhVS17HT5tJXaEjfkd2WFxAnJqxLtUoZIqLxWIdXvmTKvtzVnBMhSpcLkpORxyYI/w6WnC8f5trGv5cgdjx5YFSOhRMAyxcToGpbO7rBmW36WacCPeIScK9Ytx1gFUhvdOO2K96F5LbIGiL2ZlooKHVaJFn5B8aBHjX32GFRYINHtHElwjIlQkYB2gdpIDDl7LHZRH/QzKDET6NobRdxBgSWSmDnFunT03/jQsaD+2Iw3vzoq6VtaWWPSPhvtlMYsMul6WPR089bHgws076L859UMEjRljZLGB63aOYaimVFWeLdDkw3NMcch8w6ewxkJSvo8FL+PJRMdlMjfDg2hf18eo4ycNt4C5qI/bRUHDuKzw165gRVKF2uS9wGpTOiB6f+v8bW+19cfHe2AxgplbmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8IC9MZW5ndGggMjUxIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nC1RSXIDQQi7zyv0hGan32OXK4fk/9cIygcGDYtAdFrioIyfICxXvOWRq2jD3zMxgt8Fh34r121Y5EBUIEljUDWhdvF69B7YcZgJzJPWsAxmrA/8jCnc6MXhMRlnt9dl1BDsXa89mUHJrFzEJRMXTNVhI2cOP5kyLrRzPTcg50ZYl2GQblYaMxKONIVIIYWqm6TOBEESjK5GjTZyFPulL490hlWNqDHscy1tX89NOGvQ7Fis8uSUHl1xLicXL6wc9PU2AxdRaazyQEjA/W4P9XOyk994S+fOFtPje83J8sJUYMWb125ANtXi37yI4/uMr+fn+fwDX2BbiAplbmRzdHJlYW0KZW5kb2JqCjMxIDAgb2JqCjw8IC9MZW5ndGggMjE1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVROQ4DIQzs9xX+QCSML3hPoijN/r/NjNFWHsFchrSUIZnyUpOoIeVTPnqZLpy63NfMajTnlrQtc4C4trwvrZLAiWaIg8FpmLgBmjwBQ9fRqFFDFx7Q1KVTKLDcBD6Kt24P3WO1gZe2IeeJIGIoGSxBzalFExZtzyekNb9eixvel+3dyFOlxpYYgQYBVjgc1+jX8JU9TybRdBUy1Ks1yxgJE0UiPPmOptUT61o00jIS1MYRrGoDvDv9ME4AABNxywJkn0qUs+TEb7H0swZX+v4Bn0dUlgplbmRzdHJlYW0KZW5kb2JqCjE2IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvQk1RUURWK0RlamFWdVNhbnMgL0ZpcnN0Q2hhciAwIC9MYXN0Q2hhciAyNTUKL0ZvbnREZXNjcmlwdG9yIDE1IDAgUiAvU3VidHlwZSAvVHlwZTMgL05hbWUgL0JNUVFEVitEZWphVnVTYW5zCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAxNyAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyA0OCAvemVybyAvb25lIC90d28gL3RocmVlIDk3IC9hIDEwMSAvZSAxMDUgL2kgMTA4IC9sIC9tIC9uIC9vIC9wIDExNSAvcwpdCj4+Ci9XaWR0aHMgMTQgMCBSID4+CmVuZG9iagoxNSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9CTVFRRFYrRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoxNCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxNyAwIG9iago8PCAvYSAxOCAwIFIgL2UgMTkgMCBSIC9pIDIwIDAgUiAvbCAyMSAwIFIgL20gMjIgMCBSIC9uIDI0IDAgUiAvbyAyNSAwIFIKL29uZSAyNiAwIFIgL3AgMjcgMCBSIC9zIDI4IDAgUiAvdGhyZWUgMjkgMCBSIC90d28gMzAgMCBSIC96ZXJvIDMxIDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjEgMTYgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9NMCAxMyAwIFIgL0YxLURlamFWdVNhbnMtbWludXMgMjMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybQovQkJveCBbIC03LjIzNjA2Nzk3NzUgLTcuMjM2MDY3OTc3NSA3LjIzNjA2Nzk3NzUgNy4yMzYwNjc5Nzc1IF0gL0xlbmd0aCAxMzkKL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicbZAxDsMwCEV3TuELfAvsBDlrxlwjS1Up91+bVumPI7NY+AP/AZbeommT80HJpbp6S4donpeqVjrRsrk186+kqpOXU5qbWV0SGO3CLNhBD9CXkv5a/p87TcTlQUKH6gBXeeTPcJeAj9EEEQvjSBjnxmMvBIsjuA/CQyK4OEISuhVfIqt8AIRnWIsKZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iagozMiAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My43LjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My43LjIpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyMzA3MDUxNTQwNTgtMDcnMDAnKSA+PgplbmRvYmoKeHJlZgowIDMzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDEzNDU3IDAwMDAwIG4gCjAwMDAwMTI5MTggMDAwMDAgbiAKMDAwMDAxMjk1MCAwMDAwMCBuIAowMDAwMDEzMDQ5IDAwMDAwIG4gCjAwMDAwMTMwNzAgMDAwMDAgbiAKMDAwMDAxMzA5MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDMgMDAwMDAgbiAKMDAwMDAwNzIwMiAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDcxODEgMDAwMDAgbiAKMDAwMDAxMzE1MSAwMDAwMCBuIAowMDAwMDExNzAyIDAwMDAwIG4gCjAwMDAwMTE0OTUgMDAwMDAgbiAKMDAwMDAxMTExNiAwMDAwMCBuIAowMDAwMDEyNzU1IDAwMDAwIG4gCjAwMDAwMDcyMjIgMDAwMDAgbiAKMDAwMDAwNzYwMiAwMDAwMCBuIAowMDAwMDA3OTI0IDAwMDAwIG4gCjAwMDAwMDgwNjggMDAwMDAgbiAKMDAwMDAwODE4NyAwMDAwMCBuIAowMDAwMDA4NTE4IDAwMDAwIG4gCjAwMDAwMDg2OTAgMDAwMDAgbiAKMDAwMDAwODkyNiAwMDAwMCBuIAowMDAwMDA5MjE3IDAwMDAwIG4gCjAwMDAwMDkzNzIgMDAwMDAgbiAKMDAwMDAwOTY4NCAwMDAwMCBuIAowMDAwMDEwMDkxIDAwMDAwIG4gCjAwMDAwMTA1MDQgMDAwMDAgbiAKMDAwMDAxMDgyOCAwMDAwMCBuIAowMDAwMDEzNTE3IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzMgL1Jvb3QgMSAwIFIgL0luZm8gMzIgMCBSID4+CnN0YXJ0eHJlZgoxMzY3NAolJUVPRgo=\n", "image/png": "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AECXiosg8MA8POoCAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACWQfABAACW0c3sAgAArrLzy5T3TaWuGRim6xMizS4H8CkEHwDwEMXHq3VLxkdynDnrbAsLDtBb6dcptk+wiZUBvoNHXQDgASpr6jT+d9kuoUeSTtbU69bMj0yqCvA9BB8A8AD/9l+f6myj0eyxkzX1+rCgvIsrAnwTwQcATHaw/LT2HnW0es7nh092UTWAbyP4AIDJik/UtHnONQPDuqASwPcRfADAZIPCWx+4HNq9G7O7gA5C8AEAkw2JDFFqQqT8bBce6+Zn01/nXN/1RQE+iuADAB4gY0airot37dUZ0T9Uux77EVPZgQ7kVcFnx44duuWWW9SvXz/ZbDa9+eabLscNw9DSpUvVt29f9ejRQxMmTFBBQYE5xQLARbAHB+jV2aO17Vc3at3PRmnbr27U23Oulz04wOzSAJ/iVcGnurpaV111lTIzM5s9vnLlSj3//PNau3atPv30U/Xs2VNpaWk6c+ZMF1cKAO6Ji+ipcUOjFBfR0+xSAJ/kVSs3T5o0SZMmTWr2mGEYeu655/TYY49pypQpkqRXX31V0dHRevPNN3XnnXd2ZakAAMADeVWPT2uKiopUUlKiCRMmONvsdrvGjBmj3NzcFj9XW1srh8Ph8gIAAL6p3T0+CxcubPdFn3nmGbeKuRQlJSWSpOjoaJf26Oho57HmLF++XE8++WSn1gYAADxDu4PP7t2723WezdbMfEwPtmTJEpdQ53A4FBsba2JFAACgs7Q7+Gzbtq0z67hkMTExkqTS0lL17dvX2V5aWqqrr766xc8FBQUpKCios8sD4MMOlp9W8YkaDe7Tk0HJgIfzqsHNrYmLi1NMTIyysrKcQcfhcOjTTz/Vgw8+aG5xAHxSZU2d5m7M047vbSCamhCpjBmJTEMHPJTbwWfnzp16/fXXdfjwYdXV1bkc+/Of/3zJhTXn9OnTKiwsdL4vKipS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ALAMgg8AALAMgg8AALAMgg8A0914442aP39+l/5Mm82mN998s0t/JgDzEXwAAIBlEHwAAIBlEHwAeJSTJ0/qnnvuUVhYmIKDgzVp0iQVFBS4nPOnP/1JP/jBDxQUFKTBgwfrd7/7ncvxwYMH66mnntKMGTPUs2dP9e/fX5mZma3+3CNHjugnP/mJevfurfDwcE2ZMkWHDh1yHt++fbtGjx6tnj17qnfv3kpJSVFxcbEk6YsvvtC4cePUq1cvhYaGKikpSTt37uyYGwKgQxF8AHiUWbNmaefOnXrrrbeUm5srwzD0L//yL6qvr5ck7dq1Sz/5yU9055136ssvv9QTTzyhxx9/XOvXr3e5zqpVq3TVVVdp9+7dWrx4sebNm6ctW7Y0+zPr6+uVlpamXr166cMPP1ROTo5CQkJ08803q66uTmfPntXUqVN1ww03aM+ePcrNzdV9990nm80mSfrpT3+qAQMG6LPPPtOuXbu0ePFiBQQEdOp9AuAmk3eHBwDjhhtuMObNm2d89dVXhiQjJyfHeayiosLo0aOH8frrrxuGYRh33XWX8aMf/cjl8w8//LAxfPhw5/tBgwYZN998s8s5d9xxhzFp0iTne0nG5s2bDcMwjP/+7/82hg4dajQ2NjqP19bWGj169DDef/994/jx44YkY/v27c3W36tXL2P9+vXu/fIAuhQ9PgA8xv79+9WtWzeNGTPG2danTx8NHTpU+/fvd56TkpLi8rmUlBQVFBSooaHB2ZacnOxyTnJysvMa5/viiy9UWFioXr16KSQkRCEhIQoPD9eZM2f09ddfKzw8XLNmzVJaWppuueUWrV69Wt9++63z8wsXLtQvfvELTZgwQStWrNDXX399yfcCQOcg+ACwvNOnTyspKUl5eXkur6+++kp33XWXJGndunXKzc3V2LFj9dprr+nyyy/XJ598Ikl64okntG/fPk2ePFlbt27V8OHDtXnzZjN/JQAtIPgA8BjDhg3T2bNn9emnnzrbjh8/rvz8fA0fPtx5Tk5OjsvncnJydPnll8vf39/Z1hRKvv9+2LBhzf7ca665RgUFBYqKilJ8fLzLy263O89LTEzUkiVL9PHHH+vKK6/Uhg0bnMcuv/xyLViwQB988IGmTZumdevWuX8jAHQagg8Aj5GQkKApU6bo3nvv1UcffaQvvvhC//Zv/6b+/ftrypQpkqRFixYpKytLTz31lL766iu98soreuGFF/SrX/3K5Vo5OTlauXKlvvrqK2VmZuqNN97QvHnzmv25P/3pTxUREaEpU6boww8/VFFRkbZv3665c+fqm2++UVFRkZYsWaLc3FwVFxfrgw8+UEFBgYYNG6bvvvtODz30kLZv367i4mLl5OTos88+azFkATBXN7MLAIDvW7dunebNm6cf//jHqqurU2pqqv72t785Z0ldc801ev3117V06VI99dRT6tu3r379619r1qxZLtdZtGiRdu7cqSeffFKhoaF65plnlJaW1uzPDA4O1o4dO/TII49o2rRpOnXqlPr376/x48crNDRU3333nQ4cOKBXXnlFx48fV9++fZWenq77779fZ8+e1fHjx3XPPfeotLRUERERmjZtmp588snOvlUA3GAzDMMwuwgA6EiDBw/W/Pnzu3wbDACej0ddAADAMgg+AADAMnjUBQAALIMeHwAAYBkEHwAAYBkEHwAAYBkEHwAAYBkEHwAAYBkEHwAAYBkEHwAAYBkEHwAAYBn/P8WludzxzbBOAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.plot.scatter(x='loopless', y='nominal')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This functionality can also be used in FVA by using the `loopless=True` argument to avoid getting high flux ranges for reactions that essentially only can reach high fluxes if they are allowed to participate in loops (see the simulation notebook) leading to much narrower flux ranges." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Loopless model" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Cobrapy also includes the \"classical\" loopless formulation by [Schellenberger et. al.](https://dx.doi.org/10.1016%2Fj.bpj.2010.12.3707) implemented in `cobra.flux_analysis.add_loopless` modify the model with additional mixed-integer constraints that make thermodynamically infeasible loops impossible. This is much slower than the strategy provided above and should only be used if one of the two following cases applies:\n", "\n", "1. You want to combine a non-linear (e.g. quadratic) objective with the loopless condition\n", "2. You want to force the model to be infeasible in the presence of loops independent of the set reaction bounds.\n", "\n", "We will demonstrate this with a toy model which has a simple loop cycling A $\\rightarrow$ B $\\rightarrow$ C $\\rightarrow$ A, with A allowed to enter the system and C allowed to leave. A graphical view of the system is drawn below:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/pdf": "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cmVlIDY1IC9BIC9CIC9DIC9EIC9FIDc3IC9NIDg4IC9YIDk1IC91bmRlcnNjb3JlIDExOCAvdgpdCj4+Ci9XaWR0aHMgMTMgMCBSID4+CmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9CTVFRRFYrRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoxMyAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxNiAwIG9iago8PCAvQSAxNyAwIFIgL0IgMTggMCBSIC9DIDE5IDAgUiAvRCAyMCAwIFIgL0UgMjEgMCBSIC9NIDIyIDAgUiAvWCAyMyAwIFIKL29uZSAyNCAwIFIgL3RocmVlIDI1IDAgUiAvdHdvIDI2IDAgUiAvdW5kZXJzY29yZSAyNyAwIFIgL3YgMjggMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNSAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjI5IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjcuMikKL0NyZWF0aW9uRGF0ZSAoRDoyMDIzMDcwNTE1NDA1OS0wNycwMCcpID4+CmVuZG9iagp4cmVmCjAgMzAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDYxMjEgMDAwMDAgbiAKMDAwMDAwNjAwNSAwMDAwMCBuIAowMDAwMDA2MDM3IDAwMDAwIG4gCjAwMDAwMDYwNTggMDAwMDAgbiAKMDAwMDAwNjA3OSAwMDAwMCBuIAowMDAwMDA2MTAwIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDMzNSAwMDAwMCBuIAowMDAwMDAxNTAwIDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMTQ3OSAwMDAwMCBuIAowMDAwMDA0NzkzIDAwMDAwIG4gCjAwMDAwMDQ1ODYgMDAwMDAgbiAKMDAwMDAwNDIwNyAwMDAwMCBuIAowMDAwMDA1ODQ2IDAwMDAwIG4gCjAwMDAwMDE1MjAgMDAwMDAgbiAKMDAwMDAwMTY4MyAwMDAwMCBuIAowMDAwMDAyMDIwIDAwMDAwIG4gCjAwMDAwMDIzMjggMDAwMDAgbiAKMDAwMDAwMjU2NSAwMDAwMCBuIAowMDAwMDAyNzE4IDAwMDAwIG4gCjAwMDAwMDI4ODAgMDAwMDAgbiAKMDAwMDAwMzA0MiAwMDAwMCBuIAowMDAwMDAzMTk3IDAwMDAwIG4gCjAwMDAwMDM2MTAgMDAwMDAgbiAKMDAwMDAwMzkzNCAwMDAwMCBuIAowMDAwMDA0MDYwIDAwMDAwIG4gCjAwMDAwMDYxODEgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAzMCAvUm9vdCAxIDAgUiAvSW5mbyAyOSAwIFIgPj4Kc3RhcnR4cmVmCjYzMzgKJSVFT0YK\n", "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_helper.plot_loop()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "model = Model()\n", "model.add_metabolites([Metabolite(i) for i in \"ABC\"])\n", "model.add_reactions([Reaction(i) for i in [\"EX_A\", \"DM_C\", \"v1\", \"v2\", \"v3\"]])\n", "\n", "model.reactions.EX_A.add_metabolites({\"A\": 1})\n", "model.reactions.DM_C.add_metabolites({\"C\": -1})\n", "\n", "model.reactions.v1.add_metabolites({\"A\": -1, \"B\": 1})\n", "model.reactions.v2.add_metabolites({\"B\": -1, \"C\": 1})\n", "model.reactions.v3.add_metabolites({\"C\": -1, \"A\": 1})\n", "\n", "model.objective = 'DM_C'" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "While this model contains a loop, a flux state exists which has no flux through reaction $v_3$, and is identified by loopless FBA." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loopless solution: status = optimal\n", "loopless solution flux: v3 = 0.0\n" ] } ], "source": [ "with model:\n", " add_loopless(model)\n", " solution = model.optimize()\n", "print(\"loopless solution: status = \" + solution.status)\n", "print(\"loopless solution flux: v3 = %.1f\" % solution.fluxes[\"v3\"])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "If there is no forced flux through a loopless reaction, parsimonious FBA will also have no flux through the loop." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "parsimonious solution: status = optimal\n", "loopless solution flux: v3 = 0.0\n" ] } ], "source": [ "solution = pfba(model)\n", "print(\"parsimonious solution: status = \" + solution.status)\n", "print(\"loopless solution flux: v3 = %.1f\" % solution.fluxes[\"v3\"])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "However, if flux is forced through $v_3$, then there is no longer a feasible loopless solution, but the parsimonious solution will still exist." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model is infeasible\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/cdiener/code/cobrapy/src/cobra/util/solver.py:554: UserWarning: Solver status is 'infeasible'.\n", " warn(f\"Solver status is '{status}'.\", UserWarning)\n" ] } ], "source": [ "model.reactions.v3.lower_bound = 1\n", "with model:\n", " add_loopless(model)\n", " try:\n", " solution = model.optimize()\n", " except:\n", " print('model is infeasible')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "parsimonious solution: status = optimal\n", "loopless solution flux: v3 = 1.0\n" ] } ], "source": [ "solution = pfba(model)\n", "print(\"parsimonious solution: status = \" + solution.status)\n", "print(\"loopless solution flux: v3 = %.1f\" % solution.fluxes[\"v3\"])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Method" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "`loopless_solution` is based on a given reference flux distribution. It will look for a new flux distribution with the following requirements:\n", "\n", "1. The objective value is the same as in the reference fluxes.\n", "2. All exchange fluxes have the same value as in the reference distribution.\n", "3. All non-exchange fluxes have the same sign (flow in the same direction) as the reference fluxes.\n", "4. The sum of absolute non-exchange fluxes is minimized.\n", "\n", "As proven in the [original publication](http://dx.doi.org/10.1093/bioinformatics/btv096) this will identify the \"least-loopy\" solution closest to the reference fluxes.\n", "\n", "If you are using `add_loopless` this will use the method [described here](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3030201/). In summary, it will add $G \\approx \\Delta G$ proxy variables and make loops thermodynamically infeasible. This is achieved by the following formulation.\n", "\n", "$$\n", "\\begin{aligned}\n", "&\\text{maximize } v_{obj} \\\\\n", "s.t. & Sv = 0\\\\\n", "& lb_j \\leq v_j \\leq ub_j \\\\\n", "& -M\\cdot (1 - a_i) \\leq v_i \\leq M\\cdot a_i\\\\\n", "& -1000a_i + (1 - a_i) \\leq G_i \\leq -a_i + 1000(1 - a_i)\\\\\n", "& N_{int}G = 0\\\\\n", "& a_i \\in \\{0, 1\\}\n", "\\end{aligned}\n", "$$\n", "\n", "Here the index j runs over all reactions and the index i only over internal ones. $a_i$ are indicator variables which equal one if the reaction flux flows in hte forward direction and 0 otherwise. They are used to force the G proxies to always carry the opposite sign of the flux (as it is the case for the \"real\" $\\Delta G$ values). $N_{int}$ is the nullspace matrix for internal reactions and is used to find thermodinamically \"correct\" values for G. \n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "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.11.4" } }, "nbformat": 4, "nbformat_minor": 1 }