{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook shows a possible way to combine formal prediction of mutation performed by Pint with the quantiative evaluation of attractors reachability with MaBoSS.\n",
"\n",
"A detailed use case of such an analysis can be found in the notebook \"[Usecase - Mutations enabling tumour invasion](https://nbviewer.jupyter.org/github/colomoto/colomoto-docker/blob/master/usecases/Usecase%20-%20Mutations%20enabling%20tumour%20invasion.ipynb)\".\n",
"\n",
"## Model\n",
"\n",
"We load a model of cell fate decision model from CellCollective using bioLQM:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import biolqm"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"Downloading 'http://ginsim.org/sites/default/files/SuppMat_Model_Master_Model.zginml'"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"lqm = biolqm.load(\"http://ginsim.org/sites/default/files/SuppMat_Model_Master_Model.zginml\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Wild-type simulation with MaBoSS\n",
"\n",
"We convert the model to MaBoSS, and configure the simulation"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import maboss"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"wt_sim = biolqm.to_maboss(lqm)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"wt_sim.network.set_output(('Metastasis', 'Migration', 'Invasion', 'Apoptosis', 'CellCycleArrest'))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"wt_sim.network.set_istate(\"ECMicroenv\", [0, 1]) # ECM is active\n",
"wt_sim.network.set_istate(\"DNAdamage\", [0.5, 0.5]) # DNAdamage can start either active or inactive"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"wt_sim.update_parameters(max_time=50)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We perform the simulation with MaBoSS, this can take several seconds."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"wt_res = wt_sim.run()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We plot the distribution of attractors at the end of the simulations:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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S+FYywvQTUi8WDDAzSSdEp3DBt7Sxetqb3w1asqgQYOqLly4oPzss8/877777mb/UDt69KjX448/XgQAM2bMuNL4sr59+1ao1eqG9+Cdd97pHBYWFhETExOen5/vmpaWdt25Wfv37/d+6KGHilxcXNC9e3fDoEGDyg8cOOAJABqNpiI4OLhOoVAgMjKy8tSpU83+Em2puLi4oi+//NJ/7dq17WNjYxtGCPV6vfzo0aNekydPDlar1RFz587tcenSpSYP9xw+fNgjJiYmLDQ0NOJf//pX+/rneNttt5VPnTq159KlSzs0d4ipqKhIce+99waHhIREzp8/v3t2drY7AAwZMqRi6dKlXf/yl790OXHihNu1vzAHDx5csWHDhg4vvPBCt0OHDnn4+flZbIeLCRMmlCgUCsTExFRfuXLFFQAmTZqk/+GHH3yqqqpkycnJqoEDB5Z5eXlJtbW1stjY2J6hoaERkydPDj516pR7S/L997//9br33ntLfHx8TCqVynTfffcV79mzxxsAAgICau64444qAOjfv39lTk6O8tqMlrBr1y6fzZs3t1er1RH9+/cPLy4udklPT7+luYNPPvlk4erVq9sD5kODTz755OXi4mJ5QUGBW1xcXAkAeHp6St7e3le9DtfL8OWXX/rHxcUVKRQKjBs3rrhxQR0+fHhp586dGw4JN/6++/bbb71TU1M9o6Ojw9VqdcSBAwd8Tp8+rVSr1TXnz59XxsfHd09OTvbx8/Nr1SFlFjPb+ACAVY+XkxgekuSZeLHABEmqFp3FinIAfC46hKMbO3ZsyWuvvdY9Li6u6MbX/j1PT8+GXzw7duzw3rt3r3dKSkpmVlZWenh4eFVVVdV1f55fb5WXxqNZCoUCBoPhqsMuJ0+edFWr1RFqtTri3Xff7fj22293rP+4ucnNQUFBBldXV2nfvn0+EyZMaJiPaTQa4e3tbcjMzEyv/3f69Om0pu7jySef7PXxxx+fy87OTl+wYEFeTU2NHADWr19/bvHixXnnz59369evX2R+fv7vJnAvWLAgYMSIEWUnTpxI++qrr07W1tbKAWD27NlF27ZtO+nh4WEaN25c6Pbt270b327cuHHl+/btywoICKidNm1ar48//rh948u///77dvXPfd26daqnn346oP7jZl/gX7m7uze8zvXvh6enpzR48OCyL774wmfTpk1+U6ZMKQKAv/3tb507depUl5GRka7T6dLr6urkLcl3vffZzc2t8fssXfs+GwwG1D+X5557rltSUpJv/cf79u3zbHzdyMjI6iNHjlz1uUYZZEuXLj1X//7m5ubqHnzwwWbn5IaGhlb//PPPTd7XPffcU3HhwgXlv//9by+j0Si7/fbbq1uyYlFzGX7++WePs2fPKseOHRsaEBCg2b59u39ycnLD4czG32fXfixJkmzy5MlX6u8zJycn9f3338/r2LGjMTU1Nf2uu+4qW7ZsWacpU6b0vGHA62AxswWtPh9AkugYZB1RtbUh0/Rlh0RSKFSXAAAXI0lEQVTnsKK/6eJ1dTe+Gl3PnDlzLs+bNy9v4MCBzU6C79evX/nq1av9APNhm+auV1JSolCpVEZvb2/T0aNH3Y8dO9au/jIXFxepfk5OYyNGjChLTk72NxgMyMvLczl06JDX8OHDmzykeq0+ffrU1f8ymj9/fuHLL79cWP9xz549m/3aeP3113PffPPNCy4uv80H9/f3NwUGBtZ+/vnnfoB57tuPP/7oAQBeXl7G0tLSht9LlZWV8qCgoLqamhrZxo0bG16PtLQ05ahRoyo++OCDPD8/P8Pp06fdfHx8jOXl5Q23LS0tVQQGBtYCwMqVKxvmF6Wnp7uFh4fXvPrqq5fuueeekl9++eWqkw2ys7PdAgIC6ubNm3f50UcfvXxt+Rg1alRF/XOfOnWq/qOPPsqt/7glr2VTpkyZUrR69eoO//vf/7zrC4xer1d07dq1TqFQYNmyZe2NRmNL85V//fXXvmVlZfLS0lL5119/7XfXXXeVtSSHi4sL6p/LBx98kBcXF1dS//Gdd9551aHGmTNnXjl8+LDXxo0bG+bHJScn+xw6dMhjzJgx+uXLl3es/zo8fvy4svH7eq2XX345//333+96/PhxJWAu71qttuEM3ilTplyZPn1670cfffQyYP4a6tKlS+2aNWt8AaCqqkpWP/+wXnMZkpKS/OfNm5eXm5ury83N1V26dOl4fn6+W3Z29g1HiceOHVu6Y8cOv/pDnwUFBYrs7Gy3ixcvuhiNRkybNq1k8eLFuTqdzhMwfz3r9fqbPuuTWwbZzhIAT4Bl2CnNKy65c1c7z58uuLoMFp3Fws4AWC06hMVo9YdFPXRwcHDdX//61yb3xqv30UcfnZ86dWqvhISELvfcc0+Jl5dXk4dEJk6cqP/00087hoaGRgQHB1dHR0c3FKypU6cWhoeHR0RFRVU2nmf22GOPlfzwww9e4eHhkTKZTHr99dcvBAUFGY4fP265J3mNMWPGNFn8NmzYcHrmzJk93nnnna4Gg0H2wAMPFA0ZMqRq6tSpRXPmzOm5YsWKzsnJyacWLlyYN3DgwPCAgIDa8PDwyvLycgUAPP/884E5OTlKSZJkw4YNKx08eHBVcHBw7XvvvddVrVZHzJs37+KCBQvyZ8yY0SshIaHL8OHDG0Zr1qxZ479ly5b2Li4uUseOHevefvvtq86c/89//uOdkJDQxcXFRfL09DSuW7fuzLX5Le2BBx4onT17dq+77767pH5U7bnnnrs0ceLE4K1bt/oNGzaszMPDw9SSfMOGDauMjY29MmDAgHAAeOyxxwqHDh1alZWV1erD0415eXlJ27ZtO/nMM890X7BgQXcXFxcpPDy8avny5eeef/75yzk5OUqNRhMuSZLM39+/7uuvv252ysegQYOq3nnnnfOPPPJI76qqKrlMJkPjQ/5PPPHElXfeeSfgiSeeaBhtXrt27ZmZM2f2ePPNN7u5urpKW7ZsOaVQ/NaBmsuwdetW/x07dpxo/Pjjxo0rTkxM9G98tnRTYmJiql999dXc0aNHh5pMJri6ukoJCQnnPD09TU888URPk8kkA4A33njjAgDExcVdfvrpp3u89NJLppSUlIyWzjPjXpm2pFVtBPCw6BhkHXq5TD8iKLDMKJPd9Po7duwJXbzOYQ9jHjt2LCc6OtphttEqKyuTt2vXziSXy/Hpp5/6bdq0yX/37t1tYQ4jUbNWrVrlt23bNt+tW7davSTbyrFjxzpER0f3bOoyjpjZ1ksA7gNgkdOvyb6oTJLqk4LCc7M7d+wCmcwZvrdOgofgbergwYOezz77bJAkSfDx8TGuXr06R3QmIpHi4+O779mzR3XtKJcz44iZrWlV8wC8JzoGWc8rHdrv/cq73QjROSzgXl287hvRIVrD0UbMiKhtuN6IGec72d6HAI6JDkHWs/jyleH+RuMR0Tla6UtHL2VERI6IxczWtHoDgNkAOFTppOSAfEtufqBMkgpFZ7lFFQCeFR2CiKgtYjETQav/CcBnomOQ9XQyGjv9vfDK2esuKmS/3tDF686LDkFE1BaxmImzEMB1T50nx3ZvReVtQ6uq94nOcZPSAfxDdAgiorbKGc4cc0xafTG0qpcAJIqOQtbzUUHhHcN7BKZVyOWRorO00FxnXkxWk6iJseT96eJ1LVoXLSkpyTc+Pj74yJEjafUbNVtSQkJC+wkTJpReb7HX5rz77rsdPT09TU899dSVG1+75fR6vXzOnDnd9+/f761UKiVfX1/Du+++e2HUqFHNLmobEBCgSUlJyejatavB09Ozf2Vl5VHAvDjo008/3f3MmTPuLi4uklqtrlq5cuW57t27N70fUwvu/3rXO3jwoMewYcMikpOTT0ycOLHZFetbY8eOHd5KpdLU3Fpv1HZxxEwkrT4JwH9FxyDrcQVcN+Xm+0CSHGEj+3/q4nV7RYdwRhs3bvQfMGBA+Zo1a5pdzb811q5d2+HcuXNNbo10I/Pnzy+0dCkDgKlTp/b08/Mz5OTkpJ48eTItKSnpzKVLl256MKCyslI2fvz4kFmzZhWeO3cu9fTp02lz5swpzM/Pt9rAwpo1a9oPGDCgfP369U2+XyaTCfUr8ddrbs/O5nz//ffe+/fv59JJ9DssZuLNAcDNoZ1YD4Oh+4KiklversVGsgA8JzqEM9Lr9fKUlBSvVatW5Xz55ZcNmyXv2LHD+7bbbgsbM2ZMcHBwcGRsbGxQ/S/7lStX+oeGhkaEhIREzpkzJ6D+Np6env1nzpwZGBERET5kyJDQvLw8l1WrVvmlpqZ6xsXF9Var1RHl5eWybdu2eYeHh0f8ugF2z6qqKhkAzJ07NyA4ODgyNDQ04sknnwwEgBdeeKHbokWLOgPA4sWLO9Vffv/99/e+1eeclpamPHr0aLsPP/wwt3419oiIiNopU6boAWDZsmX+Go0mXK1WR8TGxva4Xqn59NNP/QcMGFAeGxvb8MfN+PHjy26//fbqmJiYsB9++KFhS6UBAwaof/75Zw+9Xi+fNGlSz9DQ0IjQ0NCI1atX+157v81lMJlM2LFjh19SUlLO/v37fSorK2UAkJWV5da7d+/IRx99NCgyMjLi1KlTbp6env2fe+65bn379lXv3r3ba//+/Z633357WGRkZPiwYcNCzp4969rU65qVleWWlJTUccWKFZ3VanXEt99+y4JGDVjMRNPqMwG8IToGWdejpWVDompq9ovO0YxaAI/o4nU8pGIF69at8x05cqS+b9++Nb6+vsYDBw407G2o0+naffjhh+ezsrLScnJylElJSX45OTmuWq024L///W92enp62tGjR9s12hNQPmDAgMr09PSMoUOHli1cuLDb9OnTi6OioiqTkpJOZ2ZmpsvlcsyaNavXpk2bTmVnZ6cbDAYsWbKkY0FBgeLrr7/2O3HiRFp2dnb6W2+9dfHarAkJCV1SU1PTs7Oz01evXn32Vp/zL7/84h4REVHZeI/MekeOHHFPTk72T0lJyfw1r7RixYr2TdwNACA1NdVjwIABlU1dNm3atMv//Oc/OwDmw521tbWyQYMGVS1cuLCrj4+PMTs7Oz07Ozv9vvvuu2qvyOtl2Llzp1f37t1rIiMjawYNGlS2ZcuWhr0gc3Jy3KdPn34lIyMjPTQ0tLaqqkoeFRVVdfz48cyRI0dWPPPMM0Hbtm07lZaWlhEfH3/5xRdfDAB+/7qGhYXVxsXFFc6ePbsgMzMzfezYseW39EKTU2Ixsw9vAfhKdAiyrlUXL92mNJlOis7RhFd08bqjokM4q82bN/s/8sgjxQAwceLEosaHMzUaTUVERESti4sLHnrooaL9+/d7HThwoN3gwYPLunXrZnB1dcXDDz9ctHfvXi8AkMvlmDFjRhEAPP7441cOHTr0u5GWY8eOuQcGBtb07du3BgCmTZt25cCBA97+/v5GpVJpmjJlSo/ExERfLy8v07W3DQsLq3rggQd6LVu2zN/V1dUqZxR/++233qmpqZ7R0dHharU64sCBAz6nT59W3sp9TZs2rXjXrl2qmpoa2YoVKzrExsZeBoB9+/b5PP/88w0nV3Xs2PGq447Xy7B27Vr/SZMmFQHmzcUbb57etWvX2tGjRzf8AaNQKDBt2rRiwFwMT5w44TFq1KhQtVodsWTJkq55eXmugG1eV3IenPxvD7R6CVrVYwAOAQgVHYesw12SPJIuFuDhbl2qIJN53PgWNvEdgPdFh3BW+fn5ip9++sknOzvb46mnnoLRaJTJZDJp+fLlFwBAJpNddX2ZTHZTK6xce3sAzd7e1dUVv/zyS8b27dt9Nm7c6Ld8+fJOP/30U3bj6+zZs+fEN998471161bfd999t9uJEydSXV1/m7o2adKknqmpqZ6dO3eu/b//+7+z999/fwgAPP7444Xz589vWLevX79+1RkZGZ5GoxGNN5b+NZ9s8uTJVz755JPcljzHyMjI6n379jV5qM/b29s0fPjw0vXr1/tu377d//Dhw+n1r0FTr82NMhgMBnzzzTd+O3fu9H3//fe7SpKEkpISl+LiYjkAeHp6XlVm3dzcTPWjgpIkyfr06VP1yy+/ZF77eE29ri157tQ2ccTMXmj1egAPAOCQthOLqK3rM0NfmiI6x68KAcTr4nX8C95K1qxZ4/fggw9eycvL0+Xm5ury8/OPBwYG1n733XdegPlQZmZmppvRaERycrL/8OHDy+68886Kn3/+2fvixYsuBoMBW7Zs8R85cmQ5YJ7/tGrVKj8AWL16dfuBAweWAYCXl5dRr9crAHMpys3NdUtNTVUCQFJSUvvhw4eX6fV6eVFRkeLhhx/Wr1ix4nxGRoZn46xGoxGnTp1yGz9+fNmyZcsulJWVKervs15ycnJOZmZm+t69e0/26dOnLjMzMz0zMzO9cSkDgMjIyJq+fftWvPDCC91MJnOX0el0yrVr1/qOHTu2dMeOHX65ubkuAFBQUKDIzs52a+41nDlz5pXDhw97bdy4seGQYnJyss+hQ4c8AGD27NmXFyxY0D06Orqic+fORgAYOXJk6fvvv9+p/vqFhYVXPY/mMmzbts1HrVZX5ufnH8/NzdXl5eXpxo4dW7x+/frfzVG7Vt++fauLiopcdu3a1Q4AampqZCkpKe7Nva7e3t7GsrIyxY3ul9oejpjZE60+HVrVdABbREch63m2WD98ZzvPH8+6ug4RGMMEIE4Xr8sXmMHmWrq8haVs2bKl/fz586+ay/XHP/6xeM2aNf6PPPJIcb9+/crnzZsXmJmZ6TFo0KCyxx57rEShUGDRokW5I0aMCJUkSTZ69Gj9o48+WgIAHh4eprS0NI/IyMgu3t7exi+++OI0AMTFxV1++umne7z00kumlJSUjBUrVuRMnjw52Gg0Ijo6uvLFF18svHTpksv999/fp6amRgYAixcvvmoRYYPBIIuNje1VVlamkCRJNmvWrIIOHTpcferhTVi7dm3O3Llzu/fo0SPKw8PD5Ovra1yyZMn5mJiY6ldffTV39OjRoSaTCa6urlJCQsK50NDQJk+C8vLykrZt23bymWee6b5gwYLuLi4uUnh4eNXy5cvPAcDw4cMr27VrZ5w+fXrDnqhvv/32xenTpweFhIREyuVy6ZVXXsmLj48vqb+8uQzr16/3nzBhQknjx584cWLxypUrO919993X/aPZ3d1d2rhx46lnnnkmqKysTGE0GmVz5swp0Gg0NU29rhMnTiyZNGlS8DfffOP7wQcfnOM8M6rHTcztkVb1dwALRMcg6ymVy/QjggJLDTJZd0ERntfF6z4Q9Ng2Y8+bmO/YscN76dKlnffs2dPieYeN1/Yis5ycHNeRI0eGnTp1KvXaw6ZE9oqbmDuevwDYKToEWY+PSVKtyL9UCkkSsZjrirZQysj5ffzxx+0HDx4cvmjRolyWMnIWHDGzV1pVewApAHoKTkJWtKiD/94vvb1G2PAhdwK4Vxevu7nVMB2UPY+YEVHbxREzR6TVXwHwIIAq0VHIel6/XHRnB4PRVicDZACY3FZK2a9MJpOp+dPziIhs7NefSb9brqYei5k90+qPAngc13kDybHJANmWvIs95JJk7Q3tLwO4Xxevc4StoSwptbCwUMVyRkT2wGQyyQoLC1UAml0yhYcyHYFWNRPASgD85eKkdnp6HHmhU4d+kMms8cdSOYB7dPG6H61w33bt8OHDnVxcXP4JIAr8Q5SIxDMBSDUYDDNiYmKa/IOcxcxRaFVPAfhIdAyynqc6d9i719PT0vPNygGM08XrDlj4fomIyApYzByJVjUPwHuiY5B1GADDnUGBGWUKucZCd1kB80T/fRa6PyIisjIO7TsSrX4pzEtpkBNyAVw25eX7ySSp5MbXvqFKAPexlBERORYWM0ej1b8F4EXRMcg6uhsMgX+5Uvy7vfZuUhWA8bp43V5LZCIiItthMXNE5pGzuQB4HNoJPVxWPji6uuZWR7oqYS5l31syExER2QbnmDkyrSoOwOcAuOS1k6mRoXpYUOC5ark89CZuVgBzKfuftXIREZF1ccTMkWn1SQCmAKgWHYUsSynBfW1egQskqbKFN0kHMIiljIjIsbGYOTqtPhnAUAA5gpOQhYXV1fWeU1J6pAVX3Q3gDl287qy1MxERkXWxmDkDrf4IgBgA/xEdhSxrbol+WO/auoPXucoqmNcpa2sr+hMROSXOMXMmWpUcwOswL6nBXQKcRLlMVja8R2CRQSbr0ejTEoBFunjdYlG5iIjI8ljMnJFWNR7AGgAq0VHIMg4rlRnTunYKhkzmBuAKgMd08bpvROciIiLLYjFzVlpVHwBfALDUKvIk2Jvt/fZu9vF2BTBFF687LzoPERFZHueYOSut/iSAwQDWiY5CFmH6y5Xi/QBGsJQRETkvjpi1BeYN0N8DoBQdhW5JDoDHoNVzI3IiIifHEbO2QKv/GOZDmt+JjkI3LQlANEsZEVHbwBGztkarmgzgHwACREeh68oF8Dy0+i2igxARke1wxKytMf+iVwNYCsAgOA39XiXMS56EspQREbU9HDFry7SqKADLAQwTHYUgAVgL4GVo9bmiwxARkRgsZm2dViUDEAdgCYCOgtO0VQdgPmyZIjoIERGJxWJGZlqVH4C/AZgJwEVwmrbiDID5v+53SkRExGJG19CqggA8B3NB8xKcxlmVwlyCP4RWXyM6DBER2Q8WM2qaVuULYDaAZwB0FZzGWeQBWAlgObT6QtFhiIjI/rCY0fVpVW4AHgXwIoBwwWkc1V4AnwD4Elo9z4QlIqJmsZhRy5hPErgPwEsA7hScxhFUwLyR/CfQ6lNFhyEiIsfAYkY3T6saCOBZAH8C4Ck4jb3JArAMQCK0er3oMERE5FhYzOjWaVWeAMYDmAJgHNruXpxlAP4D4FMAu6DV85uKiIhuCYsZWYZW5QPzCNoDAMYAaCc2kNWlA/gawDcA9kOrrxOch4iInACLGVmeVqUEcBfMo2n3AwgSG8giKgDshrmIfQ2t/pzgPERE5IRYzMj6tKoIALcDGPDrv36w/zXSTAAyYT5E+TXMo2Jcc4yIiKyKxYxsz3yGZwh+K2oDAPQH4C8oUSmAVADHGv3TQauvEJSHiIjaKBYzsh9aVQ+YC1oQgPbX+deS0bZamA8/XvsvD8BJACca/qvVX7Lo8yAiIrpFLGbkeMxz2PwBdADgDaAS1xYwLuRKREQOiMWMiIiIyE7IRQcgIiIiIjMWMyIiIiI7wWJGREREZCdYzIiIiIjsBIsZERERkZ1gMSMiIiKyEyxmRERERHaCxYyIiIjITrCYEREREdkJFjMiIiIiO8FiRkRERGQnWMyIiIiI7ASLGREREZGdYDEjIiIishMsZkRERER2gsWMiIiIyE6wmBERERHZCRYzIiIiIjvBYkZERERkJ1jMiIiIiOzE/wMPG/9/R8wQsAAAAABJRU5ErkJggg==\n",
"text/plain": [
"