In this tutorial we show how Chaste can be used to simulate a growing cell monolayer culture
comprising two distinct cell types, which exhibit differential adhesion. We encountered a
similar implementation in the second test in the TestRunningPottsBasedSimulationsTutorial,
which used a cellular Potts model of cell interactions; here we use a vertex-based model.
As in previous tutorials, we begin by including the necessary header files. We have
encountered these files already. Recall that often, either CheckpointArchiveTypes.hpp
or CellBasedSimulationArchiver.hpp must be included the first Chaste header.
The next header file defines a force law for describing the mechanical interactions
between neighbouring cells in the cell population, subject to each vertex. This force
law is a subclass of NagaiHondaForce, which we encountered in the TestRunningVertexBasedSimulationsTutorial,
that allows for different adhesion energy parameter values depending on the types of
interacting cells.
Having included all the necessary header files, we proceed by defining the test class.
In this test, we demonstrate how to simulate a heterotypic monolayer that incorporates
differential adhesion, using a vertex-based approach. This may be compared with the
second test in the TestRunningPottsBasedSimulationsTutorial, which implements a similar
simulation using a cellular Potts model.
First we create a regular vertex mesh. Here we choose to set the value of the cell rearrangement threshold.
We then create some cells using the helper class CellsGenerator. Note that in this simulation
the cells are all differentiated, and thus no cell division occurs; if we wished, we could modify
the three lines below in a straightforward manner to incorporate cell proliferation and investigate
the effect of this on the cell sorting process.
Using the vertex mesh and cells, we create a cell-based population object, and specify which results to
output to file.
We randomly label some cells using the cell property CellLabel. We begin by creating a shared pointer to
this cell property using the helper singleton CellPropertyRegistry. We then loop over the cells and label
each cell independently with probability 0.5. Note that since the cells have been passed to the
VertexBasedCellPopulation object, the vector cells above is now empty, so we must use the
Iterator to loop over cells.
We are now in a position to create and configure the cell-based simulation object.
We can make the simulation run for longer to see more cell sorting by increasing the end time.
Next we create the differential adhesion force law. This builds upon the model of Nagai, Honda and co-workers
encounted in the TestRunningVertexBasedSimulationsTutorial by allowing different values of the adhesion
energy parameters depending on the types of two neighbouring cells. Here we interpret the ’type’ of a cell
as whether or not it has the cell property CellLabel; it would be straightforward to create a similar
force law that took account of a cell’s mutation state, for example. Having created the force law, we set the
values of the parameters. If the adhesion energy for two neighbouring homotypic cells is less than that of two
heterotypic cells, then we may expect cell sorting to occur, in which the cells of each type will tend to locally
aggregate over time.
Finally, we run the simulation.
To visualize the results, use Paraview. See the Visualizing With Paraview tutorial for more information.
Load the file /tmp/$USER/testoutput/TestVertexBasedDifferentialAdhesionSimulation/results_from_time_0/results.pvd.