French Flag: Morphogen gradient


This example shows Wolpert’s classical French Flag model. Depending on the local concentration of a morphogen, cells adopt one of three cell types based on internal thresholds.

Wolpert’s French Flag.

Model description

The model sets up a morphogen gradient in the $x$ direction as a 2D field in the Global section. Note that no diffusion is used, since we use the steady-state solution of the diffusion and degradation process with fixed boundary source.

The cells in CellType register the (average) local morphogen concentration using a Mapper. Based on the specified threshold values, they choose an identity $I$ as defined in the Equation.

Note that this model is not time-dependent. Time is therefore set from StartTime $0$ to StopTime $0$.

Things to try

  • Change the model such that the morphogen gradient is set up by production and diffusion, using Diffusion and a System with DiffEqn. That is, change the model into a time-dependent model.


In Morpheus GUI: Examples 🠒 Miscellaneous 🠒 FrenchFlag.xml.

<MorpheusModel version="3">
        <Details>Wolpert L (1969). "Positional information and the spatial pattern of cellular differentiation". J. Theor. Biol. 25 (1): 1–47.</Details>
        <Field symbol="m" value="c_0*exp(-k/D*(l.x/size.x))" name="morphogen gradient">
            <Diffusion rate="0.0"/>
        <Constant symbol="c_0" value="1.0"/>
        <Constant symbol="D" value="0.75"/>
        <Constant symbol="k" value="1"/>
        <Constant symbol="celltype" value="0.0"/>
        <Lattice class="square">
            <Size symbol="size" value="20 20 0"/>
            <NodeLength value="1"/>
                <Condition boundary="x" type="constant"/>
                <Condition boundary="y" type="constant"/>
        <SpaceSymbol symbol="l" name="location"/>
        <StartTime value="0"/>
        <StopTime value="0"/>
        <TimeSymbol symbol="time"/>
        <CellType class="biological" name="cells">
            <Property symbol="p" value="0.0" name="p"/>
            <Property symbol="celltype" value="0.0" name="cell type"/>
            <Constant symbol="t1" value="0.7"/>
            <Constant symbol="t2" value="0.4"/>
            <Equation symbol-ref="celltype">
                <Expression>if(p>t1,3, if(p>t2, 2, 1))</Expression>
            <Mapper name="report morphogen concentration">
                <Input value="m"/>
                <Output symbol-ref="p" mapping="average"/>
        <Population size="0" type="cells">
        <Gnuplotter time-step="0">
            <Terminal opacity="0.5" persist="true" name="png"/>
                <Cells value="celltype">
                        <Color value="3" color="blue"/>
                        <Color value="2" color="white"/>
                        <Color value="1" color="red"/>
                <Field symbol-ref="m"/>
        <Logger time-step="0.0">
                <Symbol symbol-ref="m"/>
                <Symbol symbol-ref="celltype"/>
                <Slice value="size.y/2" axis="y"/>
                    <Style style="linespoints"/>
                    <Terminal terminal="png"/>
                        <Symbol symbol-ref="l.x"/>
                        <Symbol symbol-ref="m"/>
                        <Symbol symbol-ref="celltype"/>