Application of MPBNs to the Tumour invasion model by Cohen et al. 2015#

We use Most Permissive Boolean Networks to analyse the Boolean model published in (Cohen et al., 2015) which shows cell fate decision processes related to tumour development.

import ginsim
from colomoto_jupyter import tabulate
import mpbn

Model setup#

Original model#

lrg = ginsim.load("http://ginsim.org/sites/default/files/SuppMat_Model_Master_Model.zginml")
ginsim.show(lrg)

Downloading http://ginsim.org/sites/default/files/SuppMat_Model_Master_Model.zginml

Conversion to MPBN#

bn = ginsim.to_minibn(lrg)
mbn = mpbn.MPBooleanNetwork(bn)
len(mbn) # display number of nodes
32

Input and output nodes#

inputs = ["DNAdamage", "ECMicroenv"]
outputs = ["Apoptosis","CellCycleArrest","EMT","Invasion","Migration","Metastasis"]

Analysis of reachable attractors#

Complete listing of attractors#

Let us first compute the full list of attractors of the MPBN.

%time a = list(mbn.attractors())
tabulate(a, columns=outputs)
CPU times: user 9.13 ms, sys: 1.07 ms, total: 10.2 ms
Wall time: 9.39 ms
Apoptosis CellCycleArrest EMT Invasion Migration Metastasis
0 0 0 0 0 0 0
1 0 1 1 0 0 0
2 0 1 1 1 1 1
3 1 1 0 0 0 0

Remark they are all fixed points and thus match exactly with the attractors using asynchronous BNs.

Rechable attractors#

Starting from all nodes but inputs to 0, we are interested in the set of reachable attractors, whatever the value of input nodes.

initial_condition = dict([(n,0) for n in bn if n not in inputs])

Wild-type#

Let us first compute the reachable attractors in the wild type model. They match with the full attract listing.

%time a = list(mbn.attractors(reachable_from=initial_condition))
tabulate(a, columns=outputs)
CPU times: user 20.9 ms, sys: 1.01 ms, total: 21.9 ms
Wall time: 20.6 ms
Apoptosis CellCycleArrest EMT Invasion Migration Metastasis
0 0 0 0 0 0 0
1 0 1 1 0 0 0
2 0 1 1 1 1 1
3 1 1 0 0 0 0

Notch GoF mutant#

Now, we apply the Notch gain of function, and predict, as MaBoSS with asynchronous BNs, the loss of apoptotic attractor reachability.

mbn_mut = mbn.copy()
mbn_mut["NICD"] = 1
%time a = list(mbn_mut.attractors(reachable_from=initial_condition))
tabulate(a, columns=outputs)
CPU times: user 21.1 ms, sys: 37 µs, total: 21.2 ms
Wall time: 19.5 ms
Apoptosis CellCycleArrest EMT Invasion Migration Metastasis
0 0 1 1 0 0 0
1 0 1 1 1 0 0
2 0 1 1 1 1 1

Notch GoF/p53 LoF double mutant#

Adding p53 loss of function, leads, as MaBoSS, only to the metastatic attractor.

mbn_mut["p53"] = 0
%time a = list(mbn_mut.attractors(reachable_from=initial_condition))
tabulate(a, columns=outputs)
CPU times: user 10.2 ms, sys: 949 µs, total: 11.2 ms
Wall time: 10.2 ms
Apoptosis CellCycleArrest EMT Invasion Migration Metastasis
0 0 1 1 1 1 1