wormsim 0.0.1__py3-none-any.whl

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.
Files changed (796) hide show
  1. wormsim/__init__.py +0 -0
  2. wormsim/abstract_circuit.py +172 -0
  3. wormsim/circuit.pkl +0 -0
  4. wormsim/components/__init__.py +0 -0
  5. wormsim/components/mechanism/__init__.py +0 -0
  6. wormsim/components/mechanism/modfile/__init__.py +0 -0
  7. wormsim/components/mechanism/modfile/cainternm.mod +75 -0
  8. wormsim/components/mechanism/modfile/cca1.mod +87 -0
  9. wormsim/components/mechanism/modfile/egl19.mod +100 -0
  10. wormsim/components/mechanism/modfile/egl2.mod +76 -0
  11. wormsim/components/mechanism/modfile/egl36.mod +92 -0
  12. wormsim/components/mechanism/modfile/exc_syn_advance.mod +91 -0
  13. wormsim/components/mechanism/modfile/gapjunction.mod +41 -0
  14. wormsim/components/mechanism/modfile/gapjunction_advance.mod +40 -0
  15. wormsim/components/mechanism/modfile/inh_syn_advance.mod +91 -0
  16. wormsim/components/mechanism/modfile/irk.mod +76 -0
  17. wormsim/components/mechanism/modfile/kcnl.mod +76 -0
  18. wormsim/components/mechanism/modfile/kqt3.mod +110 -0
  19. wormsim/components/mechanism/modfile/kvs1.mod +87 -0
  20. wormsim/components/mechanism/modfile/nca.mod +41 -0
  21. wormsim/components/mechanism/modfile/neuron_to_neuron_exc_syn.mod +92 -0
  22. wormsim/components/mechanism/modfile/neuron_to_neuron_inh_syn.mod +92 -0
  23. wormsim/components/mechanism/modfile/shk1.mod +86 -0
  24. wormsim/components/mechanism/modfile/shl1.mod +101 -0
  25. wormsim/components/mechanism/modfile/slo1_egl19.mod +148 -0
  26. wormsim/components/mechanism/modfile/slo1_unc2.mod +139 -0
  27. wormsim/components/mechanism/modfile/slo2_egl19.mod +148 -0
  28. wormsim/components/mechanism/modfile/slo2_unc2.mod +138 -0
  29. wormsim/components/mechanism/modfile/unc2.mod +90 -0
  30. wormsim/components/mechanism/x86_64/__init__.py +0 -0
  31. wormsim/components/mechanism/x86_64/cainternm.c +594 -0
  32. wormsim/components/mechanism/x86_64/cainternm.o +0 -0
  33. wormsim/components/mechanism/x86_64/cca1.c +621 -0
  34. wormsim/components/mechanism/x86_64/cca1.o +0 -0
  35. wormsim/components/mechanism/x86_64/egl19.c +681 -0
  36. wormsim/components/mechanism/x86_64/egl19.o +0 -0
  37. wormsim/components/mechanism/x86_64/egl2.c +569 -0
  38. wormsim/components/mechanism/x86_64/egl2.o +0 -0
  39. wormsim/components/mechanism/x86_64/egl36.c +615 -0
  40. wormsim/components/mechanism/x86_64/egl36.o +0 -0
  41. wormsim/components/mechanism/x86_64/exc_syn_advance.c +587 -0
  42. wormsim/components/mechanism/x86_64/exc_syn_advance.o +0 -0
  43. wormsim/components/mechanism/x86_64/gapjunction.c +364 -0
  44. wormsim/components/mechanism/x86_64/gapjunction.o +0 -0
  45. wormsim/components/mechanism/x86_64/gapjunction_advance.c +378 -0
  46. wormsim/components/mechanism/x86_64/gapjunction_advance.o +0 -0
  47. wormsim/components/mechanism/x86_64/inh_syn_advance.c +587 -0
  48. wormsim/components/mechanism/x86_64/inh_syn_advance.o +0 -0
  49. wormsim/components/mechanism/x86_64/irk.c +577 -0
  50. wormsim/components/mechanism/x86_64/irk.o +0 -0
  51. wormsim/components/mechanism/x86_64/kcnl.c +565 -0
  52. wormsim/components/mechanism/x86_64/kcnl.o +0 -0
  53. wormsim/components/mechanism/x86_64/kqt3.c +723 -0
  54. wormsim/components/mechanism/x86_64/kqt3.o +0 -0
  55. wormsim/components/mechanism/x86_64/kvs1.c +621 -0
  56. wormsim/components/mechanism/x86_64/kvs1.o +0 -0
  57. wormsim/components/mechanism/x86_64/makemod2c_inc +185 -0
  58. wormsim/components/mechanism/x86_64/mod_func.c +82 -0
  59. wormsim/components/mechanism/x86_64/mod_func.o +0 -0
  60. wormsim/components/mechanism/x86_64/nca.c +366 -0
  61. wormsim/components/mechanism/x86_64/nca.o +0 -0
  62. wormsim/components/mechanism/x86_64/neuron_to_neuron_exc_syn.c +572 -0
  63. wormsim/components/mechanism/x86_64/neuron_to_neuron_exc_syn.o +0 -0
  64. wormsim/components/mechanism/x86_64/neuron_to_neuron_inh_syn.c +572 -0
  65. wormsim/components/mechanism/x86_64/neuron_to_neuron_inh_syn.o +0 -0
  66. wormsim/components/mechanism/x86_64/shk1.c +616 -0
  67. wormsim/components/mechanism/x86_64/shk1.o +0 -0
  68. wormsim/components/mechanism/x86_64/shl1.c +676 -0
  69. wormsim/components/mechanism/x86_64/shl1.o +0 -0
  70. wormsim/components/mechanism/x86_64/slo1_egl19.c +820 -0
  71. wormsim/components/mechanism/x86_64/slo1_egl19.o +0 -0
  72. wormsim/components/mechanism/x86_64/slo1_unc2.c +777 -0
  73. wormsim/components/mechanism/x86_64/slo1_unc2.o +0 -0
  74. wormsim/components/mechanism/x86_64/slo2_egl19.c +820 -0
  75. wormsim/components/mechanism/x86_64/slo2_egl19.o +0 -0
  76. wormsim/components/mechanism/x86_64/slo2_unc2.c +775 -0
  77. wormsim/components/mechanism/x86_64/slo2_unc2.o +0 -0
  78. wormsim/components/mechanism/x86_64/special +17 -0
  79. wormsim/components/mechanism/x86_64/unc2.c +636 -0
  80. wormsim/components/mechanism/x86_64/unc2.o +0 -0
  81. wormsim/components/model/ADAL.hoc +135 -0
  82. wormsim/components/model/ADAR.hoc +135 -0
  83. wormsim/components/model/ADEL.hoc +183 -0
  84. wormsim/components/model/ADER.hoc +183 -0
  85. wormsim/components/model/ADFL.hoc +164 -0
  86. wormsim/components/model/ADFR.hoc +164 -0
  87. wormsim/components/model/ADLL.hoc +185 -0
  88. wormsim/components/model/ADLR.hoc +185 -0
  89. wormsim/components/model/AFDL.hoc +164 -0
  90. wormsim/components/model/AFDR.hoc +164 -0
  91. wormsim/components/model/AIAL.hoc +129 -0
  92. wormsim/components/model/AIAR.hoc +129 -0
  93. wormsim/components/model/AIBL.hoc +147 -0
  94. wormsim/components/model/AIBR.hoc +147 -0
  95. wormsim/components/model/AIML.hoc +130 -0
  96. wormsim/components/model/AIMR.hoc +130 -0
  97. wormsim/components/model/AINL.hoc +157 -0
  98. wormsim/components/model/AINR.hoc +157 -0
  99. wormsim/components/model/AIYL.hoc +129 -0
  100. wormsim/components/model/AIYR.hoc +129 -0
  101. wormsim/components/model/AIZL.hoc +137 -0
  102. wormsim/components/model/AIZR.hoc +137 -0
  103. wormsim/components/model/ALA.hoc +148 -0
  104. wormsim/components/model/ALML.hoc +203 -0
  105. wormsim/components/model/ALMR.hoc +203 -0
  106. wormsim/components/model/ALNL.hoc +175 -0
  107. wormsim/components/model/ALNR.hoc +175 -0
  108. wormsim/components/model/AQR.hoc +187 -0
  109. wormsim/components/model/AS01.hoc +151 -0
  110. wormsim/components/model/AS02.hoc +152 -0
  111. wormsim/components/model/AS03.hoc +151 -0
  112. wormsim/components/model/AS04.hoc +154 -0
  113. wormsim/components/model/AS05.hoc +155 -0
  114. wormsim/components/model/AS06.hoc +153 -0
  115. wormsim/components/model/AS07.hoc +156 -0
  116. wormsim/components/model/AS08.hoc +158 -0
  117. wormsim/components/model/AS09.hoc +154 -0
  118. wormsim/components/model/AS10.hoc +153 -0
  119. wormsim/components/model/AS11.hoc +154 -0
  120. wormsim/components/model/ASEL.hoc +173 -0
  121. wormsim/components/model/ASER.hoc +173 -0
  122. wormsim/components/model/ASGL.hoc +160 -0
  123. wormsim/components/model/ASGR.hoc +160 -0
  124. wormsim/components/model/ASHL.hoc +165 -0
  125. wormsim/components/model/ASHR.hoc +165 -0
  126. wormsim/components/model/ASIL.hoc +168 -0
  127. wormsim/components/model/ASIR.hoc +168 -0
  128. wormsim/components/model/ASJL.hoc +167 -0
  129. wormsim/components/model/ASJR.hoc +167 -0
  130. wormsim/components/model/ASKL.hoc +165 -0
  131. wormsim/components/model/ASKR.hoc +165 -0
  132. wormsim/components/model/AUAL.hoc +164 -0
  133. wormsim/components/model/AUAR.hoc +164 -0
  134. wormsim/components/model/AVAL.hoc +197 -0
  135. wormsim/components/model/AVAR.hoc +197 -0
  136. wormsim/components/model/AVBL.hoc +216 -0
  137. wormsim/components/model/AVBR.hoc +216 -0
  138. wormsim/components/model/AVDL.hoc +197 -0
  139. wormsim/components/model/AVDR.hoc +197 -0
  140. wormsim/components/model/AVEL.hoc +149 -0
  141. wormsim/components/model/AVER.hoc +149 -0
  142. wormsim/components/model/AVFL.hoc +195 -0
  143. wormsim/components/model/AVFR.hoc +196 -0
  144. wormsim/components/model/AVG.hoc +166 -0
  145. wormsim/components/model/AVHL.hoc +172 -0
  146. wormsim/components/model/AVHR.hoc +172 -0
  147. wormsim/components/model/AVJL.hoc +173 -0
  148. wormsim/components/model/AVJR.hoc +172 -0
  149. wormsim/components/model/AVKL.hoc +204 -0
  150. wormsim/components/model/AVKR.hoc +204 -0
  151. wormsim/components/model/AVL.hoc +180 -0
  152. wormsim/components/model/AVM.hoc +203 -0
  153. wormsim/components/model/AWAL.hoc +165 -0
  154. wormsim/components/model/AWAR.hoc +165 -0
  155. wormsim/components/model/AWBL.hoc +165 -0
  156. wormsim/components/model/AWBR.hoc +165 -0
  157. wormsim/components/model/AWCL.hoc +168 -0
  158. wormsim/components/model/AWCR.hoc +168 -0
  159. wormsim/components/model/BAGL.hoc +160 -0
  160. wormsim/components/model/BAGR.hoc +160 -0
  161. wormsim/components/model/BDUL.hoc +136 -0
  162. wormsim/components/model/BDUR.hoc +136 -0
  163. wormsim/components/model/CANL.hoc +165 -0
  164. wormsim/components/model/CANR.hoc +165 -0
  165. wormsim/components/model/CEPDL.hoc +182 -0
  166. wormsim/components/model/CEPDR.hoc +182 -0
  167. wormsim/components/model/CEPVL.hoc +179 -0
  168. wormsim/components/model/CEPVR.hoc +179 -0
  169. wormsim/components/model/DA01.hoc +177 -0
  170. wormsim/components/model/DA02.hoc +180 -0
  171. wormsim/components/model/DA03.hoc +160 -0
  172. wormsim/components/model/DA04.hoc +167 -0
  173. wormsim/components/model/DA05.hoc +176 -0
  174. wormsim/components/model/DA06.hoc +187 -0
  175. wormsim/components/model/DA07.hoc +175 -0
  176. wormsim/components/model/DA08.hoc +161 -0
  177. wormsim/components/model/DA09.hoc +161 -0
  178. wormsim/components/model/DB01.hoc +193 -0
  179. wormsim/components/model/DB02.hoc +184 -0
  180. wormsim/components/model/DB03.hoc +181 -0
  181. wormsim/components/model/DB04.hoc +190 -0
  182. wormsim/components/model/DB05.hoc +182 -0
  183. wormsim/components/model/DB06.hoc +166 -0
  184. wormsim/components/model/DB07.hoc +162 -0
  185. wormsim/components/model/DD01.hoc +180 -0
  186. wormsim/components/model/DD02.hoc +203 -0
  187. wormsim/components/model/DD03.hoc +211 -0
  188. wormsim/components/model/DD04.hoc +221 -0
  189. wormsim/components/model/DD05.hoc +208 -0
  190. wormsim/components/model/DD06.hoc +211 -0
  191. wormsim/components/model/DVA.hoc +178 -0
  192. wormsim/components/model/DVB.hoc +137 -0
  193. wormsim/components/model/DVC.hoc +178 -0
  194. wormsim/components/model/FLPL.hoc +261 -0
  195. wormsim/components/model/FLPR.hoc +261 -0
  196. wormsim/components/model/HSNL.hoc +161 -0
  197. wormsim/components/model/HSNR.hoc +161 -0
  198. wormsim/components/model/I1L.hoc +157 -0
  199. wormsim/components/model/I1R.hoc +157 -0
  200. wormsim/components/model/I2L.hoc +161 -0
  201. wormsim/components/model/I2R.hoc +161 -0
  202. wormsim/components/model/I3.hoc +165 -0
  203. wormsim/components/model/I4.hoc +171 -0
  204. wormsim/components/model/I5.hoc +363 -0
  205. wormsim/components/model/I6.hoc +176 -0
  206. wormsim/components/model/IL1DL.hoc +177 -0
  207. wormsim/components/model/IL1DR.hoc +176 -0
  208. wormsim/components/model/IL1L.hoc +179 -0
  209. wormsim/components/model/IL1R.hoc +179 -0
  210. wormsim/components/model/IL1VL.hoc +151 -0
  211. wormsim/components/model/IL1VR.hoc +151 -0
  212. wormsim/components/model/IL2DL.hoc +151 -0
  213. wormsim/components/model/IL2DR.hoc +151 -0
  214. wormsim/components/model/IL2L.hoc +151 -0
  215. wormsim/components/model/IL2R.hoc +151 -0
  216. wormsim/components/model/IL2VL.hoc +150 -0
  217. wormsim/components/model/IL2VR.hoc +150 -0
  218. wormsim/components/model/LUAL.hoc +129 -0
  219. wormsim/components/model/LUAR.hoc +129 -0
  220. wormsim/components/model/M1.hoc +161 -0
  221. wormsim/components/model/M2L.hoc +131 -0
  222. wormsim/components/model/M2R.hoc +131 -0
  223. wormsim/components/model/M3L.hoc +191 -0
  224. wormsim/components/model/M3R.hoc +191 -0
  225. wormsim/components/model/M4.hoc +192 -0
  226. wormsim/components/model/M5.hoc +256 -0
  227. wormsim/components/model/MCL.hoc +181 -0
  228. wormsim/components/model/MCR.hoc +181 -0
  229. wormsim/components/model/MI.hoc +134 -0
  230. wormsim/components/model/NSML.hoc +165 -0
  231. wormsim/components/model/NSMR.hoc +165 -0
  232. wormsim/components/model/OLLL.hoc +187 -0
  233. wormsim/components/model/OLLR.hoc +187 -0
  234. wormsim/components/model/OLQDL.hoc +175 -0
  235. wormsim/components/model/OLQDR.hoc +175 -0
  236. wormsim/components/model/OLQVL.hoc +150 -0
  237. wormsim/components/model/OLQVR.hoc +150 -0
  238. wormsim/components/model/PDA.hoc +142 -0
  239. wormsim/components/model/PDB.hoc +149 -0
  240. wormsim/components/model/PDEL.hoc +192 -0
  241. wormsim/components/model/PDER.hoc +193 -0
  242. wormsim/components/model/PHAL.hoc +149 -0
  243. wormsim/components/model/PHAR.hoc +149 -0
  244. wormsim/components/model/PHBL.hoc +149 -0
  245. wormsim/components/model/PHBR.hoc +149 -0
  246. wormsim/components/model/PHCL.hoc +154 -0
  247. wormsim/components/model/PHCR.hoc +154 -0
  248. wormsim/components/model/PLML.hoc +216 -0
  249. wormsim/components/model/PLMR.hoc +216 -0
  250. wormsim/components/model/PLNL.hoc +186 -0
  251. wormsim/components/model/PLNR.hoc +187 -0
  252. wormsim/components/model/PQR.hoc +153 -0
  253. wormsim/components/model/PVCL.hoc +173 -0
  254. wormsim/components/model/PVCR.hoc +175 -0
  255. wormsim/components/model/PVDL.hoc +8568 -0
  256. wormsim/components/model/PVDR.hoc +8566 -0
  257. wormsim/components/model/PVM.hoc +151 -0
  258. wormsim/components/model/PVNL.hoc +322 -0
  259. wormsim/components/model/PVNR.hoc +287 -0
  260. wormsim/components/model/PVPL.hoc +166 -0
  261. wormsim/components/model/PVPR.hoc +164 -0
  262. wormsim/components/model/PVQL.hoc +178 -0
  263. wormsim/components/model/PVQR.hoc +177 -0
  264. wormsim/components/model/PVR.hoc +205 -0
  265. wormsim/components/model/PVT.hoc +174 -0
  266. wormsim/components/model/PVWL.hoc +131 -0
  267. wormsim/components/model/PVWR.hoc +131 -0
  268. wormsim/components/model/RIAL.hoc +141 -0
  269. wormsim/components/model/RIAR.hoc +141 -0
  270. wormsim/components/model/RIBL.hoc +231 -0
  271. wormsim/components/model/RIBR.hoc +231 -0
  272. wormsim/components/model/RICL.hoc +154 -0
  273. wormsim/components/model/RICR.hoc +154 -0
  274. wormsim/components/model/RID.hoc +207 -0
  275. wormsim/components/model/RIFL.hoc +130 -0
  276. wormsim/components/model/RIFR.hoc +130 -0
  277. wormsim/components/model/RIGL.hoc +129 -0
  278. wormsim/components/model/RIGR.hoc +129 -0
  279. wormsim/components/model/RIH.hoc +172 -0
  280. wormsim/components/model/RIML.hoc +198 -0
  281. wormsim/components/model/RIMR.hoc +198 -0
  282. wormsim/components/model/RIPL.hoc +227 -0
  283. wormsim/components/model/RIPR.hoc +227 -0
  284. wormsim/components/model/RIR.hoc +167 -0
  285. wormsim/components/model/RIS.hoc +151 -0
  286. wormsim/components/model/RIVL.hoc +187 -0
  287. wormsim/components/model/RIVR.hoc +187 -0
  288. wormsim/components/model/RMDDL.hoc +130 -0
  289. wormsim/components/model/RMDDR.hoc +130 -0
  290. wormsim/components/model/RMDL.hoc +132 -0
  291. wormsim/components/model/RMDR.hoc +132 -0
  292. wormsim/components/model/RMDVL.hoc +132 -0
  293. wormsim/components/model/RMDVR.hoc +132 -0
  294. wormsim/components/model/RMED.hoc +161 -0
  295. wormsim/components/model/RMEL.hoc +132 -0
  296. wormsim/components/model/RMER.hoc +132 -0
  297. wormsim/components/model/RMEV.hoc +205 -0
  298. wormsim/components/model/RMFL.hoc +168 -0
  299. wormsim/components/model/RMFR.hoc +168 -0
  300. wormsim/components/model/RMGL.hoc +134 -0
  301. wormsim/components/model/RMGR.hoc +134 -0
  302. wormsim/components/model/RMHL.hoc +168 -0
  303. wormsim/components/model/RMHR.hoc +168 -0
  304. wormsim/components/model/SAADL.hoc +207 -0
  305. wormsim/components/model/SAADR.hoc +207 -0
  306. wormsim/components/model/SAAVL.hoc +167 -0
  307. wormsim/components/model/SAAVR.hoc +167 -0
  308. wormsim/components/model/SABD.hoc +192 -0
  309. wormsim/components/model/SABVL.hoc +143 -0
  310. wormsim/components/model/SABVR.hoc +143 -0
  311. wormsim/components/model/SDQL.hoc +150 -0
  312. wormsim/components/model/SDQR.hoc +135 -0
  313. wormsim/components/model/SIADL.hoc +191 -0
  314. wormsim/components/model/SIADR.hoc +191 -0
  315. wormsim/components/model/SIAVL.hoc +159 -0
  316. wormsim/components/model/SIAVR.hoc +159 -0
  317. wormsim/components/model/SIBDL.hoc +192 -0
  318. wormsim/components/model/SIBDR.hoc +192 -0
  319. wormsim/components/model/SIBVL.hoc +227 -0
  320. wormsim/components/model/SIBVR.hoc +227 -0
  321. wormsim/components/model/SMBDL.hoc +161 -0
  322. wormsim/components/model/SMBDR.hoc +161 -0
  323. wormsim/components/model/SMBVL.hoc +172 -0
  324. wormsim/components/model/SMBVR.hoc +172 -0
  325. wormsim/components/model/SMDDL.hoc +162 -0
  326. wormsim/components/model/SMDDR.hoc +162 -0
  327. wormsim/components/model/SMDVL.hoc +166 -0
  328. wormsim/components/model/SMDVR.hoc +166 -0
  329. wormsim/components/model/URADL.hoc +152 -0
  330. wormsim/components/model/URADR.hoc +152 -0
  331. wormsim/components/model/URAVL.hoc +150 -0
  332. wormsim/components/model/URAVR.hoc +150 -0
  333. wormsim/components/model/URBL.hoc +164 -0
  334. wormsim/components/model/URBR.hoc +164 -0
  335. wormsim/components/model/URXL.hoc +172 -0
  336. wormsim/components/model/URXR.hoc +172 -0
  337. wormsim/components/model/URYDL.hoc +160 -0
  338. wormsim/components/model/URYDR.hoc +160 -0
  339. wormsim/components/model/URYVL.hoc +150 -0
  340. wormsim/components/model/URYVR.hoc +150 -0
  341. wormsim/components/model/VA01.hoc +191 -0
  342. wormsim/components/model/VA02.hoc +144 -0
  343. wormsim/components/model/VA03.hoc +147 -0
  344. wormsim/components/model/VA04.hoc +148 -0
  345. wormsim/components/model/VA05.hoc +147 -0
  346. wormsim/components/model/VA06.hoc +156 -0
  347. wormsim/components/model/VA07.hoc +157 -0
  348. wormsim/components/model/VA08.hoc +156 -0
  349. wormsim/components/model/VA09.hoc +154 -0
  350. wormsim/components/model/VA10.hoc +145 -0
  351. wormsim/components/model/VA11.hoc +141 -0
  352. wormsim/components/model/VA12.hoc +123 -0
  353. wormsim/components/model/VB01.hoc +195 -0
  354. wormsim/components/model/VB02.hoc +192 -0
  355. wormsim/components/model/VB03.hoc +157 -0
  356. wormsim/components/model/VB04.hoc +159 -0
  357. wormsim/components/model/VB05.hoc +159 -0
  358. wormsim/components/model/VB06.hoc +158 -0
  359. wormsim/components/model/VB07.hoc +155 -0
  360. wormsim/components/model/VB08.hoc +155 -0
  361. wormsim/components/model/VB09.hoc +148 -0
  362. wormsim/components/model/VB10.hoc +149 -0
  363. wormsim/components/model/VB11.hoc +146 -0
  364. wormsim/components/model/VC01.hoc +159 -0
  365. wormsim/components/model/VC02.hoc +157 -0
  366. wormsim/components/model/VC03.hoc +275 -0
  367. wormsim/components/model/VC04.hoc +255 -0
  368. wormsim/components/model/VC05.hoc +255 -0
  369. wormsim/components/model/VC06.hoc +143 -0
  370. wormsim/components/model/VD01.hoc +194 -0
  371. wormsim/components/model/VD02.hoc +186 -0
  372. wormsim/components/model/VD03.hoc +187 -0
  373. wormsim/components/model/VD04.hoc +190 -0
  374. wormsim/components/model/VD05.hoc +190 -0
  375. wormsim/components/model/VD06.hoc +190 -0
  376. wormsim/components/model/VD07.hoc +194 -0
  377. wormsim/components/model/VD08.hoc +197 -0
  378. wormsim/components/model/VD09.hoc +189 -0
  379. wormsim/components/model/VD10.hoc +190 -0
  380. wormsim/components/model/VD11.hoc +190 -0
  381. wormsim/components/model/VD12.hoc +190 -0
  382. wormsim/components/model/VD13.hoc +189 -0
  383. wormsim/components/model/__init__.py +0 -0
  384. wormsim/components/param/__init__.py +0 -0
  385. wormsim/components/param/cell/ADAL.json +30 -0
  386. wormsim/components/param/cell/ADAR.json +30 -0
  387. wormsim/components/param/cell/ADEL.json +30 -0
  388. wormsim/components/param/cell/ADER.json +30 -0
  389. wormsim/components/param/cell/ADFL.json +30 -0
  390. wormsim/components/param/cell/ADFR.json +30 -0
  391. wormsim/components/param/cell/ADLL.json +30 -0
  392. wormsim/components/param/cell/ADLR.json +30 -0
  393. wormsim/components/param/cell/AFDL.json +30 -0
  394. wormsim/components/param/cell/AFDR.json +30 -0
  395. wormsim/components/param/cell/AIAL.json +30 -0
  396. wormsim/components/param/cell/AIAR.json +30 -0
  397. wormsim/components/param/cell/AIBL.json +30 -0
  398. wormsim/components/param/cell/AIBR.json +30 -0
  399. wormsim/components/param/cell/AIML.json +30 -0
  400. wormsim/components/param/cell/AIMR.json +30 -0
  401. wormsim/components/param/cell/AINL.json +30 -0
  402. wormsim/components/param/cell/AINR.json +30 -0
  403. wormsim/components/param/cell/AIYL.json +30 -0
  404. wormsim/components/param/cell/AIYR.json +30 -0
  405. wormsim/components/param/cell/AIZL.json +30 -0
  406. wormsim/components/param/cell/AIZR.json +30 -0
  407. wormsim/components/param/cell/ALA.json +30 -0
  408. wormsim/components/param/cell/ALML.json +30 -0
  409. wormsim/components/param/cell/ALMR.json +30 -0
  410. wormsim/components/param/cell/ALNL.json +30 -0
  411. wormsim/components/param/cell/ALNR.json +30 -0
  412. wormsim/components/param/cell/AQR.json +30 -0
  413. wormsim/components/param/cell/AS01.json +30 -0
  414. wormsim/components/param/cell/AS02.json +30 -0
  415. wormsim/components/param/cell/AS03.json +30 -0
  416. wormsim/components/param/cell/AS04.json +30 -0
  417. wormsim/components/param/cell/AS05.json +30 -0
  418. wormsim/components/param/cell/AS06.json +30 -0
  419. wormsim/components/param/cell/AS07.json +30 -0
  420. wormsim/components/param/cell/AS08.json +30 -0
  421. wormsim/components/param/cell/AS09.json +30 -0
  422. wormsim/components/param/cell/AS10.json +30 -0
  423. wormsim/components/param/cell/AS11.json +30 -0
  424. wormsim/components/param/cell/ASEL.json +30 -0
  425. wormsim/components/param/cell/ASER.json +30 -0
  426. wormsim/components/param/cell/ASGL.json +30 -0
  427. wormsim/components/param/cell/ASGR.json +30 -0
  428. wormsim/components/param/cell/ASHL.json +30 -0
  429. wormsim/components/param/cell/ASHR.json +30 -0
  430. wormsim/components/param/cell/ASIL.json +30 -0
  431. wormsim/components/param/cell/ASIR.json +30 -0
  432. wormsim/components/param/cell/ASJL.json +30 -0
  433. wormsim/components/param/cell/ASJR.json +30 -0
  434. wormsim/components/param/cell/ASKL.json +30 -0
  435. wormsim/components/param/cell/ASKR.json +30 -0
  436. wormsim/components/param/cell/AUAL.json +30 -0
  437. wormsim/components/param/cell/AUAR.json +30 -0
  438. wormsim/components/param/cell/AVAL.json +30 -0
  439. wormsim/components/param/cell/AVAR.json +30 -0
  440. wormsim/components/param/cell/AVBL.json +30 -0
  441. wormsim/components/param/cell/AVBR.json +30 -0
  442. wormsim/components/param/cell/AVDL.json +30 -0
  443. wormsim/components/param/cell/AVDR.json +30 -0
  444. wormsim/components/param/cell/AVEL.json +30 -0
  445. wormsim/components/param/cell/AVER.json +30 -0
  446. wormsim/components/param/cell/AVFL.json +30 -0
  447. wormsim/components/param/cell/AVFR.json +30 -0
  448. wormsim/components/param/cell/AVG.json +30 -0
  449. wormsim/components/param/cell/AVHL.json +30 -0
  450. wormsim/components/param/cell/AVHR.json +30 -0
  451. wormsim/components/param/cell/AVJL.json +30 -0
  452. wormsim/components/param/cell/AVJR.json +30 -0
  453. wormsim/components/param/cell/AVKL.json +30 -0
  454. wormsim/components/param/cell/AVKR.json +30 -0
  455. wormsim/components/param/cell/AVL.json +30 -0
  456. wormsim/components/param/cell/AVM.json +30 -0
  457. wormsim/components/param/cell/AWAL.json +30 -0
  458. wormsim/components/param/cell/AWAR.json +30 -0
  459. wormsim/components/param/cell/AWBL.json +30 -0
  460. wormsim/components/param/cell/AWBR.json +30 -0
  461. wormsim/components/param/cell/AWCL.json +30 -0
  462. wormsim/components/param/cell/AWCR.json +30 -0
  463. wormsim/components/param/cell/BAGL.json +30 -0
  464. wormsim/components/param/cell/BAGR.json +30 -0
  465. wormsim/components/param/cell/BDUL.json +30 -0
  466. wormsim/components/param/cell/BDUR.json +30 -0
  467. wormsim/components/param/cell/CANL.json +30 -0
  468. wormsim/components/param/cell/CANR.json +30 -0
  469. wormsim/components/param/cell/CEPDL.json +30 -0
  470. wormsim/components/param/cell/CEPDR.json +30 -0
  471. wormsim/components/param/cell/CEPVL.json +30 -0
  472. wormsim/components/param/cell/CEPVR.json +30 -0
  473. wormsim/components/param/cell/DA01.json +30 -0
  474. wormsim/components/param/cell/DA02.json +30 -0
  475. wormsim/components/param/cell/DA03.json +30 -0
  476. wormsim/components/param/cell/DA04.json +30 -0
  477. wormsim/components/param/cell/DA05.json +30 -0
  478. wormsim/components/param/cell/DA06.json +30 -0
  479. wormsim/components/param/cell/DA07.json +30 -0
  480. wormsim/components/param/cell/DA08.json +30 -0
  481. wormsim/components/param/cell/DA09.json +30 -0
  482. wormsim/components/param/cell/DB01.json +30 -0
  483. wormsim/components/param/cell/DB02.json +30 -0
  484. wormsim/components/param/cell/DB03.json +30 -0
  485. wormsim/components/param/cell/DB04.json +30 -0
  486. wormsim/components/param/cell/DB05.json +30 -0
  487. wormsim/components/param/cell/DB06.json +30 -0
  488. wormsim/components/param/cell/DB07.json +30 -0
  489. wormsim/components/param/cell/DD01.json +30 -0
  490. wormsim/components/param/cell/DD02.json +30 -0
  491. wormsim/components/param/cell/DD03.json +30 -0
  492. wormsim/components/param/cell/DD04.json +30 -0
  493. wormsim/components/param/cell/DD05.json +30 -0
  494. wormsim/components/param/cell/DD06.json +30 -0
  495. wormsim/components/param/cell/DVA.json +30 -0
  496. wormsim/components/param/cell/DVB.json +30 -0
  497. wormsim/components/param/cell/DVC.json +30 -0
  498. wormsim/components/param/cell/FLPL.json +30 -0
  499. wormsim/components/param/cell/FLPR.json +30 -0
  500. wormsim/components/param/cell/HSNL.json +30 -0
  501. wormsim/components/param/cell/HSNR.json +30 -0
  502. wormsim/components/param/cell/I1L.json +30 -0
  503. wormsim/components/param/cell/I1R.json +30 -0
  504. wormsim/components/param/cell/I2L.json +30 -0
  505. wormsim/components/param/cell/I2R.json +30 -0
  506. wormsim/components/param/cell/I3.json +30 -0
  507. wormsim/components/param/cell/I4.json +30 -0
  508. wormsim/components/param/cell/I5.json +30 -0
  509. wormsim/components/param/cell/I6.json +30 -0
  510. wormsim/components/param/cell/IL1DL.json +30 -0
  511. wormsim/components/param/cell/IL1DR.json +30 -0
  512. wormsim/components/param/cell/IL1L.json +30 -0
  513. wormsim/components/param/cell/IL1R.json +30 -0
  514. wormsim/components/param/cell/IL1VL.json +30 -0
  515. wormsim/components/param/cell/IL1VR.json +30 -0
  516. wormsim/components/param/cell/IL2DL.json +30 -0
  517. wormsim/components/param/cell/IL2DR.json +30 -0
  518. wormsim/components/param/cell/IL2L.json +30 -0
  519. wormsim/components/param/cell/IL2R.json +30 -0
  520. wormsim/components/param/cell/IL2VL.json +30 -0
  521. wormsim/components/param/cell/IL2VR.json +30 -0
  522. wormsim/components/param/cell/LUAL.json +30 -0
  523. wormsim/components/param/cell/LUAR.json +30 -0
  524. wormsim/components/param/cell/M1.json +30 -0
  525. wormsim/components/param/cell/M2L.json +30 -0
  526. wormsim/components/param/cell/M2R.json +30 -0
  527. wormsim/components/param/cell/M3L.json +30 -0
  528. wormsim/components/param/cell/M3R.json +30 -0
  529. wormsim/components/param/cell/M4.json +30 -0
  530. wormsim/components/param/cell/M5.json +30 -0
  531. wormsim/components/param/cell/MCDL01.json +25 -0
  532. wormsim/components/param/cell/MCDL02.json +25 -0
  533. wormsim/components/param/cell/MCDL03.json +25 -0
  534. wormsim/components/param/cell/MCDL04.json +25 -0
  535. wormsim/components/param/cell/MCDL05.json +25 -0
  536. wormsim/components/param/cell/MCDL06.json +25 -0
  537. wormsim/components/param/cell/MCDL07.json +25 -0
  538. wormsim/components/param/cell/MCDL08.json +25 -0
  539. wormsim/components/param/cell/MCDL09.json +25 -0
  540. wormsim/components/param/cell/MCDL10.json +25 -0
  541. wormsim/components/param/cell/MCDL11.json +25 -0
  542. wormsim/components/param/cell/MCDL12.json +25 -0
  543. wormsim/components/param/cell/MCDL13.json +25 -0
  544. wormsim/components/param/cell/MCDL14.json +25 -0
  545. wormsim/components/param/cell/MCDL15.json +25 -0
  546. wormsim/components/param/cell/MCDL16.json +25 -0
  547. wormsim/components/param/cell/MCDL17.json +25 -0
  548. wormsim/components/param/cell/MCDL18.json +25 -0
  549. wormsim/components/param/cell/MCDL19.json +25 -0
  550. wormsim/components/param/cell/MCDL20.json +25 -0
  551. wormsim/components/param/cell/MCDL21.json +25 -0
  552. wormsim/components/param/cell/MCDL22.json +25 -0
  553. wormsim/components/param/cell/MCDL23.json +25 -0
  554. wormsim/components/param/cell/MCDL24.json +25 -0
  555. wormsim/components/param/cell/MCDR01.json +25 -0
  556. wormsim/components/param/cell/MCDR02.json +25 -0
  557. wormsim/components/param/cell/MCDR03.json +25 -0
  558. wormsim/components/param/cell/MCDR04.json +25 -0
  559. wormsim/components/param/cell/MCDR05.json +25 -0
  560. wormsim/components/param/cell/MCDR06.json +25 -0
  561. wormsim/components/param/cell/MCDR07.json +25 -0
  562. wormsim/components/param/cell/MCDR08.json +25 -0
  563. wormsim/components/param/cell/MCDR09.json +25 -0
  564. wormsim/components/param/cell/MCDR10.json +25 -0
  565. wormsim/components/param/cell/MCDR11.json +25 -0
  566. wormsim/components/param/cell/MCDR12.json +25 -0
  567. wormsim/components/param/cell/MCDR13.json +25 -0
  568. wormsim/components/param/cell/MCDR14.json +25 -0
  569. wormsim/components/param/cell/MCDR15.json +25 -0
  570. wormsim/components/param/cell/MCDR16.json +25 -0
  571. wormsim/components/param/cell/MCDR17.json +25 -0
  572. wormsim/components/param/cell/MCDR18.json +25 -0
  573. wormsim/components/param/cell/MCDR19.json +25 -0
  574. wormsim/components/param/cell/MCDR20.json +25 -0
  575. wormsim/components/param/cell/MCDR21.json +25 -0
  576. wormsim/components/param/cell/MCDR22.json +25 -0
  577. wormsim/components/param/cell/MCDR23.json +25 -0
  578. wormsim/components/param/cell/MCDR24.json +25 -0
  579. wormsim/components/param/cell/MCL.json +30 -0
  580. wormsim/components/param/cell/MCR.json +30 -0
  581. wormsim/components/param/cell/MCVL01.json +25 -0
  582. wormsim/components/param/cell/MCVL02.json +25 -0
  583. wormsim/components/param/cell/MCVL03.json +25 -0
  584. wormsim/components/param/cell/MCVL04.json +25 -0
  585. wormsim/components/param/cell/MCVL05.json +25 -0
  586. wormsim/components/param/cell/MCVL06.json +25 -0
  587. wormsim/components/param/cell/MCVL07.json +25 -0
  588. wormsim/components/param/cell/MCVL08.json +25 -0
  589. wormsim/components/param/cell/MCVL09.json +25 -0
  590. wormsim/components/param/cell/MCVL10.json +25 -0
  591. wormsim/components/param/cell/MCVL11.json +25 -0
  592. wormsim/components/param/cell/MCVL12.json +25 -0
  593. wormsim/components/param/cell/MCVL13.json +25 -0
  594. wormsim/components/param/cell/MCVL14.json +25 -0
  595. wormsim/components/param/cell/MCVL15.json +25 -0
  596. wormsim/components/param/cell/MCVL16.json +25 -0
  597. wormsim/components/param/cell/MCVL17.json +25 -0
  598. wormsim/components/param/cell/MCVL18.json +25 -0
  599. wormsim/components/param/cell/MCVL19.json +25 -0
  600. wormsim/components/param/cell/MCVL20.json +25 -0
  601. wormsim/components/param/cell/MCVL21.json +25 -0
  602. wormsim/components/param/cell/MCVL22.json +25 -0
  603. wormsim/components/param/cell/MCVL23.json +25 -0
  604. wormsim/components/param/cell/MCVL24.json +25 -0
  605. wormsim/components/param/cell/MCVR01.json +25 -0
  606. wormsim/components/param/cell/MCVR02.json +25 -0
  607. wormsim/components/param/cell/MCVR03.json +25 -0
  608. wormsim/components/param/cell/MCVR04.json +25 -0
  609. wormsim/components/param/cell/MCVR05.json +25 -0
  610. wormsim/components/param/cell/MCVR06.json +25 -0
  611. wormsim/components/param/cell/MCVR07.json +25 -0
  612. wormsim/components/param/cell/MCVR08.json +25 -0
  613. wormsim/components/param/cell/MCVR09.json +25 -0
  614. wormsim/components/param/cell/MCVR10.json +25 -0
  615. wormsim/components/param/cell/MCVR11.json +25 -0
  616. wormsim/components/param/cell/MCVR12.json +25 -0
  617. wormsim/components/param/cell/MCVR13.json +25 -0
  618. wormsim/components/param/cell/MCVR14.json +25 -0
  619. wormsim/components/param/cell/MCVR15.json +25 -0
  620. wormsim/components/param/cell/MCVR16.json +25 -0
  621. wormsim/components/param/cell/MCVR17.json +25 -0
  622. wormsim/components/param/cell/MCVR18.json +25 -0
  623. wormsim/components/param/cell/MCVR19.json +25 -0
  624. wormsim/components/param/cell/MCVR20.json +25 -0
  625. wormsim/components/param/cell/MCVR21.json +25 -0
  626. wormsim/components/param/cell/MCVR22.json +25 -0
  627. wormsim/components/param/cell/MCVR23.json +25 -0
  628. wormsim/components/param/cell/MCVR24.json +25 -0
  629. wormsim/components/param/cell/MI.json +30 -0
  630. wormsim/components/param/cell/MuscleCell.json +25 -0
  631. wormsim/components/param/cell/NSML.json +30 -0
  632. wormsim/components/param/cell/NSMR.json +30 -0
  633. wormsim/components/param/cell/OLLL.json +30 -0
  634. wormsim/components/param/cell/OLLR.json +30 -0
  635. wormsim/components/param/cell/OLQDL.json +30 -0
  636. wormsim/components/param/cell/OLQDR.json +30 -0
  637. wormsim/components/param/cell/OLQVL.json +30 -0
  638. wormsim/components/param/cell/OLQVR.json +30 -0
  639. wormsim/components/param/cell/PDA.json +30 -0
  640. wormsim/components/param/cell/PDB.json +30 -0
  641. wormsim/components/param/cell/PDEL.json +30 -0
  642. wormsim/components/param/cell/PDER.json +30 -0
  643. wormsim/components/param/cell/PHAL.json +30 -0
  644. wormsim/components/param/cell/PHAR.json +30 -0
  645. wormsim/components/param/cell/PHBL.json +30 -0
  646. wormsim/components/param/cell/PHBR.json +30 -0
  647. wormsim/components/param/cell/PHCL.json +30 -0
  648. wormsim/components/param/cell/PHCR.json +30 -0
  649. wormsim/components/param/cell/PLML.json +30 -0
  650. wormsim/components/param/cell/PLMR.json +30 -0
  651. wormsim/components/param/cell/PLNL.json +30 -0
  652. wormsim/components/param/cell/PLNR.json +30 -0
  653. wormsim/components/param/cell/PQR.json +30 -0
  654. wormsim/components/param/cell/PVCL.json +30 -0
  655. wormsim/components/param/cell/PVCR.json +30 -0
  656. wormsim/components/param/cell/PVDL.json +30 -0
  657. wormsim/components/param/cell/PVDR.json +30 -0
  658. wormsim/components/param/cell/PVM.json +30 -0
  659. wormsim/components/param/cell/PVNL.json +30 -0
  660. wormsim/components/param/cell/PVNR.json +30 -0
  661. wormsim/components/param/cell/PVPL.json +30 -0
  662. wormsim/components/param/cell/PVPR.json +30 -0
  663. wormsim/components/param/cell/PVQL.json +30 -0
  664. wormsim/components/param/cell/PVQR.json +30 -0
  665. wormsim/components/param/cell/PVR.json +30 -0
  666. wormsim/components/param/cell/PVT.json +30 -0
  667. wormsim/components/param/cell/PVWL.json +30 -0
  668. wormsim/components/param/cell/PVWR.json +30 -0
  669. wormsim/components/param/cell/RIAL.json +30 -0
  670. wormsim/components/param/cell/RIAR.json +30 -0
  671. wormsim/components/param/cell/RIBL.json +30 -0
  672. wormsim/components/param/cell/RIBR.json +30 -0
  673. wormsim/components/param/cell/RICL.json +30 -0
  674. wormsim/components/param/cell/RICR.json +30 -0
  675. wormsim/components/param/cell/RID.json +30 -0
  676. wormsim/components/param/cell/RIFL.json +30 -0
  677. wormsim/components/param/cell/RIFR.json +30 -0
  678. wormsim/components/param/cell/RIGL.json +30 -0
  679. wormsim/components/param/cell/RIGR.json +30 -0
  680. wormsim/components/param/cell/RIH.json +30 -0
  681. wormsim/components/param/cell/RIML.json +30 -0
  682. wormsim/components/param/cell/RIMR.json +30 -0
  683. wormsim/components/param/cell/RIPL.json +30 -0
  684. wormsim/components/param/cell/RIPR.json +30 -0
  685. wormsim/components/param/cell/RIR.json +30 -0
  686. wormsim/components/param/cell/RIS.json +30 -0
  687. wormsim/components/param/cell/RIVL.json +30 -0
  688. wormsim/components/param/cell/RIVR.json +30 -0
  689. wormsim/components/param/cell/RMDDL.json +30 -0
  690. wormsim/components/param/cell/RMDDR.json +30 -0
  691. wormsim/components/param/cell/RMDL.json +30 -0
  692. wormsim/components/param/cell/RMDR.json +30 -0
  693. wormsim/components/param/cell/RMDVL.json +30 -0
  694. wormsim/components/param/cell/RMDVR.json +30 -0
  695. wormsim/components/param/cell/RMED.json +30 -0
  696. wormsim/components/param/cell/RMEL.json +30 -0
  697. wormsim/components/param/cell/RMER.json +30 -0
  698. wormsim/components/param/cell/RMEV.json +30 -0
  699. wormsim/components/param/cell/RMFL.json +30 -0
  700. wormsim/components/param/cell/RMFR.json +30 -0
  701. wormsim/components/param/cell/RMGL.json +30 -0
  702. wormsim/components/param/cell/RMGR.json +30 -0
  703. wormsim/components/param/cell/RMHL.json +30 -0
  704. wormsim/components/param/cell/RMHR.json +30 -0
  705. wormsim/components/param/cell/SAADL.json +30 -0
  706. wormsim/components/param/cell/SAADR.json +30 -0
  707. wormsim/components/param/cell/SAAVL.json +30 -0
  708. wormsim/components/param/cell/SAAVR.json +30 -0
  709. wormsim/components/param/cell/SABD.json +30 -0
  710. wormsim/components/param/cell/SABVL.json +30 -0
  711. wormsim/components/param/cell/SABVR.json +30 -0
  712. wormsim/components/param/cell/SDQL.json +30 -0
  713. wormsim/components/param/cell/SDQR.json +30 -0
  714. wormsim/components/param/cell/SIADL.json +30 -0
  715. wormsim/components/param/cell/SIADR.json +30 -0
  716. wormsim/components/param/cell/SIAVL.json +30 -0
  717. wormsim/components/param/cell/SIAVR.json +30 -0
  718. wormsim/components/param/cell/SIBDL.json +30 -0
  719. wormsim/components/param/cell/SIBDR.json +30 -0
  720. wormsim/components/param/cell/SIBVL.json +30 -0
  721. wormsim/components/param/cell/SIBVR.json +30 -0
  722. wormsim/components/param/cell/SMBDL.json +30 -0
  723. wormsim/components/param/cell/SMBDR.json +30 -0
  724. wormsim/components/param/cell/SMBVL.json +30 -0
  725. wormsim/components/param/cell/SMBVR.json +30 -0
  726. wormsim/components/param/cell/SMDDL.json +30 -0
  727. wormsim/components/param/cell/SMDDR.json +30 -0
  728. wormsim/components/param/cell/SMDVL.json +30 -0
  729. wormsim/components/param/cell/SMDVR.json +30 -0
  730. wormsim/components/param/cell/URADL.json +30 -0
  731. wormsim/components/param/cell/URADR.json +30 -0
  732. wormsim/components/param/cell/URAVL.json +30 -0
  733. wormsim/components/param/cell/URAVR.json +30 -0
  734. wormsim/components/param/cell/URBL.json +30 -0
  735. wormsim/components/param/cell/URBR.json +30 -0
  736. wormsim/components/param/cell/URXL.json +30 -0
  737. wormsim/components/param/cell/URXR.json +30 -0
  738. wormsim/components/param/cell/URYDL.json +30 -0
  739. wormsim/components/param/cell/URYDR.json +30 -0
  740. wormsim/components/param/cell/URYVL.json +30 -0
  741. wormsim/components/param/cell/URYVR.json +30 -0
  742. wormsim/components/param/cell/VA01.json +30 -0
  743. wormsim/components/param/cell/VA02.json +30 -0
  744. wormsim/components/param/cell/VA03.json +30 -0
  745. wormsim/components/param/cell/VA04.json +30 -0
  746. wormsim/components/param/cell/VA05.json +30 -0
  747. wormsim/components/param/cell/VA06.json +30 -0
  748. wormsim/components/param/cell/VA07.json +30 -0
  749. wormsim/components/param/cell/VA08.json +30 -0
  750. wormsim/components/param/cell/VA09.json +30 -0
  751. wormsim/components/param/cell/VA10.json +30 -0
  752. wormsim/components/param/cell/VA11.json +30 -0
  753. wormsim/components/param/cell/VA12.json +30 -0
  754. wormsim/components/param/cell/VB01.json +30 -0
  755. wormsim/components/param/cell/VB02.json +30 -0
  756. wormsim/components/param/cell/VB03.json +30 -0
  757. wormsim/components/param/cell/VB04.json +30 -0
  758. wormsim/components/param/cell/VB05.json +30 -0
  759. wormsim/components/param/cell/VB06.json +30 -0
  760. wormsim/components/param/cell/VB07.json +30 -0
  761. wormsim/components/param/cell/VB08.json +30 -0
  762. wormsim/components/param/cell/VB09.json +30 -0
  763. wormsim/components/param/cell/VB10.json +30 -0
  764. wormsim/components/param/cell/VB11.json +30 -0
  765. wormsim/components/param/cell/VC01.json +30 -0
  766. wormsim/components/param/cell/VC02.json +30 -0
  767. wormsim/components/param/cell/VC03.json +30 -0
  768. wormsim/components/param/cell/VC04.json +30 -0
  769. wormsim/components/param/cell/VC05.json +30 -0
  770. wormsim/components/param/cell/VC06.json +30 -0
  771. wormsim/components/param/cell/VD01.json +30 -0
  772. wormsim/components/param/cell/VD02.json +30 -0
  773. wormsim/components/param/cell/VD03.json +30 -0
  774. wormsim/components/param/cell/VD04.json +30 -0
  775. wormsim/components/param/cell/VD05.json +30 -0
  776. wormsim/components/param/cell/VD06.json +30 -0
  777. wormsim/components/param/cell/VD07.json +30 -0
  778. wormsim/components/param/cell/VD08.json +30 -0
  779. wormsim/components/param/cell/VD09.json +30 -0
  780. wormsim/components/param/cell/VD10.json +30 -0
  781. wormsim/components/param/cell/VD11.json +30 -0
  782. wormsim/components/param/cell/VD12.json +30 -0
  783. wormsim/components/param/cell/VD13.json +30 -0
  784. wormsim/components/param/cell/__init__.py +0 -0
  785. wormsim/components/param/cell/template.json +30 -0
  786. wormsim/components/param/connection/SI5-302-RIA.xlsx +0 -0
  787. wormsim/components/param/connection/SI5-302.xlsx +0 -0
  788. wormsim/components/param/connection/__init__.py +0 -0
  789. wormsim/components/param/connection/muscle_neuron.xlsx +0 -0
  790. wormsim/components/param/connection/neuron_muscle.xlsx +0 -0
  791. wormsim/config.json +682 -0
  792. wormsim/simulate.py +660 -0
  793. wormsim-0.0.1.dist-info/METADATA +7 -0
  794. wormsim-0.0.1.dist-info/RECORD +796 -0
  795. wormsim-0.0.1.dist-info/WHEEL +5 -0
  796. wormsim-0.0.1.dist-info/top_level.txt +1 -0
wormsim/simulate.py ADDED
@@ -0,0 +1,660 @@
1
+ #!/usr/bin/env python3
2
+ import os
3
+ import sys
4
+ import json
5
+ import torch
6
+ import pickle
7
+ import numpy as np
8
+ from tqdm import trange
9
+ from neuron import h, load_mechanisms
10
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
11
+ from . import abstract_circuit
12
+
13
+
14
+ class Cell:
15
+ """class for cell
16
+
17
+ Attributes:
18
+ index: int, cell index
19
+ name: str, cell name
20
+ cell_param: dictionary of biophysical info for the cell
21
+ segments: list of Segment object
22
+ points: list of Point object
23
+ pre_connections, post_connections: list of Connection, the Cell acts as post-synaptic cell or pre-synaptic cell respectively
24
+ hoc_obj: hoc object
25
+ soma_volume, neurite_volume: volume of soma or neurite
26
+ """
27
+
28
+ def __init__(self, index, name, cell_param, rec_voltage=False, mode="active", length_per_seg=2, is_muscle=False):
29
+ self.index, self.name, self.cell_param, self.rec_v, self.mode = int(index), name, cell_param, rec_voltage, mode
30
+ self.is_muscle = is_muscle
31
+ self.segments, self.points = [], []
32
+ self.pre_connections, self.post_connections = [], []
33
+ self.hoc_obj = getattr(h, self.name)()
34
+ self.setup_biophysics(cell_param)
35
+ self.prepare(length_per_seg)
36
+ self.soma_volume, self.neurite_volume = self.calculate_volume()
37
+
38
+ def __del__(self):
39
+ for segment in self.segments:
40
+ del segment
41
+ for point in self.points:
42
+ del point
43
+ self.hoc_obj = None
44
+
45
+ def release_hoc(self):
46
+ """This explicit function is used to solve garbage collection issues before multiprocessing"""
47
+ for segment in self.segments:
48
+ segment.hoc_obj = None
49
+ del segment
50
+ for point in self.points:
51
+ del point
52
+ self.hoc_obj = None
53
+
54
+ def prepare(self, length_per_seg):
55
+ """section, segment separation, prepare self.segments and self.points"""
56
+ section_endpoints = []
57
+ for section in self.hoc_obj.all:
58
+ soma_flag = 'Soma' in section.name()
59
+
60
+ section.nseg = 1 if soma_flag else int(np.ceil(section.L / length_per_seg))
61
+ init_loc = np.array((section.x3d(0), section.y3d(0), section.z3d(0)))
62
+
63
+ # define start endpoint
64
+ if soma_flag:
65
+ self.points.append(
66
+ Point(index=len(self.points), category=1,
67
+ location=init_loc,
68
+ diameter=section.diam3d(0), parent_id=-1))
69
+ previous_point_index = 0
70
+ section_endpoints.append(0)
71
+ else:
72
+ assert len(section_endpoints) > 0
73
+ previous_point_index = section_endpoints[np.argmin(
74
+ [np.linalg.norm(self.points[endpoint_index].location - init_loc)
75
+ for endpoint_index in section_endpoints])]
76
+
77
+ # append segment
78
+ loading_bar = np.linspace(0, 1, section.nseg + 1)
79
+ loading_cnt = 1
80
+ for start_ind in range(section.n3d() - 1):
81
+ end_ind = start_ind + 1
82
+ start_arc, end_arc = section.arc3d(start_ind) / section.L, section.arc3d(end_ind) / section.L
83
+ start_loc = np.array((section.x3d(start_ind), section.y3d(start_ind), section.z3d(start_ind)))
84
+ end_loc = np.array((section.x3d(end_ind), section.y3d(end_ind), section.z3d(end_ind)))
85
+ start_diam, end_diam = section.diam3d(start_ind), section.diam3d(end_ind)
86
+
87
+ while loading_cnt <= section.nseg and loading_bar[loading_cnt] <= end_arc:
88
+ ratio = (loading_bar[loading_cnt] - start_arc) / (end_arc - start_arc)
89
+ self.points.append(
90
+ Point(index=len(self.points), category=2,
91
+ location=(end_loc - start_loc) * ratio + start_loc,
92
+ diameter=(end_diam - start_diam) * ratio + start_diam,
93
+ parent_id=previous_point_index))
94
+ self.segments.append(
95
+ Segment(index=len(self.segments),
96
+ hoc_obj=section((loading_bar[loading_cnt] + loading_bar[loading_cnt - 1]) / 2),
97
+ point1=self.points[previous_point_index], point2=self.points[-1],
98
+ cell=self, name=section.name(), rec_voltage=self.rec_v))
99
+ previous_point_index = self.points[-1].index
100
+ loading_cnt += 1
101
+
102
+ section_endpoints.append(self.points[-1].index)
103
+
104
+ def calculate_volume(self):
105
+ soma_volume, neurite_volume = 0, 0
106
+ for section in self.hoc_obj.all:
107
+ if "Soma" in section.name():
108
+ for segment in section:
109
+ soma_volume += segment.volume()
110
+ else:
111
+ for segment in section:
112
+ neurite_volume += segment.volume()
113
+ return soma_volume, neurite_volume
114
+
115
+ def setup_biophysics(self, cell_param):
116
+ """setup biophysical params of this neuron"""
117
+ mechanism_list = ['slo1_unc2', 'egl2', 'shl1', 'kqt3', 'unc2',
118
+ 'kvs1', 'slo1_egl19', 'slo2_unc2', 'irk', 'egl36',
119
+ 'egl19', 'cca1', 'shk1', 'slo2_egl19', 'nca',
120
+ 'kcnl', 'cainternm']
121
+ for section in self.hoc_obj.all:
122
+ category = 'soma' if 'Soma' in section.name() else 'neurite'
123
+
124
+ section.Ra = cell_param[category]["Ra"] # (Ohm*cm)
125
+ section.cm = cell_param[category]["cm"] # (uF/cm2)
126
+ section.insert("pas")
127
+ for segment in section:
128
+ segment.pas.g = cell_param[category]["gpas"] # Passive conductance in S/cm2
129
+ segment.pas.e = cell_param[category]["epas"] # Leak reversal potential mV
130
+ if self.mode == "passive":
131
+ return
132
+ elif self.mode != "active":
133
+ raise ValueError
134
+ for mechanism in mechanism_list:
135
+ self.hoc_obj.Soma.insert(mechanism)
136
+ for segment in self.hoc_obj.Soma:
137
+ segment.shl1.gbshl1 = cell_param["soma"]["gbshl1"] # (nS/um2)
138
+ segment.shk1.gbshk1 = cell_param["soma"]["gbshk1"]
139
+ segment.kvs1.gbkvs1 = cell_param["soma"]["gbkvs1"]
140
+ segment.egl2.gbegl2 = cell_param["soma"]["gbegl2"]
141
+ segment.egl36.gbegl36 = cell_param["soma"]["gbegl36"]
142
+ segment.kqt3.gbkqt3 = cell_param["soma"]["gbkqt3"]
143
+ segment.egl19.gbegl19 = cell_param["soma"]["gbegl19"]
144
+ segment.unc2.gbunc2 = cell_param["soma"]["gbunc2"]
145
+ segment.cca1.gbcca1 = cell_param["soma"]["gbcca1"]
146
+ segment.slo1_egl19.gbslo1 = cell_param["soma"]["gbslo1_egl19"]
147
+ segment.slo1_unc2.gbslo1 = cell_param["soma"]["gbslo1_unc2"]
148
+ segment.slo2_egl19.gbslo2 = cell_param["soma"]["gbslo2_egl19"]
149
+ segment.slo2_unc2.gbslo2 = cell_param["soma"]["gbslo2_unc2"]
150
+ segment.kcnl.gbkcnl = cell_param["soma"]["gbkcnl"]
151
+ segment.nca.gbnca = cell_param["soma"]["gbnca"]
152
+ segment.irk.gbirk = cell_param["soma"]["gbirk"]
153
+
154
+ def add_pre_connection(self, new_connection):
155
+ """the new connection points to self cell"""
156
+ assert isinstance(new_connection, Connection)
157
+
158
+ if new_connection.post_cell.index == self.index:
159
+ self.pre_connections.append(new_connection)
160
+ else:
161
+ raise ValueError("Connection post-synaptic cell incompatible!")
162
+
163
+ def add_post_connection(self, new_connection):
164
+ """the new connection points from self cell"""
165
+ assert isinstance(new_connection, Connection)
166
+
167
+ if new_connection.pre_cell.index == self.index:
168
+ self.post_connections.append(new_connection)
169
+ else:
170
+ raise ValueError("Connection pre-synaptic cell incompatible!")
171
+
172
+ def segment(self, segment_index=None, segment_name=None):
173
+ """obtain the segment object according to its index or name"""
174
+ assert (segment_index is not None) or (segment_name is not None)
175
+ for segment in self.segments:
176
+ if ((segment.index == segment_index) or (segment_index is None)) and \
177
+ ((segment.name == segment_name) or (segment_name is None)):
178
+ return segment
179
+ raise ValueError("Segment not found!")
180
+
181
+ def update_connections(self, new_weights):
182
+ """updating pre_connections weight"""
183
+ assert len(self.pre_connections) == len(new_weights)
184
+ for connection, new_weight in zip(self.pre_connections, new_weights):
185
+ connection.update_info(new_weight)
186
+
187
+ def simulation(self, sim_config, input_traces):
188
+ """single cell simulation"""
189
+ # preparation
190
+ assert len(self.pre_connections) == len(input_traces)
191
+ for pre_connection in self.pre_connections:
192
+ assert pre_connection.pre_segment is None
193
+ output_indices = np.unique([post_connection.pre_segment.index for post_connection in self.post_connections])
194
+ for segment_index in output_indices:
195
+ output_segment = self.segment(segment_index)
196
+ output_segment.voltage = h.Vector().record(output_segment.hoc_obj._ref_v)
197
+ h.dt, h.tstop, h.secondorder = sim_config['dt'], sim_config['tstop'], sim_config['secondorder']
198
+ for connection in self.pre_connections:
199
+ connection.hoc_obj.vpre = sim_config["v_init"]
200
+ h.finitialize(sim_config['v_init'])
201
+ trace_length = int(sim_config['tstop'] / sim_config['dt'])
202
+ for time_step in range(trace_length):
203
+ for connect_index, connect in enumerate(self.pre_connections):
204
+ connect.hoc_obj.vpre = input_traces[connect_index, time_step]
205
+ h.fadvance()
206
+ output_traces = np.stack([np.array(self.segment(segment_index).voltage.to_python())
207
+ for segment_index in output_indices], axis=0)
208
+ return output_traces
209
+
210
+
211
+ class PointCell(Cell):
212
+ """class for cell
213
+
214
+ Attributes:
215
+ index: int, cell index
216
+ name: str, cell name
217
+ cell_param: dictionary of biophysical info for the cell
218
+ segments: list of Segment object
219
+ points: list of Point object
220
+ pre_connections, post_connections: list of Connection, the Cell acts as post-synaptic cell or pre-synaptic cell respectively
221
+ hoc_obj: hoc object
222
+ soma_volume, neurite_volume: volume of soma or neurite
223
+ """
224
+ def __init__(self, index, name, cell_param, rec_voltage=False, mode="active"):
225
+ super(PointCell, self).__init__(index, name, cell_param, rec_voltage, mode)
226
+ self.remove_neurite()
227
+ self.neurite_volume = 0
228
+
229
+ def remove_neurite(self):
230
+ """remove neurites hoc_obj"""
231
+ for segment in self.segments:
232
+ if 'Soma' not in segment.name:
233
+ segment = None
234
+
235
+ def prepare(self, length_per_seg=2):
236
+ """section, segment separation, prepare self.segments and self.points"""
237
+ for section in self.hoc_obj.all:
238
+ if 'Soma' not in section.name():
239
+ continue
240
+ section.nseg = 1
241
+ self.points.append(
242
+ Point(index=len(self.points), category=1,
243
+ location=np.array((section.x3d(0), section.y3d(0), section.z3d(0))),
244
+ diameter=section.diam3d(0), parent_id=-1))
245
+ self.points.append(
246
+ Point(index=len(self.points), category=2,
247
+ location=np.array((section.x3d(1), section.y3d(1), section.z3d(1))),
248
+ diameter=section.diam3d(1), parent_id=0))
249
+ self.segments.append(
250
+ Segment(index=len(self.segments), hoc_obj=section(0.5),
251
+ point1=self.points[0], point2=self.points[1],
252
+ cell=self, name=section.name(), rec_voltage=self.rec_v))
253
+
254
+ def setup_biophysics(self, cell_param):
255
+ """setup biophysical params of this neuron"""
256
+ mechanism_list = ['slo1_unc2', 'egl2', 'shl1', 'kqt3', 'unc2',
257
+ 'kvs1', 'slo1_egl19', 'slo2_unc2', 'irk', 'egl36',
258
+ 'egl19', 'cca1', 'shk1', 'slo2_egl19', 'nca',
259
+ 'kcnl', 'cainternm']
260
+ self.hoc_obj.Soma.Ra = cell_param['soma']["Ra"] # (Ohm*cm)
261
+ self.hoc_obj.Soma.cm = cell_param['soma']["cm"] # (uF/cm2)
262
+ self.hoc_obj.Soma.insert("pas")
263
+ for segment in self.hoc_obj.Soma:
264
+ segment.pas.g = cell_param['soma']["gpas"] # Passive conductance in S/cm2
265
+ segment.pas.e = cell_param['soma']["epas"] # Leak reversal potential mV
266
+ if self.mode == "passive":
267
+ return
268
+ elif self.mode != "active":
269
+ raise ValueError
270
+ for mechanism in mechanism_list:
271
+ self.hoc_obj.Soma.insert(mechanism)
272
+ for segment in self.hoc_obj.Soma:
273
+ segment.shl1.gbshl1 = cell_param["soma"]["gbshl1"] # (nS/um2)
274
+ segment.shk1.gbshk1 = cell_param["soma"]["gbshk1"]
275
+ segment.kvs1.gbkvs1 = cell_param["soma"]["gbkvs1"]
276
+ segment.egl2.gbegl2 = cell_param["soma"]["gbegl2"]
277
+ segment.egl36.gbegl36 = cell_param["soma"]["gbegl36"]
278
+ segment.kqt3.gbkqt3 = cell_param["soma"]["gbkqt3"]
279
+ segment.egl19.gbegl19 = cell_param["soma"]["gbegl19"]
280
+ segment.unc2.gbunc2 = cell_param["soma"]["gbunc2"]
281
+ segment.cca1.gbcca1 = cell_param["soma"]["gbcca1"]
282
+ segment.slo1_egl19.gbslo1 = cell_param["soma"]["gbslo1_egl19"]
283
+ segment.slo1_unc2.gbslo1 = cell_param["soma"]["gbslo1_unc2"]
284
+ segment.slo2_egl19.gbslo2 = cell_param["soma"]["gbslo2_egl19"]
285
+ segment.slo2_unc2.gbslo2 = cell_param["soma"]["gbslo2_unc2"]
286
+ segment.kcnl.gbkcnl = cell_param["soma"]["gbkcnl"]
287
+ segment.nca.gbnca = cell_param["soma"]["gbnca"]
288
+ segment.irk.gbirk = cell_param["soma"]["gbirk"]
289
+
290
+
291
+ class Point:
292
+ """abstract class recording point information
293
+
294
+ Attributes:
295
+ index: int, point index, starts from 0
296
+ category: int, 1 for Soma, 2 for Neurite
297
+ location: array of three float, [loc_x, loc_y, loc_z] indicate of location of the point
298
+ diameter: float, point diameter
299
+ parent_id: int, index of parent point
300
+ """
301
+
302
+ def __init__(self, index, category, location, diameter, parent_id):
303
+ self.index, self.category, self.location, self.diameter, self.parent_id = \
304
+ int(index), category, location, diameter, parent_id
305
+
306
+
307
+ class Segment:
308
+ """class for segment between two points
309
+
310
+ Attributes:
311
+ cell: Cell class or Point Cell class, the cell that contains the segment
312
+ index: int, segment index in the cell, starts from 0
313
+ hoc_obj: hoc object generated by NEURON
314
+ name: str, segment name generated by NEURON
315
+ location: array of three float, [loc_x, loc_y, loc_z] indicate of location of the midpoint
316
+ diameter: float
317
+ pre_connections, post_connections: list of Connection, the segment acts as postsynaptic segment or presynaptic segment
318
+ voltage: NEURON Vector class recording voltage of the segment
319
+ """
320
+
321
+ def __init__(self, index, hoc_obj, point1, point2, cell, name, rec_voltage=False):
322
+ assert isinstance(point1, Point) and isinstance(point2, Point)
323
+ assert isinstance(cell, (Cell, PointCell))
324
+
325
+ self.cell, self.index, self.hoc_obj, self.name = cell, int(index), hoc_obj, name
326
+ self.location = (point1.location + point2.location) / 2
327
+ self.diameter = (point1.diameter + point2.diameter) / 2
328
+ self.point1 = point1
329
+ self.point2 = point2
330
+ self.pre_connections, self.post_connections = [], []
331
+ self.voltage = None
332
+ if rec_voltage:
333
+ self.voltage = h.Vector().record(self.hoc_obj._ref_v)
334
+
335
+ def __del__(self):
336
+ self.hoc_obj = None
337
+
338
+ def add_pre_connection(self, new_connection):
339
+ """the new connection points to self segment"""
340
+ assert isinstance(new_connection, Connection)
341
+
342
+ if self.index == new_connection.post_segment.index:
343
+ self.pre_connections.append(new_connection)
344
+ else:
345
+ raise ValueError("Segment Index Incompatible!")
346
+
347
+ def add_post_connection(self, new_connection):
348
+ """the new connection points from self segment"""
349
+ assert isinstance(new_connection, Connection)
350
+
351
+ if self.index == new_connection.pre_segment.index:
352
+ self.post_connections.append(new_connection)
353
+ else:
354
+ raise ValueError("Segment Index Incompatible!")
355
+
356
+ def voltage_switch(self, new_state=True):
357
+ if new_state:
358
+ if self.voltage is None:
359
+ self.voltage = h.Vector().record(self.hoc_obj._ref_v)
360
+ else:
361
+ self.voltage = None
362
+
363
+
364
+ class Connection:
365
+ """class for connection
366
+ either be synapse (positive weight for excitatory and negative for inhibitory) or gap-junction
367
+
368
+ Attributes:
369
+ pre_segment, post_segment: Segment class, pre-synaptic segment or post-synaptic segment
370
+ pre_cell, post_cell: Cell class or Point Cell class, pre-synaptic cell or post-synaptic cell
371
+ category: str, either 'syn' or 'gj'
372
+ weight: float
373
+ hoc_obj: hoc object generated by NEURON
374
+ pair_key: int or None, two gj belongs to one pair has the same unique key in the circuit, syn's key is None
375
+ """
376
+
377
+ def __init__(self, pre_segment, post_segment, category, weight, pair_key=None):
378
+ assert category in ('syn', 'gj')
379
+ assert isinstance(pre_segment, (Segment, type(None))) and \
380
+ isinstance(post_segment, (Segment, type(None)))
381
+
382
+ self.pre_segment, self.post_segment = pre_segment, post_segment
383
+ self.pre_cell = pre_segment.cell if pre_segment is not None else None
384
+ self.post_cell = post_segment.cell if post_segment is not None else None
385
+ self.category, self.weight, self.pair_key = category, weight, pair_key
386
+ self.hoc_obj = self.make_connection() if post_segment is not None else None
387
+
388
+ def __del__(self):
389
+ self.hoc_obj = None
390
+
391
+ def make_connection(self):
392
+ """make hoc object Connection according to self.category and self.weight"""
393
+ if self.pre_segment is None:
394
+ # connection receives out-circuit input
395
+ if self.category == 'gj':
396
+ hoc_connection = h.gapjunction_advance(self.post_segment.hoc_obj)
397
+ elif self.category == 'syn':
398
+ if self.weight >= 0:
399
+ hoc_connection = h.exc_syn_advance(self.post_segment.hoc_obj)
400
+ else:
401
+ hoc_connection = h.inh_syn_advance(self.post_segment.hoc_obj)
402
+ else:
403
+ raise ValueError
404
+ else:
405
+ # connection receives other cell output
406
+ if self.category == 'gj':
407
+ hoc_connection = h.gapjunction(self.post_segment.hoc_obj)
408
+ elif self.category == 'syn':
409
+ if self.weight >= 0:
410
+ hoc_connection = h.neuron_to_neuron_exc_syn(self.post_segment.hoc_obj)
411
+ else:
412
+ hoc_connection = h.neuron_to_neuron_inh_syn(self.post_segment.hoc_obj)
413
+ else:
414
+ raise ValueError
415
+ hoc_connection._ref_vpre = self.pre_segment.hoc_obj._ref_v
416
+ hoc_connection.weight = abs(self.weight)
417
+ return hoc_connection
418
+
419
+ def update_info(self, new_weight=None):
420
+ """change the weight or category of the connection"""
421
+ assert new_weight is not None
422
+ if self.hoc_obj is None:
423
+ return
424
+ # do not change gapjunction or synapse type (inh/exc)
425
+ if new_weight * self.weight > 0:
426
+ self.weight = new_weight
427
+ self.hoc_obj.weight = abs(self.weight)
428
+ # change synapse type (inh/exc)
429
+ else:
430
+ self.hoc_obj = None # delete the hoc object
431
+ self.weight = new_weight
432
+ self.hoc_obj = self.make_connection()
433
+
434
+
435
+ class DetailedCircuit:
436
+ """class for circuit
437
+
438
+ Attributes:
439
+ cells: list of all Cell object in the circuit
440
+ connections: list of Connection, all connections include input and output connections
441
+ input_connections: list of Connection, input connections
442
+ output_connections: list of Connection, output connections
443
+ """
444
+
445
+ def __init__(self):
446
+ self.cells, self.connections = [], []
447
+ self.input_connections, self.output_connections = [], []
448
+
449
+ def __del__(self):
450
+ for connection in self.connections:
451
+ del connection
452
+ for cell in self.cells:
453
+ del cell
454
+
455
+ def release_hoc(self):
456
+ """This explicit function is used to solve garbage collection issues before multiprocessing"""
457
+ for connection in self.connections:
458
+ connection.hoc_obj = None
459
+ del connection
460
+ for cell in self.cells:
461
+ cell.release_hoc()
462
+ del cell
463
+
464
+ def add_cell(self, new_cell):
465
+ """cell append interface"""
466
+ assert isinstance(new_cell, Cell)
467
+ self.cells.append(new_cell)
468
+
469
+ def add_connection(self, new_connection):
470
+ """connection append interface"""
471
+ assert isinstance(new_connection, Connection)
472
+ self.connections.append(new_connection)
473
+ if new_connection.pre_segment is None:
474
+ self.input_connections.append(new_connection)
475
+ else:
476
+ new_connection.pre_segment.add_post_connection(new_connection)
477
+ new_connection.pre_cell.add_post_connection(new_connection)
478
+
479
+ if new_connection.post_segment is None:
480
+ self.output_connections.append(new_connection)
481
+ else:
482
+ new_connection.post_segment.add_pre_connection(new_connection)
483
+ new_connection.post_cell.add_pre_connection(new_connection)
484
+
485
+ def cell(self, cell_index=None, cell_name=None):
486
+ """obtain the cell object according to its index or name"""
487
+ assert (cell_index is not None) or (cell_name is not None)
488
+ for cell in self.cells:
489
+ if ((cell.index == cell_index) or (cell_index is None)) and \
490
+ ((cell.name == cell_name) or (cell_name is None)):
491
+ return cell
492
+ raise ValueError("Cell not found!")
493
+
494
+ def simulation(self, sim_config, input_traces, input_cell_names, output_cell_names, make_history=False):
495
+ """init and simulate according to given input"""
496
+ if make_history and (not self.cells[0].rec_v):
497
+ self.voltage_switch(make_history)
498
+ h.dt, h.tstop = sim_config['dt'], sim_config['tstop']
499
+ # h.steps_per_ms = int(1 / sim_config['dt'])
500
+ h.secondorder = sim_config['secondorder']
501
+ for connection in self.input_connections:
502
+ connection.hoc_obj.vpre = sim_config["v_init"]
503
+ h.finitialize(sim_config['v_init'])
504
+ trace_length = int(sim_config['tstop'] / sim_config['dt'])
505
+ assert input_traces.shape == (len(input_cell_names), trace_length)
506
+ input_index = dict(zip(input_cell_names, range(len(input_cell_names))))
507
+ output_index = dict(zip(output_cell_names, range(len(output_cell_names))))
508
+ output_traces = np.zeros((len(output_cell_names), trace_length), dtype=np.float32)
509
+ for time_step in trange(trace_length):
510
+ for connection in self.input_connections:
511
+ connection.hoc_obj.vpre = input_traces[input_index[connection.post_cell.name], time_step]
512
+ h.fadvance()
513
+ for cell_name in output_cell_names:
514
+ output_traces[output_index[cell_name], time_step] = \
515
+ self.cell(cell_name=cell_name).hoc_obj.Soma(0.5).v
516
+ if make_history:
517
+ for connection in self.connections:
518
+ if connection.pre_segment is None:
519
+ connection.history = input_traces[input_index[connection.post_cell.name]]
520
+ else:
521
+ connection.history = np.array(connection.pre_segment.voltage.to_python()[:-1])
522
+ return output_traces
523
+
524
+ def update_connections(self, new_weights):
525
+ """updating connects weight"""
526
+ assert len(self.connections) == len(new_weights)
527
+ for connection, new_weight in zip(self.connections, new_weights):
528
+ connection.update_info(new_weight)
529
+
530
+ def voltage_switch(self, new_state=True):
531
+ for connection in self.connections:
532
+ if connection.pre_segment is not None:
533
+ connection.pre_segment.voltage_switch(new_state)
534
+
535
+
536
+ def load_json(file_name):
537
+ with open(file_name, 'r+') as f:
538
+ data_dic = json.load(f)
539
+ return data_dic
540
+
541
+
542
+ def abstract2detailed(abs_circuit, config, load_hoc=True, rec_voltage=False, mode="active"):
543
+ """create DetailedCircuit and load connection setting from given AbsCircuit"""
544
+ dir_info = config['dir_info']
545
+ data_path = os.path.dirname(os.path.abspath(__file__))
546
+ if load_hoc:
547
+ h.load_file('stdrun.hoc')
548
+ load_mechanisms(os.path.join(data_path, dir_info['mechanism_dir']))
549
+ circuit = DetailedCircuit()
550
+ for abs_cell in abs_circuit.cells:
551
+ cell_index, cell_name = abs_cell.index, abs_cell.name
552
+ try:
553
+ cell_param = load_json(os.path.join(data_path, dir_info['cell_param_dir'], cell_name + '.json'))
554
+ except FileNotFoundError:
555
+ print(f"Index {cell_index} Name {cell_name} Cell Parameter Not Found!")
556
+ else:
557
+ if load_hoc:
558
+ h.load_file(os.path.join(data_path, dir_info['model_dir'], cell_name + '.hoc'))
559
+ is_muscle = True if cell_index >= 302 else False
560
+ circuit.add_cell(Cell(cell_index, cell_name, cell_param, rec_voltage, mode, is_muscle=is_muscle))
561
+ for abstract_connection in abs_circuit.connections:
562
+ if abstract_connection.pre_segment is None:
563
+ detail_pre_segment = None
564
+ else:
565
+ pre_cell = circuit.cell(abstract_connection.pre_cell.index)
566
+ detail_pre_segment = pre_cell.segment(abstract_connection.pre_segment.index)
567
+ if abstract_connection.post_segment is None:
568
+ detail_post_segment = None
569
+ else:
570
+ post_cell = circuit.cell(abstract_connection.post_cell.index)
571
+ detail_post_segment = post_cell.segment(abstract_connection.post_segment.index)
572
+ circuit.add_connection(Connection(pre_segment=detail_pre_segment, post_segment=detail_post_segment,
573
+ category=abstract_connection.category, weight=abstract_connection.weight,
574
+ pair_key=abstract_connection.pair_key))
575
+ return circuit
576
+
577
+
578
+ class Simulate:
579
+ def __init__(self):
580
+ """Initialize the simulation with the given config."""
581
+ self.data_path = os.path.dirname(os.path.abspath(__file__))
582
+ self.config_path = os.path.join(self.data_path, "config.json")
583
+ self.abs_circuit_path = os.path.join(self.data_path, "circuit.pkl")
584
+ self.sim_config = {"dt": 1, "tstop": 20000000000000, "v_init": -65, "secondorder": 0}
585
+ self.v_init = self.sim_config["v_init"]
586
+ self.input_cell_name = ["AWAL", "AWAR", "AWCL", "AWCR", "ASKL", "ASKR", "ALNL", "ALNR", "PLML", "PHAL", "PHAR", "URYDL",
587
+ "URYDR", "URYVL", "URYVR"]
588
+ self.output_cell_name = ["RIML", "RIMR", "RMEL", "RMER", "RMED", "RMEV", "RMDDL", "RMDDR", "RMDL", "RMDR", "RMDVL",
589
+ "RMDVR", "RIVL", "RIVR", "SMDDL", "SMDDR", "SMDVL", "SMDVR", "SMBDL", "SMBDR", "SMBVL",
590
+ "SMBVR", "DA01", "DA02", "DA03", "DA04", "DA05", "DA06", "DA07", "DA08", "DA09", "DB01",
591
+ "DB02", "DB03", "DB04", "DB05", "DB06", "DB07", "DD01", "DD02", "DD03", "DD04", "DD05", "DD06",
592
+ "VA01", "VA02", "VA03", "VA04", "VA05", "VA06", "VA07", "VA08", "VA09", "VA10", "VA11", "VA12",
593
+ "VB01", "VB02", "VB03", "VB04", "VB05", "VB06", "VB07", "VB08", "VB09", "VB10", "VB11", "VD01",
594
+ "VD02", "VD03", "VD04", "VD05", "VD06", "VD07", "VD08", "VD09", "VD10", "VD11", "VD12",
595
+ "VD13"]
596
+ self.dt_scale = 100 / 1
597
+ self.circuit = self.load_circuit()
598
+
599
+ self.add_iclamp(self.circuit, self.input_cell_name)
600
+ self.initialized = False
601
+
602
+ self.output_vectors = []
603
+ for cn in self.output_cell_name:
604
+ vec = self.circuit.cell(cell_name=cn).segments[0].voltage
605
+ self.output_vectors.append(vec)
606
+
607
+ if not self.initialized:
608
+ h.dt, h.tstop = self.sim_config['dt'], self.sim_config['tstop']
609
+ h.steps_per_ms = int(1 / self.sim_config['dt'])
610
+ h.secondorder = self.sim_config['secondorder']
611
+ h.finitialize(self.sim_config['v_init'])
612
+ self.initialized = True
613
+
614
+ def add_iclamp(self, circuit, input_cell_names):
615
+ """Add IClamp for input cells to the circuit."""
616
+ circuit.iclamp = []
617
+ for cell_name in input_cell_names:
618
+ syn = h.IClamp(circuit.cell(cell_name=cell_name).segments[0].hoc_obj)
619
+ syn.amp = 0.
620
+ syn.delay = 0.
621
+ syn.dur = 1e9
622
+ circuit.iclamp.append(syn)
623
+
624
+ def load_circuit(self):
625
+ """Load and process the circuit configuration."""
626
+ circuit_config = load_json(self.config_path)["config"]
627
+ abs_circuit = pickle.load(open(self.abs_circuit_path, 'rb'))
628
+ circuit = abstract2detailed(abs_circuit, circuit_config, load_hoc=True, rec_voltage=True)
629
+ return circuit
630
+
631
+ def reset_state(self):
632
+ """只重置状态,不改变网络结构"""
633
+ h.finitialize(self.v_init)
634
+ h.t = 0
635
+ for vec in self.output_vectors:
636
+ vec.resize(0)
637
+
638
+ def simulate(self, input_traces):
639
+ """Run the simulation for the given circuit and input traces."""
640
+ seq_len = input_traces.shape[0]
641
+ input_traces = input_traces.T
642
+
643
+ for cn in self.output_cell_name:
644
+ vec = self.circuit.cell(cell_name=cn).segments[0].voltage
645
+ vec.resize(0)
646
+
647
+ for time_step in range(seq_len):
648
+ for i, _ in enumerate(self.input_cell_name):
649
+ self.circuit.iclamp[i].amp = input_traces[i][time_step].item()
650
+ h.fadvance()
651
+
652
+ output_traces = np.array([vec.as_numpy() for vec in self.output_vectors])
653
+ output_traces = output_traces[:, :seq_len].T
654
+
655
+ return output_traces
656
+
657
+ def run_simulation(self, input_traces):
658
+ """Run the full simulation pipeline."""
659
+ output_traces = self.simulate(input_traces)
660
+ return torch.tensor(output_traces, dtype=torch.float32)
@@ -0,0 +1,7 @@
1
+ Metadata-Version: 2.1
2
+ Name: wormsim
3
+ Version: 0.0.1
4
+ Summary: Need Python3.9+
5
+ License: Apache License 2.0
6
+ Requires-Dist: neuron
7
+