y_petri 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +31 -0
- data/Rakefile +2 -0
- data/lib/y_petri/demonstrator.rb +164 -0
- data/lib/y_petri/demonstrator_2.rb +176 -0
- data/lib/y_petri/demonstrator_3.rb +150 -0
- data/lib/y_petri/demonstrator_4.rb +217 -0
- data/lib/y_petri/manipulator.rb +598 -0
- data/lib/y_petri/net.rb +458 -0
- data/lib/y_petri/place.rb +189 -0
- data/lib/y_petri/simulation.rb +1313 -0
- data/lib/y_petri/timed_simulation.rb +281 -0
- data/lib/y_petri/transition.rb +921 -0
- data/lib/y_petri/version.rb +3 -0
- data/lib/y_petri/workspace/instance_methods.rb +254 -0
- data/lib/y_petri/workspace/parametrized_subclassing.rb +26 -0
- data/lib/y_petri/workspace.rb +16 -0
- data/lib/y_petri.rb +141 -0
- data/test/simple_manual_examples.rb +28 -0
- data/test/y_petri_graph.png +0 -0
- data/test/y_petri_test.rb +1521 -0
- data/y_petri.gemspec +21 -0
- metadata +112 -0
@@ -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
|