Calculating contact energies between compartmentalized cells is analogous to the non-compartmentalized case. The energy expression takes the following form:
$$\begin{eqnarray}$$
Eadhesion = ∑i, j, neighborsJ(σ(μi,νi),σ(μj,νj))
where i
and j
denote pixels , σ(µ,ν)
denotes a cell type of a cell with cluster id µ and cell id ν . In compartmental cell models a cell is a collection of subcells. Each subcell has a unique id ν (cell id). In addition to that each subcell will have additional attribute, a cluster id (µ) that determines to which cluster of subcells a given subcell belongs. Tthink of a cluster as a cell with nonhomogenous cytoskeleton. So a cluster corresponds to a biological cell and subcells (or compartments) represents parts of a cell e.g. a nucleus. The core idea here is to have different contact energies between subcells belonging to the same cluster and different energies for cells belonging to different clusters. Technically subcells of a cluster are "regular" CompuCell3D cells. By giving them an extra attribute cluster id ((µ) we can introduce a concept of compartmental cells. In our convention σ(0,0) denotes medium
Figure 2. Two compartmentalized cells (cluster id μ = 1 and cluster id μ = 2). Compartmentalized cell μ = 1 consists of subcells with cell id ν = 1, 2, 3 and compartmentalized cell μ = 2 consists of subcells with cell id ν = 4, 5, 6
Introduction of cluster id and cell id are essential for the definition of J(σ(μi,νi),σ(μj,νj))
Indeed:
As we can see from above there are two hierarchies of contact energies – external and internal. To describe adhesive interactions between different compartmentalized cells we use two plugins: Contact
and ContactInternal
. Contact
plugin calculates energy between two cells belonging to different clusters and ContactInternal
calculates energies between cells belonging to the same cluster. An example syntax is shown below
<Plugin Name="Contact">
<Energy Type1="Base" Type2="Base">0</Energy>
<Energy Type1="Top" Type2="Base">25</Energy>
<Energy Type1="Center" Type2="Base">30</Energy>
<Energy Type1="Bottom" Type2="Base">-2</Energy>
<Energy Type1="Side1" Type2="Base">25</Energy>
<Energy Type1="Side2" Type2="Base">25</Energy>
<Energy Type1="Medium" Type2="Base">0</Energy>
<Energy Type1="Medium" Type2="Medium">0</Energy>
<Energy Type1="Top" Type2="Medium">30</Energy>
<Energy Type1="Bottom" Type2="Medium">20</Energy>
<Energy Type1="Side1" Type2="Medium">30</Energy>
<Energy Type1="Side2" Type2="Medium">30</Energy>
<Energy Type1="Center" Type2="Medium">45</Energy>
<Energy Type1="Top" Type2="Top">2</Energy>
<Energy Type1="Top" Type2="Bottom">100</Energy>
<Energy Type1="Top" Type2="Side1">25</Energy>
<Energy Type1="Top" Type2="Side2">25</Energy>
<Energy Type1="Top" Type2="Center">35</Energy>
<Energy Type1="Bottom" Type2="Bottom">10</Energy>
<Energy Type1="Bottom" Type2="Side1">25</Energy>
<Energy Type1="Bottom" Type2="Side2">25</Energy>
<Energy Type1="Bottom" Type2="Center">35</Energy>
<Energy Type1="Side1" Type2="Side1">25</Energy>
<Energy Type1="Side1" Type2="Center">25</Energy>
<Energy Type1="Side2" Type2="Side2">25</Energy>
<Energy Type1="Side2" Type2="Center">25</Energy>
<Energy Type1="Side1" Type2="Side2">15</Energy>
<Energy Type1="Center" Type2="Center">20</Energy>
<NeighborOrder>2</NeighborOrder>
</Plugin>
and
<Plugin Name="ContactInternal">
<Energy Type1="Base" Type2="Base">0</Energy>
<Energy Type1="Base" Type2="Bottom">0</Energy>
<Energy Type1="Base" Type2="Side1">0</Energy>
<Energy Type1="Base" Type2="Side2">0</Energy>
<Energy Type1="Base" Type2="Center">0</Energy>
<Energy Type1="Top" Type2="Top">4</Energy>
<Energy Type1="Top" Type2="Bottom">25</Energy>
<Energy Type1="Top" Type2="Side1">22</Energy>
<Energy Type1="Top" Type2="Side2">22</Energy>
<Energy Type1="Top" Type2="Center">15</Energy>
<Energy Type1="Bottom" Type2="Bottom">4</Energy>
<Energy Type1="Bottom" Type2="Side1">15</Energy>
<Energy Type1="Bottom" Type2="Side2">15</Energy>
<Energy Type1="Bottom" Type2="Center">10</Energy>
<Energy Type1="Side1" Type2="Side1">11</Energy>
<Energy Type1="Side2" Type2="Side2">11</Energy>
<Energy Type1="Side1" Type2="Side2">11</Energy>
<Energy Type1="Side2" Type2="Center">10</Energy>
<Energy Type1="Side1" Type2="Center">10</Energy>
<Energy Type1="Center" Type2="Center">2</Energy>
<NeighborOrder>2</NeighborOrder>
</Plugin>
Depending whether pixels for which we calculate contact energies belong to the same cluster or not we will use internal or external contact energies respectively.