Neutrophil Reorientation via Local Feedback and PIP3-Driven Delay

Persistent Identifier

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

How does immune cell polarity respond to changing stimuli?

Introduction

Neutrophils are fast-moving immune cells that polarize and reorient in response to external signals. Using optogenetic control of PI3K, recent experiments revealed that when a localized light stimulus becomes global, cells reverse their polarity — a behaviour not predicted by classical models.

This model suite tests a series of minimal feedback motifs that reproduce these dynamics using Cellular Potts Models (CPM) coupled to reaction-diffusion systems. The models include increasing layers of complexity: a base wave-pinning (WP) model, a WP model with a Rac-dependent inhibitor (WPI), and a full WPI-PIP3 model that captures the full experimental behaviour, including reversal.

Model Overview

We model the cell perimeter as a 1D membrane where active Rac ($u$), inactive Rac ($v$), a Rac-dependent inhibitor ($h$), and a PIP3-like activator ($p$) evolve under reaction-diffusion dynamics.

To simulate stimulus saturation, the light field $S(x,t)$ is normalized by its integral:

$$ \text{Effective stimulus} = \frac{S(x,t)}{\int S(x,t), dx} $$

This ensures that spatially broader stimuli do not lead to proportionally larger Rac activation, mimicking receptor saturation effects.

1. Wave-Pinning Model (WP)

Based on Mori et al. (2008), the classic WP model describes bistable Rac dynamics with conservation of total Rac:

$$ \frac{\partial u}{\partial t} = v \left( k_0 + \alpha \frac{S(x,t)}{\int S(x,t), dx} + \gamma \frac{u^n}{K^n + u^n} \right) - \delta u + D_u \nabla^2 u $$

$$ \frac{\partial v}{\partial t} = -v \left( k_0 + \alpha \frac{S(x,t)}{\int S(x,t), dx} + \gamma \frac{u^n}{K^n + u^n} \right) + \delta u + D_v \nabla^2 v $$

Video 1. Simulation of the WP model. Green = active Rac, purple = inactive Rac, blue = light input. The model polarizes under local input but fails to reverse under a local-to-global switch.

2. Wave-Pinning with Inhibitor (WPI)

We extend the WP model by introducing a Rac-dependent inhibitor $h(x,t)$ that diffuses slowly and suppresses Rac locally:

$$ \frac{\partial h}{\partial t} = k_h u - \delta_h h + D_h \nabla^2 h $$

The Rac equations are modified to include this feedback:

$$ \frac{\partial u}{\partial t} = v \left( k_0 + \alpha \frac{S(x,t)}{\int S(x,t), dx} + \gamma \frac{u^n}{K^n + u^n} \right) - (\delta + k_1 h) u + D_u \nabla^2 u $$

$$ \frac{\partial v}{\partial t} = -v \left( k_0 + \alpha \frac{S(x,t)}{\int S(x,t), dx} + \gamma \frac{u^n}{K^n + u^n} \right) + (\delta + k_1 h) u + D_v \nabla^2 v $$

Video 2. WPI model response. Green = active Rac, orange = inhibitor, purple = inactive Rac, blue = light. The model enables persistent turning, but not reversal.

3. Wave-Pinning with Inhibitor and PIP3 (WPI-PIP3)

To capture stimulus memory, we introduce a dynamic PIP3 signal $p(x,t)$ that activates Rac indirectly:

$$ \frac{\partial p}{\partial t} = (T_p - p)(k_p + \beta \frac{S(x,t)}{\int S(x,t), dx}) - \delta_p p + D_p \nabla^2 p $$

Rac activation now depends on $p(x,t)$:

$$ \frac{\partial u}{\partial t} = v \left( k_0 + \alpha p + \gamma \frac{u^n}{K^n + u^n} \right) - (\delta + k_1 h) u + D_u \nabla^2 u $$

$$ \frac{\partial v}{\partial t} = -v \left( k_0 + \alpha p + \gamma \frac{u^n}{K^n + u^n} \right) + (\delta + k_1 h) u + D_v \nabla^2 v $$

Video 3. Simulation of the full WPI-PIP3 model. Green = active Rac, yellow = PIP3, purple = inactive Rac. The model successfully reproduces polarity reversal under a local-to-global switch.
Figure 1. Taken from Figure XIV in Algorta et al., 2025, [bioRxiv](https://doi.org/10.1101/2025.05.05.651928). The WPI-PIP3 (but not WP or WPI) model accounts for reversal trajectories. A comparison of cell shapes, active Rac distributions along the cell edge (green), and various cell trajectories in the experiment (left) and in cell simulations predicted by the three models (L to R: WP, WPI, and WPI-PIP3) with heterogeneous parameters. In the lower panels, all individual cell tracks are shown (25 for the experiment, 20 for each of the models), with the average trajectory overlaid and colour-coded by rotation direction: blue for counterclockwise (CCW), red for clockwise (CW), and white for no rotation. In all models, the cell is first locally stimulated on its left from t = 100s to t = 300s, triggering counterclockwise rotation. At t = 300s, global stimulus is turned on. WP predicts straight migration or loss of polarity and stalling; WPI continues its initial rotation; only WPI-PIP3 reverses direction, matching experimental results.

Model Files Included

  • WPI-PIP3_main.xml: Full model with Rac, inhibitor, and PIP3
  • WPI.xml: Intermediate model with Rac and inhibitor
  • WP.xml: Baseline wave-pinning model

Reference

This model is the original used in the publication, up to technical updates:

J. Algorta, J.P. Town, O.D. Weiner, L. Edelstein-Keshet: Investigating local negative feedback of Rac activity by mathematical models and cell motility simulations. bioRxiv, 2025.

The model originates from a preprint and thus has not been formally peer-reviewed.

Model

Get this model via:

  • Morpheus-Link or
  •  Download: WPI-PIP3_main.xml
  • XML Preview

    <?xml version='1.0' encoding='UTF-8'?>
    <MorpheusModel version="4">
      <Description>
        <Title>Wave-Pinning with Inhibitor and PIP3-Mediated Input (WPI-PIP3)</Title>
        <Details>
    MorpheusModelID: https://identifiers.org/morpheus/M2073  
    Software: Morpheus (open source). Download from: https://morpheus.gitlab.io  
    Full title: Wave-Pinning Model with Inhibitor and PIP3-Mediated Input  
    Authors: J. Algorta  
    Submitters: J. Algorta
    Date: 2025-05-15  
    Reference:  
    [1] J. Algorta, J.P. Town, O.D. Weiner, L. Edelstein-Keshet. "Investigating local negative feedback of Rac activity by mathematical models and cell motility simulations." bioRxiv, 2025. [Link](https://www.biorxiv.org/content/10.1101/2025.05.05.651928)
    
    Comment:  
    This final model introduces a dynamic upstream field representing PIP3 (\( p(x,t) \)), which indirectly drives Rac activation. PIP3 introduces a time delay and memory to the system, allowing cells to reverse direction under local-to-global stimulus switching. This model captures all observed experimental behaviours.
        </Details>
      </Description>
    
        <Global>
            <Constant symbol="ts1" name="Time to *end* first light stimulus from &quot;time = 0&quot;" value="0"/>
            <Constant symbol="ts2" name="Time to *starts* second light stimulus from &quot;time = ts2&quot;" value="60"/>
            <Constant symbol="L" name="Angular size of the light stimulus" value="pi/4"/>
            <Variable symbol="A" value="0.0"/>
            <Variable symbol="B" value="0.0"/>
            <Variable symbol="U" value="-1"/>
            <Field symbol="prot" value="0.0"/>
            <Variable symbol="ts3" value="3000"/>
            <Constant symbol="middle_temp" value="rand_uni(pi/4,2*pi-pi/4)"/>
            <Constant symbol="lengthscale" value="2*pi/(2*pi*sqrt(2000/pi))"/>
            <Variable symbol="vol_target" value="2000"/>
            <!--    <Disabled>
            <Variable symbol="vol_target" value="rand_norm(2000.142, 683.505) "/>
        </Disabled>
    -->
            <Constant symbol="middle" value="3*pi/2"/>
            <!--    <Disabled>
            <Constant symbol="middle" value="middle_temp"/>
        </Disabled>
    -->
        </Global>
        <Space>
            <Lattice class="square">
                <Size symbol="lattice" value="500, 500, 0"/>
                <BoundaryConditions>
                    <Condition type="periodic" boundary="x"/>
                    <Condition type="periodic" boundary="y"/>
                </BoundaryConditions>
                <NodeLength value="1.0"/>
                <Neighborhood>
                    <Distance>2.0</Distance>
                </Neighborhood>
            </Lattice>
            <SpaceSymbol symbol="l"/>
            <MembraneLattice>
                <Resolution symbol="memsize" value="100"/>
                <SpaceSymbol symbol="m"/>
            </MembraneLattice>
        </Space>
        <Time>
            <StartTime value="0"/>
            <StopTime value="400"/>
            <SaveInterval value="0"/>
            <TimeSymbol symbol="time"/>
            <!--    <Disabled>
            <RandomSeed value="1743554059"/>
        </Disabled>
    -->
        </Time>
        <CellTypes>
            <CellType name="cells" class="biological">
                <VolumeConstraint target="vol_target" strength="1"/>
                <SurfaceConstraint target="1.46" strength="1" mode="aspherity"/>
                <MembraneProperty symbol="A" name="Active form of protein" value="2.05*(m.phi>middle-pi/4)*(m.phi&lt;middle+pi/4)">
                    <Diffusion rate="0.080/lengthscale^2"/>
                </MembraneProperty>
                <MembraneProperty symbol="B" name="Inactive form of protein" value="7.31-2/4">
                    <Diffusion rate="0.51/lengthscale^2"/>
                </MembraneProperty>
                <MembraneProperty symbol="H" name="Local Rac inhibtor" value="2">
                    <Diffusion rate=" 0.0374/lengthscale^2"/>
                </MembraneProperty>
                <MembraneProperty symbol="U" name="Light stimulus around the cell's membrane" value="0">
                    <Diffusion rate="0.0"/>
                </MembraneProperty>
                <MembraneProperty symbol="P3" name="PIP3" value="0.93">
                    <Diffusion rate="0.62/lengthscale^2"/>
                </MembraneProperty>
                <System time-scaling="2" name="WavePinning with Inhibitor" solver="Euler [fixed, O(1)]">
                    <Constant symbol="k_0" value="rand_norm(0.028, 0.000765)"/>
                    <Constant symbol="k_1" value="rand_norm(0.372, 0.006632)"/>
                    <Constant symbol="s_1" value="rand_norm(0.059, 0.001530)"/>
                    <Constant symbol="gamma" value="rand_norm(1.38, 0.0214)"/>
                    <Constant symbol="delta" value="rand_norm(0.721, 0.006887)"/>
                    <Constant symbol="K" value="rand_norm(2.93, 0.0408)"/>
                    <Constant symbol="n" name="Hill coefficient" value="2"/>
                    <Intermediate symbol="F" value="1*(B*(k_0+ s_1*(P3) + (gamma*A^n) / (K^n + A^n) ) - (delta+k_1*H)*A)"/>
                    <DiffEqn symbol-ref="A">
                        <Expression>F</Expression>
                    </DiffEqn>
                    <DiffEqn symbol-ref="B">
                        <Expression>-F</Expression>
                    </DiffEqn>
                </System>
                <System time-scaling="2" name="Inhibitor" solver="Euler [fixed, O(1)]">
                    <Constant symbol="alpha" value="rand_norm(0.0068, 0.000102040)"/>
                    <Constant symbol="deltah" value="rand_norm(0.004, 0.00015306)"/>
                    <DiffEqn symbol-ref="H">
                        <Expression>1*(alpha*A-deltah*H)</Expression>
                    </DiffEqn>
                </System>
                <System time-scaling="0.004" name="PIP3" solver="Euler [fixed, O(1)]">
                    <Intermediate symbol="u_damp" value="max(0.001,u_inte)"/>
                    <Intermediate symbol="G" value="((3.08-P3) * (0.41 + 0.26 * 1*3.7*U/(u_damp)+0.26) - (1.59) * P3)"/>
                    <DiffEqn symbol-ref="P3">
                        <Expression>G</Expression>
                    </DiffEqn>
                </System>
                <System name="Input system" solver="Dormand-Prince [adaptive, O(5)]">
                    <Annotation>Below are the different ways to chaneg how the light stimulus (U) is applied on the cell's membrane. ONLY ONE SHOULD BE TURNED ON AT A TIME
    
    </Annotation>
                    <Rule symbol-ref="U" name="Local to Global">
                        <Expression>((abs(m.phi-3*pi/2)&lt;L)*(time&lt;ts1))+((abs(m.phi-3*pi/2+0.4)&lt;5000)*(time>ts3))+((abs(m.phi-(p.phi+pi/2))&lt;L)*(time>ts2)*(time&lt;=ts3))*((p.phi+pi/2)&lt;(2*pi-L))+(((abs(m.phi-(p.phi+pi/2))&lt;L)*(time>ts2)*(time&lt;=ts3))+((abs(m.phi-(p.phi-2*pi+pi/2))&lt;L)*(time>ts2)*(time&lt;=ts3)))*((p.phi+pi/2)>(2*pi-L))</Expression>
                    </Rule>
                    <!--    <Disabled>
            <Rule symbol-ref="U" name="Side-Side">
                <Expression>(((abs(m.phi - (angle + pi/2)) &lt; L) * ((angle + pi/2) &lt;= 2*pi - L)) +
     ((abs(m.phi - (angle + pi/2 - 2*pi)) &lt; L) * ((angle + pi/2) > 2*pi - L) * ((angle + pi/2) &lt; 2*pi + L)))*(time > ts2) * (time &lt; ts3)
    </Expression>
            </Rule>
        </Disabled>
    -->
                </System>
                <PropertyVector symbol="p" name="polarity" value="0.0, 0.0, 0.0"/>
                <MotilityReporter time-step="10" name="Velocity extraction">
                    <Velocity symbol-ref="p"/>
                </MotilityReporter>
                <StarConvex membrane="A" strength="30" name="Protrusive domain identification"/>
                <Protrusion strength="10" field="prot" name="Protrusion persistence" maximum="2500"/>
                <Event name="Trigger condition">
                    <Condition>(abs(p.phi-pi/2)&lt;0.3)*(time>ts2+10)</Condition>
                    <Rule symbol-ref="ts3">
                        <Expression>time+0</Expression>
                    </Rule>
                </Event>
                <Mapper name="Light direction">
                    <Input value="U"/>
                    <Polarity symbol-ref="p1"/>
                </Mapper>
                <PropertyVector symbol="p1" name="polarity1" value="0.0, 0.0, 0.0"/>
                <ConnectivityConstraint name=""/>
                <Property symbol="u_inte" name="Intermediate variable" value="0.0"/>
                <Mapper name="Integral of Light">
                    <Input value="2*pi*U/memsize"/>
                    <Output symbol-ref="u_inte" mapping="sum"/>
                </Mapper>
            </CellType>
        </CellTypes>
        <CPM>
            <Interaction default="0.0"/>
            <MonteCarloSampler stepper="edgelist">
                <MCSDuration value="0.07"/>
                <Neighborhood>
                    <Order>2</Order>
                </Neighborhood>
                <MetropolisKinetics yield="0.05" temperature="0.3"/>
            </MonteCarloSampler>
            <ShapeSurface scaling="norm">
                <Neighborhood>
                    <Order>6</Order>
                </Neighborhood>
            </ShapeSurface>
        </CPM>
        <CellPopulations>
            <Population type="cells" size="0">
                <InitCellObjects mode="distance">
                    <Arrangement repetitions="1, 1, 0" displacements="1, 1, 0">
                        <Sphere center="100 250 0" radius="24"/>
                    </Arrangement>
                </InitCellObjects>
            </Population>
        </CellPopulations>
        <Analysis>
            <Gnuplotter time-step="5" decorate="false">
                <Terminal name="png"/>
                <Plot title="Active Protein &amp; Light Stimulus">
                    <Cells flooding="true" value="A"/>
                    <CellArrows orientation="p*10"/>
                    <Field symbol-ref="U" max="1" min="0">
                        <ColorMap>
                            <Color color="white" value="0"/>
                            <Color color="blue" value="1"/>
                        </ColorMap>
                    </Field>
                </Plot>
            </Gnuplotter>
            <CellTracker time-step="1" format="ISBI 2012 (XML)"/>
            <Logger time-step="1">
                <Input>
                    <Symbol symbol-ref="m.phi"/>
                    <Symbol symbol-ref="A"/>
                    <Symbol symbol-ref="B"/>
                    <Symbol symbol-ref="U"/>
                    <Symbol symbol-ref="p.phi"/>
                    <Symbol symbol-ref="H"/>
                    <Symbol symbol-ref="P3"/>
                </Input>
                <Output>
                    <TextOutput/>
                </Output>
                <Plots>
                    <Plot time-step="5">
                        <Style style="points"/>
                        <Terminal terminal="png"/>
                        <X-axis maximum="6.283">
                            <Symbol symbol-ref="m.phi"/>
                        </X-axis>
                        <Y-axis minimum="0.0" maximum="7">
                            <Symbol symbol-ref="B"/>
                            <Symbol symbol-ref="A"/>
                            <Symbol symbol-ref="U"/>
                            <Symbol symbol-ref="H"/>
                            <Symbol symbol-ref="P3"/>
                        </Y-axis>
                        <Range>
                            <Time mode="current"/>
                        </Range>
                    </Plot>
                </Plots>
            </Logger>
            <ModelGraph include-tags="#untagged" format="dot" reduced="false"/>
            <!--    <Disabled>
            <Logger time-step="1.0">
                <Input>
                    <Symbol symbol-ref="ts3"/>
                    <Symbol symbol-ref="p.phi"/>
                </Input>
                <Output>
                    <TextOutput/>
                </Output>
            </Logger>
        </Disabled>
    -->
        </Analysis>
    </MorpheusModel>
    
    

    Downloads

    Files associated with this model:

    Next