1. Rod-Shaped Bacteria | (3 slides) |
2. Mathematical Model | (9 slides) |
3. Computational Algorithms | (5 slides) |
4. Parameter Estimation | (3 slides) |
5. Outlook | (2 slide) |
⇒ Anisotropic Mechanical Stress-Driven Differential Growth of Cell Walls
ABM/Paper | State |
---|---|
Biocellion | Only cylindrical potentials |
BSim | Supports Rod-Shaped Bacteria; No parameters estimated. |
gro |
⎯⎯⎯ " ⎯⎯⎯ |
(Martins et al., 2015) | Constructed model but no parameter estimations. |
(Winkle et al., 2017) | Authors used game engine Chipmunk3D to simulaterods but only studied global phenomena. |
(Doumic et al, 2020) | Estimated distribution of some parameters (growth rate, length) but no bending and not on individual level. |
⇒ No literature on measuring properties of individual cells!
ci=xi−xi−1 Fi,springs=−γ(1−∣ci∣l)ci+γ(1−∣ci+1∣l)ci+1
κiFi,curvatureFi−1,curvatureFi+1,curvature=2tan(2αi)=ηκi∣ci−ci+1∣ci−ci+1=−21Fi,curvature=−21Fi,curvature
Fi,total=Fi,springs+Fi,curvature+Fi,external
∂t2x∂tx=∂tx+2Dξ=Ftotal−λ∂tx
∂tl=μ
∂tl=μ(1−Nmin(n,N))
p=hwj+(1−h)wj+1
for (i, vi) in vertices_cell_1.iter().enumerate() {
// Calculate nearest point, index and segment as above
let (p, j, h) = get_nearest_point_index_segment(&vi, &cell2)?;
// Calculate force between these two points
let calculated_force = cell1.calculate_force_between(&p)?;
// Store calculated force for cell1 and cell2
forces_cell_1[i] += calculated_force;
forces_cell_2[j] -= h * calculated_force;
forces_cell_2[j] -= (1-h) * calculated_force;
}
V(r)=V0(1−e−λ(r−R))2
Name | Type | ||
---|---|---|---|
R | Radius | f32 ∈R+ |
Fit |
λ | Stiffness | f32 ∈R+ |
Fit |
ζ | Cutoff | f32 ∈R+ |
Assumption |
V0 | Strength | f32 ∈R+ |
Fit |
U(r)=Cϵ[(rσ)n−(rσ)m]
C=n−mn(mn)n−mn
Name | Type | ||
---|---|---|---|
R | Radius | f32 ∈R+ |
Fit |
ϵ | Strength | f32 ∈R+ |
Fit |
β | Bound | f32 ∈R+ |
Assumption |
ζ | Cutoff | f32 ∈R+ |
Assumption |
n,m | Exponents | f32 ∈R+ |
Fit |
#[derive(CellAgent, Clone, Debug, Deserialize, Serialize)] pub struct RodAgent { /// Determines mechanical properties of the agent #[Mechanics] pub mechanics: RodMechanics<f32, 3>, /// Determines interaction between agents #[Interaction] pub interaction: RodInteraction<PhysicalInteraction>, /// Rate with which the cell grows pub growth_rate: f32, /// Threshold at which the cell will divide pub division_length: f32, }
#[derive(CellAgent, Clone, Debug, Deserialize, Serialize)] pub struct RodAgent { /// Determines mechanical properties of the agent #[Mechanics] pub mechanics: RodMechanics<f32, 3>, /// Determines interaction between agents #[Interaction] pub interaction: RodInteraction<PhysicalInteraction>, /// Rate with which the cell grows pub growth_rate: f32, /// Threshold at which the cell will divide pub division_length: f32, }
#[derive(CellAgent, Clone, Debug, Deserialize, Serialize)] pub struct RodAgent { /// Determines mechanical properties of the agent #[Mechanics] pub mechanics: RodMechanics<f32, 3>, /// Determines interaction between agents #[Interaction] pub interaction: RodInteraction<PhysicalInteraction>, /// Rate with which the cell grows pub growth_rate: f32, /// Threshold at which the cell will divide pub division_length: f32, }
#[derive(CellAgent, Clone, Debug, Deserialize, Serialize)] pub struct RodAgent { /// Determines mechanical properties of the agent #[Mechanics] pub mechanics: RodMechanics<f32, 3>, /// Determines interaction between agents #[Interaction] pub interaction: RodInteraction<PhysicalInteraction>, /// Rate with which the cell grows pub growth_rate: f32, /// Threshold at which the cell will divide pub division_length: f32, }
#[derive(CellAgent, Clone, Debug, Deserialize, Serialize)] pub struct RodAgent { /// Determines mechanical properties of the agent #[Mechanics] pub mechanics: RodMechanics<f32, 3>, /// Determines interaction between agents #[Interaction] pub interaction: RodInteraction<PhysicalInteraction>, /// Rate with which the cell grows pub growth_rate: f32, /// Threshold at which the cell will divide pub division_length: f32, }
#[derive(Clone, Debug, PartialEq)] pub struct RodMechanics<f32, 3> { /// The current position pub pos: Matrix<f32, Dyn, Const<3>, _>, /// The current velocity pub vel: Matrix<f32, Dyn, Const<3>, _>, /// Controls stochastic motion pub diffusion_constant: f32, /// Spring tension between vertices pub spring_tension: f32, /// Stiffness between two edges pub rigidity: f32, /// Target spring length pub spring_length: f32, /// Daming constant pub damping: f32, }
#[derive(Clone, Debug, PartialEq)] pub struct RodMechanics<f32, 3> { /// The current position pub pos: Matrix<f32, Dyn, Const<3>, _>, /// The current velocity pub vel: Matrix<f32, Dyn, Const<3>, _>, /// Controls stochastic motion pub diffusion_constant: f32, /// Spring tension between vertices pub spring_tension: f32, /// Stiffness between two edges pub rigidity: f32, /// Target spring length pub spring_length: f32, /// Daming constant pub damping: f32, }
#[derive(Clone, Debug, PartialEq)] pub struct RodMechanics<f32, 3> { /// The current position pub pos: Matrix<f32, Dyn, Const<3>, _>, /// The current velocity pub vel: Matrix<f32, Dyn, Const<3>, _>, /// Controls stochastic motion pub diffusion_constant: f32, /// Spring tension between vertices pub spring_tension: f32, /// Stiffness between two edges pub rigidity: f32, /// Target spring length pub spring_length: f32, /// Daming constant pub damping: f32, }
#[derive(Clone, Debug, PartialEq)] pub struct RodMechanics<f32, 3> { /// The current position pub pos: Matrix<f32, Dyn, Const<3>, _>, /// The current velocity pub vel: Matrix<f32, Dyn, Const<3>, _>, /// Controls stochastic motion pub diffusion_constant: f32, /// Spring tension between vertices pub spring_tension: f32, /// Stiffness between two edges pub rigidity: f32, /// Target spring length pub spring_length: f32, /// Daming constant pub damping: f32, }
Property | Type | ||
---|---|---|---|
μ | Growth Rate | f32 ∈R+ |
Fit |
lmax | Division Length | f32 ∈R+ |
Fit |
xi | Position | Matrix ∈Rd×3 |
I.V. |
vi | Velocity | Matrix ∈Rd×3 |
I.V. |
- | Diffusion | f32 ∈R+ |
0 |
l | Spr. Length | f32 ∈R+ |
I.V. |
γ | Spr. Tension | f32 ∈R+ |
Fit |
η | Rigidity | f32 ∈R+ |
Fit |
λ | Damping | f32 ∈R+ |
Fit |
We need methods to map between images
and our numerical simulation
Microscopic Image
Cell Masks
Skeletonization
⇒ Physically-Based Rendering!
⇒ this could be due to the MorsePotentialF32
interaction
potential
pip install cr_mech_coli
import cr_mech_coli as crm # Configure inputs config = crm.Configuration() agent_settings = crm.AgentSettings() # Run simulation cell_container = crm.run_simulation( config, agent_settings, ) # Render Images render_settings = crm.RenderSettings() crm.store_all_images( cell_container, config.domain_size, render_settings )
import cr_mech_coli as crm # Configure inputs config = crm.Configuration() agent_settings = crm.AgentSettings() # Run simulation cell_container = crm.run_simulation( config, agent_settings, ) # Render Images render_settings = crm.RenderSettings() crm.store_all_images( cell_container, config.domain_size, render_settings )
import cr_mech_coli as crm # Configure inputs config = crm.Configuration() agent_settings = crm.AgentSettings() # Run simulation cell_container = crm.run_simulation( config, agent_settings, ) # Render Images render_settings = crm.RenderSettings() crm.store_all_images( cell_container, config.domain_size, render_settings )
import cr_mech_coli as crm # Configure inputs config = crm.Configuration() agent_settings = crm.AgentSettings() # Run simulation cell_container = crm.run_simulation( config, agent_settings, ) # Render Images render_settings = crm.RenderSettings() crm.store_all_images( cell_container, config.domain_size, render_settings )
import cr_mech_coli as crm # Configure inputs config = crm.Configuration() agent_settings = crm.AgentSettings() # Run simulation cell_container = crm.run_simulation( config, agent_settings, ) # Render Images render_settings = crm.RenderSettings() crm.store_all_images( cell_container, config.domain_size, render_settings )
We are meeting up with Alexander Rohrbach
this week to discuss how to take things further.