Stem Cells in the Intestinal Crypt

Persistent Identifier

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

Demonstrates the Morpheus features asymmetric cell division (CellDivision), conditional change of cell type (ChangeCellType) and loading a simulation domain from an Image.

This model also requires the separate file crypt.tiff.

Introduction

This illustrative example shows the emergence of clonal populations from stem cells in an intestinal crypt. Stem cells in the bottom of the crypt divide asymmetrically and produce a population of transit amplifying (TA) cells. For each TA cell, the color indicates the stem cell from which it was derived.

Asymmetric cell division and changing cell type.
Asymmetric cell division and changing cell type.

Description

The model shows several new modeling features, available as of Morpheus 1.2.

Loading Domain from Image

The crypt-like domain is specified by loading an external 8-bit TIFF image file crypt.tiff using the Image feature.

Asymmetric Cell Division

Stem cells divide asymmetrically using the new daughterID handles in the CellDivision element. This sets a user-defined symbol (here called daughter) to either $1$ or $2$. This symbol can then be used to distinguish both daughter cells and treat them differently. In this example, it is used to set the stemness ($s$) of one daughter to $1$ and the stemness of the other daughter cell to $0$.

Conditionally Changing Cell Types

When a cell looses its stemness $s$, it is moved to the TA cell type. This is done using the ChangeCellType element.

Upon satisfying its Condition, ChangeCellType moves the cell to the specified new cell type. By default, all the properties of a cell that exist in both cell type contexts are maintained, and unspecified ones are set to their default values. This default behavior can be overridden using Triggers that specify Rules stating how to deal with specific properties.

Mapper

Mappers allow the collection of statistical data about the cell population. Here, they are used to count the sizes of the various clonal populations. This number is reported into global Variables and subsequently written to a file and plotted using a Logger.

Model

Get this model via:

  • Morpheus-Link or
  • Morpheus GUI: ExamplesCPMCrypt.xml or
  •  Download: Crypt.xml
  • XML Preview

    <?xml version='1.0' encoding='UTF-8'?>
    <MorpheusModel version="4">
        <Description>
            <Title>Example-Crypt</Title>
            <Details>Model ID:	https://identifiers.org/morpheus/M0026
    Full title:	Stem Cells in the Intestinal Crypt
    Date:	01.03.2016
    Software:	Morpheus (open source). Download from: https://morpheus.gitlab.io
    Comment:	Shows the following features of Morpheus: asymmetric cell division (proliferation), conditionally change cell type (ChangeCellType), loading simulation domain from image (Lattice/Domain).</Details>
        </Description>
        <Global>
            <Variable symbol="w_d" name="wait time division" value="3000"/>
            <Variable symbol="num_A" name="Clone A" value="0.0"/>
            <Variable symbol="num_B" name="Clone B" value="0.0"/>
            <Variable symbol="num_C" name="Clone C" value="0.0"/>
            <Variable symbol="num_D" name="Clone D" value="0.0"/>
            <Variable symbol="num_E" name="Clone E" value="0.0"/>
            <Constant symbol="s" value="0.0"/>
            <Constant symbol="clone" value="0.0"/>
        </Global>
        <Space>
            <Lattice class="square">
                <Size symbol="size" value="600 600 0"/>
                <BoundaryConditions>
                    <Condition type="periodic" boundary="x"/>
                    <Condition type="periodic" boundary="y"/>
                </BoundaryConditions>
                <Neighborhood>
                    <Order>2</Order>
                </Neighborhood>
                <Domain boundary-type="noflux">
                    <Image path="crypt.tiff"/>
                </Domain>
            </Lattice>
            <SpaceSymbol symbol="l"/>
        </Space>
        <Time>
            <StartTime value="0"/>
            <StopTime value="50000"/>
            <TimeSymbol symbol="time"/>
        </Time>
        <CellTypes>
            <CellType class="biological" name="stem_cells">
                <Property symbol="clone" value="0.0"/>
                <Property symbol="t_d" name="time of division" value="0.0"/>
                <Property symbol="s" name="stemness" value="1"/>
                <VolumeConstraint target="800" strength="1"/>
                <SurfaceConstraint target="1" strength="1" mode="aspherity"/>
                <ChangeCellType newCellType="TA_cells">
                    <Condition>s==0</Condition>
                    <Triggers/>
                </ChangeCellType>
                <DirectedMotion direction="0, -1,  0" strength="0.5"/>
                <CellDivision division-plane="random" daughterID="daughter">
                    <Condition>time > t_d</Condition>
                    <Triggers>
                        <Rule symbol-ref="s">
                            <Expression>if( daughter == 1, 1, 0 )</Expression>
                        </Rule>
                        <Rule symbol-ref="t_d">
                            <Expression>time + rand_norm(w_d,200)</Expression>
                        </Rule>
                    </Triggers>
                </CellDivision>
            </CellType>
            <CellType class="biological" name="TA_cells">
                <Property symbol="clone" value="0.0"/>
                <Property symbol="t_d" name="time of division" value="0"/>
                <Property symbol="d" name="divisions" value="0"/>
                <VolumeConstraint target="600 " strength="1"/>
                <SurfaceConstraint target="0.9" strength="1" mode="aspherity"/>
                <CellDivision division-plane="random" daughterID="daughter">
                    <Condition>time > t_d</Condition>
                    <Triggers>
                        <Rule symbol-ref="d">
                            <Expression>d+0.5</Expression>
                        </Rule>
                        <Rule symbol-ref="t_d">
                            <Expression>time + rand_norm(w_d,500)</Expression>
                        </Rule>
                    </Triggers>
                </CellDivision>
                <CellDeath>
                    <Condition>if( cell.center.y > size.y - 20, 1, 0)</Condition>
                </CellDeath>
                <Mapper name="Count Clone A">
                    <Input value="clone==1"/>
                    <Output symbol-ref="num_A" mapping="sum"/>
                </Mapper>
                <Mapper name="Count Clone B">
                    <Input value=" clone==2"/>
                    <Output symbol-ref="num_B" mapping="sum"/>
                </Mapper>
                <Mapper name="Count Clone C">
                    <Input value="clone==3"/>
                    <Output symbol-ref="num_C" mapping="sum"/>
                </Mapper>
                <Mapper name="Count Clone D">
                    <Input value="clone==4"/>
                    <Output symbol-ref="num_D" mapping="sum"/>
                </Mapper>
                <Mapper name="Count Clone E">
                    <Input value="clone==5"/>
                    <Output symbol-ref="num_E" mapping="sum"/>
                </Mapper>
            </CellType>
        </CellTypes>
        <CPM>
            <Interaction default="0">
                <Contact type1="stem_cells" type2="stem_cells" value="-10"/>
                <Contact type1="stem_cells" type2="TA_cells" value="10"/>
            </Interaction>
            <MonteCarloSampler stepper="edgelist">
                <MCSDuration value="1.0"/>
                <Neighborhood>
                    <Order>2</Order>
                </Neighborhood>
                <MetropolisKinetics yield="0.1" temperature="3"/>
            </MonteCarloSampler>
            <ShapeSurface scaling="norm">
                <Neighborhood>
                    <Distance>2.5</Distance>
                </Neighborhood>
            </ShapeSurface>
        </CPM>
        <CellPopulations>
            <Population type="stem_cells" size="0">
                <InitRectangle number-of-cells="5" mode="regular">
                    <Dimensions origin="250.0, 75.0, 0.0" size="100,30,0"/>
                </InitRectangle>
                <InitProperty symbol-ref="clone">
                    <Expression>cell.id</Expression>
                </InitProperty>
                <InitProperty symbol-ref="t_d">
                    <Expression>rand_uni(0,w_d)</Expression>
                </InitProperty>
            </Population>
            <Population type="TA_cells" size="0">
                <InitRectangle number-of-cells="500" mode="regular">
                    <Dimensions origin="0,80, 0" size="600, 490, 0"/>
                </InitRectangle>
                <InitProperty symbol-ref="t_d">
                    <Expression>rand_uni(0,w_d)</Expression>
                </InitProperty>
            </Population>
        </CellPopulations>
        <Analysis>
            <Gnuplotter time-step="250" decorate="false">
                <Terminal name="png"/>
                <Plot>
                    <Cells value="clone">
                        <ColorMap>
                            <Color value="20" color="gold"/>
                            <Color value="19" color="dark-pink"/>
                            <Color value="18" color="dark-khaki"/>
                            <Color value="17" color="dark-goldenrod"/>
                            <Color value="16" color="cyan"/>
                            <Color value="15" color="coral"/>
                            <Color value="14" color="chartreuse"/>
                            <Color value="13" color="brown4"/>
                            <Color value="12" color="bisque"/>
                            <Color value="11" color="beige"/>
                            <Color value="10" color="light-red"/>
                            <Color value="9" color="light-green"/>
                            <Color value="8" color="light-blue"/>
                            <Color value="7" color="gray"/>
                            <Color value="6" color="black"/>
                            <Color value="5" color="yellow"/>
                            <Color value="4" color="blue"/>
                            <Color value="3" color="green"/>
                            <Color value="2" color="red"/>
                        </ColorMap>
                    </Cells>
                </Plot>
            </Gnuplotter>
            <Logger time-step="100">
                <Input>
                    <Symbol symbol-ref="num_A"/>
                    <Symbol symbol-ref="num_B"/>
                    <Symbol symbol-ref="num_C"/>
                    <Symbol symbol-ref="num_D"/>
                    <Symbol symbol-ref="num_E"/>
                </Input>
                <Output>
                    <TextOutput/>
                </Output>
                <Plots>
                    <Plot time-step="5000" title="Clone numbers">
                        <Style grid="true" point-size="1" line-width="3.0" style="linespoints"/>
                        <Terminal terminal="png"/>
                        <X-axis>
                            <Symbol symbol-ref="time"/>
                        </X-axis>
                        <Y-axis>
                            <Symbol symbol-ref="num_A"/>
                            <Symbol symbol-ref="num_B"/>
                            <Symbol symbol-ref="num_C"/>
                            <Symbol symbol-ref="num_D"/>
                            <Symbol symbol-ref="num_E"/>
                        </Y-axis>
                    </Plot>
                </Plots>
            </Logger>
            <ModelGraph format="svg" reduced="false" include-tags="#untagged"/>
        </Analysis>
    </MorpheusModel>
    
    

    This model also requires the separate file crypt.tiff.
    Model Graph
    Model Graph

    Downloads

    Files associated with this model:

    Previous