cell_cycle 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,270 @@
1
+ #! /usr/bin/ruby
2
+ # encoding: utf-8
3
+
4
+ require 'minitest/autorun'
5
+ require 'sy'
6
+ require 'y_nelson' and include YNelson
7
+
8
+ bp = './../../lib/'
9
+ .tap { |s| s.singleton_class.class_exec do attr_accessor :loaded end }
10
+ .tap { |s| s.loaded = {} }
11
+
12
+ require_once = -> path do
13
+ bp.loaded[ path ] or
14
+ require( bp + path ) && bp.loaded.update( path => true )
15
+ end
16
+
17
+ describe :mammalian_cell_cycle do
18
+ before do
19
+ require_once.( 'ttp_pathway/version' )
20
+ require_once.( 'michaelis_menten' )
21
+ require_once.( 'general_assumptions' )
22
+ require_once.( 'cell_cycle/virginia' )
23
+ end
24
+
25
+ describe "sanity of this test itself" do
26
+ it "should have version loaded" do
27
+ TtpPathway::VERSION.must_be_kind_of String
28
+ end
29
+
30
+ it "should have michaelis_menten loaded" do
31
+ [ Vmax, Km_reduced, Occupancy, MMi ].all? &[ :kind_of?, Proc ]
32
+ end
33
+
34
+ it "should have general_assumptions loaded" do
35
+ assert defined? Cell_diameter
36
+ assert defined? Cytoplasm_volume
37
+ assert defined? Pieces_per_µM
38
+ end
39
+ end
40
+
41
+ describe "basic elements" do
42
+ it "should have basic interface places" do
43
+ A_phase.must_be_kind_of Place
44
+ S_phase.must_be_kind_of Place
45
+ Cdc20A.must_be_kind_of Place
46
+ end
47
+
48
+ it "should have parametrizing constants CASE and G2_MODULE" do
49
+ assert defined? CASE
50
+ assert defined? G2_MODULE
51
+ end
52
+
53
+ it "should have Godlbeter-Koshland function defined" do
54
+ assert B.is_a? Proc # B function as per Csikasznagy2006agm
55
+ assert GK.is_a? Proc # Golbeter-Koshland function
56
+ end
57
+
58
+ it "should have growth and cell division related constants" do
59
+ assert defined? CELL_MASS_DOUBLING_TIME
60
+ assert defined? CELL_GROWTH_RATE
61
+ assert defined? CycB_DIVISION_THRESHOLD
62
+ end
63
+
64
+ it "should have DATA hash holding the generic cycle parameters for " +
65
+ "budding yeast (BY), mammalian cell (MA), fission yeast (FY), and " +
66
+ "Xenopus embryo (XE)" do
67
+ key, val = DATA.first
68
+ key.must_be_kind_of Symbol
69
+ val.must_be_kind_of Hash
70
+ val.keys.must_equal [ :BY, :MA, :FY, :G2, :XE ]
71
+ # Now we will make an example of a single parameter that must be present
72
+ # both as a key in the DATA hash, and as a constant in the TOP namespace.
73
+ DATA.keys.must_include :J20
74
+ assert defined? J20 # Must be also defined as a constant.
75
+ J20.must_equal DATA[ :J20 ][ :MA ] # It must be set to the mammalian parameter.
76
+ end
77
+ end
78
+
79
+ describe "Module 0 -- cell growth and division" do
80
+ describe "places" do
81
+ it "should have Mass (cell mass) place" do Mass.must_be_kind_of Place end
82
+ it "should have CycD (cyclin D) place" do CycD.must_be_kind_of Place end
83
+ end
84
+
85
+ describe "assignment transitions" do
86
+ describe "A transition controlling CycD" do
87
+ it "must exist" do
88
+ assert transition( :CycD_ϝ ).A? # it must exist and be an A transition
89
+ end
90
+
91
+ describe "its dynamic behavior" do
92
+ before do
93
+ @net = Net() << Mass << CycD << transition( :CycD_ϝ )
94
+ @sim = @net.simulation initial_marking: { Mass: 1.0 }
95
+ @feature = @net.State.Feature.Assignment( CycD )
96
+ end
97
+
98
+ it "must assign to CycD a value proportional to the cell mass" do
99
+ v1 = @feature.extract_from( @sim )
100
+ # construct a second simulation with double mass:
101
+ sim2 = @net.simulation initial_marking: { Mass: 2.0 }
102
+ v2 = @feature.extract_from( sim2 )
103
+ # with double mass, the action of CycD_ϝ should be double
104
+ v2.must_be_within_epsilon v1 * 2
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ describe "transitions" do
111
+ describe "Cell_growth" do
112
+ it "should be of correct type" do
113
+ assert Cell_growth.TS?
114
+ end
115
+
116
+ describe "its dynamic behavior" do
117
+ before do
118
+ @net = Net() << Mass << Cell_growth
119
+ @sim = @net.simulation initial_marking: { Mass: 1.0 }, step: 0.1
120
+ end
121
+
122
+ it "should define exponential growth" do
123
+ # Starting mass is 1. After 10 time units, the mas will be:
124
+ @sim.run! upto: 10
125
+ mass_after_10 = @sim.marking( :Mass ).first
126
+ # After 20 time units, the mass should be the square of it:
127
+ @sim.run! upto: 20
128
+ mass_after_20 = @sim.marking( :Mass ).first
129
+ mass_after_20.must_be_within_epsilon( mass_after_10 ** 2 )
130
+ end
131
+ end
132
+ end
133
+
134
+ describe "Cytokinesis && License_cocking" do
135
+ it "should be of correct type" do
136
+ assert Cytokinesis.A?
137
+ assert License_cocking.A?
138
+ end
139
+
140
+ describe "dynamic behavior" do
141
+ before do
142
+ @net = Net() << Mass << ActCycB << Ck_license << Cytokinesis << License_cocking
143
+ end
144
+
145
+ describe "low cyclin B, cytokinesis license present" do
146
+ before do
147
+ @s1 = @net.simulation initial_marking: { Ck_license: 1, Mass: 1.0, ActCycB: 0.01 }, step: 1.0
148
+ @s1.step!
149
+ end
150
+
151
+ it "cytokinesis should happen" do
152
+ @s1.m( Ck_license ).first.must_equal 0 # consumed
153
+ assert @s1.m( Mass ).first < 1 # decreased
154
+ end
155
+ end
156
+
157
+ describe "high cyclin B, cytokinesis license absent" do
158
+ before do
159
+ @s2 = @net.simulation initial_marking: { Ck_license: 0, Mass: 1.0, ActCycB: 100 }, step: 1.0
160
+ @s2.step!
161
+ end
162
+
163
+ it "license should cock" do
164
+ @s2.m( Ck_license ).first.must_equal 1 # cocked
165
+ assert @s2.m( Mass ).first >= 1 # not decreased
166
+ end
167
+ end
168
+
169
+ describe "high cyclin B, cytokinesis license present" do
170
+ before do
171
+ @s3 = @net.simulation initial_marking: { Ck_license: 1, Mass: 1.0, ActCycB: 100 }, step: 1.0
172
+ @s3.step!
173
+ end
174
+
175
+ it "cytokinesis should not happen" do
176
+ @s3.m( Ck_license ).first.must_equal 1 # unchanged
177
+ assert @s3.m( Mass ).first >= 1 # not decreased
178
+ end
179
+ end
180
+
181
+ describe "low cyclin B, cytokinesis license absent" do
182
+ before do
183
+ @s4 = @net.simulation initial_marking: { Ck_license: 0, Mass: 1.0, ActCycB: 0.1 }, step: 1.0
184
+ @s4.step!
185
+ end
186
+
187
+ it "nothing should happen" do
188
+ @s4.m( Ck_license ).first.must_equal 0 # cocked
189
+ assert @s4.m( Mass ).first >= 1 # not decreased
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
196
+
197
+ describe "Modules 4, 10, and 13 -- synthesis and degradation of cyclins B, E, and A" do
198
+ # Cyclin E is active primarily at the G1-S boundary, cyclin A is active from S phase
199
+ # to early M phase, and cyclin B is essential for mitosis.
200
+
201
+ it "must have certain places" do
202
+ CycB.must_be_kind_of Place # Mitotic Cdk/cyclin complex
203
+ ActCycB.must_be_kind_of Place # activated CycB
204
+ CycE.must_be_kind_of Place # G1/S transition inducer Cdk/cyclin
205
+ ActCycE.must_be_kind_of Place # activated CycE
206
+ CycA.must_be_kind_of Place # S-phase Cdk/cyclin complex
207
+ ActCycA.must_be_kind_of Place # S-phase Cdk/cyclin complex
208
+ end
209
+
210
+ describe "assigment transitions" do
211
+
212
+ end
213
+
214
+ describe "transitions" do
215
+
216
+ end
217
+ end
218
+
219
+ describe "Modules 1 and 2 -- regulation of the anaphase promoting complex (APC)" do
220
+ # The APC works in conjunction with Cdc20 and Cdh1 to ubiquitinylate
221
+ # cyclin B, thereby labeling it for degradation by proteasomes. The APC
222
+ # must be phosphorylated by the mitotic CycB kinase before it will associate
223
+ # readily with Cdc20, but not so with Cdh1. On the other hand, Cdh1 can be
224
+ # inactivated by phosphorylation by cyclin-dependent kinases. Cdc14 is a
225
+ # phosphatase that opposes Cdk by dephosphorylating and activating Cdh1.
226
+
227
+ describe "places" do
228
+
229
+ end
230
+
231
+ describe "transitions" do
232
+
233
+ end
234
+ end
235
+
236
+ describe "Module 8 -- synthesis and degradation of CKI (cyclin-dependent kinase inhibitor)" do
237
+ # Degradation of CKI is promoted by phoshporylation by cyclin-dependent kinases and
238
+ # inhibited by Cdc14 phosphatase.
239
+
240
+ describe "places" do
241
+
242
+ end
243
+ end
244
+
245
+ describe "Modules 6, 9 and 12 -- reversible binding of CKI to cyclin/Cdk dimers to produce " +
246
+ "catalytically inactive trimers (stoichiometric inhibition)." do
247
+
248
+ end
249
+
250
+ describe "Module 3, 7, and 11 -- regulation of the transcription factors that drive " +
251
+ "expression of cyclins and CKI" do
252
+ # TFB is activated by cyclin B-dependent kinase. TFE is activated by some cyclin-dependent
253
+ # kinases and inhibited by others. TFI is inhibited by cyclin B-dependent kinase and activated
254
+ # by Cdc14 phosphatase.
255
+ end
256
+
257
+ describe "Module 5 -- regulation of cyclin B-dependent kinase by tyrosine phosphorylation " +
258
+ "and dephosphorylation (by Wee1 kinase and Cdc25 phosphatase, respectively)." do
259
+ # The tyrosine-phosphorylated form is less active than the unphosphorylated form.
260
+ # Cyclin B-dependent kinase phosphorylates both Wee1 (inactivating it) and Cdc25
261
+ # (activating it), and these phosphorylations are reversed by Cdc14 phosphatase.
262
+ end
263
+
264
+ # The model is replete with positive feedback loops (CycB activates TFB, which drives synthesis
265
+ # of CycB; CKI inhibits CycB, which inhibits Cdh1), and negative feedback loops (CycB activates
266
+ # APC, which activates Cdc20, which degrades CycB; CycB activates Cdc20, which activates Cdc14,
267
+ # which opposes CycB; TFE drives synthesis of CycA, which inhibits TFE). These complex, inter-
268
+ # woven feedback loops create the interesting dynamical properties of the control system, which
269
+ # account for the characteristic features of cell cycle regulation, as we intend to show.
270
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cell_cycle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - boris
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: 'Eukaryotic cell cycle modelled at different levels of precision. Has
42
+ two levels at the moment: Simple and Virginia Tech.'
43
+ email:
44
+ - '"boris@iis.sinica.edu.tw"'
45
+ executables:
46
+ - run_virginia
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - ACKNOWLEDGMENT.txt
52
+ - Gemfile
53
+ - LICENSE.txt
54
+ - README.md
55
+ - Rakefile
56
+ - bin/run_virginia
57
+ - cell_cycle.gemspec
58
+ - lib/cell_cycle.rb
59
+ - lib/cell_cycle/alternative_syntax_for_transitions.rb
60
+ - lib/cell_cycle/simple.rb
61
+ - lib/cell_cycle/version.rb
62
+ - lib/cell_cycle/virginia_tech.rb
63
+ - lib/cell_cycle/virginia_tech/mammalian_constants.rb
64
+ - test/simple_test.rb
65
+ - test/virginia_test.rb
66
+ homepage: ''
67
+ licenses:
68
+ - MIT
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.2.2
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: A model of eukaryotic cell cycle.
90
+ test_files:
91
+ - test/simple_test.rb
92
+ - test/virginia_test.rb