This program simulates the cell line-specific ER+ PIK3CA breast cancer network models in Zañudo et al. 2020. These models are based on an updated version of the breast cancer network model in Zañudo et al. 2017
For more detais on the model, see the accompanying manuscript:
Jorge Gómez Tejeda Zañudo, Pingping Mao, Clara Alcon, Kailey J. Kowalski, Gabriela N. Johnson, Guotai Xu, José Baselga, Maurizio Scaltriti, Anthony Letai, Joan Montero, Reka Albert, Nikhil Wagle. (2020). Cell-line-specific network models of ER+ breast cancer identify PI3Kα inhibitor sensitivity factors and drug combinations. bioRxiv 2020.08.25.261370; doi: https://doi.org/10.1101/2020.08.25.261370
The simplest way to reproduce the model result is through the Jupyter notebook in the Jupyter notebook folder. You can view the Jupyter notebook here and we also provide an HTML version of the results of running the notebook.
We recommend creating a virtual environment using Anaconda to run this program. The required packages and the versions we used for running the program are listed below, together with a command to create a virtual environment in Anaconda with these versions.
Python (version 3.6.8), Java JDK (version 8.0.152), Pandas (version 0.24.2), NumPy (version 1.16.4), Matplotlib (version 3.1.0), Jupyter (version 0.35.5), and Ipython (version 7.6.1).
conda create -n myenv brca_modelv2 python=3.6.8 openjdk=8.0.152 numpy=1.16.4 matplotlib=3.1.0 pandas=0.24.2 jupyterlab=0.35.5 ipython=7.6.1
The breast cancer network models in Zañudo et al. 2020 are discrete network models. To simulate these discrete network models, we first map these models into a Boolean model, which was then simulated using the BooleanDynamicModeling Java library. To simulate multi-level nodes, we use a Boolean variable to denote each level greater than 1. For example, for a 3-level node with states 0, 1, and 2, we have 2 variables (Node and Node_2), and for a 4-level node we have 3 variables (Node, Node_2, and Node_3).
The model starts from a cancer steady state initial condition that can be primed (BIM_T=1) or unprimed (BIM_T=0). The model uses stochastic asynchronous updating, where a single node is updated at each update step and this node is chosen at random. The updating probabilities are chosen by categorizing nodes into either a fast or slow node, according to whether activation of the node denotes a (fast) signaling event or a (slow) transcriptional or translational event. We take fast probability taken to be 5 times faster than the slow probability (note that the real timescale difference between these type of events is much larger). We perform 10,000 simulations in each modeled scenario. The number of time units is 25 for all simulations, where a time unit is equal to the average number of time steps needed to update a slow node.
The Java library consists of four classes:
-
Networkrun.java. This is the main class of the Java library. From this class one can
- Call NetworkSimulations.java to generate the model Boolean tables. One needs to generate these tables before running simulations on the model.
- Call NetworkSimulations.java to run simulations on the model without perturbations or with up to 4 perturbations.
- Run all the model simulations in Zañudo et al. 2017. This call all three classes.
-
NetworkSimulations.java. This class contains the bulk of the funcitonality of the Java library. This class contains functions to generate the model Boolean tables, run simulations of the model with or without perturbations, write the timecourse of the simulations, and several others related functions.
-
NetworkDoublePerturbationSimulations.java. Generates the simulations for all the double node perturbation in the Zañudo et al. 2017 model. Could be used for the same purpose in the Zañudo et al. 2020 model, but this hasn't been tested.
-
NetworkSinglePerturbationSimulations.java. Generates the simulations for all the single node perturbation in the Zañudo et al. 2017 model. Could be used for the same purpose in the Zañudo et al. 2020 model, but this hasn't been tested.
To reproduce the results of the model, we recommend using the Jupyter notebook (see the Reproducing the model results section in this README). To run the Java library, we need the executable JAR file BreastCancerModel.jar and the library folder lib, both of which are located in the dist folder. With these, we can run the Java library through the command line with:
java -jar BreastCancerModel.jar args
where arg is a set of space-separated arguments specified here.
The Boolean functions that specify each of the models are in the Models folder.
The Models folder contains the MCF7-specific (BreastCancerModel_ZanudoEtAl2020_MCF7), T47D-specific (BreastCancerModel_ZanudoEtAl2020_T47D), and the more general model in which these two are based on (BreastCancerModel_ZanudoEtAl2020). We also include the Zañudo et al. 2017 model. For the BreastCancerModel_ZanudoEtAl2020 and BreastCancerModel_ZanudoEtAl2017 models we also include the "raw" rules, in which we do do not add Boolean terms to enforce the multi-level property of the Boolean variables corresponding a multi-level node.
In addition, we provide the MCF7-specific, T47D-specific, and the more general model in Systems Biology Markup Language (SBML) format. For this we use bioLQM v 0.6.1 (see Naldi 2018).
The file specifying the Booelan functions follows the Booleannet format (see here or here). In this format the text before the "*=" symbol is the node name, while the text after the "*=" symbol is the Boolean function of the node:
#BOOLEAN RULES
Node1 *= Node2 or Node3
Node2 *= Node1 and Node2
Node3 *= ((not Node3 or Node4) and not Node1)
Node4 *= 1
Node5 *= 0
...
NodeN *= not Node1 or (Node1 and Node2)
Node names
For the node names use only alphanumeric characters (A-Z,a-z), numbers (0-9) and "_". The reserved words for the program, which shouldn't be used for node names, are: "True", "False", "true", "false", "0", "1", "and", "or", and "not".
Boolean functions
For the Boolean functions use only the node names, the logical operators "and", "or", "not", and the parentheses symbols ")" and "(". In case the Boolean function is constant, use "0" or "1", depending on the constant state of the function. The logical function does not need to be written in a disjunctive normal form; the program will take the logical form in the TXT file and transform it into its disjunctive normal form using the Quine–McCluskey algorithm.
BooleanDynamicModeling
The simulations of Boolean dynamics use the BooleanDynamicModeling Java library.
JGraphT
Several functions from the JGraphT java class library by Barak Naveh and Contributors are used. JGraphT is available under GNU LESSER GENERAL PUBLIC LICENSE Version 2.1.
Quine-McCluskey_algorithm
An implementation of the Quine-McCluskey_algorithm in the “Term.java” and “Formula.java” classes were retrieved in 2013 from here. The “Term.java” and “Formula.java” classes are available under the MIT License.
The MIT License (MIT)
Copyright (c) 2020 Jorge Gómez Tejeda Zañudo.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.