Custom code base for the Cellular Potts Model and its application to test the roles of differential adhesion and cell stiffness in synthetic embryo self-organisation.
See the paper here.
Stem cell-derived synthetic embryos self-assemble by exploiting cadherin codes and cortical tension
Min Bao†, Jake Cornwall-Scoones‡, Estefania Sanchez-Vasquez, Dong-Yuan Chen, Joachim De Jonghe, Shahriar Shadkhoo, Florian Hollfelder, Matt Thomson, David M. Glover, and Magdalena Zernicka-Goetz*
†: First author.
‡: Code author.
*: Corresponding author (mz205 [at] cam.ac.uk).
Cellular Potts Model was used to infer the predicted distributions of conformations given measurements of cell adhesion from AFM, and to determine the roles of cortical stiffness on self-organization of ETX-embryos.
Jake Cornwall Scoones
Cells occupy contiguous sets of points in a square lattice of size
(
The simulation evolves via a stochastic minimization of an energy function that accounts for both differential affinity and other physical properties of cells. The energy functional was defined as below:
The matrix
Likewise, the perimeter
We parameterized adhesion strengths using cohesion forces between pairs
of cell-types that were directly measured by AFM. For each simulation,
we sampled this distribution to build the
AFM adhesion measurements are stored in this repository in a .json file in raw_data. To repeat the bootstrapping, run
The CPM evolves via a stochastic minimization. In each Markov Chain Step
(MCS), a random lattice site is selected. One of the four sites in the
Von Neumann neighborhood is then selected and the state of the chosen
site is putatively reassigned to that of its neighbor. The energy
functional is then evaluated before and after the swap, defining
As with the lattice model,
The full CPM code is housed within the module CPM. This contains a main class in the cpm.py file, involved in initialising and running simulations. This runs of a sample class in the sample.py file, performing the Metropolis-Hastings optimization under the energy functional prescribed above. Further, the maintenance of contiguity is achieved with reference to the class in zmasks.py.
Running simulations for a given bootstrap sample of the adhesion values can be done in the command-line. For example for the bootstrap sample '72' (or any other), one can run.
This additionally runs a scrambled control, where cell-types and adhesion values are independent of one another.
To determine the conformation of a simulated structure at a given time-point, we established an automated scoring procedure. Firstly, we remove cells that have detached from the main aggregate by calculating the adjacency matrix between cells (Moore neighborhood) and removing all clusters besides the one with the largest number of connected components. Secondly, we score each cell-type for envelopment. A cell-type is defined to be enveloping if its center of mass lies within a different cell-type, rather than that of its own. Thirdly, we score cell-type contiguity by calculating the subgraph of the connectivity matrix that contains only cells of a given type, then determining whether the number of connected components is 1 (i.e. contiguous). With three cell-types, there are 16 possible completely sorted conformations. These conformations can be divided into 4 categories.
In category (1) conformations, two cell types sequentially envelope a third. The order of envelopment is determined via adjacency among cell-types. For example, when E envelopes X which envelopes T: at least one X must contact T; at least one E must contact the medium; at least one E must contact X; and no E should contact T. Further, the inner most cell-type must be contiguous.
In category (2), one cell type envelopes another, with a third attached peripherally; whereas in category (3) one cell type envelopes the other two (as in ETX embryos). Both categories must contain two contiguous cell-types and a third enveloping cell-type. If all cells of the enveloping cell-type contact the medium, the conformation is scored to category (3). If any of the cells that do not contact the medium are instead surrounded by a single cell-type, the conformation is scored as 'unsorted'. Alternatively, if any of these cells contact exactly two other cell-types, then the conformation falls in category (2). Which variant within category (2) is determined by counting the number of contacts (e.g. X envelopes E rather than T if X and E share more contacts than X and T). Otherwise, the conformation is assigned category (3).
Category (4) is assigned when all three cell-types are non-enveloping and are contiguous. If a given structure does not fall within any of these categories, it is classed as 'unsorted'.
Additionally, we define cell externalization: if all cells of that type either contact the medium directly, or are connected to cells that are connected to the medium. Strictly, we define the subgraph of the adjacency matrix containing the rows and columns of a given cell-type plus the medium; if this subgraph has a single connected component, then the cell-type is externalized.
Analysis scripts are found in analysis_scripts. run_analysis.py runs the above conformation analysis, plus other topological analyses described in the paper, for a given bootstrap value. For example, for bootstrap 72, one can run
We used the CPM to determine whether reduced stiffness in XEN cells can
explain the robustness of their externalization in silico. We
systematically altered the stiffness of XEN cells by varying the
circumferential elastic modulus of XEN cells
Code to run these parameter scans can be found in run_scripts/run_soft_stiff.py.
Contributions, issues, and feature requests are welcome!
Give a ⭐️ if you like this project!