Proliferation in three dimensions


This model shows a CPM simulation of a growing cell population in 3D.

Cell population grown from single initial cell.

Model description

The model specifies CellType which has a VolumeConstraint and a Proliferation plugin. In the Proliferation plugin, the Conditions for a cell to divide are given. Here, each cell that has more than 90% of the target volume has a small probability to divide. Once a division has taken place, the Equation defined in the Triggers elements are triggered.

In this model, two medium cell types have been defined. One of these (called matrix) is used to represent a matrix with higher adhesivity. This is done by

  1. defining the matrix cell type as a BoundaryCondition of the $-z$ boundary in the CPM and
  2. providing lower contact energy for cell-matrix interaction than for cell-medium interactions.

The simulation is visualized using the TiffPlotter that saves TIFF image stacks that can be loaded by image analysis software such as Fiji and displayed using Fiji’s 3D Viewer plugin.


In Morpheus GUI: Examples 🠒 CPM 🠒 Proliferation_3D.xml.

<?xml version='1.0' encoding='UTF-8'?>
<MorpheusModel version="3">
        <Lattice class="cubic">
            <Size symbol="size" value="100 100 100"/>
                <Condition boundary="x" type="periodic"/>
                <Condition boundary="y" type="periodic"/>
                <Condition boundary="z" type="noflux"/>
                <Condition boundary="-z" type="noflux"/>
            <Resolution symbol="memsize" value="20"/>
            <SpaceSymbol symbol="m"/>
        <SpaceSymbol symbol="space"/>
        <StartTime value="0"/>
        <StopTime value="2500"/>
        <TimeSymbol symbol="time"/>
        <RandomSeed value="1456688742"/>
        <CellType class="medium" name="medium"/>
        <CellType class="medium" name="matrix"/>
        <CellType class="biological" name="cell">
            <Property symbol="Vt" value="500" name="Target Volume"/>
            <Property symbol="divisions" value="0"/>
            <VolumeConstraint target="Vt" strength="1.0"/>
            <SurfaceConstraint target="1.0" mode="aspherity" strength="1.0"/>
            <CellDivision division-plane="major">
                <Condition>rand_uni(0,1) &lt; 0.0025 and cell.volume > Vt*0.9</Condition>
                    <Rule symbol-ref="divisions">
                        <Expression>divisions + 0.5</Expression>
            <MembraneProperty symbol="c" value="1">
                <Diffusion rate="0.0"/>
        <Interaction default="0">
            <Contact type1="cell" type2="cell" value="-6"/>
            <Contact type1="cell" type2="medium" value="0"/>
            <Contact type1="cell" type2="matrix" value="-2"/>
        <MonteCarloSampler stepper="edgelist">
            <MCSDuration value="1"/>
            <MetropolisKinetics temperature="0.5"/>
        <ShapeSurface scaling="norm">
        <Population size="0" type="cell">
            <InitCellObjects mode="distance">
                <Arrangement repetitions="1, 1, 1" displacements="1, 1, 1">
                        <Sphere radius="5" center="50,50,50"/>
        <BoundaryValue boundary="x" value="matrix"/>
        <BoundaryValue boundary="-x" value="matrix"/>
        <BoundaryValue boundary="y" value="matrix"/>
        <BoundaryValue boundary="-y" value="matrix"/>
        <BoundaryValue boundary="z" value="matrix"/>
        <BoundaryValue boundary="-z" value="matrix"/>
        <TiffPlotter timelapse="true" format="8bit" OME-header="true" compression="false" time-step="100">
            <Channel symbol-ref="" exclude-medium="true"/>
            <Channel symbol-ref="c" exclude-medium="true" celltype="cell" outline="true"/>
        <Gnuplotter time-step="100" decorate="true">
                <Cells value="" slice="50"/>
            <Terminal name="png"/>
        <Logger time-step="100">
                <Symbol symbol-ref="celltype.cell.size"/>
                <Plot time-step="500">
                    <Style style="linespoints"/>
                    <Terminal terminal="png"/>
                        <Symbol symbol-ref="time"/>
                        <Symbol symbol-ref="celltype.cell.size"/>