Adhesion Driven Cell Sorting
This is a energy-based model of cell sorting and migration. However, one major challenge is relating the energy terms of a CPM to mechanical forces measrured biological experiments (protein expression).
In this system, the primary determinant of global patterning is differential adhesion. However, cellular behaviors such as persistent motion , contact-inhibited migration (or lack thereof) , cell cortex rigidity, and [future] the tendency of peripheral cells to be more migratory are representred in this model.
Initial Conditions:
2 cell types, random intial positions, 100 total cells densely clustered
Constraints: cell size, cortex stiffness, cell-cell adhesion strength, cell-media adhesion (aggregate borders only!). Constraints are derived from literature and experiments.
Cell Proliferation (No Cell Growth):Time Driven cell division
Estimated generation times are 20 hours (bionumbers) and 18 hours (experiments)
Estimated area is 113 um (bionumbers)
Protein Expression Dynamics:
Protein Expression dyanamics are modeled by a data-dervied Hill Equation.
v5.6 changes
added random seed so time doesn't determine randomness of initial cell positions
if(time < burn_in_time, adhesion_init_ct1,
if(time > ct1_perturbation_time
and ct1_adhesion >= adhesion_init_ct1
and ct1_adhesion <= ct1_adhesion_weak,
(1.0 / (1.0 + (pow(((time-ct1_perturbation_time)/ct1_k_half_hours),ct1_hill_n))))* (adhesion_init_ct1-ct1_adhesion_weak) + ct1_adhesion_weak,
if(time <= ct1_perturbation_time,adhesion_init_ct1,ct1_adhesion_weak)
))
if(time < burn_in_time,ct1_membraneElasticity_init,
if(time > ct1_perturbation_time
and ct1_membraneElasticity >= ct1_membraneElasticity_init
and ct1_membraneElasticity <= ct1_membraneElasticity_final,
(1.0 / (1.0 + (pow(((time-ct1_perturbation_time)/ct1_k_half_hours),ct1_hill_n))))*(ct1_membraneElasticity_init-ct1_membraneElasticity_final) + ct1_membraneElasticity_final,
if(time <= ct1_perturbation_time,ct1_membraneElasticity_init,ct1_membraneElasticity_final)
))
if(time < burn_in_time,ct1_membraneElasticity_edge_init,
if(time > ct1_perturbation_time
and ct1_membraneElasticity_edge >= ct1_membraneElasticity_edge_init
and ct1_membraneElasticity_edge <= ct1_membraneElasticity_final_edge,
(1.0 / (1.0 + (pow(((time-ct1_perturbation_time)/ct1_k_half_hours),ct1_hill_n))))*(ct1_membraneElasticity_edge_init-ct1_membraneElasticity_final_edge) + ct1_membraneElasticity_final_edge,
if(time <= ct1_perturbation_time,ct1_membraneElasticity_edge_init,ct1_membraneElasticity_final_edge)
))
if(time >burn_in_time,ct1_area_init,
if( (ct1_area_init < ct1_area_final)
and ct1_area < ct1_area_final,
ct1_area_init +
(ct1_area_final-ct1_area_init)*
((time-ct1_perturbation_time)/96),
ct1_area_final)
)
if(time < burn_in_time,ct1_area_edge_init,
if((ct1_area_edge_init < ct1_area_edge_final)
and ct1_area_edge < ct1_area_edge_final,
ct1_area_edge_init +
(ct1_area_edge_final-ct1_area_edge_init)*
((time-ct1_perturbation_time)/96),
ct1_area_edge_final)
)
if(time < burn_in_time, ct1_generation_time_init,
if(time > ct1_perturbation_time,
(1.0 / (1.0 + (pow(((time-ct1_perturbation_time)/ct1_k_half_hours),ct1_hill_n))))* (ct1_generation_time_init-ct1_generation_time_final) + ct1_generation_time_final,
if(time <= ct1_perturbation_time,ct1_generation_time_init,ct1_generation_time_final)
))
if(time < burn_in_time, ct1_membrane_str_init,
if(time > ct1_perturbation_time
and ct1_membrane_str >= ct1_membrane_str_init
and ct1_membrane_str <= ct1_membrane_str_final,
(1.0 / (1.0 + (pow(((time-ct1_perturbation_time)/ct1_k_half_hours),ct1_hill_n))))* (ct1_membrane_str_init-ct1_membrane_str_final) + ct1_membrane_str_final,
if(time <= ct1_perturbation_time,ct1_membrane_str_init,ct1_membrane_str_final)
))
if(time < burn_in_time,adhesion_init_ct2,
if(time > ct2_perturbation_time
and ct2_adhesion >= adhesion_init_ct2
and ct2_adhesion <= ct2_adhesion_weak,
(1.0 / (1.0 + (pow(((time-ct2_perturbation_time)/ct2_k_half_hours),ct2_hill_n))))*(adhesion_init_ct2-ct2_adhesion_weak) + ct2_adhesion_weak,
if(time <= ct2_perturbation_time,adhesion_init_ct2,ct2_adhesion_weak)
))
if(time < burn_in_time,ct2_membraneElasticity_init,
if(time > ct2_perturbation_time
and ct2_membraneElasticity >= ct2_membraneElasticity_init
and ct2_membraneElasticity <= ct2_membraneElasticity_final,
(1.0 / (1.0 + (pow(((time-ct2_perturbation_time)/ct2_k_half_hours),ct2_hill_n))))*
(ct2_membraneElasticity_init-ct2_membraneElasticity_final) + ct2_membraneElasticity_final,
if(time <= ct2_perturbation_time,ct2_membraneElasticity_init,ct2_membraneElasticity_final)
))
if(time < burn_in_time,ct2_membraneElasticity_edge_init,
if(time > ct2_perturbation_time
and ct2_membraneElasticity_edge >= ct2_membraneElasticity_edge_init
and ct2_membraneElasticity_edge <= ct2_membraneElasticity_final_edge,
(1.0 / (1.0 + (pow(((time-ct2_perturbation_time)/ct2_k_half_hours),ct2_hill_n))))*(ct2_membraneElasticity_edge_init-ct2_membraneElasticity_final_edge) + ct2_membraneElasticity_final_edge,
if(time <= ct2_perturbation_time,ct2_membraneElasticity_edge_init,ct2_membraneElasticity_final_edge)
))
if(time < burn_in_time,ct2_area_init,
if( (ct2_area_init < ct2_area_final)
and ct2_area < ct2_area_final,
ct2_area_init + (ct2_area_final-ct2_area_init)*
((time-ct2_perturbation_time)/96),
ct2_area_final)
)
if(time < burn_in_time,ct2_area_edge_init,
if( (ct2_area_edge_init < ct2_area_edge_final)
and ct2_area_edge < ct2_area_edge_final,
ct2_area_edge_init +
(ct2_area_edge_final-ct2_area_edge_init)*
((time-ct2_perturbation_time)/96),
ct2_area_edge_final)
)
if(time < burn_in_time, ct2_generation_time_init,
if(time > ct2_perturbation_time,
(1.0 / (1.0 + (pow(((time-ct2_perturbation_time)/ct2_k_half_hours),ct2_hill_n))))* (ct2_generation_time_init-ct2_generation_time_final) + ct2_generation_time_final,
if(time <= ct2_perturbation_time,ct2_generation_time_init,ct2_generation_time_final)
))
if(time < burn_in_time, ct2_membrane_str_init,
if(time > ct2_perturbation_time
and ct2_membrane_str >= ct2_membrane_str_init
and ct2_membrane_str <= ct2_membrane_str_final,
(1.0 / (1.0 + (pow(((time-ct2_perturbation_time)/ct1_k_half_hours),ct2_hill_n))))* (ct2_membrane_str_init-ct2_membrane_str_final) + ct2_membrane_str_final,
if(time <= ct2_perturbation_time,ct2_membrane_str_init,ct2_membrane_str_final)
))
max(ct1_adhesion,ct2_adhesion)
4
dc >= dt
0
dc+1
if(isEdgeCell > 0,
ct1_membraneElasticity_edge,
ct1_membraneElasticity)
dc >= dt
0
dc+1
if(isEdgeCell > 0,ct2_area_edge,ct2_area)
if(isEdgeCell > 0,ct2_membraneElasticity_edge,ct2_membraneElasticity)
4
1
rand_uni(0,dt)
rand_uni(0,dt)