using MEDYAN
using MEDYANVis
using CairoMakie
using Random
using SmallZarrGroups
using StaticArrays
using LinearAlgebra
Random.seed!(1234);3. Actin Treadmilling
3. Actin Treadmilling
Using reactions and rates from
This example doesn’t have any of the actin binding proteins, or filament severing or annealing.
Setup
Open a julia REPL or jupyter notebook using the medyan-tutorial environment you created in tutorial 1.
Load MEDYAN with MeshCat for visualization
Defining the System
The first step is constructing a MEDYAN.SysDef object, then mutating it to add species, filament types, reactions, and callbacks.
s = MEDYAN.SysDef()MEDYAN.SysDef
Add diffusing species with their diffusion coefficients. All units are based on nm, s, pN.
DGActin = 5E6 # nm²/s
add_diffusing_species!(s, :GA; coeff=DGActin) # G-Actin with no bound nucleotide
add_diffusing_species!(s, :GAD; coeff=DGActin) # G-Actin in the ADP form
add_diffusing_species!(s, :GADPi; coeff=DGActin) # G-Actin in the ADP Pi form
add_diffusing_species!(s, :GAT; coeff=DGActin) # G-Actin in the ATP formMEDYAN.SysDef
Diffusing species:
:GA: 5.0e6 nm²/s
:GAD: 5.0e6 nm²/s
:GADPi: 5.0e6 nm²/s
:GAT: 5.0e6 nm²/s
Add the actin filament type with its monomer states and mechanical parameters.
add_fila_type!(s;
name=:actin,
mono_states=[
# Monomer states
:FAD, # F-Actin in the ADP form
:FADPi, # F-Actin in the ADP Pi form
:FAT, # F-Actin in the ATP form
:BarbedD, # Barbed end in the ADP form
:BarbedDPi, # Barbed end in the ADP Pi form
:BarbedT, # Barbed end in the ATP form
:PointedD, # Pointed end in the ADP form
:PointedDPi, # Pointed end in the ADP Pi form
:PointedT, # Pointed end in the ATP form
],
param=MEDYAN.ACTIN_FIL_PARAMS
)MEDYAN.SysDef
Diffusing species:
:GA: 5.0e6 nm²/s
:GAD: 5.0e6 nm²/s
:GADPi: 5.0e6 nm²/s
:GAT: 5.0e6 nm²/s
Filaments:
:actin:
monomer states: [:FAD, :FADPi, :FAT, :BarbedD, :BarbedDPi, :BarbedT, :PointedD, :PointedDPi, :PointedT]
params: MEDYAN.FilamentMechParams(3.0, 2.7, 4000.0, 26880.0, NaN, NaN, 40, 1666.6666666666667, 1)
Add reactions between diffusing species. These represent G-Actin interacting with ATP ADP and Pi.
# Assume ATP, Pi, and ADP concentrations are fixed
ATP = 10000.0 * MEDYAN.μM⁻¹_per_nm³
Pi = 2000.0 * MEDYAN.μM⁻¹_per_nm³
ADP = 2000.0 * MEDYAN.μM⁻¹_per_nm³
KfGATPoint = 1.3/MEDYAN.μM⁻¹_per_nm³
KrGATPoint = 0.8
KfGADPoint = 0.16/MEDYAN.μM⁻¹_per_nm³
KrGADPoint = 0.3
KfGATBarb = 10.0/MEDYAN.μM⁻¹_per_nm³
KrGATBarb = 1.0
KfGADBarb = 2.5/MEDYAN.μM⁻¹_per_nm³
KrGADBarb = 4.25
KfPiRelease = 0.0026
KrPiRelease = 5.20E-6/MEDYAN.μM⁻¹_per_nm³
# 100
addreaction!(s,
"diffusing.GADPi --> diffusing.GAD",
0.0312,
0,
)
addreaction!(s,
"diffusing.GAD --> diffusing.GADPi",
KrPiRelease*Pi,
0,
)
# 104
addreaction!(s,
"diffusing.GA --> diffusing.GAT",
1.7/MEDYAN.μM⁻¹_per_nm³*ATP,
0,
)
addreaction!(s,
"diffusing.GAT --> diffusing.GA",
0.011,
0,
)
# 109
addreaction!(s,
"diffusing.GA --> diffusing.GAD",
0.9/MEDYAN.μM⁻¹_per_nm³*ADP,
0,
)
addreaction!(s,
"diffusing.GAD --> diffusing.GA",
0.071,
0,
)MEDYAN.SysDef
Diffusing species:
:GA: 5.0e6 nm²/s
:GAD: 5.0e6 nm²/s
:GADPi: 5.0e6 nm²/s
:GAT: 5.0e6 nm²/s
Filaments:
:actin:
monomer states: [:FAD, :FADPi, :FAT, :BarbedD, :BarbedDPi, :BarbedT, :PointedD, :PointedDPi, :PointedT]
params: MEDYAN.FilamentMechParams(3.0, 2.7, 4000.0, 26880.0, NaN, NaN, 40, 1666.6666666666667, 1)
Chem voxel reactions without callbacks:
"diffusing.GADPi --> diffusing.GAD" 0.0312 1/s
"diffusing.GAD --> diffusing.GADPi" 0.0104 1/s
"diffusing.GA --> diffusing.GAT" 17000.0 1/s
"diffusing.GAT --> diffusing.GA" 0.011 1/s
"diffusing.GA --> diffusing.GAD" 1799.9999999999998 1/s
"diffusing.GAD --> diffusing.GA" 0.071 1/s
Next add filament reactions.
The barbed end is the plus end and the pointed end is the minus end.
monomerspacing=2.7 # nm
nucleotide_states = ("T", "DPi", "D")
# Barbed end polymerization and depolymerization
barbed_rates = [
("T", KfGATBarb, KrGATBarb),
("DPi", KfGATBarb, KrGATBarb),
("D", KfGADBarb, KrGADBarb),
]
for (new_nuc, forward_rate, reverse_rate) in barbed_rates
for base_nuc in nucleotide_states
addfilamentend_reaction!(s,
:actin,
Symbol("f", "GA", new_nuc, "_to_Barbed", base_nuc),
false,
[Symbol("Barbed", base_nuc)]=>[Symbol("FA", base_nuc), Symbol("Barbed", new_nuc)],
monomerspacing,
"diffusing.GA"*new_nuc*" -->",
forward_rate,
1,
)
addfilamentend_reaction!(s,
:actin,
Symbol("r", "GA", new_nuc, "_to_Barbed", base_nuc),
false,
[Symbol("FA", base_nuc), Symbol("Barbed", new_nuc)]=>[Symbol("Barbed", base_nuc)],
0.0,
"--> diffusing.GA"*new_nuc,
reverse_rate,
0,
)
end
end
# Pointed end polymerization and depolymerization
pointed_rates = [
("T", KfGATPoint, KrGATPoint),
("DPi", KfGATPoint, KrGATPoint),
("D", KfGADPoint, KrGADPoint),
]
for (new_nuc, forward_rate, reverse_rate) in pointed_rates
for base_nuc in nucleotide_states
addfilamentend_reaction!(s,
:actin,
Symbol("f", "GA", new_nuc, "_to_Pointed", base_nuc),
true,
[Symbol("Pointed", base_nuc)]=>[Symbol("Pointed", new_nuc), Symbol("FA", base_nuc)],
monomerspacing,
"diffusing.GA"*new_nuc*" -->",
forward_rate,
1,
)
addfilamentend_reaction!(s,
:actin,
Symbol("r", "GA", new_nuc, "_to_Pointed", base_nuc),
true,
[Symbol("Pointed", new_nuc), Symbol("FA", base_nuc)]=>[Symbol("Pointed", base_nuc)],
0.0,
"--> diffusing.GA"*new_nuc,
reverse_rate,
0,
)
end
end
# Filament ATP hydrolysis and Pi Dissociation
for monomer_state in ("FA", "Barbed", "Pointed")
addfilament_reaction!(s,
:actin,
Symbol(monomer_state, "T_to_", monomer_state, "DPi"),
[Symbol(monomer_state, "T")]=>[Symbol(monomer_state, "DPi")],
1,
"-->",
0.3,
0,
)
addfilament_reaction!(s,
:actin,
Symbol(monomer_state, "DPi_to_", monomer_state, "D"),
[Symbol(monomer_state, "DPi")]=>[Symbol(monomer_state, "D")],
1,
"-->",
KfPiRelease,
0,
)
addfilament_reaction!(s,
:actin,
Symbol(monomer_state, "D_to_", monomer_state, "DPi"),
[Symbol(monomer_state, "D")]=>[Symbol(monomer_state, "DPi")],
1,
"-->",
KrPiRelease*Pi,
0,
)
end
sMEDYAN.SysDef
Diffusing species:
:GA: 5.0e6 nm²/s
:GAD: 5.0e6 nm²/s
:GADPi: 5.0e6 nm²/s
:GAT: 5.0e6 nm²/s
Filaments:
:actin:
monomer states: [:FAD, :FADPi, :FAT, :BarbedD, :BarbedDPi, :BarbedT, :PointedD, :PointedDPi, :PointedT]
params: MEDYAN.FilamentMechParams(3.0, 2.7, 4000.0, 26880.0, NaN, NaN, 40, 1666.6666666666667, 1)
filament sites:
:FAT_to_FADPi: match=[:FAT]
:FADPi_to_FAD: match=[:FADPi]
:FAD_to_FADPi: match=[:FAD]
:BarbedT_to_BarbedDPi: match=[:BarbedT]
:BarbedDPi_to_BarbedD: match=[:BarbedDPi]
:BarbedD_to_BarbedDPi: match=[:BarbedD]
:PointedT_to_PointedDPi: match=[:PointedT]
:PointedDPi_to_PointedD: match=[:PointedDPi]
:PointedD_to_PointedDPi: match=[:PointedD]
filament end sites:
:fGAT_to_BarbedT: + end, match=[:BarbedT], spacing=2.7 nm, added_monomers=1
:rGAT_to_BarbedT: + end, match=[:FAT, :BarbedT]
:fGAT_to_BarbedDPi: + end, match=[:BarbedDPi], spacing=2.7 nm, added_monomers=1
:rGAT_to_BarbedDPi: + end, match=[:FADPi, :BarbedT]
:fGAT_to_BarbedD: + end, match=[:BarbedD], spacing=2.7 nm, added_monomers=1
:rGAT_to_BarbedD: + end, match=[:FAD, :BarbedT]
:fGADPi_to_BarbedT: + end, match=[:BarbedT], spacing=2.7 nm, added_monomers=1
:rGADPi_to_BarbedT: + end, match=[:FAT, :BarbedDPi]
:fGADPi_to_BarbedDPi: + end, match=[:BarbedDPi], spacing=2.7 nm, added_monomers=1
:rGADPi_to_BarbedDPi: + end, match=[:FADPi, :BarbedDPi]
:fGADPi_to_BarbedD: + end, match=[:BarbedD], spacing=2.7 nm, added_monomers=1
:rGADPi_to_BarbedD: + end, match=[:FAD, :BarbedDPi]
:fGAD_to_BarbedT: + end, match=[:BarbedT], spacing=2.7 nm, added_monomers=1
:rGAD_to_BarbedT: + end, match=[:FAT, :BarbedD]
:fGAD_to_BarbedDPi: + end, match=[:BarbedDPi], spacing=2.7 nm, added_monomers=1
:rGAD_to_BarbedDPi: + end, match=[:FADPi, :BarbedD]
:fGAD_to_BarbedD: + end, match=[:BarbedD], spacing=2.7 nm, added_monomers=1
:rGAD_to_BarbedD: + end, match=[:FAD, :BarbedD]
:fGAT_to_PointedT: - end, match=[:PointedT], spacing=2.7 nm, added_monomers=1
:rGAT_to_PointedT: - end, match=[:PointedT, :FAT]
:fGAT_to_PointedDPi: - end, match=[:PointedDPi], spacing=2.7 nm, added_monomers=1
:rGAT_to_PointedDPi: - end, match=[:PointedT, :FADPi]
:fGAT_to_PointedD: - end, match=[:PointedD], spacing=2.7 nm, added_monomers=1
:rGAT_to_PointedD: - end, match=[:PointedT, :FAD]
:fGADPi_to_PointedT: - end, match=[:PointedT], spacing=2.7 nm, added_monomers=1
:rGADPi_to_PointedT: - end, match=[:PointedDPi, :FAT]
:fGADPi_to_PointedDPi: - end, match=[:PointedDPi], spacing=2.7 nm, added_monomers=1
:rGADPi_to_PointedDPi: - end, match=[:PointedDPi, :FADPi]
:fGADPi_to_PointedD: - end, match=[:PointedD], spacing=2.7 nm, added_monomers=1
:rGADPi_to_PointedD: - end, match=[:PointedDPi, :FAD]
:fGAD_to_PointedT: - end, match=[:PointedT], spacing=2.7 nm, added_monomers=1
:rGAD_to_PointedT: - end, match=[:PointedD, :FAT]
:fGAD_to_PointedDPi: - end, match=[:PointedDPi], spacing=2.7 nm, added_monomers=1
:rGAD_to_PointedDPi: - end, match=[:PointedD, :FADPi]
:fGAD_to_PointedD: - end, match=[:PointedD], spacing=2.7 nm, added_monomers=1
:rGAD_to_PointedD: - end, match=[:PointedD, :FAD]
Chem voxel reactions with callbacks:
1. "filamentsite.actin.PointedD_to_PointedDPi --> filamentsite.actin.PointedD_to_PointedDPi" 0.0104 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:PointedD_to_PointedDPi, center=1, new_states=[:PointedDPi])
2. "filamentsite.actin.PointedDPi_to_PointedD --> filamentsite.actin.PointedDPi_to_PointedD" 0.0026 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:PointedDPi_to_PointedD, center=1, new_states=[:PointedD])
3. "filamentsite.actin.PointedT_to_PointedDPi --> filamentsite.actin.PointedT_to_PointedDPi" 0.3 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:PointedT_to_PointedDPi, center=1, new_states=[:PointedDPi])
4. "filamentsite.actin.BarbedD_to_BarbedDPi --> filamentsite.actin.BarbedD_to_BarbedDPi" 0.0104 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:BarbedD_to_BarbedDPi, center=1, new_states=[:BarbedDPi])
5. "filamentsite.actin.BarbedDPi_to_BarbedD --> filamentsite.actin.BarbedDPi_to_BarbedD" 0.0026 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:BarbedDPi_to_BarbedD, center=1, new_states=[:BarbedD])
6. "filamentsite.actin.BarbedT_to_BarbedDPi --> filamentsite.actin.BarbedT_to_BarbedDPi" 0.3 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:BarbedT_to_BarbedDPi, center=1, new_states=[:BarbedDPi])
7. "filamentsite.actin.FAD_to_FADPi --> filamentsite.actin.FAD_to_FADPi" 0.0104 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:FAD_to_FADPi, center=1, new_states=[:FADPi])
8. "filamentsite.actin.FADPi_to_FAD --> filamentsite.actin.FADPi_to_FAD" 0.0026 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:FADPi_to_FAD, center=1, new_states=[:FAD])
9. "filamentsite.actin.FAT_to_FADPi --> filamentsite.actin.FAT_to_FADPi" 0.3 1/s
GeneralFilamentSiteCallback(fila=:actin, site=:FAT_to_FADPi, center=1, new_states=[:FADPi])
10. "filamentendsite.actin.rGAD_to_PointedD --> filamentendsite.actin.rGAD_to_PointedD" 0.3 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAD_to_PointedD, depolymerize=1, new_states=[:PointedD], diffusing_net_stoich=[:GAD => 1])
11. "diffusing.GAD + filamentendsite.actin.fGAD_to_PointedD --> diffusing.GAD + filamentendsite.actin.fGAD_to_PointedD" 265686.2507478155 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAD_to_PointedD, polymerize=1, new_states=[:PointedD, :FAD], diffusing_net_stoich=[:GAD => -1])
12. "filamentendsite.actin.rGAD_to_PointedDPi --> filamentendsite.actin.rGAD_to_PointedDPi" 0.3 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAD_to_PointedDPi, depolymerize=1, new_states=[:PointedDPi], diffusing_net_stoich=[:GAD => 1])
13. "diffusing.GAD + filamentendsite.actin.fGAD_to_PointedDPi --> diffusing.GAD + filamentendsite.actin.fGAD_to_PointedDPi" 265686.2507478155 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAD_to_PointedDPi, polymerize=1, new_states=[:PointedD, :FADPi], diffusing_net_stoich=[:GAD => -1])
14. "filamentendsite.actin.rGAD_to_PointedT --> filamentendsite.actin.rGAD_to_PointedT" 0.3 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAD_to_PointedT, depolymerize=1, new_states=[:PointedT], diffusing_net_stoich=[:GAD => 1])
15. "diffusing.GAD + filamentendsite.actin.fGAD_to_PointedT --> diffusing.GAD + filamentendsite.actin.fGAD_to_PointedT" 265686.2507478155 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAD_to_PointedT, polymerize=1, new_states=[:PointedD, :FAT], diffusing_net_stoich=[:GAD => -1])
16. "filamentendsite.actin.rGADPi_to_PointedD --> filamentendsite.actin.rGADPi_to_PointedD" 0.8 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGADPi_to_PointedD, depolymerize=1, new_states=[:PointedD], diffusing_net_stoich=[:GADPi => 1])
17. "diffusing.GADPi + filamentendsite.actin.fGADPi_to_PointedD --> diffusing.GADPi + filamentendsite.actin.fGADPi_to_PointedD" 2.158700787326001e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGADPi_to_PointedD, polymerize=1, new_states=[:PointedDPi, :FAD], diffusing_net_stoich=[:GADPi => -1])
18. "filamentendsite.actin.rGADPi_to_PointedDPi --> filamentendsite.actin.rGADPi_to_PointedDPi" 0.8 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGADPi_to_PointedDPi, depolymerize=1, new_states=[:PointedDPi], diffusing_net_stoich=[:GADPi => 1])
19. "diffusing.GADPi + filamentendsite.actin.fGADPi_to_PointedDPi --> diffusing.GADPi + filamentendsite.actin.fGADPi_to_PointedDPi" 2.158700787326001e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGADPi_to_PointedDPi, polymerize=1, new_states=[:PointedDPi, :FADPi], diffusing_net_stoich=[:GADPi => -1])
20. "filamentendsite.actin.rGADPi_to_PointedT --> filamentendsite.actin.rGADPi_to_PointedT" 0.8 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGADPi_to_PointedT, depolymerize=1, new_states=[:PointedT], diffusing_net_stoich=[:GADPi => 1])
21. "diffusing.GADPi + filamentendsite.actin.fGADPi_to_PointedT --> diffusing.GADPi + filamentendsite.actin.fGADPi_to_PointedT" 2.158700787326001e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGADPi_to_PointedT, polymerize=1, new_states=[:PointedDPi, :FAT], diffusing_net_stoich=[:GADPi => -1])
22. "filamentendsite.actin.rGAT_to_PointedD --> filamentendsite.actin.rGAT_to_PointedD" 0.8 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAT_to_PointedD, depolymerize=1, new_states=[:PointedD], diffusing_net_stoich=[:GAT => 1])
23. "diffusing.GAT + filamentendsite.actin.fGAT_to_PointedD --> diffusing.GAT + filamentendsite.actin.fGAT_to_PointedD" 2.158700787326001e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAT_to_PointedD, polymerize=1, new_states=[:PointedT, :FAD], diffusing_net_stoich=[:GAT => -1])
24. "filamentendsite.actin.rGAT_to_PointedDPi --> filamentendsite.actin.rGAT_to_PointedDPi" 0.8 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAT_to_PointedDPi, depolymerize=1, new_states=[:PointedDPi], diffusing_net_stoich=[:GAT => 1])
25. "diffusing.GAT + filamentendsite.actin.fGAT_to_PointedDPi --> diffusing.GAT + filamentendsite.actin.fGAT_to_PointedDPi" 2.158700787326001e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAT_to_PointedDPi, polymerize=1, new_states=[:PointedT, :FADPi], diffusing_net_stoich=[:GAT => -1])
26. "filamentendsite.actin.rGAT_to_PointedT --> filamentendsite.actin.rGAT_to_PointedT" 0.8 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAT_to_PointedT, depolymerize=1, new_states=[:PointedT], diffusing_net_stoich=[:GAT => 1])
27. "diffusing.GAT + filamentendsite.actin.fGAT_to_PointedT --> diffusing.GAT + filamentendsite.actin.fGAT_to_PointedT" 2.158700787326001e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAT_to_PointedT, polymerize=1, new_states=[:PointedT, :FAT], diffusing_net_stoich=[:GAT => -1])
28. "filamentendsite.actin.rGAD_to_BarbedD --> filamentendsite.actin.rGAD_to_BarbedD" 4.25 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAD_to_BarbedD, depolymerize=1, new_states=[:BarbedD], diffusing_net_stoich=[:GAD => 1])
29. "diffusing.GAD + filamentendsite.actin.fGAD_to_BarbedD --> diffusing.GAD + filamentendsite.actin.fGAD_to_BarbedD" 4.151347667934617e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAD_to_BarbedD, polymerize=1, new_states=[:FAD, :BarbedD], diffusing_net_stoich=[:GAD => -1])
30. "filamentendsite.actin.rGAD_to_BarbedDPi --> filamentendsite.actin.rGAD_to_BarbedDPi" 4.25 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAD_to_BarbedDPi, depolymerize=1, new_states=[:BarbedDPi], diffusing_net_stoich=[:GAD => 1])
31. "diffusing.GAD + filamentendsite.actin.fGAD_to_BarbedDPi --> diffusing.GAD + filamentendsite.actin.fGAD_to_BarbedDPi" 4.151347667934617e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAD_to_BarbedDPi, polymerize=1, new_states=[:FADPi, :BarbedD], diffusing_net_stoich=[:GAD => -1])
32. "filamentendsite.actin.rGAD_to_BarbedT --> filamentendsite.actin.rGAD_to_BarbedT" 4.25 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAD_to_BarbedT, depolymerize=1, new_states=[:BarbedT], diffusing_net_stoich=[:GAD => 1])
33. "diffusing.GAD + filamentendsite.actin.fGAD_to_BarbedT --> diffusing.GAD + filamentendsite.actin.fGAD_to_BarbedT" 4.151347667934617e6 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAD_to_BarbedT, polymerize=1, new_states=[:FAT, :BarbedD], diffusing_net_stoich=[:GAD => -1])
34. "filamentendsite.actin.rGADPi_to_BarbedD --> filamentendsite.actin.rGADPi_to_BarbedD" 1.0 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGADPi_to_BarbedD, depolymerize=1, new_states=[:BarbedD], diffusing_net_stoich=[:GADPi => 1])
35. "diffusing.GADPi + filamentendsite.actin.fGADPi_to_BarbedD --> diffusing.GADPi + filamentendsite.actin.fGADPi_to_BarbedD" 1.6605390671738468e7 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGADPi_to_BarbedD, polymerize=1, new_states=[:FAD, :BarbedDPi], diffusing_net_stoich=[:GADPi => -1])
36. "filamentendsite.actin.rGADPi_to_BarbedDPi --> filamentendsite.actin.rGADPi_to_BarbedDPi" 1.0 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGADPi_to_BarbedDPi, depolymerize=1, new_states=[:BarbedDPi], diffusing_net_stoich=[:GADPi => 1])
37. "diffusing.GADPi + filamentendsite.actin.fGADPi_to_BarbedDPi --> diffusing.GADPi + filamentendsite.actin.fGADPi_to_BarbedDPi" 1.6605390671738468e7 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGADPi_to_BarbedDPi, polymerize=1, new_states=[:FADPi, :BarbedDPi], diffusing_net_stoich=[:GADPi => -1])
38. "filamentendsite.actin.rGADPi_to_BarbedT --> filamentendsite.actin.rGADPi_to_BarbedT" 1.0 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGADPi_to_BarbedT, depolymerize=1, new_states=[:BarbedT], diffusing_net_stoich=[:GADPi => 1])
39. "diffusing.GADPi + filamentendsite.actin.fGADPi_to_BarbedT --> diffusing.GADPi + filamentendsite.actin.fGADPi_to_BarbedT" 1.6605390671738468e7 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGADPi_to_BarbedT, polymerize=1, new_states=[:FAT, :BarbedDPi], diffusing_net_stoich=[:GADPi => -1])
40. "filamentendsite.actin.rGAT_to_BarbedD --> filamentendsite.actin.rGAT_to_BarbedD" 1.0 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAT_to_BarbedD, depolymerize=1, new_states=[:BarbedD], diffusing_net_stoich=[:GAT => 1])
41. "diffusing.GAT + filamentendsite.actin.fGAT_to_BarbedD --> diffusing.GAT + filamentendsite.actin.fGAT_to_BarbedD" 1.6605390671738468e7 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAT_to_BarbedD, polymerize=1, new_states=[:FAD, :BarbedT], diffusing_net_stoich=[:GAT => -1])
42. "filamentendsite.actin.rGAT_to_BarbedDPi --> filamentendsite.actin.rGAT_to_BarbedDPi" 1.0 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAT_to_BarbedDPi, depolymerize=1, new_states=[:BarbedDPi], diffusing_net_stoich=[:GAT => 1])
43. "diffusing.GAT + filamentendsite.actin.fGAT_to_BarbedDPi --> diffusing.GAT + filamentendsite.actin.fGAT_to_BarbedDPi" 1.6605390671738468e7 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAT_to_BarbedDPi, polymerize=1, new_states=[:FADPi, :BarbedT], diffusing_net_stoich=[:GAT => -1])
44. "filamentendsite.actin.rGAT_to_BarbedT --> filamentendsite.actin.rGAT_to_BarbedT" 1.0 1/s
GeneralFilamentEndCallback(fila=:actin, site=:rGAT_to_BarbedT, depolymerize=1, new_states=[:BarbedT], diffusing_net_stoich=[:GAT => 1])
45. "diffusing.GAT + filamentendsite.actin.fGAT_to_BarbedT --> diffusing.GAT + filamentendsite.actin.fGAT_to_BarbedT" 1.6605390671738468e7 nm³/s
GeneralFilamentEndCallback(fila=:actin, site=:fGAT_to_BarbedT, polymerize=1, new_states=[:FAT, :BarbedT], diffusing_net_stoich=[:GAT => -1])
Chem voxel reactions without callbacks:
"diffusing.GADPi --> diffusing.GAD" 0.0312 1/s
"diffusing.GAD --> diffusing.GADPi" 0.0104 1/s
"diffusing.GA --> diffusing.GAT" 17000.0 1/s
"diffusing.GAT --> diffusing.GA" 0.011 1/s
"diffusing.GA --> diffusing.GAD" 1799.9999999999998 1/s
"diffusing.GAD --> diffusing.GA" 0.071 1/s
Creating a grid
Create a 1 by 1 by 3 grid of 500 nm side length voxels.
L = 3
grid = CubicGrid((1,1,L),500.0)CubicGrid([1, 1, 3], 500.0)
Creating a Context
The Context is the object the handles the state of a running simulation.
Create a Context using s and grid
c = MEDYAN.Context(s, grid)MEDYAN.Context at time 0.0s in MEDYAN.CubicGrid([1, 1, 3], 500.0)
Add Mechanical Boundary
set_mechboundary!(c, MEDYAN.boundary_box(grid; stiffness=100.0))MEDYAN.Boundary(SVector{4, Float64}[[-10.0, 0.0, 0.0, 2500.0], [10.0, 0.0, 0.0, 2500.0], [0.0, -10.0, 0.0, 2500.0], [0.0, 10.0, 0.0, 2500.0], [0.0, 0.0, -10.0, 7500.0], [0.0, 0.0, 10.0, 7500.0]], SVector{8, Float64}[])
Add agents to the context
The context starts empty.
Distribute 700 of GAT randomly to the chem voxels by mutating the context.
adddiffusingcount_rand!(c, s.diffusing.GAT, 700)Add a single short filament by mutating the context.
mono_states = [s.state.actin.PointedD, s.state.actin.FADPi, s.state.actin.FAT, s.state.actin.BarbedT]
node_positions = [
SA[0.0,0.0,0.0],
SA[0.0,0.0,monomerspacing*length(mono_states)]
]
make_fila!(c; type=:actin, mono_states, node_positions, node_mids=[1,])MEDYAN.Tag{FilaTipIdx}(0x00000002, 0x00000001)
Run chemistry
Run chemistry for 1.0s and visualize the results.
vis = Visualizer()
setvisible!(vis["/Grid"], false)
setvisible!(vis["/Axes"], false)
setvisible!(vis["/Background"], false)If you open the visualizer in a browser and run the following you should get an animated version of below.
for i in 1:100
run_chemistry!(c, 0.01)
minimize_energy!(c)
draw_context!(vis, c, s)
end