Hold cell in place

Persistent Identifier

Use this permanent link to cite or share this Morpheus model:

Can a CPM cell be held in a defined position and continue its other dynamics?

Introduction

CPM cells inherently interact with other cells by volume exclusion (steric interaction) and can get pushed out of the way. Here, we compare three cell behaviors where, in addition to steric interactions, either a cell’s center of mass or the entire cell shape get fixed. All other dynamics continue inside each cell and on each cell shape. This example was motivated by Ivan in the Morpheus user forum.

Model Description

This model has two CellTypes. The first, our cells of interest, is used to initialize 3 cells in a column. All model elements that control aspects of the cell shape are tagged with cell. Just to demonstrate that all other dynamics continue inside each cell, on its membrane and in its interaction with a global field, we also let these cells perform intracellular and membrane dynamics (tagged membrane) that interact with an extracellular field (tagged global).

Snapshot of the three cells of interest
The three cells of interest are placed on the central column and the runner cell passes from top to bottom on the right lane. The right panel shows the global field that receives a substance, secreted from selected membrane domains.

The second CellTypes gives a single runner cell on the right lane that just aims to perturb the three other cells.

Results

Based on the cells' IDs, we let cell ID=1 (bottom cell in column and red trajectory in following plot) perform the normal membrane fluctuations of a CPM. Its center of mass fluctuates strongly and gets pushed away 3 lattice units (within the shown 1000 MCS) from its initial position.

The cell with ID=2 (middle and green trajectory) stores the initial position of its center of mass and uses DirectedMotion in opposite direction from its displacement to restore that position after a perturbation. This yields minute fluctuations of less than a lattice unit. The strength parameter of DirectedMotion allows to tune the rigidity of the center of mass position. The cell shape remains flexible.

The cell with ID=3 (top and blue trajectory) freezes its entire shape after an initial time step (the condition to freeze after one time step is chosen such that a short line becomes visible in the trajectory plot).

The runner cell then squeezes around the frozen cell, reversibly deforms the middle cell (that is held in place) and it pushes aside the normal bottom cell.

Trajectories of three cells of interest
Each of the three cells of interest tracks the displacement vector of its center of mass from its initial position. The bottom cell of the following movie has ID=1 and its trajectory is shown in red. The middle cell controls its center of mass and is depicted in green. The top cell has a frozen shape and its center of mass rests, represented by the short blue trajectory.

We can also record the history of lattice nodes that once were occupied by the membranes of cells 1, 2, 3 (see following plots). The runner cell was excluded here.

History of cell shapes
Lattice nodes that were once occupied by a cell membrane during 50k MCS are shown red (binary data, left) and the same shape history is shown as the cumulative time fraction that each lattice node was occupied by a cell membrane (density data, right).

The same method may also be used to force cells along arbitrary (microscopy image-derived) trajectories by inserting data into the calculation of the displacement vector.

Model

Get this model via:

  • Morpheus-Link or
  •  Download: model.xml
  • XML Preview

    <?xml version='1.0' encoding='UTF-8'?>
    <MorpheusModel version="4">
        <Description>
            <Details>Full title:	Hold cell in place
    Authors:		J. Starruß
    Contributors:	L. Brusch
    Date:		21.10.2024
    Software:		Morpheus (open-source). Download from https://morpheus.gitlab.io
    Model ID:		https://identifiers.org/morpheus/M5495
    </Details>
            <Title>Hold cell</Title>
        </Description>
        <Space>
            <Lattice class="square">
                <Neighborhood>
                    <Order>1</Order>
                </Neighborhood>
                <Size symbol="size" value="50, 150, 0"/>
                <BoundaryConditions>
                    <Condition type="noflux" boundary="x"/>
                    <Condition type="noflux" boundary="-x"/>
                    <Condition type="periodic" boundary="y"/>
                    <Condition type="periodic" boundary="-y"/>
                </BoundaryConditions>
            </Lattice>
            <SpaceSymbol symbol="space"/>
            <MembraneLattice>
                <Resolution symbol="memsize" value="100"/>
                <SpaceSymbol symbol="memspace"/>
                <Annotation>MembraneLattice resolution is defined here. In CellType, this then allows to use dynamics of spatial fields on the membrane of CPM cells. Please see the InApp-Docu for more details on MembraneLattice.</Annotation>
            </MembraneLattice>
        </Space>
        <Time>
            <StartTime value="0"/>
            <StopTime value="1000"/>
            <TimeSymbol symbol="time"/>
        </Time>
        <CellTypes>
            <CellType name="cell" class="biological">
                <VolumeConstraint target="400" strength="1" tags="cell"/>
                <SurfaceConstraint target="1" strength="1" mode="aspherity" tags="cell"/>
                <MembraneProperty symbol="m" name="membrane substance" tags="membrane" value="sin(angle_secretion-memspace.phi) * (sin(angle_secretion-memspace.phi)>0)">
                    <Diffusion rate="0.0"/>
                    <Annotation>Just for demonstration purposes, this MembraneProperty is controlling the directed secretion of the substanc.</Annotation>
                </MembraneProperty>
                <PropertyVector symbol="cell.center.initial" tags="cell" value="cell.center"/>
                <PropertyVector symbol="cell.center.displacement" tags="cell" value="0.0, 0.0, 0.0"/>
                <VectorEquation symbol-ref="cell.center.displacement" tags="cell">
                    <Expression>cell.center - cell.center.initial</Expression>
                </VectorEquation>
                <DirectedMotion strength="1*(cell.id==2)" direction="- cell.center.displacement" tags="cell"/>
                <FreezeMotion tags="cell">
                    <Condition>(time>0)*(cell.id==3)</Condition>
                </FreezeMotion>
                <Property symbol="angle_secretion" tags="membrane" value="0.0"/>
                <System time-step="100" name="Demo intracellular dynamics" solver="Euler [fixed, O(1)]" tags="membrane">
                    <Rule symbol-ref="angle_secretion">
                        <Expression>rand_uni(0,2*pi)</Expression>
                    </Rule>
                </System>
                <System time-step="100" name="Demo membrane dynamics on cell shape" solver="Euler [fixed, O(1)]" tags="membrane">
                    <Rule symbol-ref="m">
                        <Expression>sin(angle_secretion-memspace.phi) * (sin(angle_secretion-memspace.phi)>0)</Expression>
                    </Rule>
                </System>
            </CellType>
            <CellType name="runner" class="biological">
                <VolumeConstraint target="400" strength="1" tags="cell"/>
                <SurfaceConstraint target="1" strength="1" mode="aspherity" tags="cell"/>
                <DirectedMotion strength="1" direction="0,-1,0" tags="cell"/>
            </CellType>
        </CellTypes>
        <CPM>
            <Interaction/>
            <ShapeSurface scaling="norm">
                <Neighborhood>
                    <Order>optimal</Order>
                </Neighborhood>
            </ShapeSurface>
            <MonteCarloSampler stepper="edgelist">
                <MCSDuration value="1"/>
                <MetropolisKinetics temperature="1"/>
                <Neighborhood>
                    <Order>optimal</Order>
                </Neighborhood>
            </MonteCarloSampler>
        </CPM>
        <CellPopulations>
            <Population type="cell" size="0">
                <InitCellObjects mode="distance" tags="cell">
                    <Arrangement repetitions="1, 3, 1" displacements="0, 50, 0">
                        <Sphere center="25,25,0" radius="10"/>
                    </Arrangement>
                </InitCellObjects>
            </Population>
            <Population type="runner" size="1">
                <InitCellObjects mode="distance" tags="cell">
                    <Arrangement repetitions="1, 1, 1" displacements="0, 0, 0">
                        <Sphere center="37,100,0" radius="10"/>
                    </Arrangement>
                </InitCellObjects>
            </Population>
        </CellPopulations>
        <Analysis>
            <Gnuplotter time-step="10">
                <Terminal name="png"/>
                <Plot>
                    <Cells value="m">
                        <ColorMap>
                            <Color color="red" value="2"/>
                            <Color color="yellow" value="1"/>
                            <Color color="white" value="0"/>
                        </ColorMap>
                    </Cells>
                </Plot>
                <Plot>
                    <Field symbol-ref="c" max="160" min="0"/>
                </Plot>
            </Gnuplotter>
            <ModelGraph include-tags="#untagged,global,membrane,cell" format="dot" reduced="false"/>
            <Logger time-step="1.0">
                <Input/>
                <Output>
                    <TextOutput file-separation="cell"/>
                </Output>
                <Plots>
                    <Plot time-step="-1">
                        <Style style="lines"/>
                        <Terminal terminal="png"/>
                        <X-axis minimum="-5" maximum="5">
                            <Symbol symbol-ref="cell.center.displacement.x"/>
                        </X-axis>
                        <Y-axis minimum="-5" maximum="5">
                            <Symbol symbol-ref="cell.center.displacement.y"/>
                        </Y-axis>
                        <Color-bar>
                            <Symbol symbol-ref="cell.id"/>
                        </Color-bar>
                    </Plot>
                </Plots>
                <Restriction>
                    <Celltype celltype="cell"/>
                </Restriction>
            </Logger>
        </Analysis>
        <Global>
            <Field symbol="c" name="global substance" tags="global" value="0">
                <Diffusion rate="0.01"/>
                <Annotation>Global Field for secreted substance. This field is initialized as 0 and will then "take up" the substance that is secreted by the cells.</Annotation>
            </Field>
            <Constant symbol="m" name="membrane substance" tags="membrane" value="0">
                <Annotation>We need to introduce another constant for the substance in the Global scope wherever it is not reset by the value of the membrane field with the same Symbol (with its dynamics defined in the Cell scope).</Annotation>
            </Constant>
            <System time-step="1.0" name="Secretion System" solver="Runge-Kutta [fixed, O(4)]" tags="membrane, global">
                <DiffEqn symbol-ref="c">
                    <Expression>m - 0.001*c</Expression>
                </DiffEqn>
            </System>
        </Global>
    </MorpheusModel>
    
    

    Model Graph
    Model Graph

    Downloads

    Files associated with this model:

    Next