{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# UpPMaBoSS notebook for the cell fate model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This Jupyter notebook implements all the analyses presented in the `UpPMaBoSS: a tool for dynamic cell population\n",
"modeling` manuscript by Stoll et al., which will be available on [bioRxiv.org](https://www.biorxiv.org/search/uppmaboss) in the coming days (as of 2019-05-24).\n",
"\n",
"There are two options to run this notebook.\n",
"\n",
"1) With the corresponding docker image\n",
"\n",
"All necessary software and files are available in the\n",
"[docker image for the CoLoMoTo notebook](http://www.colomoto.org/notebook)\n",
"starting with version `2019-05-24`. Further information and usage instructions are available\n",
"in the documentation of the CoLoMoTo notebook.\n",
"Launch the docker application on your desktop using the *colomoto-docker* wrapper with the following command:\n",
"\n",
" colomoto-docker -V 2019-05-24\n",
" \n",
"This notebook can then be found in the folder: `usecases/Population-level Cell Fate with UpPMaBoSS`.\n",
"\n",
"\n",
"2) By creating a conda environment locally\n",
"\n",
"We suggest to download miniconda3 and create an environment (here named named *umb*) with the following command:\n",
"\n",
" conda create -n umb -c colomoto pymaboss notebook seaborn\n",
" \n",
"To launch this environment, you need to activate it with the following command before launching the jupyter notebook:\n",
"\n",
" conda activate umb\n",
" jupyter notebook"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"UpPMaBoSS computes the evolution and the dynamics of a population of cells taking into account both their intracellular and intercellular regulations.\n",
"\n",
"Simulations with UpPMaBoSS are based on a logical model describing the intracellular regulations (logical regulatory graph complemented with logical rules), taking into account cell death, cell division, and intercellular communications. \n",
"\n",
"The logical model of an individual cell is described as a MaBoSS model. At predefined intervals, the simulation of the cell population is stopped and the status of each cell of the population is updated according to the value of the variables representing cell death and cell division, and the value of the variables accounting for the activation or inhibition of signals coming from other cells. The simulation is then continued with the updated conditions until the maximum simulation time is reached. Since MaBoSS results are probabilistic, the simulation outputs of UpPMaBoSS can be interpreted as the behaviour of a cell population. \n",
"\n",
"To run UpPMaBoSS, three files are needed: a model file (in BND format), a configuration file with the transition rates, the simulation parameters and the initial conditions (in CFG format), and a file defining the update parameters (in UPP format).\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The notebook presented illustrate the use of UpPMaBoSS with the analysis of a modified version of the cell fate model previously published by Calzone et al. (2010). Three files related to the logical model used for the analysis are provided together with this notebook:\n",
"- the model files: *CellFateModel_uppmaboss.bnd* and *CellFateModel_uppmaboss.cfg*\n",
"- the update configuration file for UpPMaBoSS: *CellFateModel_uppmaboss.upp* \n",
"\n",
"The code included in the following cell sets the working environment, and particular load different libraries required to run the notebook."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:08.751596Z",
"iopub.status.busy": "2024-08-02T11:13:08.751506Z",
"iopub.status.idle": "2024-08-02T11:13:09.865833Z",
"shell.execute_reply": "2024-08-02T11:13:09.865439Z",
"shell.execute_reply.started": "2024-08-02T11:13:08.751586Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Set up working environment\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.patches import Rectangle\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"import os\n",
"import shutil\n",
"import maboss\n",
"import ginsim\n",
"\n",
"\n",
"# Set seaborn style and create color maps: white-black scale and blue-light-red for ratios\n",
"sns.set_style(\"white\")\n",
"colormap_scale = sns.light_palette(\"black\", as_cmap=True)\n",
"colormap_ratios = sns.diverging_palette(240, 0, center='light', as_cmap=True)\n",
"\n",
"# Shortcut to save figures with a common pattern and format\n",
"def save_figure(figure, title):\n",
" figure.savefig(\"figure_%s.pdf\" % title, bbox_inches=\"tight\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The original cell fate model (Calzone et al., 2010) was defined to study the cell fate decision process in response to the engagement of the death receptors TNFR and Fas. Depending to the presence of the corresponding ligands, several pathways can be activated: survival through NFkB activation, death through necrosis (NonACD), or apoptosis. \n",
"This model has been extended to account for a documented activation of TNFalpha by NFkB (bold arrow), as well as by the addition of two output nodes DIVISION and DEATH, as shown in the regulatory graph using GINsim with the following command line. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:09.867414Z",
"iopub.status.busy": "2024-08-02T11:13:09.866944Z",
"iopub.status.idle": "2024-08-02T11:13:11.862847Z",
"shell.execute_reply": "2024-08-02T11:13:11.862464Z",
"shell.execute_reply.started": "2024-08-02T11:13:09.867393Z"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"Downloading http://ginsim.org/sites/default/files/CellFate_multiscale.zginml"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Do not forget attaching \"CellFate_multiscale.zginml\" file with your notebook\n"
]
},
{
"data": {
"text/html": [
"Using local file CellFate_multiscale.zginml "
],
"text/plain": [
"/home/vincent/Work/code/pyMaBoSS/notebook/upmaboss/CellFate_multiscale.zginml"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lrg = ginsim.load(\"http://ginsim.org/sites/default/files/CellFate_multiscale.zginml\")\n",
"ginsim.show(lrg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The BND file lists all the logical rules for each of the variables.\n",
"The CFG file defines all the parameters for the simulations (transition rates, simulation parameters and initial conditions).\n",
"The UPP file informs on the intercellular conditions and population updates.\n",
"These files are loaded with the code contained in the following cell."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:11.863391Z",
"iopub.status.busy": "2024-08-02T11:13:11.863273Z",
"iopub.status.idle": "2024-08-02T11:13:11.865533Z",
"shell.execute_reply": "2024-08-02T11:13:11.865145Z",
"shell.execute_reply.started": "2024-08-02T11:13:11.863382Z"
}
},
"outputs": [],
"source": [
"# Set up the required files\n",
"bnd_file =\"CellFateModel_uppmaboss.bnd\"\n",
"cfg_WT = \"CellFateModel_uppmaboss.cfg\"\n",
"upp_file = \"CellFateModel_uppmaboss.upp\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### MaBoSS simulation of the wild type model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before running UpPMaBoSS, we strongly suggest to run an initial simulation of the wild type model with MaBoSS for the whole simulation time. This enables the user to verify how the population behaves in a normal MaBoSS run without taking into account cell death or cell division. Here, the total (virtual) simulation time is 48 hours. \n",
"The output results are restricted to the three model nodes \"Death\", \"Division\" and \"NFkB\". Other nodes can be considered in the output, but the most important is to select all the nodes that are used for population updating, as shown in the UPP file below. By considering these nodes in the output, MaBoSS computes explicitly the values of these nodes."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:11.866378Z",
"iopub.status.busy": "2024-08-02T11:13:11.866179Z",
"iopub.status.idle": "2024-08-02T11:13:11.868922Z",
"shell.execute_reply": "2024-08-02T11:13:11.868489Z",
"shell.execute_reply.started": "2024-08-02T11:13:11.866364Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"death = Death;\n",
"division = Division ;\n",
"$TNF_induc u= $ProdTNF_NFkB*p[(NFkB,Death) = (1,0)];\n",
"steps = 48;\n",
"MaBoSS = MaBoSS\n",
"\n"
]
}
],
"source": [
"ufile = open(upp_file, 'r') \n",
"print(ufile.read())\n",
"ufile.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the variable \"Death\" monitors death by apoptosis or by non-apoptotic cell death, while the variable \"Division\" reports the activity of NFkB.\n",
"\n",
"The following command lines load the wildtype model and set the maximal global simulation time to 48 hours:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:11.869451Z",
"iopub.status.busy": "2024-08-02T11:13:11.869338Z",
"iopub.status.idle": "2024-08-02T11:13:11.934668Z",
"shell.execute_reply": "2024-08-02T11:13:11.934232Z",
"shell.execute_reply.started": "2024-08-02T11:13:11.869440Z"
}
},
"outputs": [],
"source": [
"# Load the Wild-Type model\n",
"model_WT = maboss.load(bnd_file, cfg_WT)\n",
"\n",
"# Set some parameters in the cfg file: \"max_time\" \n",
"# and select the variables considered to be internal (not appearing in the resulting csv file)\n",
"# here, only the two outputs will appear: Death and Division in the figures\n",
"model_48h = maboss.copy_and_update_parameters(model_WT, {'max_time':48})\n",
"for name in \"mcIAP mXIAP mROS NonACD Apoptosis Survival TNF ATP FADD cIAP FASL TNFR DISC_TNF DISC_FAS RIP1 RIP1ub RIP1K IKK CASP8 BAX BCL2 ROS MPT MOMP SMAC Cyt_c XIAP apoptosome CASP3 cFLIP\".split(' '):\n",
" model_48h.network[name].is_internal = True\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we define the nodes considered in the output and launch the simulation with the following command lines:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:11.935075Z",
"iopub.status.busy": "2024-08-02T11:13:11.934982Z",
"iopub.status.idle": "2024-08-02T11:13:12.790897Z",
"shell.execute_reply": "2024-08-02T11:13:12.790384Z",
"shell.execute_reply.started": "2024-08-02T11:13:11.935066Z"
}
},
"outputs": [],
"source": [
"model_48h.network.set_output(('Death','Division','NFkB'))\n",
"run_48h = model_48h.run()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result of the simulation can be displayed with the following command line:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:12.791895Z",
"iopub.status.busy": "2024-08-02T11:13:12.791771Z",
"iopub.status.idle": "2024-08-02T11:13:12.934536Z",
"shell.execute_reply": "2024-08-02T11:13:12.934095Z",
"shell.execute_reply.started": "2024-08-02T11:13:12.791885Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot the results of the WT simulation\n",
"run_48h.get_states_probtraj().plot()\n",
"\n",
"# Note that the model state means that none of the external variables are ON. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This graph shows the mean temporal profiles of the nodes Death, Division and NFkB computed for 100,000 single cell (as specified in the BND file) simulations over 48h. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### UpPMaBoSS simulations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now wish to explore the population dynamics for the cell fate model considering cell death, cell division and intercellular events. \n",
"To do so, we divide the 48 hours into 48 runs (the variable \"steps\" is set to 48 in CellFateModel_uppmaboss.upp file) of 1 for each time steps (the variable \"max_time\" is set to 1 in CellFateModel_uppmaboss.cfg file). This choice of the value 1 is based on the analysis of the profile of the MaBoSS simulation above, as such a time-step enables to capture transient changes of activities of the output nodes Death, Division and NFkB."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Wild Type simulations with and without the feedback"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We consider two conditions: when the cells evolve without inter-cellular communication (model referred to as \"NoFB\") and when the presence of NFkB affects that status of other cells (model referred to as \"WT\"). The model with the feedback considers that NFkB activates TNFR in other cells. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following code cell run UpPMaBoSS on the WT model, calling iteratively 48 times MaBoSS and updating the input variables between each of these calls."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:12.935205Z",
"iopub.status.busy": "2024-08-02T11:13:12.935086Z",
"iopub.status.idle": "2024-08-02T11:13:30.608663Z",
"shell.execute_reply": "2024-08-02T11:13:30.608114Z",
"shell.execute_reply.started": "2024-08-02T11:13:12.935194Z"
}
},
"outputs": [],
"source": [
"# Run UpPMaBoSS on the WT model and collect population ratios\n",
"# A folder named \"WT\" \"is created with the 48 runs\n",
"uppModel_WT = maboss.UpdatePopulation(model_WT, upp_file)\n",
"run_WT = uppModel_WT.run('WT')\n",
"pop_ratios_WT = run_WT.get_population_ratios('NFkB -> TNF')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we create a model variant and launch a 48h UpPMaBoSS simulation for the NoFB model:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:30.609097Z",
"iopub.status.busy": "2024-08-02T11:13:30.608990Z",
"iopub.status.idle": "2024-08-02T11:13:37.303670Z",
"shell.execute_reply": "2024-08-02T11:13:37.303293Z",
"shell.execute_reply.started": "2024-08-02T11:13:30.609088Z"
}
},
"outputs": [],
"source": [
"# Create a variant without the population feedback NFkB -> TNF\n",
"model_NoFB = maboss.copy_and_update_parameters(model_WT, {'$ProdTNF_NFkB': 0})\n",
"\n",
"# Run UpPMaBoSS for the model without population feedback\n",
"# A folder named \"NoFB\" \"is created with the 48 runs\n",
"uppModel_NoFB = maboss.UpdatePopulation(model_NoFB, upp_file)\n",
"run_NoFB = uppModel_NoFB.run('NoFB')\n",
"pop_ratios_NoFB = run_NoFB.get_population_ratios('No NFkB -> TNF')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now display the results of the two previous UpPMaBoSS simulation in a single graph with the following command lines:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:37.304101Z",
"iopub.status.busy": "2024-08-02T11:13:37.304002Z",
"iopub.status.idle": "2024-08-02T11:13:37.517640Z",
"shell.execute_reply": "2024-08-02T11:13:37.517158Z",
"shell.execute_reply.started": "2024-08-02T11:13:37.304092Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhMAAAGxCAYAAADYnzRcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfWklEQVR4nO3dd3wUdf7H8dfuplASmqFoQqKUREQ8apD2AyECIoiAioIUiQKHIGc9OoggqAgKnFI9pQgIiCeKSguKCoSiZwE9BCMkaOghCaTu/P5YNiRkUzbZZFPez8djH5CZ78x+Minzzndmvl+TYRgGIiIiIgVkdncBIiIiUropTIiIiEihKEyIiIhIoShMiIiISKEoTIiIiEihKEyIiIhIoShMiIiISKF4uLuAwrJarZw+fZrKlStjMpncXY6IiEipYRgGiYmJ1KpVC7O54P0LpT5MnD59mo4dO7q7DBERkVLryy+/pE6dOgXevtSHicqVKwO2A+Hj4+PmakREREqPhIQEOnbsmHEuLahSHybslzZ8fHwUJkRERAqgsLcJ6AZMERERKRSFCRERESkUhQkREREpFIUJERERKRSFCRERESkUhQkREREpFIUJERERKZRSP86EiJQcqamppKenu7sMkXLJYrHg6enplvcudJh4+umnOXjwIF999VW+t/n111+ZP38+33//PZcvXyY4OJjw8HC6du1a2HJExA0uXbrE2bNnSU5OdncpIuWat7c3fn5+VKlSpVjft1BhYtGiRWzZsoXatWvne5sff/yRwYMHA9CrVy8qVKjAZ599xpgxY5g0aRKDBg0qTEkiUswuXbpETEwMPj4++Pn54enpqUn3RIqZYRikpqYSFxdHTEwMQLEGigKFieTkZGbOnMm6deuc3nby5MmkpqayYcMGbr31VgBGjhxJ//79ee211+jatatT4URE3Ovs2bP4+PgQEBCgECHiRhUrVsTX15fo6GjOnj1brGHC6Rswd+7cyT333MO6deucnq3z4MGDHDlyhO7du2cECYAaNWowatQokpOT2bRpk7MliYibpKamkpycTNWqVRUkREoAk8lE1apVSU5OJjU1tdje1+kwsWHDBhITE5k6dSqLFy92atuDBw8C0KZNm2zr7Mv27t3rbEkut3//n8yd+x379//p7lJESjT7zZbuuulLRLKz/zwW583QTl/mGDJkCK+++mqBZug8duwYAIGBgdnW1a5dG29vb44fP+70fl1p6NDdvPdeW+BGIJ0hQ3bz7rsd3FqTSEmnXgmRksMdP49O90y0bt26wFN9X7p0CYCqVatmW2cymfDx8SE+Pr5A+3aF/fv/vBokLFeXWHjvvTbqoRAREclFsQ5adfnyZQC8vLwcrvfy8nLro2W7d//FtSBh58E338S6oxwREZFSoVjDhLe3N0CON4WkpKRQqVKl4iwpiw4d6gDXX2NKo107PV0iIiKSk2IdAdN+ecN+uSMzwzBISEjghhtuKM6SsmjV6kYGDfqKlSs7ACYgjSFD9tCqle6ZEJG8ffjhh4wfP56aNWvy6aefOrykC7BgwQIWLlzIrFmz6Nu3LwDR0dF06dIlz/fw9fXlwIEDAAwaNIjIyEi2bt1KUFBQjtvktG+LxUKVKlVo1KgR/fv3p3v37vn5NItUfo+DXWhoKCtXrmTfvn0MHjyYihUr8vHHHzu8Nw+ufY1Gjx7NmDFjMpaHhITk6/32799f7ANClQbFGibq168PwMmTJ2nRokWWdbGxsSQnJ2e0cZcVK/6PlSsvAtV4/fUfeeYZBQkRcc6ZM2eYMWMGr732mtPb+vr6MmTIkBzX23t4C+L6faekpHDu3Dm++uorxo4dy9NPP83IkSMLvH9XqFKlCqNHj86yLCYmhk2bNuHv70+fPn2yrPP398/y8ZUrV5gwYQIrV64s0I2I17/39Qpz/MuyYg0TrVq1AmyPf95///1Z1n377bcA2UKGO3h4xJGWVo3KlTV1iYgUzMcff0z37t2d+isbbCfTzH8xu1JO+7548SK9evVi4cKF9O3bl1q1ahX4PU6cOJFjr0BBa9y3b19GmMjPsdm/fz8rV67MGG3ZGUV17Mu6Yr1nonnz5tSrV49PPvmEH374IWP5+fPnefvtt/H29uaBBx4ozpIc8vJKBCAm5oqbKxGR0qhx48YATJ06lYsXL7q3mHyoVq0a3bp1IzU1NWM8oILq2rUrTzzxBF9++SWGYbiowvwLCQnBw8ODuXPncuLEiWJ///KqyMLEvn37WLBgAdu3b89YZjKZeOmllzCbzQwaNIiJEycya9YsevfuzYkTJ/jnP/9JzZo1i6qkfKtY0fbUyV9/pbi5EhG5XnR0NBEREURHR7u7lBx16NCB3r17Z1zuKE4nT56kY8eO3HbbbXzyySf53s5stp0OCtuN37VrV7799luGDx9O165deeedd4iLiyvUPp0RHBzM8OHDuXLlCuPHj3dLoCmPiixMREZGsnDhwixhAqBly5asXr2a0NBQPv/8czZs2IC/vz8LFy5k4MCBRVWOUypXtoWIM2fS3FyJSOlmGAaJiYkue7311lsEBQXRuXNngoKCeOutt1y2b1efdCZOnEjNmjXZvHkzO3bscOm+c/LXX38xdOhQzp49y5w5c+jZs2e+trt48SJbt26levXq3HnnnYWqYf78+ezcuZMxY8aQkpLCK6+8QseOHZk0aRK//PJLofadX6NGjSIkJIQDBw6wcuXKYnnP8q7QNwX8+uuvDpePGTMmx2tPTZo0YenSpYV96yLj62sLEefPu7kQkVLMMAzat2+fcT+Uq1mtVp588kmefPJJl+yvXbt27N6922WjB1atWpXp06fz97//nalTp9KiRQuqVauW53aXLl1iwYIFDtf5+voydOhQh+tOnz7NkCFDiI2NZe7cuXTr1i3PfaelpXHhwgV27NhBeno68+fPd8nj+bVr12b06NH8/e9/JyIigjVr1rBhwwbWr19P8+bNGTp0qMP6XMXT05PZs2fz4IMPMnfuXDp27Jjr0y6Z5XTsQfdT5EZ3GDpQrZoVgAsXNESwSGGU92G2O3fuzH333cfHH3/MjBkzmDNnTp7bxMfHs3DhQofr/P39HYaJ8+fPM3HiRGJiYnjjjTcICwtzet/16tVz+Nh+YVgsFsLCwggLC+PEiRO8+OKLfP3118TGxhZpmAC47bbbeOKJJ3j77beZMGECq1atytf3Y07HBxQmcqMw4YB9qItLl3R4RArKZDKxe/fujJFvCysmJoZGjRphtVozllksFg4fPpzt8cCCqFSpUpGEn0mTJrFnzx42b95M9+7dczzR2/n7+7Nz506n3mPs2LHExsZyww030LJly3zvOz09nUuXLnHo0CFmz57N6NGjmT17dran7QojJSWFLVu2sGbNGr7//nssFkuhL6Xk16hRo9ixYwcHDhxgxYoVuT5ya5dTb7vkTmdLB264wTak9uXLjof9FpH8MZlMVK5c2SX7Cg4OZsmSJYwYMYL09HQsFguLFy8mODjYJfsvKpkvd0ybNi3Xk31BnT9/nrvuuouIiAhmzpyZ7/EtLBYL1atXp0uXLvj7+9O7d29ef/31XMPE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derUITAwEH9/f+Li4oiIiMgIG5MnT2bkyJH4+fnh4WG71W358uUMHz48zxtGFTgkNwoTVylMiEhxKcjlEovFwn/+8x+Sk5M5ceIE33zzDRs2bCjQ+5tMJm644QZq1KiRbZRQs9nM/PnzCQ4Ozmjz6aef8tRTT7kkcKinpOBK8vF12TnUKOXi4+ON4OBgIz4+3t2liEg5cPLkSSMiIsI4efKkw/XLli0zLBaLARgWi8VYtmxZtu3NZrMBZLwsFouxefNmY9OmTcZTTz2VZZ39ZTKZHC539tW2bVujT58+xtChQ42xY8cavXr1yti3yWQyRo0aZXzxxRfG7t27jUOHDhm//PKL8dprr2XUbDabs31O9s87rzYnT540du7cmeOxK2ltXLGP/ByX3NpYrVYjKSnJWLBgQZ77KQhXnUPVMyEi4mKFuT8jp96NY8eOUaFCBWJjY/npp5949NFHyfzr22Qy0bp1axISEjh37hxnzpwhLS2tyD7HatWq4ePjQ8WKFbFYLPzyyy9Z1ptMJnr16kW1atXw8vLit99+48svv8x4Eubee+8lNDQUDw+PjNf+/fsz7iUxmUwMGTKETp06YTabM15ffvklS5YsyWgzatQounbtitlsxmQyYTab2bp1K/Pnz8/okRk7diz33HNPlvo+++wz3nzzTaxWKyaTiTFjxhAWFobVasVqtbJt2zYWLVqU8T5Dhw6lffv2pKWlkZ6eTlpaGl9//TXr16/PaNOjRw8aN25MSkoKKSkpXLhwIePzyax9+/aYzWZSUlJITEzkxx9/zHZ8K1euTGpqKikpKQ6Pv8ViISoqqtA9FLrMcZXChIiURrkFjrwup+SnzcmTJ7n55puzTQM/b948PDw8uHTpEj/88ANr1qzJVlv9+vUxmUxcvnyZuLg4EhMTXfzZiytERETQqVOnQu1DYeIqhQkRKYvy6t3IT5uC3uOR+S/enNps3bqVqlWrcuXKFf744w8GDRqU5S9ws9nMlClTqFSpEr/++qvDqeN79epFzZo1SUtLIyYmhh07dmRr06pVK6pXr47VauXcuXN899132do0atQIX19frFYrcXFxHD16NFubevXqZZwjEhISOH78eLY2t956K9WqVSM+Pp6ff/452/o777yT2rVr4+Hhwblz59i1a1e2Ng8++CD169fH09OTK1eu8Prrr2c7LvPmzePG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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot population ratio with/without population feedback\n",
"# A figure is saved in the folder with the name: \"figure_ratios.pdf\"\n",
"figure = plt.figure(figsize = (6,5))\n",
"plt.rcParams.update({'legend.fontsize': 15})\n",
"pop_ratios_WT.plot(style='.-k', legend=True,fontsize=15)\n",
"pop_ratios_NoFB.plot(style='.-b', legend=True)\n",
"save_figure(figure, 'ratios')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this graph, comparing the curves obtained after a pulse of TNF at t = 0 in the absence (blue curve) or in the presence (black curve) of the feedback from NFκB to TNFα, we see that the TNF paracrine loop leads to a significant decrease of the population size."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Comparative simulations of different TNF treatments"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this section, we simulate the effect of several scenarios for TNF treatments on the wild type cell fate model. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We first run a simulation for 48 hours without TNF treatment. "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:37.518538Z",
"iopub.status.busy": "2024-08-02T11:13:37.518181Z",
"iopub.status.idle": "2024-08-02T11:13:39.102228Z",
"shell.execute_reply": "2024-08-02T11:13:39.101809Z",
"shell.execute_reply.started": "2024-08-02T11:13:37.518524Z"
}
},
"outputs": [],
"source": [
"# Create a model with no TNF (TNF OFF)\n",
"model_noTNF = model_WT.copy()\n",
"model_noTNF.network.set_istate('TNF', [1,0])\n",
"\n",
"# Run UpPMaBoSS for the model with no TNF\n",
"# A folder named \"noTNF\" \"is created with the 48 runs\n",
"uppModel_noTNF = maboss.UpdatePopulation(model_noTNF, upp_file)\n",
"run_noTNF = uppModel_noTNF.run('noTNF')\n",
"pop_ratios_noTNF = run_noTNF.get_population_ratios('No pulse TNF')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We then simulate a constant treatment for another 48h on a population of cells that received an initial TNF treatment (reTNF) and compare this simulation with the treatment of a population that was not initially treated with TNF (reTNF_noTNF)."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:13:39.102702Z",
"iopub.status.busy": "2024-08-02T11:13:39.102604Z",
"iopub.status.idle": "2024-08-02T11:14:10.218479Z",
"shell.execute_reply": "2024-08-02T11:14:10.218147Z",
"shell.execute_reply.started": "2024-08-02T11:13:39.102693Z"
}
},
"outputs": [],
"source": [
"# Create a model for a second treatment of TNF\n",
"model_reTNF = maboss.copy_and_update_parameters(model_WT, {'$TNF_induc': 20})\n",
"\n",
"# Run UpPMaBoSS for the second treatment of TNF after a WT run with TNF ON\n",
"# A folder named \"reTNF\" \"is created with the 48 runs\n",
"uppModel_reTNF = maboss.UpdatePopulation(model_reTNF, upp_file, previous_run=run_WT)\n",
"run_reTNF = uppModel_reTNF.run('reTNF')\n",
"pop_ratios_reTNF = run_reTNF.get_population_ratios('TNF')\n",
"\n",
"# Run UpPMaBoSS for a treatment of TNF after a run with no TNF (where TNF was initially OFF)\n",
"# A folder named \"noTNF_reTNF\" \"is created with the 48 runs\n",
"uppModel_noTNF_reTNF = maboss.UpdatePopulation(model_reTNF, upp_file, previous_run=run_noTNF)\n",
"run_noTNF_reTNF = uppModel_noTNF_reTNF.run('noTNF_reTNF')\n",
"pop_ratios_noTNF_reTNF = run_noTNF_reTNF.get_population_ratios('TNF')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we plot the population ratios computed for the two protocols: \n",
"1. (Pulse of TNF) + TNF (or WT + reTNF), \n",
"2. (no pulse of TNF) + TNF (noTNF + reTNF_noTNF). "
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:14:10.219004Z",
"iopub.status.busy": "2024-08-02T11:14:10.218887Z",
"iopub.status.idle": "2024-08-02T11:14:10.422045Z",
"shell.execute_reply": "2024-08-02T11:14:10.421657Z",
"shell.execute_reply.started": "2024-08-02T11:14:10.218994Z"
}
},
"outputs": [
{
"data": {
"image/png": "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eT5OMucyz9i3bt2acuXKARAZGZlpm4SEBLZt2wZAhw6lrze7Xr2Kaa8PH441rQ4REREREcnZ4MGDgazzS2lWsWJFAgICWLt2LatWrTK7nDLPZYK9t7c33bt3B2DhwoUcP348Q5vp06dz8eJF3N3d6devX3GXWOQ8PGxYLLEAHD4cl31jEREREZESLjo6msjISKKjo80uJV9q1aoFQExMTNq2xx57jJCQEI4cOZKhfZcuXQgJCSE5OTnb8+7YsYMnn3yS9u3b06xZM7p27cr48eM5ffp0hrYnT57klVdeoVOnTjRt2pSOHTvy8ssvc+pU0a6u5enpycSJE7FYLLz22mucPXu2SK8n2Sv2ofg9e/YEoHnz5kydOjXdvhEjRrBu3TpiY2Pp27cvo0aNolWrVsTExLBgwQKWL18OOP+x1KhRo7hLLxY22wWSkyvy558XzS5FRERERCSNYRhcunSp0M63aNEihg0blja/1qxZsxgwYECBz+vt7V1sy2JHRUUBFGo22blzJ0888QR+fn50794dX19fdu/ezdKlS9m8eTOff/45Xl5eABw4cID+/fsTExND586dadCgAX/++Scff/wxGzZs4P333y/SZ9Xbtm3LI488wocffpjvIflSOIo92B8+fBgg08klatasycyZMxk2bBjHjx/nmWeeydCmZ8+evPDCC0Vep1k8PeNJTobo6MtmlyIiIiIiAjhDffv27dmyZUuRnN/hcDBkyBCGDBlS4HO1a9eOTZs2FXm4T05OZvr06cC1zsvCsGjRIhITE/nggw+oU6dO2vaXXnqJjz/+mHXr1tGrVy/A+Yx/bGws4eHhdOzYMa3tt99+y6BBgxg9ejQffvhhodWWmZEjR7Jp06a0IfmpteVk5cqVWc6O/8ADD2C32wuzzFLPZSbPS9WhQwe++OILwsPD2bx5M6dOncLDw4NGjRrx4IMP0rt372K7A2cGb+/LXLwIJ04kml2KiIiIiEia0vw7eHb27NnDrFmz0r43DIOYmBi2bNlCVFQUDRs2THvWvjAYhgHADz/8kC7Yv/jiizz77LNpHaS7du3i999/p2fPnulCPUCnTp1o164d3333HYcOHaJBgwaFVt/f+fj4MHHiRAYOHMhrr73GrbfemqtZ8leuXJnlvtatWyvY51GhBHu73Z62pmFOctMuICCA8ePHF7SsEsnX9ypnzsDp0ylmlyIiIiIiAjhD/aZNmwptKP6xY8do3LgxDocjbZvNZuP333/Pdgm03Cjsofh79+5l7969ad9brVZ8fHwIDAxk2LBhDBw4EF9f30K73j//+U/WrVvH6NGjmT17Nu3bt+e2226jXbt26Zb7/vXXXwE4d+5cuhsPqVL/rnbv3l2kwR6uDclftmwZY8eOZc6cOTke895772lW/ELkcj32ZV2FCs5Af/68YXIlIiIiIiLXWCwWfHx8CuVcwcHBhIeHExYWRkpKCjabjXnz5hEcHFwo5y9MDzzwAFOmTCm267Vr144lS5awYMECNm/ezLJly1i2bBnu7u7ce++9jBkzBm9vb+LinJNt79ixgx07dmR5vgsXLhRL3SNHjmTz5s2sW7eOzz//nJtvvrlYritOCvYuplIlZ6CPjbWZXImIiIiISNEJDQ2lR48eHDx4kKCgoFI39Pr60QipcjvioUWLFrRo0YLExER27drF5s2b+d///scnn3yC1WplwoQJaTdZ/v3vf/PUU08Vau354evry4QJE3j88ceZMGEC4eHhZpdUprjMcnfiVKWK868kLs7D5EpERERERIqW3W6nc+fOpSrUe3g4f4+/eDH9KlexsbHExsZme6zD4SA8PJxp06alneuWW25h+PDhLF26FCCtd/6GG24AnM/aZ2bJkiXMnj27WJcSvO2223jkkUeIjY3l1VdfLbbrioK9y6le3TmI4uJFL5MrERERERGRvKpfvz4AkZGR6bbPnj07bWK8rFitVjZs2MC8efP44Ycf0u07evQoQNpNkBYtWlC/fn3Wrl3L2rVr07XduXMnkydPZuHChfj7+xfo/eTVyJEjqVWrFr/99luxXres01B8F1OrlicAV64UzvNLIiIiIiJSfB555BE++OAD5s6dy4EDB6hduzY7duzg8OHDNGrUKN1EfJn597//zcCBAxk4cCDdu3fHbrdz8uRJvv76a7y8vHj22WcB502AN954g8cff5yhQ4fSvn17QkJCOHHiBGvXrsUwDCZPnlxo8yLklq+vLxMnTuTxxx8v1uuWdeqxdzG1a3sDkJRU3uRKREREREQkr4KCgnj33Xe55ZZb2LhxI8uWLaNq1aosW7aMwMDAHI+/5ZZbWLp0KZ07d+bnn39mwYIFbNmyha5du/Lxxx/TvHnztLZNmzZlxYoVPPzwwxw8eJD33nuPnTt30rlzZz744AO6d+9elG81S6lD8qX4WIycxoOUAgkJCbRs2ZKdO3cW6lIUReG776Jp394OXCUlxQOrtWyuFyoiIiIixefKlSscPnyYevXq4eWlR0JFspPbfy/FmUPVY+9iGjSo+NcrT86cuZhdUxEREREREREFe1dTrZoPcBWAQ4diTa1FREREREREXJ+CvYuxWi1YrbEAHDmSYG4xIiIiIiIi4vIU7F2Qu3scAEePXjK5EhEREREREXF1CvYuyMvL+Wz9sWNXTK5EREREREREXJ2CvQvy9nYG+lOnkkyuRERERERERFydgr0L8vNLBODMmVK/EqGIiIiIiIgUkIK9C6pY0QHA+fNaw15ERERERESyp2DvgipXdv554YLN3EJERERERETE5SnYu6Bq1ZyBPiHBw+RKRERERERExNUp2LugGjWcgf7SJW+TKxERERERERFXp2Dvguz2cgAkJvqaXImIiIiIiIi4OgV7F1S7trOnPjm5gsmViIiIiIiIiKtTsHdB9es7A71hVCAxMcXkakREREREyp4VK1YQEhJC+/btuXDhQpbtZs2aRUhICCtWrCjG6gquS5cuhISEkJycXOzXHjVqFCEhIbn+2rZtGwCPPfYYISEhvPLKK9meP/W9XS/17ymnr4kTJxbZ+y5KbmYXIBnVr1/xr1dWDh8+R0hIZTPLEREREREps86cOcOECRN44403zC6l1OjWrRsBAQHptq1cuZJjx47xwAMPZNj39++XLVtGz549ue222/J87datW9O6dess99944415PqcrULB3Qd7e7sAFoAKHD19QsBcRERERMdFnn31Gz5496dq1q9mllArdunWjW7du6bZt3749Ldi3adMmx3O89NJLfP755/j65m1estatWzNs2LA8HVMSaCi+i3JziwPgzz8TTK5ERERERKTsatKkCQBjx44lNjbW3GIEcP6dHD9+nKlTp5pdistQsHdRHh7xAERHXza5EhERERGRohEdDZGRzj9dVYcOHbjvvvvShuTnVkpKCu+99x4PPPAAzZs35+abb+af//wnn376aa6Oj46OTnue/Pvvv+fhhx+mefPmdOrUiXHjxnHu3Ll07VOfIV++fHmGc6U+075ly5Zsr3ns2DFGjhxJt27daNq0Ke3ateOZZ57ht99+y9D2ypUrzJ07l7vvvptmzZrRunVrBg8ezC+//JKr91cQY8aMwd/fn2XLluX4nsoKBXsXVa6cM9CfOJFkciUiIiIiImAYcPFi4X3NnQuBgdCli/PPuXML57yGUfjv/aWXXqJq1ap8/vnnrF+/Psf2iYmJDBo0iIkTJxIfH0/v3r258847OXr0KCNHjsxx8rfr/fLLLzz11FN4eHjQr18/AgIC+OCDD3jkkUc4e/ZsQd5WOufPn6d///6sXr2am266iSeeeIJbb72VDRs20KdPH/bu3ZvW9tKlS/Tr148ZM2ZQrlw5+vbtS/fu3fnhhx/o06cPa9asKbS6MlO5cuW0n+FLL71EQoJGOesZexfl63uVc+fg9Onin6VSREREROR6hgHt20NRdY46HDBkiPOroNq1g02bwGIp+LlSVahQgVdffZWnn36asWPH0rJlSypWrJhl+4ULF7J582Zuv/12pk2bRrly5QBneH788cdZtmwZt956K3fddVeO1967dy/9+/fnpZdeStv2n//8h3nz5jF9+vQ8jSLIzpdffkl0dDQTJkzg4YcfTtvesWNHRo4cydKlS3n11VcBmD59Or/++iuDBw/mueeeS2s7ZMgQHnroIUaPHk2bNm2y/RkV1F133cXq1atZs2YNU6dOTastJ9u3b2fWrFmZ7mvdunWunu93Reqxd1F+fs6e+kK8CSciIiIikm+FGZRLoi5dunDvvffmakj+J598gtVqZfz48WmhHqBSpUppAX3ZsmW5um7FihV59tln02175plnqFKlCl988QWJiYl5fCeZM/4a6vDLL7+QlHRt1PBdd93FunXr0nrIU1JS+OSTT6hatSrPPPNMunPUqlWL/v37c/HiRb788stCqSs7Y8eOpWLFiixbtozvvvsuV8ds376d2bNnZ/q1ffv2Iq646KjH3kVVquT8hxUTo3svIiIiImIui8XZC37pUuGc79gxaNzY2VOfymaD33+Hv61slmfe3kV3E2LMmDF8//33fP755/Ts2TPDzO4AFy9eJCoqinr16lG9evUM+1u0aIHNZmPPnj25umazZs0yzPzu5uZGs2bNiIyM5PDhwxnWbM+Pnj17MnfuXJYvX87XX3/NrbfeSvv27enQoQO1a9dOa3f48GESEhLw8/Nj7ty5Gc4TFRUFwO+//17gmnKSOiR/xIgRjBkzJlez5A8dOrRUzoqvYO+iqlRx/tcoPl5/RSIiIiJiPosFfHwK51zBwRAeDmFhkJLiDPXz5jm3u7Lrh+SPGzeOW265JUOb1Oe9y5cvn+k53NzcqFSpUq5n2K9Zs2am21MDbHx8fK7Ok5OqVauyYsUK5s2bx7p161izZk3as/K33nor48aNo169ely4cAGA48ePM3v27CzPl9quqN19992sXr2ar7/+mtdff53XXnutWK7rapQaXVT16u4AJCR4mVyJiIiIiEjhCw2FHj3g4EEICgK73eyKcid1SP5nn33GhAkTCAwMTLff56+7H6dOncr0eIfDQUJCQq6fP798OfNVsuLinMtj+/v7A2D5a5iC4/phEH+5lMuhFjVr1mTcuHGMHTuW/fv38/3337Nq1Sq2bt3K4MGDWb16ddr769ixI++8806uzlvUxo4dy/bt2/noo4/o2bOn2eWYQuO8XVStWp4AXLnibXIlIiIiIiJFw26Hzp1LTqhPNWbMmLRZ8r/55pt0+3x9fQkMDOT06dP8+eefGY7dtWsXly9fzvXw+V27dmXYlpSUxK5du6hYsWLajQV3d2fH4MWLFzO0P3LkSI7X+fLLLxk7dizx8fFYLBZCQkIYOHAgy5Yto27dukRFRXH69Gnq16+Pl5cXe/bsyfT5/u+++4633nqLH374IVfvrzBUqVKFl19+GXD+3Vy5cqXYru0qFOxdlN3unGQjKcnP5EpEREREROR6FSpUYPz48QCZrvH+4IMPYhgGr776aroe95iYGCZOnAjAAw88kKtrHTlyhIULF6Z9bxgG06ZNIyYmht69e+Pm5hyE3aBBAwC++eabtInwAL7++ut0S9VlZe/evXz44Ye8//776bbHxcURGxuLj48P/v7+eHh4pE0i+J///CfdCIGzZ8/yyiuvEB4enqv3Vph69epF9+7dOX78OOfOnSv265tNQ/FdVN26zmdyUlIqmluIiIiIiIhk0LVrV+655x4+//zzDPueeOIJvv/+ezZt2sQ999xD+/btSUpK4ttvv+XMmTM8/PDD9OrVK1fX8fX1ZcqUKXz77beEhITw008/8fPPP9OkSZN0k8B16tSJgIAAtm3bxqOPPsott9zCH3/8wbfffkvr1q1znPF9wIABrFq1iunTp7Nt2zZuuOEGLl++zNq1a4mNjeXll1/Gw8MDgJEjR/Lzzz+zYMECtm7dSqtWrbh69Spff/01MTExPP7445nOP1DUxo0bx44dO3I9f0Fpoh57F1W/foW/Xnlz/nzmz9WIiIiIiIh5Uofk/527uzvvvPMOo0aNwsfHhxUrVrBmzRrq1avHtGnT8rT2fHBwMHPmzCEmJoYlS5Zw7tw5nn76ad5//328va89tuvu7s57773H3XffzeHDh1m8eDHnz59n7ty59OjRI8frVK5cmaVLl9K3b19OnDjBkiVLWLVqFUFBQbz99tv069cvrW358uX58MMPGTp0KImJiXz44YesWbOGBg0aMG3aNEaNGpXr91eYrh+SX9ZYjOvHaZRSCQkJtGzZkp07d+a4/IGrcDgMbLZkwJ3t20/QqlXms2GKiIiIiBTUlStXOHz4MPXq1cPLS5M3u4Lo6Gi6du1KixYt+OCDD8wuR66T238vxZlD1WPvoqxWCxZLLACHD8eZW4yIiIiIiIi4LAV7F+bu7gz0R49mnNlSREREREREBBTsXZqXlzPQHz9e9pZrEBERERERkdzRrPguzNv7MnFxcPJkktmliIiIiIhIMbLb7ezbt8/sMqSEUI+9Cytf3hnoT5925NBSREREREREyioFexdWsWIKADExFpMrEREREREREVelYO/CKlVyrkQYG6snJkRERERERCRzCvYurFo1519PfLyHyZWIiIiIiIiIq1Kwd2HVqzsD/eXLXiZXIiIiIiIiIq5Kwd6FBQQ4A/2VK74mVyIiIiIiIiKuSsHehdWp4wNAcrKfyZWIiIiIiIiIq1Kwd2H16jkDvWH4k5ysJe9EREREREQkIwV7FxYU5P/XKxtHj8aZWouIiIiIiIi4JgV7F1a+vAeQAMAff1wwtxgRERERERFxSVog3cXZbLGkpPgSFRVvdikiIiIiImXGrFmzmD17dq7bT548me3bt7Ny5Urat29PRERElm0fe+wxtm/fzvr167Hb7QCsWLGC0aNH53idrl27Mnfu3FzXJWWDgr2L8/CI5/JlOHbsstmliIiIiIiUGa1bt2bo0KHptq1bt469e/fStWtXGjdunG5f48aN2b59OwCbN29m+fLlPPzww3m+bqNGjejWrVuW++vXr5/nc0rpp2Dv4sqVu8zly3D8+FWzSxERERERKTPatGlDmzZt0m07duwYe/fupVu3bvTu3Tvb46dMmUL79u2pWbNmnq7buHFjhg0blud6pWzTM/YuzsfHGehPnUo2uRIRERER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vJReotWu7VwCMDk568cUREREREREpGzKU7AHGD16NFarlaioKPr06cPmzZs5f/48u3fvZsiQIaxbtw6AYcOGpc2in6pnz5707NmTkSNHptvevHlzHnroIQC++uorBg4cyKZNmzh37hwnT57kk08+4eGHH+bMmTO4u7vzyiuv5Pf9lkh16zoDvcPhj8Nh5NBaREREREREyhK3vB7QrFkzJk6cyMsvv8z+/fsJDQ3N0Obxxx+nb9++GbYfPnwYgKpVq2bYN27cOJKTk/nf//7Htm3b2LZtW4Y2Pj4+TJ06lVtuuSWvZZdoDRpU/OuVO8eOXaB27ZxXGhAREREREZGyIc/BHqB37940adKEiIgItm3bxrlz5/D29qZp06b06dOHbt265fmc7u7uvP7669x///0sW7aMn376iXPnzuHu7k7t2rXp2LEjjz32GNWrV89PySVa5crlgMtAOf74Q8FeRERERERErslXsAfnc+5Tp07N0zH79u3LsU3btm1p27ZtfssqtWy2WFJSyhEVFU+nTmZXIyIiIiIiIq4iz8/Yiznc3Z3LC0ZHXza5EhEREREREXEl+e6xl+Ll5XWJK1fg+PGrZpciIiIiIlLqzZo1i9mzZ+e6/eTJk9m+fTsrV66kffv2REREZNn2scceY/v27axfvx673Q7AihUrGD16dI7X6dq1K3Pnzs11XVI2KNiXED4+V4mNhdOnk80uRURERESk1GvdujVDhw5Nt23dunXs3buXrl270rhx43T7GjduzPbt2wHYvHkzy5cv5+GHH87zdRs1apTtnGX169fP8zml9FOwLyH8/JI4dgzOnHGYXYqIiIiISKnXpk0b2rRpk27bsWPH2Lt3L926daN3797ZHj9lyhTat29PzZo183Tdxo0bM2zYsDzXK2WbnrEvIfz9UwCIibGYXImIiIiIiGSnSZMmJCQkMGbMGLNLkTJCwb6EqFzZGegvXHA3uRIRERERkcIRHRdN5OFIouOizS6lUA0bNoy6deumDckXKWoail9CVKtmAyAhwdPkSkRERESkLDIMg0tJlwrtfIt+WcSwr4bhMBxYLVZm3TmLATcOKPB5vd29sVjMHeXq6enJ5MmT6du3b76H5IvkhYJ9CVGrlgcAly+XM7kSERERESlrDMOg/YL2bDm6pUjO7zAcDPlyCEO+HFLgc7Wr3Y5Nj28yPdy3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R49CZKRmzBcRERERESnp3PJ74L59+5g/fz7btm3j/PnzVKxYkaZNm9KnTx86duyY74ISExP54IMP+Oqrrzh8+DAXL16kWrVqtG3blieffJJ69erl+9xlhd1ux263AxAREUH58uWZNetZ4AQwmSlT4PXXwTDAaoXwcAgNNbVkERERERERySeLYRhGXg9at24dw4cPJykpKdP9jz32GGPGjMlzMdHR0Tz55JMcPnw40/1eXl5MmzaNLl265Om8CQkJtGzZkp07d+Lr65vnuko6wzB4+eWXmThxIjACeBOwpO232SAqCv66FyAiIiIiIiIFVJw5NM9D8Xfv3s2IESNISkqiWbNmLF68mK1bt/Lxxx/TtWtXABYvXsySJUvydN7Lly/z+OOPc/jwYTw8PBgxYgRr165ly5YtvPnmm1StWpUrV67w/PPPc/z48byWXaZZLBYmTJjA66+/DvzI9aEenGvdd+gAL7wAGzZAYqJze3R0zsP1c9NGREREREREik6eg/306dO5evUqderUYdGiRbRu3Rp/f3+aNWvGnDlz6N69OwAzZ84kISEh1+edO3cuf/75J1arlTlz5hAWFkadOnWoXLky99xzD++88w42m41Lly7x/vvv57VsAUaOHMnIkb3JbK37qCh4803o2hUqVYKbboI6daBLFwgMhJkzweFIf1REhHNfapuIiIzXLKybA8XVxpVqKaw2rlSL6jW/jSvVUhrrzU0bV6olN2127IvmPysj2bEv65NEx0UTeTiS6LiCtREREZH8ydMz9ocOHWLjxo0ADBo0CB8fn3T7LRYLo0aNYt26dcTGxrJmzRoefPDBHM+bmJjIRx99BMBDDz2U6TP6jRs3pm3btmzZsoXdu3fnpWy5Ts+eTZk6dRAwD+dffzIwgpdeeoro6GasXg2nTsEvv1w7xuGAZ5+F556DypWhShXw9YUdO9K3eeop53GVK4OHB/z0E3z8sfNZfosF+vWDjh2dz/Vbrc5tmzbBu+9ea/Pkk84bBeD8Hpy/cIaHX2sTFnatTaoNG2DevIK1KYxzuFobV6pF9ZrfxpVqKY31lsb3NOf7CL4tPwisDvjFQiffMIbcmf4kGw5vYN7OeRgYWLAwrM0wejXshbvNHXerO+42d77Y/wUTNk3AYTiwWqyE9wontIUmdxERESkseXrGfsGCBUyZMgWLxcJ3331H5cqVM2133333sXfvXrp27crcuXNzPO8333xDWFgYAGvWrKFu3bqZtrt69Sru7u5YrXkbaFDWn7G/XnR0NIGBgTgcNYEg4CBwjGbNmhEeHk7r1rfyzjsweLDJhYqIiLn8omF4oDPUFzILFoa1HkbHwI7cVOMm6vnXw2qxEh0XzYFzB2hYuSF2P038IiIiJVtx5tA89djv2bMHgBo1amQZ6gFuuOEG9u7dm+ue9V27dqWd9++hPikpCXd3dwA8PT3zUq5kInWt+7CwMFJSjmGxWPD09OLXX3+lbdu2DBgwgGeemYrVWi3d0HubDbZudfbEnzsH+/bBv/7l7OVJZbHAgAHg6Ql//glffZXx+m3bOof6Oxxw5gz88EPGNjfdBP7+ztfnz6cfPZDqxhuhYkXn65gY+OsjlOc2zZs728TGZr8fSl4bV6pF9ZrfxpVqKY31lsb3FO12gD8yCfUNfG7EXsV5kpgrMew6lfEk9f3r42nzJMmRRPzVeE5dPJVuv4HBzO0zmbnduRRreY/yVPetzqHzhzAw1KsvIiKSV0Ye9O3b1wgODjb69OmTbbuZM2cawcHBRkhIiJGYmJjjeYcOHWoEBwcbjz32mGEYhvHDDz8YQ4YMMVq2bGkEBwcbrVu3Np5//nnj0KFDeSk3TXx8vBEcHGzEx8fn6/jS6OjRo0ZkZKRx9OhR4+TJk8bjjz9uAAZg+Pn5Gf/4xxrDZnMYYBg2m8OYPz/jOebPNwybzfirjZGuzdGjhmG1Ovelftlszu2u2MaVaimr78mValG95rdxpVrK6nvavveowStWg3Fc+3rFZmzfe+0kRy8cNazj07exjbcZRy9k38Y6zmr8c/k/jZbzWhqer3mmv0YW5xERESlpijOHkpfGd911lxEcHGwMHjw423YLFiwwgoODjeDgYOPcuXM5nveRRx4xgoODjWHDhhnz5s0zGjVqlHb89V/Nmzc31q5dm5eSDcNQsM+trVu3Gq1atTJSAz4EGNDJsFhqG/MzS/aG8xfAyMj0vyymyi74u2IbV6qlrL4nV6pF9ZrfxpVqKavvacCM+Qav2NJC/YAZGU8yf+d8wzbelhbG5+/MW5vE5EQj4seITMN9xM6IjEWLiIiUEMWZQ/P0jH23bt04evQod911F9OmTcuy3QcffMC4ceMA5/PzNWvWzPa899xzD/v376dq1aqcOXOG4OBg/v3vf9O6dWuSkpL45ptveP311zl79iyenp589NFHNGrUKLdl6xn7PHA4HLz11luMHDky3XabzUZUVBT2PC52Hx0NBw9CUBBkdagrtXGlWsrqe3KlWlSv+W1cqZay+p527Ivmuz0Hadc4iFYhmZ8kOi6ag+cPElQpKMtn47NrEx0XTeD0QBxG+qH/7lZ3JnWdxHO3PofNasv8DYiIiLio4syheQr2PXr0ICoqirvvvpv//Oc/WbZbunQp48ePB2Djxo1Ur1492/Om3jAAaNCgAR999FGGN/7HH3/w4IMPcunSJTp37sy8efNyW7aCfR5FRkbS5e9TJwMbNmzg9ttvN6EiEREp7SJ+jCBsVRgpRgo2i40m1ZqkPb/fMbAji+5fRN2Kdc0tUkREJA+KM4fmaXp5b29vAK5cuZJtu8TExLTXHh4eOZ63XLlyaa+HDx+e6ZuuX79+2tJ5mzdvJiEhIVc1S941bNgw05UH3nvvPVJSUkyoSERESrvQFqFEDY8ickAkUcOj+DnsZ9655x183H3YeGQjzd9uzoKfFnD0wlEiD0cSHRdtdskiIiIuI0/BPjVwx8fHZ9suLi7OeXKrlQoVKuR4Xh8fn7TXbdq0ybLdLbfcAkBycjJHjhzJ8bySP6kz59tszmGPlr8WlF+4cCGPPPJIjjd2RERE8sPuZ6dz3c7Y/exYLBaebPEku57eRbva7YhPjOeJz56gzvQ6dHmvC4HTA4n4McLskkVERFxCnoJ9vXr1ADhx4kS27VL316xZM1drzgcEBKS99vLyyrJd+fLl014rXBat0NBQoqKiiIyM5M8//2TZsmV4eHjwySefcMcddxATE2N2iSIiUgbU96/PtwO/ZXS70em2OwwHYavC1HMvIiJCHoN9SEgIAMeOHUvrlc9M6vr1uZ3grnHjxmmv//zzzyzbnT17Nu11Ts/tS8HZ7XY6d+6M3W7nH//4B6tXr8bPz49NmzbRoUMHjh49SnR0NJGRkURH6xcrEREpGjarje4NumfYnmKkcPD8QRMqEhERcS15CvYdO3YEnDOnf/PNN5m2OXr0KPv37wegQ4cOuTpv586d015/+eWXWbb77rvvAKhWrRq1atXK1bml8Nx+++1s2rSJWrVqsXv3bpo3b05gYCBdunQhMDCQiAgNiRQRkaLRsHJDrJb0v7bYLDaCKgWZVJGIiIjryFOwr127Ni1btgRgzpw5GZ61NwyDKVOmYBgG/v7+3Hfffbk6b1BQEC1atACcz3EfOnQoQ5uff/45LfTff//9uRriL4WvefPmfP/99wQFBREbG4vD4VyayOFwEBYWpp57EREpEnY/O+G9wrFZri17d0PVGwgoH5DNUSIiImVDntPx6NGjsVqtREVF0adPHzZv3sz58+fZvXs3Q4YMYd26dQAMGzYsbRb9VD179qRnz54Z1kgHGD9+PJ6enly6dIlHH32UJUuWcPz4cU6dOsXSpUsJDQ0lKSmJgIAAwsLC8vl2pTDUqVOHN998M8P2lJQUDh7UkEgRESkaqTPnL7hvAe5Wd349/Svv73rf7LJERERMl6d17FOtWLGCl19+meTk5Ez3P/7444waNSrD9tRn9Fu3bs3ixYsz7N+2bRvPPPMMsbGxmZ43ICCAt99+O+08uaV17AtfdHQ0gYGBaT32ADabjaioKOx2u4mViYhIWTBp0yRe2vAS/l7+/D7kd2r41jC7JBERkXRcdh37VL1792bFihXcd9991KhRA3d3dypUqEC7du2YM2dOpqE+N9q0acPq1asZPHgwwcHBeHt74+vrS+PGjXnuuedYuXJlnkO9FI3UJfGufyTiwQcfVKgXEZFi8cJtL3BzjZuJuRLDv774F/nopxARESk18tVjX9Kox77oREdH8+abbzJjxgzc3d3Ztm0bN998s9lliYhIGfDLyV+45Z1bSHYk89FDH/Fwk4fNLklERCSNy/fYi6Sy2+1MmzaN++67j6SkJB599FEuXrxodlkiIlIG3FjjRv6v/f8BMOTLIZy9dDaHI0REREonBXspMIvFwvz586lVqxb79u3j2WefNbskEREpI17q+BJNqzXlzKUzPLta//8REZGyScFeCkWVKlV4//33sVgsREREsHz5crNLEhGRMsDD5sG7976L1WJl6a9L+WzfZ2aXJCIiUuwU7KXQ3H777WkTJz711FMcOXLE5IpERKQsaBXQihduewGApz57is/2fkZ0XLTJVYmIiBQfBXspVOPHj6dNmzZcuHCBvn37ZrkkooiISGEa22ks1X2qc/rSae5bdh+B0wOJ+DHC7LJERESKhYK9FCp3d3eWLl1K+fLl+e6775gwYYLZJYmISBlw7vI5zlw6k/a9w3AQtipMPfciIlImKNhLoatfvz7//e9/AXj1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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot population ratios for a second treatment of TNF with or without the initial TNF stimulation\n",
"# A figure \"figure_two_steps_ratios.pdf\" is saved\n",
"figure = plt.figure(figsize = (12,5))\n",
"plt.rcParams.update({'legend.fontsize': 15})\n",
"pop_ratios_WT.name = \"Pulse TNF\"\n",
"pop_ratios_WT.plot(style='.-k', legend=True,fontsize=20)\n",
"pop_ratios_noTNF.plot(style='.-b', legend=True)\n",
"pop_ratios_reTNF.plot(style='.-r', legend=True)\n",
"pop_ratios_noTNF_reTNF.plot(style='.-g', legend=True)\n",
"save_figure(figure, 'two_steps_ratios')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Based on these results, we conclude that the population that has received an initial treatment of TNF shows a resistance to the second TNF treatment, as the corresponding population ratio (in red) barely decreases compared to that of the population not submitted to an initial TNF pulse (in green). \n",
"\n",
"In conclusion, the cells that have not been treated previously (in blue and green) respond better to the TNF treatment compared to those that have been previously treated (in black and red)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Study TNF resistance"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this section, we study the conditions for TNF resistance by simulating single mutants of all 26 internal variables of the model. Each model mutant is defined by fixing the value of the corresponding variable to 0 (deletion) whatever its logical rule. \n",
"\n",
"The four scenarios combining initial and secondary TNF treatments are simulated for each of the mutant:\n",
"- no pulse of TNF followed by no TNF, \n",
"- no pulse of TNF followed by TNF, \n",
"- pulse of TNF followed by no TNF, \n",
"- pulse of TNF followed by TNF.\n",
"\n",
"A folder \"TNF_sensitivity\" is created in the working folder, which includes both WT and mutant simulations."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:14:10.422618Z",
"iopub.status.busy": "2024-08-02T11:14:10.422495Z",
"iopub.status.idle": "2024-08-02T11:14:10.427091Z",
"shell.execute_reply": "2024-08-02T11:14:10.426798Z",
"shell.execute_reply.started": "2024-08-02T11:14:10.422608Z"
}
},
"outputs": [],
"source": [
"workdir = 'TNF_sensitivity'\n",
"\n",
"def tnf_effect(workdir, model, name, df=None):\n",
" \"explore the effect of TNF in a given model variant\"\n",
" \n",
" if df is None:\n",
" df = pd.DataFrame()\n",
" \n",
" # Configuration of the model variants corresponding to combinations \n",
" # of (no) initial and secondary treatments\n",
" model_pulse = model\n",
" model_nopulse = model.copy()\n",
" model_nopulse.network.set_istate('TNF', [1,0])\n",
" \n",
" model_tnf = maboss.copy_and_update_parameters(model, {'$TNF_induc':20})\n",
" model_notnf = model\n",
" \n",
" # storage of all runs\n",
" runs = {}\n",
" \n",
" # Simulations of no initial TNF pulse, then with or without constitutive TNF\n",
" uppModel_no_pulse = maboss.UpdatePopulation(model_nopulse, upp_file)\n",
" run_no_pulse = uppModel_no_pulse.run(os.path.join(workdir, name, 'nopulse'))\n",
" \n",
" uppModel_notnf = maboss.UpdatePopulation(model_notnf, upp_file, previous_run=run_no_pulse)\n",
" runs['No pulse TNF, no TNF'] = uppModel_notnf.run(os.path.join(workdir, name, 'noPulse_noTNF'))\n",
" uppModel_tnf = maboss.UpdatePopulation(model_tnf, upp_file, previous_run=run_no_pulse)\n",
" runs['No pulse TNF, TNF'] = uppModel_tnf.run(os.path.join(workdir, name, 'noPulse_TNF'))\n",
" \n",
" # Simulations of initial TNF pulse, then with or without constitutive TNF\n",
" uppModel_pulse = maboss.UpdatePopulation(model_pulse, upp_file)\n",
" run_pulse = uppModel_pulse.run(os.path.join(workdir, name, 'pulse'))\n",
" \n",
" uppModel_notnf = maboss.UpdatePopulation(model_notnf, upp_file, previous_run=run_pulse)\n",
" runs['Pulse TNF, no TNF'] = uppModel_notnf.run(os.path.join(workdir, name, 'pulse_noTNF'))\n",
" uppModel_tnf = maboss.UpdatePopulation(model_tnf, upp_file, previous_run=run_pulse)\n",
" runs['Pulse TNF, TNF'] = uppModel_tnf.run(os.path.join(workdir, name, 'pulse_TNF'))\n",
"\n",
" # Collection of population ratios\n",
" for key in runs:\n",
" pop_ratios = runs[key].get_population_ratios(key)\n",
" if key not in df.columns:\n",
" df[key] = pd.Series(name=name, dtype=np.float)\n",
" df.at[name, key] = pop_ratios.iloc[-1]\n",
"\n",
" return df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following code launches the simulations for all 26 mutants and for the four protocols considered.\n",
"\n",
"Note that this could take a while, depending on your computer, it might take several hours."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"execution": {
"iopub.execute_input": "2024-08-02T11:14:10.427567Z",
"iopub.status.busy": "2024-08-02T11:14:10.427457Z",
"iopub.status.idle": "2024-08-02T11:15:11.929668Z",
"shell.execute_reply": "2024-08-02T11:15:11.928977Z",
"shell.execute_reply.started": "2024-08-02T11:14:10.427557Z"
}
},
"outputs": [
{
"ename": "AttributeError",
"evalue": "module 'numpy' has no attribute 'float'.\n`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\nThe aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:\n https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[15], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# TNF sensitivity for the WT model\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m ratios \u001b[38;5;241m=\u001b[39m \u001b[43mtnf_effect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mworkdir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel_WT\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mWT\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# List of all mutations to test\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m# Here all species will be mutated except for the output nodes\u001b[39;00m\n\u001b[1;32m 6\u001b[0m excluded \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m( ( \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mNonACD\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mApoptosis\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSurvival\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDivision\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDeath\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mTNF\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mapoptosome\u001b[39m\u001b[38;5;124m'\u001b[39m) )\n",
"Cell \u001b[0;32mIn[14], line 43\u001b[0m, in \u001b[0;36mtnf_effect\u001b[0;34m(workdir, model, name, df)\u001b[0m\n\u001b[1;32m 41\u001b[0m pop_ratios \u001b[38;5;241m=\u001b[39m runs[key]\u001b[38;5;241m.\u001b[39mget_population_ratios(key)\n\u001b[1;32m 42\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m df\u001b[38;5;241m.\u001b[39mcolumns:\n\u001b[0;32m---> 43\u001b[0m df[key] \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mSeries(name\u001b[38;5;241m=\u001b[39mname, dtype\u001b[38;5;241m=\u001b[39m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfloat\u001b[49m)\n\u001b[1;32m 44\u001b[0m df\u001b[38;5;241m.\u001b[39mat[name, key] \u001b[38;5;241m=\u001b[39m pop_ratios\u001b[38;5;241m.\u001b[39miloc[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n\u001b[1;32m 46\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m df\n",
"File \u001b[0;32m~/.miniconda3/envs/cmaboss/lib/python3.12/site-packages/numpy/__init__.py:394\u001b[0m, in \u001b[0;36m__getattr__\u001b[0;34m(attr)\u001b[0m\n\u001b[1;32m 389\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 390\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIn the future `np.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mattr\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m` will be defined as the \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 391\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcorresponding NumPy scalar.\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;167;01mFutureWarning\u001b[39;00m, stacklevel\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 393\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;129;01min\u001b[39;00m __former_attrs__:\n\u001b[0;32m--> 394\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(__former_attrs__[attr])\n\u001b[1;32m 396\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;129;01min\u001b[39;00m __expired_attributes__:\n\u001b[1;32m 397\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\n\u001b[1;32m 398\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m`np.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mattr\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m` was removed in the NumPy 2.0 release. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 399\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m__expired_attributes__[attr]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 400\u001b[0m )\n",
"\u001b[0;31mAttributeError\u001b[0m: module 'numpy' has no attribute 'float'.\n`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.\nThe aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:\n https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations"
]
}
],
"source": [
"# TNF sensitivity for the WT model\n",
"ratios = tnf_effect(workdir, model_WT, 'WT')\n",
"\n",
"# List of all mutations to test\n",
"# Here all species will be mutated except for the output nodes\n",
"excluded = set( ( 'NonACD', 'Apoptosis', 'Survival', 'Division', 'Death', 'TNF', 'apoptosome') )\n",
"nodes = [ n for n in model_WT.network.names if n not in excluded ]\n",
"nodes.sort()\n",
"\n",
"\n",
"# TNF sensitivity for each mutant of the model\n",
"for mutant_node in nodes:\n",
" print(mutant_node, end=' ')\n",
" mut_model = maboss.copy_and_mutate(model_WT, [mutant_node], 'OFF')\n",
" tnf_effect(workdir, mut_model, '%s' % mutant_node, ratios)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The final results are diplayed in terms of population ratios (white = 0 to black = 1) at 96h for each mutant in the form of a matrix using the following comand lines:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.status.busy": "2024-08-02T11:15:11.930090Z",
"iopub.status.idle": "2024-08-02T11:15:11.930244Z",
"shell.execute_reply": "2024-08-02T11:15:11.930180Z",
"shell.execute_reply.started": "2024-08-02T11:15:11.930173Z"
},
"scrolled": true
},
"outputs": [],
"source": [
"# Display the TNF sensitivity results for the WT condition and for all mutants \n",
"figure = plt.figure(figsize = (10,10))\n",
"sns.set(font_scale=1.5)\n",
"sns.heatmap(ratios, annot=False, cmap=colormap_scale, linewidths=1)\n",
"save_figure(figure, 'heatmap')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this matrix the protocols involving \"No initial TNF treatment\" (No pulse TNF) and \"Initial TNF treatment\" (Pulse TNF) are displayed separately. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can further process these simulation results to display the relative changes in population ratio for the two conditions, i.e. when the cells received an initial pulse of TNF treatment or not. The resulting ratios are displayed in a matrix after hierarchical clustering.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.status.busy": "2024-08-02T11:15:11.930827Z",
"iopub.status.idle": "2024-08-02T11:15:11.930970Z",
"shell.execute_reply": "2024-08-02T11:15:11.930909Z",
"shell.execute_reply.started": "2024-08-02T11:15:11.930902Z"
},
"scrolled": true
},
"outputs": [],
"source": [
"# More abstract summary: cluster of the ratios of ratios\n",
"ratios_ratios = pd.DataFrame()\n",
"ratios_ratios['Pulse TNF'] = ratios['Pulse TNF, TNF'] / ratios['Pulse TNF, no TNF']\n",
"ratios_ratios['No pulse TNF'] = ratios['No pulse TNF, TNF'] / ratios['No pulse TNF, no TNF']\n",
"\n",
"sns.set(font_scale=1.5)\n",
"figure = sns.clustermap(ratios_ratios, annot=True, cmap=colormap_ratios, center=1, col_cluster=False)\n",
"\n",
"# Add a rectangle around the WT row\n",
"wt_index = figure.dendrogram_row.reordered_ind.index(0)\n",
"figure.ax_heatmap.add_patch(Rectangle((0, wt_index), 2, 1, fill=False, edgecolor='red', lw=3))\n",
"\n",
"save_figure(figure, 'cluster')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The relative changes in population ratio shown in this matrix correspond to the ratios between the population receiving the constitutive TNF treatment at t = 48 hours divided by the control population with no TNF at t = 48 hours. \n",
"We consider that TNF treatment has an effect when the relative change in population ratio is reduced (ratio value below 1, in blue).\n",
"\n",
"A first group of mutants, including IKK and other co-clustered mutants, but also RIP1 knockdown, show no resistance. Indeed, TNF treatment reduces the population size, whether the cells were pre-treated by TNF or not.\n",
"\n",
"For a second group of mutants, including BCL2 (in the upper part) and MPT (in the bottom part) knockdowns, together with the wild type model, TNF constitutive treatment leads to a reduction in population size, but when the cells were pre-treated by a pulse of TNF, this effect disappears, hence indicating a resistance.\n",
"\n",
"Finally, TNFR knockdown leads to insensitive cells, as expected."
]
}
],
"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.12.3"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}