CPM Cell Sensing

Cell Sensing, Implementation in CPM Code


Cells in a group communicate with one another in order to sense a gradient. We use a minimal adaptive model based on local excitation and global inhibition (LEGI). The network looks like the following

is the signaling molecule representing the EGF gradient, is the local reporter, is the global reporter, and is the downstream readout.

Reactions for a specific cell

is the local number of signaling molecules near cell , is the number of local reporter molecules in cell and is the number of global reporter molecules. As well as being produced by the signaling molecule, can also be exchanged between its neighbors. represents the set of all cells neighboring cell . The rate at which cells exchange depends on the size of the cell-cell contact.

is the difference between the local and global reporters. A positive value of reinforces cell ’s polarity vector in the direction of motion whereas a negative does the opposite.

Chemical Concentration and Signal

There is a space dependent chemical concentration field. The chemical concentration has a constant gradient.

The average signal from the chemical concentration that cell feels is given as . Diffusion is Poissonian so the variance in the measured signal is equal to the average .

In the code this will be implemented by sampling values of from a Gaussian distribution with the variance equal to the mean. Found a function that does this here (in module ran_mod).


Implementation of Gaussian sampler works, above is an example of a 1000 numbers sampled from a distribution with a mean and variance of 9. The function is defined as normal(mean,sigma) in the module sensing.

We can place one cell in a chemical concentration with a linear gradient and see if sampling its measured signal yields a normal distribution of values.


The distribution is not quite Gaussian anymore because values less than zero are not allowed. If the function getCellSignal( meanSignal) outputs a negative number then the signal value is set to zero. If this constraint is lifted, a Gaussian distribution is recovered.

Local Species

The local species is the local reporter of the chemical signal that cell measures. The dynamics of the local reporter satisfy the stochastic equation

are unit Gaussian variables that make-up the noise in the local reporter. In steady-state we can solve for and .

Similar to the chemical concentration signal we can sample from a distribution. This is implemented in the function getLocalX( meanSignal, signal). This function takes a sampled signal value and then samples values for in order to calculate .


Here is an example of the distribution in values of given some distribution of . Again, is restricted to be non-negative values only.

Global Species

The global species is the global reporter of the chemical concentration across all cells in the group. The number of the global species in cell is given as . The dynamics of the global species is more complicated than the local one since it can diffuse to and from different cells.

The first two terms are the production and degradation rates of , same as in the case for . The first summation term accounts for the loss of due to the movement of the global reporter into neighboring cells. The notation represents all nearest neighbor pairs. Similarly, the second summation term accounts for the gain in global reporter moving into cell from neighboring cells.

The movement of in and out cells depends on the size of the boundary overlap between nearest neighbors and so must account for that. We choose that the magnitude of be proportional to the size of the boundary overlap.

Note that has a few interesting properties.

It is also useful to know the sum of all the contributing exchanges between cell and all the other cells and define that to be .

The steady-state solution can be written in terms of vectors.

is a square, symmetric matrix governing degradation and exchange of the global reporter in all cells.

As in the local species case, and are unit Gaussian variables that contribute to the noise in the global reporter. In order to compute we need to know the average number in every cell.

Using this we can then solve for the actual measured value of the global reporter in each cell .


All possible values of are stored in an array gNN, such that gNN(j,k) corresponds to . Below is a list of subroutines/functions that implement the above dynamics.

  • Subroutine makeMtrxGamma( gNN, N, rSim, sigma, x) calculates all values.
  • Subroutine makeMtrxM( gNN, M, N) calculates the values of all matrix elements .
  • Subroutine getMeanY( meanSignal, M, meanY, N) calculates the vector .
  • Subroutine getEtaY( etaY, gNN, meanSignal, meanY, N) calculates the vector .
  • Subroutine getSpeciesY( etaY, M, N, signal, y) calculates the population of in each cell.


Here is an example of the distribution in values of and given some distribution of in a simulation involving only one cell. The chemical concentration profile has the same gradient as in the previous examples, but the off-set has been increased.

Downstream Readout

Once the values of and are calculated for all cells involved we can measure the downstream output .

Below is the result over many instances (1000) of a simulation involving a chain of 10 cells sitting parallel to the chemical gradient. Each data point represents the mean value of at each cell, and the errors bars represent one standard deviation.

chem_R_cell_1 chem_R_cell_2

The figure on the left is representative of simulations with a relatively large gradient whereas the figure on the right is of simulations with a shallow gradient. As you can see the larger the gradient the less noisy the output becomes.

Polarization and Bias

The cell sensing and signaling network will influence the polarization of the individual cells which will in turn affect the bias term in the CPM simulations.


It is the downstream output which will contribute to the change in the cell’s polarization vector. The change in the polarization vector of cell at every Monte Carlo time step is given as

is the expected signaling molecule difference across the whole cluster of cells. The purpose in dividing by is to attempt to normalize so that may be used as a tuning parameter on the order of 1 in order to vary the strength of cell-cell communication.


The bias is modified in order to eliminate the need for the parameter . With the above expression for the term

Issues with this Model of Polarization & Bias

This model produces unrealistic results. Although cells properly sense their environment, this does not translate into relatively quick, coherent motion in the direction of increasing signal concentration as desired. Even in the case of a steep gradient, cells do not behave as expected.

In this video each of the 6 cells is colored to indicate their value. Hot colors represent large, positive values whereas cool color represent smaller/negative values. The chemical gradient increases linearly from left to right.

As you can see cell movement does not look coordinated and the polarization vectors change erratically. Cells are properly measuring and communicating the signal as indicated by the right-side of the group generally having the largest values for the downstream readout. This means that the problem in the model lies in translating the various values of to the dynamics of each cell which is done through the polarization and the bias.

I believe that the problem is most likely caused by the calculation of the change in polarization. Say that a cell at the very right edge of the group has both and pointing perpendicular to the gradient then its positive readout would only reinforce movement perpendicular to the gradient. Other problems also occur when a cell becomes disconnected form the group.

Updated Polarization Implementation

These problems stem from the fact that the influence of sensing on polarization occurs through scaling . Whereas it should depend on where the cell is located in the group. I propose that changes in polarization obey the following equation

The vector points away from all cell ’s neighbors.

Using this implementation of updating the polarization vector yeilds results which are much more in-line with expectations.

Here are two preliminary simulation videos.

Qualitatively, the behavior is good but parameters need fine-tuning in order to get cells of desired sizes/shapes. The chemical gradient increases linearly from left to right, and there is about a +100 increase in the chemical concentration initially, between the cells.

Julien Varennes

Written with StackEdit.

Written on July 10, 2015