y_petri 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,217 @@
1
+ #encoding: utf-8
2
+
3
+ require 'y_petri'
4
+ include YPetri
5
+ require 'sy'
6
+ require 'mathn'
7
+
8
+ # === General assumptions
9
+
10
+ Cell_diameter = 10.µm
11
+ Cytoplasm_volume = ( 4 / 3 * Math::PI * ( Cell_diameter / 2 ) ** 3 ).( SY::LitreVolume )
12
+
13
+ # How many molecules per micromolar are there in an average cell.
14
+ Pieces_per_µM = ( 1.µM * Cytoplasm_volume ).in( :unit )
15
+
16
+ # === Simulation settings
17
+
18
+ set_step 60.s.in( :s )
19
+ set_target_time 20.min.in( :s ) # up to 5 days is interesting
20
+ set_sampling 120.s.in( :s )
21
+
22
+ # === Places (all in µM)
23
+
24
+ AMP = Place m!: 82.0 # Traut1994pcp
25
+ ADP = Place m!: 137.0 # Traut1994pcp
26
+ ATP = Place m!: 2102.0 # Traut1994pcp
27
+ UTP = Place m!: 253.0 # Traut1994pcp
28
+ UDP = Place m!: ADP.m / ATP.m * UTP.m
29
+ UMP = Place m!: AMP.m / ATP.m * UTP.m
30
+ GMP = Place m!: 32.0 # Traut1994pcp
31
+
32
+ DeoxyATP = Place m!: 2.4 # Traut1994pcp
33
+ DeoxyADP = Place m!: ADP.m / ATP.m * DeoxyATP.m
34
+ DeoxyAMP = Place m!: AMP.m / ATP.m * DeoxyATP.m
35
+
36
+ DeoxyCytidine = Place m!: 0.7 # Traut1994pcp
37
+ DeoxyCMP = Place m!: 1.9 # Traut1994pcp
38
+ DeoxyCDP = Place m!: 0.1 # Traut1994pcp
39
+ DeoxyCTP = Place m!: 4.5 # Traut1994pcp
40
+
41
+ DeoxyGTP = Place m!: 2.7 # Traut1994pcp
42
+ DeoxyGMP = Place m!: AMP.m / ATP.m * DeoxyATP.m
43
+
44
+ DeoxyUridine = Place m!: 0.6 # Traut1994pcp
45
+ DeoxyUMP = Place m!: 2.70 # Traut1994pcp
46
+ DeoxyUDP = Place m!: 0.5 # Traut1994pcp
47
+ DeoxyUTP = Place m!: 0.7 # Traut1994pcp
48
+
49
+ DeoxyThymidine = Place m!: 0.5 # Traut1994pcp
50
+ DeoxyTMP = Place m!: 0.0 # in situ
51
+ DeoxyTDP = Place m!: 2.4 # Traut1994pcp
52
+ DeoxyTTP = Place m!: 17.0 # Traut1994pcp
53
+
54
+ # === Empirical places (in arbitrary units)
55
+
56
+ A_phase = Place m!: 1 # in situ
57
+ S_phase = Place m!: 1 # in situ
58
+ Cdc20A = Place m!: 0.0 # in situ
59
+
60
+ # === Enzymes
61
+
62
+ # ==== Thymidine kinase, cytoplasmic (TK1)
63
+
64
+ # Molecular weight:
65
+ TK1_m = 24.8.kDa
66
+ TK1_a = 9500.mol.min⁻¹.mg⁻¹
67
+
68
+ # Total unphosphorylated TK1 expressed in <em>monomer molarity</em>.
69
+ TK1 = Place m!: 0 # in situ
70
+
71
+ TK1_4mer_Kd = 0.03 # in situ
72
+ TK1di = Place m!: 0 # TK1 in the dimer form, unphosphorylated
73
+ TK1di_P = Place m!: 0 # in situ; TK1 in the dimer form, phosphorylated
74
+ TK1tetra = Place m!: 0 # TK1 in the tetramer form (phosphorylation prevents 4merization)
75
+
76
+ # Assignment transition keeping TK1_di level based on total TK1 monomer
77
+ Transition name: :TK1_di_ϝ,
78
+ assignment: true,
79
+ domain: TK1,
80
+ codomain: TK1di,
81
+ action: lambda { |monomer| # solution of a quadratic equation for dimer / tetramer balance
82
+ TK1_4mer_Kd / 4 * ( ( 1 + 4 / TK1_4mer_Kd * monomer ) ** 0.5 - 1 )
83
+ }
84
+
85
+ # Assignment transition keeping TK1_tetra level based on total TK1 tetramer
86
+ Transition name: :TK1_tetra_ϝ,
87
+ assignment: true,
88
+ domain: [ TK1, TK1di ],
89
+ codomain: TK1tetra,
90
+ action: lambda { |monomer, dimer| # based on equation monomer = dimer * 2 + tetramer * 4
91
+ monomer / 4 - dimer / 2
92
+ }
93
+
94
+ # Dissociation constants [µM]
95
+
96
+ TK1di_Kd_ATP = 4.7 # Barroso2003tbd
97
+ TK1di_Kd_dT = 15.0 # Eriksson2002sfc
98
+
99
+ # FIXME - THIS IS HOW FAR I CAME
100
+
101
+ # Inhibition constant of dTTP
102
+ TK1di_Kd_dTTP
103
+ # Hill coefficient of TK1 dimer
104
+ TK1di_hill
105
+ # k_cat of TK1 dimer
106
+ TK1_k_cat = ( TK1_a * TK1_m ).( SY::Amount / SY::Time ).in :s⁻¹
107
+ TK1_k_cat = 3.80 #
108
+
109
+
110
+ TYMS_m = 66.0.kDa
111
+ RNR_m = 140.0.kDa
112
+ TMPK_m = 50.0.kDa
113
+
114
+ # === Enzyme specific activities
115
+
116
+ TK1_a = 5.40.µmol.min⁻¹.mg⁻¹
117
+ TYMS_a = 3.80.µmol.min⁻¹.mg⁻¹
118
+ RNR_a = 1.00.µmol.min⁻¹.mg⁻¹
119
+ TMPK_a = 0.83.µmol.min⁻¹.mg⁻¹
120
+
121
+ # === Enzyme kcat
122
+
123
+ TK1_k_cat = ( TK1_a * TK1_m ).( SY::Amount / SY::Time ).in :s⁻¹
124
+ TYMS_k_cat = ( TYMS_a * TYMS_m ).( SY::Amount / SY::Time ).in :s⁻¹
125
+ RNR_k_cat = ( RNR_a * RNR_m ).( SY::Amount / SY::Time ).in :s⁻¹
126
+ TMPK_k_cat = ( TMPK_a * TMPK_m ).( SY::Amount / SY::Time ).in :s⁻¹
127
+
128
+ # === Clamps (all in µM)
129
+
130
+ clamp AMP: 8695.0, ADP: 6521.0, ATP: 3152.0
131
+ clamp DeoxyCytidine: 0.5, DeoxyCTP: 1.0, DeoxyGMP: 1.0
132
+ clamp Thymidine: 0.5
133
+ clamp U12P: 2737.0
134
+
135
+ # === Function closures
136
+
137
+ # Vmax of an enzyme.
138
+ #
139
+ Vmax = -> enzyme_µM, k_cat do enzyme_µM * k_cat end
140
+
141
+ # Michaelis constant reduced for competitive inhibitors.
142
+ #
143
+ Km_reduced = -> reactant_Km, hash_Ki=Hash.new do
144
+ hash_Ki.map { |compet_inhibitor_concentration, compet_inhibitor_Ki|
145
+ compet_inhibitor_concentration / compet_inhibitor_Ki
146
+ }.reduce( 1, :+ ) * reactant_Km
147
+ end
148
+
149
+ # Occupancy fraction of the Michaelis-Menten equation.
150
+ #
151
+ Occupancy = -> reactant_µM, reactant_Km, hash_Ki=Hash.new do
152
+ reactant_µM / ( reactant_µM + Km_reduced.( reactant_Km, hash_Ki ) )
153
+ end
154
+
155
+ # Michaelis-Menten equation with competitive inhibitors.
156
+ #
157
+ MMi = -> reactant_µM, reactant_Km, enzyme_µM, k_cat, hash_Ki=Hash.new do
158
+ Vmax.( enzyme_µM, k_cat ) * Occupancy.( reactant_µM, reactant_Km, hash_Ki )
159
+ end
160
+
161
+ # === Michaelis constants (all in µM)
162
+
163
+ TK1_Thymidine_Km = 5.0
164
+ TYMS_DeoxyUMP_Km = 2.0
165
+ RNR_UDP_Km = 1.0
166
+ TMPK_DeoxyTMP_Km = 12.0
167
+
168
+ # === DNA synthesis speed
169
+
170
+ S_phase_duration = 12.h
171
+ Genome_size = 3_000_000_000 # of bases
172
+ DNA_creation_speed = Genome_size / S_phase_duration.in( :s ) # in base.s⁻¹
173
+
174
+ # === Transitions
175
+
176
+ Transition name: :TK1_Thymidine_DeoxyTMP,
177
+ domain: [ Thymidine, TK1, DeoxyT23P, DeoxyCTP, DeoxyCytidine, AMP, ADP, ATP ],
178
+ stoichiometry: { Thymidine: -1, DeoxyTMP: 1 },
179
+ rate: proc { |reactant, enzyme, pool, inhibitor_2, inhibitor_3, mono, di, tri|
180
+ inhibitor_1 = pool * tri / ( di + tri ) # conc. of DeoxyTTP
181
+ MMi.( reactant, TK1_Thymidine_Km, enzyme, TK1_k_cat,
182
+ inhibitor_1 => 13.5, inhibitor_2 => 0.8, inhibitor_3 => 40.0 )
183
+ }
184
+
185
+ Transition name: :TYMS_DeoxyUMP_DeoxyTMP,
186
+ domain: [ DeoxyU12P, TYMS, AMP, ADP, ATP ],
187
+ stoichiometry: { DeoxyU12P: -1, DeoxyTMP: 1 },
188
+ rate: proc { |pool, enzyme, mono, di, tri|
189
+ reactant = pool * di / ( mono + di ) # conc. of DeoxyUMP
190
+ MMi.( reactant, TYMS_DeoxyUMP_Km, enzyme, TYMS_k_cat )
191
+ }
192
+
193
+ Transition name: :RNR_UDP_DeoxyUDP,
194
+ domain: [ U12P, RNR, DeoxyU12P, AMP, ADP, ATP ],
195
+ stoichiometry: { U12P: -1, DeoxyU12P: 1 },
196
+ rate: proc { |pool, enzyme, mono, di, tri|
197
+ reactant = pool * di / ( mono + di )
198
+ MMi.( reactant, RNR_UDP_Km, enzyme, RNR_k_cat )
199
+ }
200
+
201
+ Transition name: :DNA_polymerase_consumption_of_DeoxyTTP,
202
+ stoichiometry: { DeoxyT23P: -1 },
203
+ rate: proc { DNA_creation_speed / 4 }
204
+
205
+ Transition name: :TMPK_DeoxyTMP_DeoxyTDP,
206
+ domain: [ DeoxyTMP, TMPK, DeoxyT23P, DeoxyGMP, AMP, ADP, ATP ],
207
+ stoichiometry: { DeoxyTMP: -1, DeoxyT23P: 1 },
208
+ rate: proc { |reactant, enzyme, pool, inhibitor_4, mono, di, tri|
209
+ inhibitor_1 = di
210
+ inhibitor_2 = pool * di / ( di + tri ) # conc. of DeoxyTDP
211
+ inhibitor_3 = pool * tri / ( di + tri ) # conc. of DeoxyTTP
212
+ MMi.( reactant, TMPK_DeoxyTMP_Km, enzyme, TMPK_k_cat )
213
+ }
214
+
215
+ # execution
216
+ run!
217
+ plot_recording