02-macro_surface.mdl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /****************************************************************************
  2. * Test 02: Simple surface macromolecules.
  3. *
  4. * This test is analogous to test #1, but using surface molecules. Counting
  5. * encompasses considerably more options for surface complexes, due to the
  6. * additional dimensions added by orientations. As a result, this includes
  7. * a much more comprehensive collection of counts than test #1.
  8. *
  9. * See test_macromols.py for a matrix giving the static constraints which
  10. * this simulation must obey. (For instance, the number of subunits in any
  11. * state must never differ from the number initially placed, regardless how
  12. * we sum over the states. This gives rise to quite a number of validity
  13. * constraints over the set of counts we produce here.)
  14. *
  15. * An equilibrium derived via a first order iterative "state machine" model
  16. * is:
  17. *
  18. * Subunits in doubly-unbound dimers: 15.5348 in each orientation combo
  19. * Subunits in singly-bound dimers: 14.9938 in each orientation combo
  20. * Subunits in doubly-bound dimers: 14.4715 in each orientation combo
  21. *
  22. * All equilibria in the test suite for this test may be derived from these
  23. * numbers. Note that the numbers for the doubly-bound or doubly-unbound
  24. * cases will appear to be roughly twice as large as those for the
  25. * singly-bound cases because the bound and unbound are counted as two
  26. * separate rules for the singly-bound case, whereas they are counted
  27. * together if the subunits in the dimer are both bound or both unbound.
  28. *
  29. * Author: Jed Wing <[email protected]>
  30. * Date: 2008-04-04
  31. ****************************************************************************/
  32. basename = "02-macro_surface"
  33. countdir = "dat/" & basename & "/"
  34. vizdir = "./viz_dat/" & basename & "/"
  35. sprintf(seed, "%04g", SEED)
  36. dt = 1e-6
  37. iterations=300000
  38. INCLUDE_FILE="parameters.mdl"
  39. WARNINGS {
  40. LIFETIME_TOO_SHORT = IGNORED
  41. }
  42. TIME_STEP = dt
  43. ITERATIONS = iterations
  44. GRID_DENSITY = 15000
  45. ACCURATE_3D_REACTIONS = FALSE
  46. PARTITION_X = [[-box_size/2 - 0.0001 TO box_size/2 + 0.0001 STEP partition_size]]
  47. PARTITION_Y = [[-box_size/2 - 0.0001 TO box_size/2 + 0.0001 STEP partition_size]]
  48. PARTITION_Z = [[-box_size/2 - 0.0001 TO box_size/2 + 0.0001 STEP partition_size]]
  49. MEMORY_PARTITION_X = mem_partition_size
  50. MEMORY_PARTITION_Y = mem_partition_size
  51. MEMORY_PARTITION_Z = mem_partition_size
  52. DEFINE_MOLECULES {
  53. camkii_subunit { DIFFUSION_CONSTANT_2D = 0 }
  54. camkii_subunitB { DIFFUSION_CONSTANT_2D = 0 }
  55. cam { DIFFUSION_CONSTANT_3D = cam_diffusion }
  56. }
  57. DEFINE_COMPLEX_MOLECULE camkii {
  58. NUMBER_OF_SUBUNITS = [2, 6]
  59. SUBUNIT[ 1, 1:6] = camkii_subunit'
  60. SUBUNIT[ 2, 1:6] = camkii_subunit,
  61. SHAPE {
  62. SUBUNIT[1, 1] = [-.10, .0000, 0]
  63. SUBUNIT[1, 2] = [-.05, .0866, 0]
  64. SUBUNIT[1, 3] = [ .05, .0866, 0]
  65. SUBUNIT[1, 4] = [ .10, .0000, 0]
  66. SUBUNIT[1, 5] = [ .05, -.0866, 0]
  67. SUBUNIT[1, 6] = [-.05, -.0866, 0]
  68. SUBUNIT[2, 1] = [-.10, .0000, 0]
  69. SUBUNIT[2, 2] = [-.05, .0866, 0]
  70. SUBUNIT[2, 3] = [ .05, .0866, 0]
  71. SUBUNIT[2, 4] = [ .10, .0000, 0]
  72. SUBUNIT[2, 5] = [ .05, -.0866, 0]
  73. SUBUNIT[2, 6] = [-.05, -.0866, 0]
  74. }
  75. SUBUNIT_RELATIONSHIPS {
  76. ring_negative = [ 0, -1]
  77. ring_positive = [ 0, +1]
  78. dimer_partner = [+1, 0]
  79. }
  80. RATE_RULES {
  81. coop_binding_rate {
  82. dimer_partner != camkii_subunit : fw_rate * TMP_spec_F
  83. DEFAULT : fw_rate
  84. }
  85. coop_unbinding_rate {
  86. dimer_partner != camkii_subunit : bw_rate * TMP_spec_B
  87. DEFAULT : bw_rate
  88. }
  89. }
  90. }
  91. DEFINE_SURFACE_CLASSES {
  92. trans_cam {
  93. TRANSPARENT = cam
  94. }
  95. }
  96. DEFINE_REACTIONS {
  97. (camkii_subunit') + cam' <-> (camkii_subunitB') [> COMPLEX_RATE camkii coop_binding_rate,
  98. < COMPLEX_RATE camkii coop_unbinding_rate]
  99. (camkii_subunit,) + cam' <-> (camkii_subunitB,) [> COMPLEX_RATE camkii coop_binding_rate,
  100. < COMPLEX_RATE camkii coop_unbinding_rate]
  101. (camkii_subunitB') -> (camkii_subunitB,) [> 1e3]
  102. }
  103. mainbox OBJECT {
  104. b BOX {
  105. CORNERS = [ -box_size / 2, -box_size / 2, -box_size / 2 ], [ box_size / 2, box_size / 2, box_size / 2 ]
  106. }
  107. inner BOX {
  108. CORNERS = [ -box_size / 3, -box_size / 3, -box_size / 3 ], [ box_size / 3, box_size / 3, box_size / 3 ]
  109. DEFINE_SURFACE_REGIONS {
  110. all {
  111. INCLUDE_ELEMENTS = [ ALL_ELEMENTS ]
  112. SURFACE_CLASS = trans_cam
  113. }
  114. }
  115. }
  116. }
  117. INSTANTIATE world OBJECT
  118. {
  119. mainbox OBJECT mainbox {
  120. }
  121. rs1 RELEASE_SITE {
  122. SHAPE = world.mainbox.inner[ALL]
  123. MOLECULE = camkii'
  124. NUMBER_TO_RELEASE = num_complexes
  125. }
  126. rs2 RELEASE_SITE {
  127. SHAPE = world.mainbox.b[ALL]
  128. MOLECULE = cam
  129. NUMBER_TO_RELEASE = num_cam
  130. }
  131. }
  132. REACTION_DATA_OUTPUT
  133. {
  134. OUTPUT_BUFFER_SIZE = 1000
  135. STEP = 1e-5
  136. HEADER = "# "
  137. /* 00 counts (non-inverted) */
  138. {
  139. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner==camkii_subunit ]}, WORLD] : "00xx",
  140. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner==camkii_subunit ]}, WORLD] : "00ux",
  141. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner==camkii_subunit ]}, WORLD] : "00dx",
  142. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner==camkii_subunit ']}, WORLD] : "00xu",
  143. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner==camkii_subunit ,]}, WORLD] : "00xd",
  144. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner==camkii_subunit ,]}, WORLD] : "00ud",
  145. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner==camkii_subunit ']}, WORLD] : "00du",
  146. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner==camkii_subunit ']}, WORLD] : "00uu",
  147. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner==camkii_subunit ,]}, WORLD] : "00dd",
  148. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner!=camkii_subunitB ]}, WORLD] : "i00xx",
  149. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner!=camkii_subunitB ]}, WORLD] : "i00ux",
  150. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner!=camkii_subunitB ]}, WORLD] : "i00dx",
  151. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner!=camkii_subunitB']}, WORLD] : "i00xu",
  152. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner!=camkii_subunitB,]}, WORLD] : "i00xd",
  153. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner!=camkii_subunitB,]}, WORLD] : "i00ud",
  154. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner!=camkii_subunitB']}, WORLD] : "i00du",
  155. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner!=camkii_subunitB']}, WORLD] : "i00uu",
  156. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner!=camkii_subunitB,]}, WORLD] : "i00dd",
  157. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner==camkii_subunitB ]}, WORLD] : "01xx",
  158. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner==camkii_subunitB ]}, WORLD] : "01ux",
  159. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner==camkii_subunitB ]}, WORLD] : "01dx",
  160. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner==camkii_subunitB']}, WORLD] : "01xu",
  161. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner==camkii_subunitB,]}, WORLD] : "01xd",
  162. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner==camkii_subunitB,]}, WORLD] : "01ud",
  163. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner==camkii_subunitB']}, WORLD] : "01du",
  164. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner==camkii_subunitB']}, WORLD] : "01uu",
  165. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner==camkii_subunitB,]}, WORLD] : "01dd",
  166. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner!=camkii_subunit ]}, WORLD] : "i01xx",
  167. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner!=camkii_subunit ]}, WORLD] : "i01ux",
  168. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner!=camkii_subunit ]}, WORLD] : "i01dx",
  169. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner!=camkii_subunit ']}, WORLD] : "i01xu",
  170. COUNT[SUBUNIT{camkii : camkii_subunit [dimer_partner!=camkii_subunit ,]}, WORLD] : "i01xd",
  171. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner!=camkii_subunit ,]}, WORLD] : "i01ud",
  172. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner!=camkii_subunit ']}, WORLD] : "i01du",
  173. COUNT[SUBUNIT{camkii : camkii_subunit '[dimer_partner!=camkii_subunit ']}, WORLD] : "i01uu",
  174. COUNT[SUBUNIT{camkii : camkii_subunit ,[dimer_partner!=camkii_subunit ,]}, WORLD] : "i01dd",
  175. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner==camkii_subunit ]}, WORLD] : "10xx",
  176. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner==camkii_subunit ]}, WORLD] : "10ux",
  177. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner==camkii_subunit ]}, WORLD] : "10dx",
  178. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner==camkii_subunit ']}, WORLD] : "10xu",
  179. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner==camkii_subunit ,]}, WORLD] : "10xd",
  180. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner==camkii_subunit ,]}, WORLD] : "10ud",
  181. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner==camkii_subunit ']}, WORLD] : "10du",
  182. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner==camkii_subunit ']}, WORLD] : "10uu",
  183. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner==camkii_subunit ,]}, WORLD] : "10dd",
  184. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner!=camkii_subunitB ]}, WORLD] : "i10xx",
  185. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner!=camkii_subunitB ]}, WORLD] : "i10ux",
  186. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner!=camkii_subunitB ]}, WORLD] : "i10dx",
  187. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner!=camkii_subunitB']}, WORLD] : "i10xu",
  188. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner!=camkii_subunitB,]}, WORLD] : "i10xd",
  189. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner!=camkii_subunitB,]}, WORLD] : "i10ud",
  190. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner!=camkii_subunitB']}, WORLD] : "i10du",
  191. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner!=camkii_subunitB']}, WORLD] : "i10uu",
  192. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner!=camkii_subunitB,]}, WORLD] : "i10dd",
  193. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner==camkii_subunitB ]}, WORLD] : "11xx",
  194. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner==camkii_subunitB ]}, WORLD] : "11ux",
  195. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner==camkii_subunitB ]}, WORLD] : "11dx",
  196. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner==camkii_subunitB']}, WORLD] : "11xu",
  197. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner==camkii_subunitB,]}, WORLD] : "11xd",
  198. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner==camkii_subunitB,]}, WORLD] : "11ud",
  199. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner==camkii_subunitB']}, WORLD] : "11du",
  200. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner==camkii_subunitB']}, WORLD] : "11uu",
  201. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner==camkii_subunitB,]}, WORLD] : "11dd",
  202. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner!=camkii_subunit ]}, WORLD] : "i11xx",
  203. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner!=camkii_subunit ]}, WORLD] : "i11ux",
  204. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner!=camkii_subunit ]}, WORLD] : "i11dx",
  205. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner!=camkii_subunit ']}, WORLD] : "i11xu",
  206. COUNT[SUBUNIT{camkii : camkii_subunitB [dimer_partner!=camkii_subunit ,]}, WORLD] : "i11xd",
  207. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner!=camkii_subunit ,]}, WORLD] : "i11ud",
  208. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner!=camkii_subunit ']}, WORLD] : "i11du",
  209. COUNT[SUBUNIT{camkii : camkii_subunitB'[dimer_partner!=camkii_subunit ']}, WORLD] : "i11uu",
  210. COUNT[SUBUNIT{camkii : camkii_subunitB,[dimer_partner!=camkii_subunit ,]}, WORLD] : "i11dd",
  211. COUNT[camkii_subunit, WORLD] : "Ux",
  212. COUNT["camkii_subunit,", world.mainbox.inner] : "Ud",
  213. COUNT["camkii_subunit'", world.mainbox.inner] : "Uu",
  214. COUNT[camkii_subunitB, WORLD] : "Bx",
  215. COUNT["camkii_subunitB,", world.mainbox.inner] : "Bd",
  216. COUNT["camkii_subunitB'", world.mainbox.inner] : "Bu",
  217. COUNT[cam, WORLD] : "cam"
  218. } => countdir & "counts.dat"
  219. }