Connectivity Plugins -------------------- The "basic" ``Connectivity`` plugin works **only in 2D and only on square lattice** and is used to ensure that cells are connected or in other words to prevent separation of the cell into pieces. The detailed algorithm for this plugin is described in Roeland Merks' paper “Cell elongation is a key to *in-silico* replication of in vitro vasculogenesis and subsequent remodeling” Developmental Biology **289** (2006) 44-54). There was one modification of the algorithm as compared to the paper. Namely, to ensure proper connectivity we had to reject all pixel copies that resulted in more that two collisions. (see the paper for detailed explanation what this means). The syntax of the plugin is straightforward: .. code-block:: 100000 .. note:: The value of ``Penalty`` is irrelevant because all ``Connectivity`` plugins have a special status. Namely, CC3D will call connectivity plugin to check if the a given pixel copy would lead to cell fragmentation and if so it will reject the pixel copy without computing energy-based pixel-copy acceptance function. thus the only thing that matters here is that penalty parameter is a positive number. Any number As we mentioned, earlier 2D connectivity algorithm is particularly fast but works only on Cartesian lattice nad in 2D only. If you are on hex lattice or are working with 3 dimensions You should use ``ConnectivityGlobal`` plugin and there specify so called ``FastAlgorithm`` to get decent performance. For example (see *Demos/PluginDemos/connectivity_global_fast*): .. code-block:: xml will enforce connectivity of cells of type ``Condensing`` and ``NonCondensing`` and will use "fast algorithm". If you want to enforce connectivity for individual cells cells (see *Demos/PluginDemos/connectivity_elongation_fast*) you would use the following CC3DML code: .. code-block:: xml and couple it with the following Python steppable: .. code-block:: python class ConnectivityElongationSteppable(SteppableBasePy): def __init__(self,_simulator,_frequency=10): SteppableBasePy.__init__(self,_simulator,_frequency) def start(self): for cell in self.cellList: if cell.type==1: cell.connectivityOn = True elif cell.type==2: cell.connectivityOn = True Below we describe a slower version of ConnectivityGlobal plugin that is still supported but has much slower performance and for that reason we encourage you to try faster implementation described above .. note:: **DEPRECATED** A more general type of connectivity constraint is implemented in ``ConnectivityGlobal`` plugin. In this case we calculate volume of a cell using breadth first search algorithm and compare it with actual volume of the cell. If they agree we conclude that cell connectivity is preserved. This plugin works both in 2D and 3D and on either type of lattice. However, the computational cost of running such algorithm can be quite high so it is best to limit this plugin to cell types for which connectivity of cell is really essential: .. code-block:: xml 1000000000 As we mentioned before the actual value of ``Penalty`` parameter does not matter as long it is a positive number In certain types of simulation it may happen that at some point cells change cell types. If a cell that was not subject to connectivity constraint, changes type to the cell that is constrained by global connectivity and this cell is fragmented before type change this situation normally would result in simulation freeze. However, CompuCell3D, first before applying constraint it will check if the cell is fragmented. If it is, there is no constraint. Global connectivity constraint is only applied when cell is non-fragmented. Quite often in the simulation we don't need to impose connectivity constraint on all cells or on all cells of given type. Usually only select cell types or select cells are elongated and therefore need connectivity constraint. In such a case we simply declare ``ConnectivityGlobal`` with no further specifications taking place in CC3DML The actual connectivity assignments to particular cells take place in Python In CC3DML we only declare: .. code-block:: xml In Python we manipulate/access connectivity parameters for individual cells using the following syntax: .. code-block:: python class ElongationFlexSteppable(SteppableBasePy): def __init__(self,_simulator,_frequency=10): SteppableBasePy.__init__(self, _simulator, _frequency) # self.lengthConstraintPlugin=CompuCell.getLengthConstraintPlugin() def start(self): pass def step(self,mcs): for cell in self.cellList: if cell.type==1: self.lengthConstraintPlugin.setLengthConstraintData(cell,20,20) # cell , lambdaLength, targetLength self.connectivityGlobalPlugin.setConnectivityStrength(cell,10000000) #cell, strength elif cell.type==2: self.lengthConstraintPlugin.setLengthConstraintData(cell,20,30) # cell , lambdaLength, targetLength self.connectivityGlobalPlugin.setConnectivityStrength(cell,10000000) #cell, strength See also example in *Demos/PluginDemos/elongationFlexTest.* If you are in 2D and on Cartesian lattice you may instead use ``ConnectivityLocalFlex`` In this case In CC3DML we only declare: .. code-block:: xml and in Python: .. code-block:: python self.connectivityLocalFlexPlugin.setConnectivityStrength(cell,20.7) self.connectivityLocalFlexPlugin.getConnectivityStrength(cell)