cell_cycle 0.0.2
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.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/ACKNOWLEDGMENT.txt +6 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/bin/run_virginia +6 -0
- data/cell_cycle.gemspec +23 -0
- data/lib/cell_cycle/alternative_syntax_for_transitions.rb +351 -0
- data/lib/cell_cycle/simple.rb +75 -0
- data/lib/cell_cycle/version.rb +3 -0
- data/lib/cell_cycle/virginia_tech/mammalian_constants.rb +144 -0
- data/lib/cell_cycle/virginia_tech.rb +463 -0
- data/lib/cell_cycle.rb +5 -0
- data/test/simple_test.rb +35 -0
- data/test/virginia_test.rb +270 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b279cc91b177efae9a32de303f23d582e1f061b5
|
4
|
+
data.tar.gz: 39b00bc0f002c0c7b676621ab58825271d92f30d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c5b2008d7d4144bd1ee6a8b35d8e4fb9310e89c3a36b377b2b26455ed675dd106c9fbd73ded3f389b22ff646a92a9f63e2275461bdfdd68d41bc048ac85b8299
|
7
|
+
data.tar.gz: d1b26d72b9f5c4ac1ced003eae61312ebacbec63330fb64babe858b91799c05458fe693460d3e1ad85507c08d6b76f946e3a1eb9b3619226881ae028d5f9990e
|
data/.gitignore
ADDED
data/ACKNOWLEDGMENT.txt
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
This document serves to acknowledge the support of Bioinformatics Program,
|
2
|
+
Taiwan International Graduate Program, Institute of Computer Science,
|
3
|
+
Academia Sinica (128, Academia Road, Sec. 2. Namkang, Taipei, 115), and
|
4
|
+
of Bioinformatics Institute, National Yang-Ming University, Taipei,
|
5
|
+
Taiwan. Without their support, creation of this package would not be
|
6
|
+
possible.
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 boris
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# CellCycle
|
2
|
+
|
3
|
+
Cell cycle model.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'cell_cycle'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install cell_cycle
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it ( https://github.com/[my-github-username]/cell_cycle/fork )
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bin/run_virginia
ADDED
data/cell_cycle.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'cell_cycle/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "cell_cycle"
|
8
|
+
spec.version = CellCycle::VERSION
|
9
|
+
spec.authors = ["boris"]
|
10
|
+
spec.email = ["\"boris@iis.sinica.edu.tw\""]
|
11
|
+
spec.summary = %q{A model of eukaryotic cell cycle.}
|
12
|
+
spec.description = %q{Eukaryotic cell cycle modelled at different levels of precision. Has two levels at the moment: Simple and Virginia Tech.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
@@ -0,0 +1,351 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Generic cell cycle published in Csikasznagy2006agm, alternative syntax of
|
4
|
+
# the transitions.
|
5
|
+
|
6
|
+
# == TRANSITIONS ================================================================
|
7
|
+
|
8
|
+
# This creates a timed stoichiometric (TS) transition representing cell growth.
|
9
|
+
# Cell growth changes Mass (domain), and its stoichiometry is { Mass: 1 }, that
|
10
|
+
# is, Mass simply increases at the rate indicated by the transition's function.
|
11
|
+
# The function (rate) is given by the formula m * CELL_GROWTH_RATE, where m is
|
12
|
+
# the current mass of the cell, and CELL_GROWTH_RATE a constant given by the model
|
13
|
+
# authors.
|
14
|
+
#
|
15
|
+
Cell_growth = Transition domain: Mass,
|
16
|
+
stoichiometry: { Mass: 1 },
|
17
|
+
rate: -> m { m * CELL_GROWTH_RATE }
|
18
|
+
|
19
|
+
# This creates an assignment (A) transition representing cytokinesis. It changes
|
20
|
+
# 2 places (codomain): Mass, and Ck_license. Mass is the cell mass, Ck_license is
|
21
|
+
# a special place that was added to the Petri net to prevent Cytokinesis transition
|
22
|
+
# from accidentally firing twice in a row in the same cycle. Firing depends on,
|
23
|
+
# in order, Mass, Ck_license, and ActCycB (domain). The function thus takes 3
|
24
|
+
# arguments (mass, license, b). If ActCycB is under the threshold specified by
|
25
|
+
# the model authors (CycB_DIVISION_THRESHOLD), and Ck_license is cocked
|
26
|
+
# (equal to 1), then the mass is halved and the license is consumed (set to 0).
|
27
|
+
# Otherwise, the [ mass, license ] pair is returned unchanged. The :pseudo_euler
|
28
|
+
# simulation method fires the transition once after each simulation step.
|
29
|
+
#
|
30
|
+
Cytokinesis = Transition codomain: [ Mass, Ck_license ],
|
31
|
+
domain: [ Mass, Ck_license, ActCycB ],
|
32
|
+
assignment: -> mass, license, b do
|
33
|
+
if license == 1 and b < CycB_DIVISION_THRESHOLD then
|
34
|
+
[ mass / 2, 0 ] # mass is halved, license is set to 0
|
35
|
+
else
|
36
|
+
[ mass, license ] # nothing happens
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# An assignment transition that controls the Ck_license cocking (codomain), and
|
41
|
+
# whose firin depends on Ck_license and the level of ActCycB (domain). The
|
42
|
+
# assignment function cocks the license (sets it to 1) if the level of ActCycB
|
43
|
+
# is above CycB_DIVISION_THRESHOLD plus 10% margin. Otherwise, the license is
|
44
|
+
# unchanged. Again, the :pseudo_euler simulation method fires the transition once
|
45
|
+
# after each simulation step.
|
46
|
+
#
|
47
|
+
License_cocking = Transition codomain: Ck_license,
|
48
|
+
domain: [ Ck_license, ActCycB ],
|
49
|
+
assignment: -> license, b do
|
50
|
+
if b > CycB_DIVISION_THRESHOLD * 1.1 then
|
51
|
+
1
|
52
|
+
else
|
53
|
+
license
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# === Module 1
|
58
|
+
|
59
|
+
# Cdc20T synthesis and degradation functions defined as lambda expressions
|
60
|
+
# according to the definitions in Csikasznagy2006agm.
|
61
|
+
#
|
62
|
+
Cdc20T_synthesis = -> b { x = b ** N; ( Ks20p + Ks20pp * x ) / ( J20 ** N + x ) }
|
63
|
+
Cdc20T_degradation = -> cdc20T { cdc20T * Kd20 }
|
64
|
+
|
65
|
+
# A timed stoichiometric transition representing the change of anaphase-promoting
|
66
|
+
# factor (Cdc20T). Its stoichiometry is thus { Cdc20T: 1 }. Its rate depends on
|
67
|
+
# the level of activated cyclin B (ActCycB) and Cdc20T). The function is modified
|
68
|
+
# to enable larger execution step with :pseudo_euler method.
|
69
|
+
#
|
70
|
+
Cdc20T_change = Transition domain: [ ActCycB, Cdc20T ],
|
71
|
+
stoichiometry: { Cdc20T: 1 },
|
72
|
+
rate: -> b, t {
|
73
|
+
step = world.simulation.step.to_f
|
74
|
+
fine_step = step / 50.0
|
75
|
+
orig = t
|
76
|
+
# Fine-step the function.
|
77
|
+
50.times do
|
78
|
+
t += ( Cdc20T_synthesis.( b ) - Cdc20T_degradation.( t ) ) * fine_step
|
79
|
+
end
|
80
|
+
( t - orig ) / step # get the positive change rate
|
81
|
+
}
|
82
|
+
|
83
|
+
# # Without the modification for higher speed, there are 2 transitions
|
84
|
+
# # Cdc20T_synthesis and Cdc20T_degradation as follows:
|
85
|
+
# #
|
86
|
+
# Cdc20T_synthesis = Transition domain: [ ActCycB, Cdc20T ],
|
87
|
+
# stoichiometry: { Cdc20T: 1 },
|
88
|
+
# rate: -> b {
|
89
|
+
# x = b ** N; ( Ks20p + Ks20pp * x ) / ( J20 ** N + x )
|
90
|
+
# }
|
91
|
+
# Cdc20T_degradation = Transition stoichiometry: { Cdc20T: -1 },
|
92
|
+
# rate: Kd20
|
93
|
+
|
94
|
+
# Cdc20 activation, inactivation and degradation functions defined as lambdas as
|
95
|
+
# per Csikasznagy2006agm.
|
96
|
+
#
|
97
|
+
Cdc20_activation = -> t, a, apcp { x = t - a; Ka20 * apcp * x / ( Ja20 + x ) }
|
98
|
+
Cdc20A_inactivation = -> a { a * Ki20 / ( Ji20 + a ) }
|
99
|
+
Cdc20A_degradation = -> a { a * Kd20 }
|
100
|
+
|
101
|
+
Cdc20A_change = TS Cdc20T, Cdc20A, APCP, Cdc20A: 1 do |t, a, apcp|
|
102
|
+
step = world.simulation.step.to_f
|
103
|
+
fine_step = step / 50.0
|
104
|
+
orig = a
|
105
|
+
50.times do
|
106
|
+
a = a +
|
107
|
+
( Cdc20_activation.( t, a, apcp ) -
|
108
|
+
Cdc20A_inactivation.( a ) -
|
109
|
+
Cdc20A_degradation.( a )
|
110
|
+
) * fine_step
|
111
|
+
end
|
112
|
+
( a - orig ) / step # return the positive change rate
|
113
|
+
end
|
114
|
+
|
115
|
+
# REMARK: This section has to be band-aided for speed:
|
116
|
+
# Cdc20_activation = TS Cdc20T, Cdc20A, APCP, Cdc20A: 1 do |t, a, apcp|
|
117
|
+
# x = t - a; Ka20 * apcp * x / ( Ja20 + x )
|
118
|
+
# end
|
119
|
+
# Cdc20A_inactivation = TS Cdc20A: -1 do |a| a * Ki20 / ( Ji20 + a ) end
|
120
|
+
# Cdc20A_degradation = TS Cdc20A: -1, rate: Kd20
|
121
|
+
|
122
|
+
# REMARK: Just like in CI, this section has to be band-aided.
|
123
|
+
|
124
|
+
APC_activation = -> b, apcp { x = 1 - apcp; KaAPC * b * x / ( JaAPC + x ) }
|
125
|
+
APC_inactivation = -> apcp { KiAPC * apcp / ( JiAPC + apcp ) }
|
126
|
+
|
127
|
+
APC_change = TS ActCycB, APCP, APCP: 1 do |b, apcp|
|
128
|
+
step = world.simulation.step.to_f
|
129
|
+
fine_step = step / 50.0
|
130
|
+
orig = apcp
|
131
|
+
50.times do
|
132
|
+
apcp += ( APC_activation.( b, apcp ) - APC_inactivation.( apcp ) ) * fine_step
|
133
|
+
end
|
134
|
+
( apcp - orig ) / step
|
135
|
+
end
|
136
|
+
|
137
|
+
# APC_activation = TS ActCycB, APCP, APCP: 1 do |b, apcp|
|
138
|
+
# x = 1 - apcp; KaAPC * b * x / ( JaAPC + x )
|
139
|
+
# APC_inactivation = TS APCP: -1 do |apcp| KiAPC * apcp / ( JiAPC + apcp ) end
|
140
|
+
|
141
|
+
# === Module 2
|
142
|
+
|
143
|
+
# REMARK: Cdh1 activation and inactivation joined into 1 and band-aided in CI,
|
144
|
+
# and same has to be done here.
|
145
|
+
|
146
|
+
Cdh1_activation = -> cdc14, cdh1 {
|
147
|
+
x = 1 - cdh1; ( Kah1p + Kah1pp * cdc14 ) * x / ( Jah1 + x ) # orig. formula
|
148
|
+
}
|
149
|
+
|
150
|
+
Cdh1_inactivation = -> a, b, d, e, cdh1 {
|
151
|
+
( Kih1p + Kih1pp * a + Kih1ppp * b + Kih1pppp * e + Kih1ppppp * d ) *
|
152
|
+
cdh1 / ( Jih1 + cdh1 )
|
153
|
+
}
|
154
|
+
|
155
|
+
Cdh1_change =
|
156
|
+
TS ActCycA, ActCycB, CycD, ActCycE, Cdc14, Cdh1, Cdh1: 1 do
|
157
|
+
|a, b, d, e, cdc14, cdh1|
|
158
|
+
step = world.simulation.step.to_f
|
159
|
+
fine_step = step / 500
|
160
|
+
orig = cdh1
|
161
|
+
500.times do # fine-stepped formula
|
162
|
+
cdh1 += ( Cdh1_activation.( cdc14, cdh1 ) -
|
163
|
+
Cdh1_inactivation.( a, b, d, e, cdh1 ) ) * fine_step
|
164
|
+
end
|
165
|
+
( cdh1 - orig ) / step
|
166
|
+
end
|
167
|
+
|
168
|
+
# Cdh1_activation = TS Cdc14, Cdh1, Cdh1: 1 do |cdc14, cdh1|
|
169
|
+
# x = 1 - cdh1; ( Kah1p + Kah1pp * cdc14 ) * x / ( Jah1 + x ) # orig. formula
|
170
|
+
# end
|
171
|
+
# Cdh1_inactivation = TS ActCycA, ActCycB, CycD, ActCycE, Cdh1, Cdh1: -1 do
|
172
|
+
# |a, b, d, e, cdh1|
|
173
|
+
# ( Kih1p + Kih1pp * a + Kih1ppp * b + Kih1pppp * e + Kih1ppppp * d ) *
|
174
|
+
# cdh1 / ( Jih1 + cdh1 )
|
175
|
+
# end
|
176
|
+
|
177
|
+
# === Module 4
|
178
|
+
|
179
|
+
CycB_synthesis = TS Vsb, Mass, CycB: 1 do |v, m| v * m end
|
180
|
+
CycB_degradation = TS Vdb, CycB, CycB: -1 do |v, b|
|
181
|
+
fod { v }.fine_step( world.simulation.step, 50 ).( b )
|
182
|
+
# v * b
|
183
|
+
end
|
184
|
+
ActCycB_synthesis = TS Vsb, Mass, ActCycB: 1 do |v, m| v * m end
|
185
|
+
|
186
|
+
ActCycB_freeing_due_to_degradation_of_CKI =
|
187
|
+
TS Vdi, CycB, PreMPF, ActCycB, ActCycB: 1 do |v, b, preMPF, actCycB|
|
188
|
+
v * ( b - preMPF - actCycB )
|
189
|
+
end
|
190
|
+
|
191
|
+
ActCycB_freeing_due_dissoociation_from_CKI =
|
192
|
+
TS CycB, PreMPF, ActCycB, ActCycB: 1 do |b, preMPF, actCycB|
|
193
|
+
Kdib * ( b - preMPF + actCycB )
|
194
|
+
end
|
195
|
+
|
196
|
+
ActCycB_creation_by_dephosphorylation_of_CycB =
|
197
|
+
TS V25, CycB, TriB, ActCycB, ActCycB: 1 do |v, b, triB, actCycB|
|
198
|
+
v * ( b - triB - actCycB )
|
199
|
+
end
|
200
|
+
|
201
|
+
ActCycB_phosphorylation_by_Wee1 =
|
202
|
+
TS Vwee, ActCycB, ActCycB: -1 do |v, b| v * b end
|
203
|
+
ActCycB_asociation_with_CKI =
|
204
|
+
TS FreeCKI, ActCycB, ActCycB: -1 do |freeCKI, b| freeCKI * b * Kasb end
|
205
|
+
ActCycB_degradation = TS Vdb, ActCycB, ActCycB: -1 do |v, b|
|
206
|
+
fod { v }.fine_step( world.simulation.step, 50 ).( b )
|
207
|
+
# v * b
|
208
|
+
end
|
209
|
+
|
210
|
+
# === Module 5
|
211
|
+
|
212
|
+
MPF_phosphorylation = TS Vwee, CycB, PreMPF, PreMPF: 1 do |v, b, preMPF|
|
213
|
+
v * ( b - preMPF )
|
214
|
+
end
|
215
|
+
|
216
|
+
PreMPF_dephosphorylation =
|
217
|
+
TS V25, PreMPF, PreMPF: -1 do |v, preMPF| v * preMPF end
|
218
|
+
PreMPF_degradation =
|
219
|
+
TS Vdb, PreMPF, PreMPF: -1 do |v, preMPF| v * preMPF end
|
220
|
+
|
221
|
+
# === Module 6
|
222
|
+
|
223
|
+
TriB_assembly = TS CycB, TriB, FreeCKI, TriB: 1 do |b, triB, freeCKI|
|
224
|
+
Kasb * ( b - triB ) * freeCKI
|
225
|
+
end
|
226
|
+
|
227
|
+
TriB_dissociation =
|
228
|
+
TS TriB: -1, rate: Kdib
|
229
|
+
TriB_decrease_due_to_CycB_degradation =
|
230
|
+
TS Vdb, TriB, TriB: -1 do |vdb, triB| vdb * triB end
|
231
|
+
TriB_decrease_due_to_CKI_degradation =
|
232
|
+
TS Vdi, TriB, TriB: -1 do |vdi, triB| vdi * triB end
|
233
|
+
|
234
|
+
# === Module 8
|
235
|
+
|
236
|
+
CKI_synthesis = TS Vsi, CKI: 1 do |v| v end
|
237
|
+
|
238
|
+
CKI_degradation = TS Vdi, CKI, CKI: -1 do |v, cki|
|
239
|
+
fod { v }.fine_step( world.simulation.step, 50 ).( cki )
|
240
|
+
# v * cki
|
241
|
+
end
|
242
|
+
|
243
|
+
# === Module 10
|
244
|
+
|
245
|
+
CycE_synthesis =
|
246
|
+
TS TFE, Mass, CycE: 1 do |f, m| ( Ksep + Ksepp * f ) * m end
|
247
|
+
|
248
|
+
CycE_degradation = TS Vde, CycE, CycE: -1 do |v, e|
|
249
|
+
# v * e
|
250
|
+
fod { v }.fine_step( world.simulation.step, 50 ).( e )
|
251
|
+
end
|
252
|
+
|
253
|
+
ActCycE_synthesis =
|
254
|
+
TS TFE, Mass, ActCycE: 1 do |f, m| ( Ksep + Ksepp * f ) * m end
|
255
|
+
|
256
|
+
ActCycE_freeing_due_to_degradation_of_CKI =
|
257
|
+
TS Vdi, TriE, ActCycE: 1 do |v, triE| v * triE end
|
258
|
+
|
259
|
+
ActCycE_freeing_due_to_dissociation_from_CKI =
|
260
|
+
TS TriE, ActCycE: 1 do |triE| Kdie * triE end
|
261
|
+
|
262
|
+
# REMARK: band-aided in CI not to go under 0, fine-stepped here.
|
263
|
+
ActCycE_degradation = TS Vde, FreeCKI, ActCycE, ActCycE: -1 do |v, freeCKI, e|
|
264
|
+
# ( v + Kase * freeCKI ) * e
|
265
|
+
fod { v + Kase * freeCKI }.fine_step( world.simulation.step, 50 ).( e )
|
266
|
+
end
|
267
|
+
|
268
|
+
# === Module 13
|
269
|
+
|
270
|
+
CycA_synthesis =
|
271
|
+
TS TFE, Mass, CycA: 1 do |f, m| ( Ksap + Ksapp * f ) * m end
|
272
|
+
|
273
|
+
CycA_degradation = TS Vda, CycA, CycA: -1 do |v, a|
|
274
|
+
# v * a
|
275
|
+
fod { v }.fine_step( world.simulation.step, 50 ).( a )
|
276
|
+
end
|
277
|
+
|
278
|
+
ActCycA_synthesis =
|
279
|
+
TS TFE, Mass, ActCycA: 1 do |f, m| ( Ksap + Ksapp * f ) * m end
|
280
|
+
|
281
|
+
ActCycA_freeing_due_to_degradation_of_CKI =
|
282
|
+
TS Vdi, TriA, ActCycE: 1 do |v, triA| v * triA end
|
283
|
+
|
284
|
+
ActCycA_freeing_due_to_dissociation_from_CKI =
|
285
|
+
TS TriA, ActCycA: 1 do |triA| Kdia * triA end
|
286
|
+
|
287
|
+
# band-aided
|
288
|
+
ActCycA_degradation = TS Vda, FreeCKI, ActCycA, ActCycA: -1 do |v, freeCKI, a|
|
289
|
+
# ( v + Kasa * freeCKI ) * a
|
290
|
+
fod { v + Kasa * freeCKI }.fine_step( world.simulation.step, 50 ).( a )
|
291
|
+
end
|
292
|
+
|
293
|
+
# === finalize
|
294
|
+
|
295
|
+
finalize # YNelson command that finishes the net from the prescribed commands.
|
296
|
+
|
297
|
+
# ==============================================================================
|
298
|
+
# THIS CONCLUDES THE MODEL. COMMANDS BELOW ARE JUST SAVED COMMANDS TO SERVE AS
|
299
|
+
# HELP WHEN PERUSING THE MODEL THROUGH THE COMMAND LINE
|
300
|
+
# ==============================================================================
|
301
|
+
|
302
|
+
|
303
|
+
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
=begin
|
320
|
+
|
321
|
+
# === Whole CELL_CYCLE Nelson net ===
|
322
|
+
|
323
|
+
CELL_CYCLE = Net() << A_phase << S_phase << Cdc20A
|
324
|
+
|
325
|
+
# === Cell growh net ===
|
326
|
+
|
327
|
+
CELL_GROWTH_NET = Net() <<
|
328
|
+
Mass << Cell_growth << CycD << transition( :CycD_ϝ ) << # cell growth
|
329
|
+
CycB << ActCycB << # cyclin B
|
330
|
+
Ck_license << Cytokinesis << License_cocking # cytokinesis
|
331
|
+
|
332
|
+
set_step 5 # simulation settings
|
333
|
+
set_sampling 300
|
334
|
+
set_target_time 3600 * 24 * 4
|
335
|
+
|
336
|
+
new_simulation
|
337
|
+
|
338
|
+
|
339
|
+
pm # prints marking of the newly created simulation
|
340
|
+
simulation.step! # peforms a single simulation step
|
341
|
+
pm # prints marking again
|
342
|
+
|
343
|
+
# simulation.run! upto: 3600 # we can run 1 hour of this simulation
|
344
|
+
|
345
|
+
recording.plot # and plot the recording
|
346
|
+
|
347
|
+
# and do other things with the recording, such as resampling,
|
348
|
+
# feature extraction, saving to a file, reconstruction of a new
|
349
|
+
# simulation object at a given time etc.
|
350
|
+
|
351
|
+
=end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# A simplistic cell cycle. It has a single input (Timer place) and 3 outputs
|
4
|
+
# (A_phase, S_phase, Cdc20A). A_phase is the phase when the cell cycle enzyme
|
5
|
+
# machinery is synthesized. S_phase has the standard meaning: DNA synthesis
|
6
|
+
# phase. Cdc20A represents the APC (Anaphase Promoting Complex). When present,
|
7
|
+
# it degrades the cell cycle enzyme machinery.
|
8
|
+
|
9
|
+
require 'y_nelson' and include YNelson
|
10
|
+
require 'sy'
|
11
|
+
|
12
|
+
# Constants that control the cell cycle settings.
|
13
|
+
S_phase_duration = 12.h
|
14
|
+
S_phase_start = 5.h
|
15
|
+
S_phase_end = S_phase_start + S_phase_duration
|
16
|
+
A_phase_start = 3.h
|
17
|
+
A_phase_end = S_phase_end
|
18
|
+
Cdc20A_start = 22.h
|
19
|
+
Cdc20A_end = 1.h
|
20
|
+
|
21
|
+
# Alternative setting for shorter cycle (4.h).
|
22
|
+
=begin
|
23
|
+
# Constants that control the cell cycle settings.
|
24
|
+
S_phase_duration = 4.h
|
25
|
+
S_phase_start = 1.h + 40.min
|
26
|
+
S_phase_end = S_phase_start + S_phase_duration
|
27
|
+
A_phase_start = 1.h
|
28
|
+
A_phase_end = S_phase_end
|
29
|
+
Cdc20A_start = 7.h + 30.min
|
30
|
+
Cdc20A_end = 20.min
|
31
|
+
=end
|
32
|
+
|
33
|
+
# Figure them out as numbers in seconds.
|
34
|
+
Sα = S_phase_start.in :s
|
35
|
+
Sω = S_phase_end.in :s
|
36
|
+
Aα = A_phase_start.in :s
|
37
|
+
Aω = A_phase_end.in :s
|
38
|
+
Cdc20Aα = Cdc20A_start.in :s
|
39
|
+
Cdc20Aω = Cdc20A_end.in :s
|
40
|
+
|
41
|
+
# Timer place
|
42
|
+
Timer = Place m!: 0
|
43
|
+
|
44
|
+
# The clock transition
|
45
|
+
Clock = Transition stoichiometry: { Timer: 1 }, rate: 1
|
46
|
+
|
47
|
+
# Empirical places (in arbitrary units); output of the cell cycle.
|
48
|
+
A_phase = Place m!: 0
|
49
|
+
S_phase = Place m!: 0
|
50
|
+
Cdc20A = Place m!: 1
|
51
|
+
|
52
|
+
# Include them in the CELL_CYCLE net.
|
53
|
+
CELL_CYCLE = Net() << Timer << Clock << A_phase << S_phase << Cdc20A
|
54
|
+
|
55
|
+
# Assignment transitions that control the state of the places A_phase, S_phase
|
56
|
+
# and Cdc20A.
|
57
|
+
#
|
58
|
+
A_phase_ϝ = Transition assignment: -> t { t > Aα && t < Aω ? 1 : 0 },
|
59
|
+
domain: Timer,
|
60
|
+
codomain: A_phase
|
61
|
+
S_phase_ϝ = Transition assignment: -> t { t > Sα && t < Sω ? 1 : 0 },
|
62
|
+
domain: Timer,
|
63
|
+
codomain: S_phase
|
64
|
+
Cdc20A_ϝ = Transition assignment: -> t { t < Cdc20Aω || t > Cdc20Aα ? 1 : 0 },
|
65
|
+
domain: Timer,
|
66
|
+
codomain: Cdc20A
|
67
|
+
|
68
|
+
# Include the A transitions in the CELL_CYCLE net.
|
69
|
+
CELL_CYCLE << A_phase_ϝ << S_phase_ϝ << Cdc20A_ϝ
|
70
|
+
|
71
|
+
def CELL_CYCLE.default_simulation
|
72
|
+
simulation time: 0..36.h.in( :s ),
|
73
|
+
step: 1.min.in( :s ),
|
74
|
+
sampling: 20.min.in( :s )
|
75
|
+
end
|