OSCR

A Cortico-Basal Ganglia-Thalamic Network Model Linking Intermittent Postural Control to Sway-Related Beta-Band Oscillations.

Code ↔ Paper

4 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 4 matches
  1. [1] § Materials and Methods › Implementation of the intermittent and forced-choice continuous-like CBGT controllers › Intermittent CBGT controller ↔ code_CBGT/Agent_intermittent.py, lines 31–160 · score 0.64 · action selection, NoGo, Firing rate, GPi, window, thalamus
  2. [2] § Materials and Methods › Implementation of the intermittent and forced-choice continuous-like CBGT controllers › Intermittent CBGT controller ↔ code_CBGT/Agent_continuous.py, lines 31–88 · score 0.62 · action selection, NoGo, Firing rate, GPi, window, thalamus
  3. [3] § Materials and Methods › Signal processing and statistical averaging ↔ code_CBGT/myfunc0829.py, lines 71–136 · score 0.59 · scipy.signal.find_peaks, chattering, offset, prominent, cycles
  4. [4] § Materials and Methods › Implementation of the intermittent and forced-choice continuous-like CBGT controllers › Intermittent CBGT controller ↔ code_CBGT/Agent_intermittent.py, lines 31–160 · score 0.58 · action selections, NoGo, intermittent control, S3, S2, S4

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 283 lines · 15 KB · Apache-2.0 · 2 matches

  1. """大脳皮質‐基底核回路ネットワーククラス"""
  2. from Neuron import LIFmodel
  3. from Input import PoissonNeuron
  4. from myfunc0829 import GetSynapsepath
  5. import numpy as np
  6. from numpy import dot
  7. import pickle
  8. from concurrent.futures import ThreadPoolExecutor
  9. import os
  10. rng = np.random.default_rng()
  11. def parallel_matrix_multiplication(matrices_A, matrices_B):
  12. """複数の行列積を並列に計算する"""
  13. # if len(matrices_A) != len(matrices_B):
  14. # raise ValueError("matrices_A and matrices_B must have the same length.") # 行列の数が違ったらエラー
  15. # 並列計算のための準備
  16. with ThreadPoolExecutor() as executor:
  17. futures = [executor.submit(dot, A, B) for A, B in zip(matrices_A, matrices_B)] # 並列に実行するタスクを設定
  18. results = [future.result() for future in futures] # 並列計算の結果を取得
  19. return results
  20. def mycauchy(w, size):
  21. return w * np.abs(rng.standard_cauchy(size))
  22. class BGmodel:
  23. def __init__(self, N, dt, N_in, N_state, firing_rate=100, w_lat=1.185e-2, w_S2C=7.5e-3, w_T2C=9.64e-3, w_S2G=6.5e-3, w_C2G=2.54e-3, w_S2N=1.1e-2,
  24. w_C2N=4.475e-3, w_STN2E=2.85e-2, w_N2E=2.6e-2, w_STN2I=5.345e-2, w_G2I=3.225e-2, w_E2I=3.25e-2, w_C2STN=2.925e-2, w_E2STN=2.085e-2,
  25. w_C2T=4.665e-2, w_I2T=2.875e-2, alpha=3.25, beta=-3.9, I_E=18, I_I=24, Gmax=1e-2, Gmin=3e-3, Nmax=1.7e-2, Nmin=5e-3, window=0.1, threshold=100, D=1):
  26. self.dt = dt # time step for simulation
  27. self.num_spike_1 = np.zeros(round(window/self.dt))
  28. self.num_spike_2 = np.zeros(round(window/self.dt))
  29. self.threshold = threshold # threshold for action selection
  30. # 外部入力配列の作成
  31. self.ext_inp = np.concatenate([np.zeros(1000), np.full(1000, alpha*D), np.full(1000, beta*D), np.full(1000, I_E),
  32. np.full(1000, I_I), np.zeros(1500)])
  33. # import neuron module
  34. self.S = PoissonNeuron(N_fire=N_in, dt=self.dt, fr=firing_rate) # 感覚入力
  35. self.Neurons = LIFmodel(N=N*13, dt=self.dt) # ネットワークを構成するニューロン
  36. """
  37. 0-999: Cortex
  38. 1000-1999: Go
  39. 2000-2999: NoGo
  40. 3000-3999: GPe
  41. 4000-4999: GPi
  42. 5000-5499: STN
  43. 5500-6499: Thalamus
  44. """
  45. # 結合重み行列の作成
  46. load = pickle.load
  47. synapse_path = GetSynapsepath() # シナプス行列を保存しているパスを取得
  48. self.l_0_def = load(open(os.path.join(synapse_path, "l_0.pickle"), 'rb'))
  49. self.S2C_1_def = load(open(os.path.join(synapse_path, "S2C_1.pickle"), 'rb'))
  50. self.S2C_2_def = load(open(os.path.join(synapse_path, "S2C_2.pickle"), 'rb'))
  51. self.T2C_1_def = load(open(os.path.join(synapse_path, "T2C_1.pickle"), 'rb'))
  52. self.T2C_2_def = load(open(os.path.join(synapse_path, "T2C_2.pickle"), 'rb'))
  53. self.S2G_1_def = load(open(os.path.join(synapse_path, "S2G_1.pickle"), 'rb'))
  54. self.S2G_2_def = load(open(os.path.join(synapse_path, "S2G_2.pickle"), 'rb'))
  55. self.C2G_1_def = load(open(os.path.join(synapse_path, "C2G_1.pickle"), 'rb'))
  56. self.C2G_2_def = load(open(os.path.join(synapse_path, "C2G_2.pickle"), 'rb'))
  57. self.S2N_1_def = load(open(os.path.join(synapse_path, "S2N_1.pickle"), 'rb'))
  58. self.S2N_2_def = load(open(os.path.join(synapse_path, "S2N_2.pickle"), 'rb'))
  59. self.C2N_1_def = load(open(os.path.join(synapse_path, "C2N_1.pickle"), 'rb'))
  60. self.C2N_2_def = load(open(os.path.join(synapse_path, "C2N_2.pickle"), 'rb'))
  61. self.STN2E_1_def = load(open(os.path.join(synapse_path, "STN2E_1.pickle"), 'rb'))
  62. self.STN2E_2_def = load(open(os.path.join(synapse_path, "STN2E_2.pickle"), 'rb'))
  63. self.N2E_1_def = load(open(os.path.join(synapse_path, "N2E_1.pickle"), 'rb'))
  64. self.N2E_2_def = load(open(os.path.join(synapse_path, "N2E_2.pickle"), 'rb'))
  65. self.STN2I_1_def = load(open(os.path.join(synapse_path, "STN2I_1.pickle"), 'rb'))
  66. self.STN2I_2_def = load(open(os.path.join(synapse_path, "STN2I_2.pickle"), 'rb'))
  67. self.G2I_1_def = load(open(os.path.join(synapse_path, "G2I_1.pickle"), 'rb'))
  68. self.G2I_2_def = load(open(os.path.join(synapse_path, "G2I_2.pickle"), 'rb'))
  69. self.E2I_1_def = load(open(os.path.join(synapse_path, "E2I_1.pickle"), 'rb'))
  70. self.E2I_2_def = load(open(os.path.join(synapse_path, "E2I_2.pickle"), 'rb'))
  71. self.C2STN_1_def = load(open(os.path.join(synapse_path, "C2STN_1.pickle"), 'rb'))
  72. self.C2STN_2_def = load(open(os.path.join(synapse_path, "C2STN_2.pickle"), 'rb'))
  73. self.E2STN_1_def = load(open(os.path.join(synapse_path, "E2STN_1.pickle"), 'rb'))
  74. self.E2STN_2_def = load(open(os.path.join(synapse_path, "E2STN_2.pickle"), 'rb'))
  75. self.C2T_1_def = load(open(os.path.join(synapse_path, "C2T_1.pickle"), 'rb'))
  76. self.C2T_2_def = load(open(os.path.join(synapse_path, "C2T_2.pickle"), 'rb'))
  77. self.I2T_1_def = load(open(os.path.join(synapse_path, "I2T_1.pickle"), 'rb'))
  78. self.I2T_2_def = load(open(os.path.join(synapse_path, "I2T_2.pickle"), 'rb'))
  79. # 各重み行列に係数をかける
  80. self.l_0 = w_lat * self.l_0_def
  81. self.S2C_1 = w_S2C * self.S2C_1_def
  82. self.S2C_2 = w_S2C * self.S2C_2_def
  83. self.T2C_1 = w_T2C * self.T2C_1_def
  84. self.T2C_2 = w_T2C * self.T2C_2_def
  85. self.C2G_1 = w_C2G * self.C2G_1_def
  86. self.C2G_2 = w_C2G * self.C2G_2_def
  87. self.C2N_1 = w_C2N * self.C2N_1_def
  88. self.C2N_2 = w_C2N * self.C2N_2_def
  89. self.STN2E_1 = w_STN2E * self.STN2E_1_def
  90. self.STN2E_2 = w_STN2E * self.STN2E_2_def
  91. self.N2E_1 = w_N2E * self.N2E_1_def
  92. self.N2E_2 = w_N2E * self.N2E_2_def
  93. self.STN2I_1 = w_STN2I * self.STN2I_1_def
  94. self.STN2I_2 = w_STN2I * self.STN2I_2_def
  95. self.G2I_1 = w_G2I * self.G2I_1_def
  96. self.G2I_2 = w_G2I * self.G2I_2_def
  97. self.E2I_1 = w_E2I * self.E2I_1_def
  98. self.E2I_2 = w_E2I * self.E2I_2_def
  99. self.C2STN_1 = w_C2STN * self.C2STN_1_def
  100. self.C2STN_2 = w_C2STN * self.C2STN_2_def
  101. self.E2STN_1 = w_E2STN * self.E2STN_1_def
  102. self.E2STN_2 = w_E2STN * self.E2STN_2_def
  103. self.C2T_1 = w_C2T * self.C2T_1_def
  104. self.C2T_2 = w_C2T * self.C2T_2_def
  105. self.I2T_1 = w_I2T * self.I2T_1_def
  106. self.I2T_2 = w_I2T * self.I2T_2_def
  107. # 感覚入力から線条体への重みは振子の状態によって変える
  108. # for the model 2 (intermittent control model) from here to line 165
  109. self.S2G_1 = np.empty((N_state, N, N_in))
  110. self.S2G_2 = np.empty((N_state, N, N_in))
  111. # S3 to Go Backward
  112. self.S2G_1[0,:,:] = Gmin * self.S2G_1_def[0,:,:]
  113. # S2 to Go Backward
  114. self.S2G_1[1,:,:] = w_S2G * self.S2G_1_def[1,:,:]
  115. # S4 to Go Backward
  116. self.S2G_1[2,:,:] = w_S2G * self.S2G_1_def[2,:,:]
  117. # S1 to Go Backward
  118. self.S2G_1[3,:,:] = Gmax * self.S2G_1_def[3,:,:]
  119. # S3 to Go Forward
  120. self.S2G_2[0,:,:] = Gmax * self.S2G_2_def[0,:,:]
  121. # S2 to Go Forward
  122. self.S2G_2[1,:,:] = w_S2G * self.S2G_2_def[1,:,:]
  123. # S4 to Go Forward
  124. self.S2G_2[2,:,:] = w_S2G * self.S2G_2_def[2,:,:]
  125. ## S2G_2_def[2,:,:] was originally S2G_2_def[1,:,:]
  126. # S1 to Go Forward
  127. self.S2G_2[3,:,:] = Gmin * self.S2G_2_def[3,:,:]
  128. self.S2N_1 = np.empty((N_state, N, N_in))
  129. self.S2N_2 = np.empty((N_state, N, N_in))
  130. # S3 to NoGo Backward
  131. self.S2N_1[0,:,:] = Nmax * self.S2N_1_def[0,:,:]
  132. # S2 to NoGo Backward
  133. self.S2N_1[1,:,:] = w_S2N * self.S2N_1_def[1,:,:]
  134. # S4 to NoGo Backward
  135. self.S2N_1[2,:,:] = w_S2N * self.S2N_1_def[2,:,:]
  136. # S1 to NoGo Backward
  137. self.S2N_1[3,:,:] = Nmin * self.S2N_1_def[3,:,:]
  138. # S3 to NoGo Forward
  139. self.S2N_2[0,:,:] = Nmin * self.S2N_2_def[0,:,:]
  140. # S2 to NoGo Forward
  141. self.S2N_2[1,:,:] = w_S2N * self.S2N_2_def[1,:,:]
  142. # S4 to NoGo Forward
  143. self.S2N_2[2,:,:] = w_S2N * self.S2N_2_def[2,:,:]
  144. # S1 to NoGo Forward
  145. self.S2N_2[3,:,:] = Nmax * self.S2N_2_def[3,:,:]
  146. ##--------------------------------------------------------------
  147. # # 感覚入力から線条体への重みは振子の状態によって変える
  148. # # for the model 1 (continuous control model) from here to line 223
  149. # self.S2G_1 = np.empty((N_state, N, N_in))
  150. # self.S2G_2 = np.empty((N_state, N, N_in))
  151. # # 0326 checked S3 to Go Backward
  152. # self.S2G_1[0,:,:] = Gmin * self.S2G_1_def[0,:,:]
  153. # #self.S2G_1[0,:,:] = 3.0*Gmin * self.S2G_1_def[0,:,:]
  154. # # 0327 checked S2 to Go Backward
  155. # self.S2G_1[1,:,:] = Gmin * self.S2G_1_def[1,:,:]
  156. # #self.S2G_1[1,:,:] = w_S2G * self.S2G_1_def[1,:,:]
  157. # # 0326 checked S4 to Go backward
  158. # self.S2G_1[2,:,:] = Gmax * self.S2G_1_def[2,:,:]
  159. # #self.S2G_1[2,:,:] = w_S2G * self.S2G_1_def[2,:,:]
  160. # # 0326 checked S1 to Go Backward
  161. # self.S2G_1[3,:,:] = Gmax * self.S2G_1_def[3,:,:]
  162. # #self.S2G_1[3,:,:] = w_S2G * self.S2G_1_def[3,:,:]
  163. # # 0326 checked S3 to Go Forward
  164. # self.S2G_2[0,:,:] = Gmax * self.S2G_2_def[0,:,:]
  165. # # 0327 checked S2 to Go Forward
  166. # self.S2G_2[1,:,:] = Gmax * self.S2G_2_def[1,:,:]
  167. # #self.S2G_2[1,:,:] = 1.5*w_S2G * self.S2G_2_def[1,:,:]
  168. # # 0326 checked S4 to Go Forward
  169. # self.S2G_2[2,:,:] = Gmin * self.S2G_2_def[2,:,:]
  170. # #self.S2G_2[2,:,:] = 1.5*w_S2G * self.S2G_2_def[2,:,:]
  171. # ##### S2G_2_def[2,:,:] was originally S2G_2_def[1,:,:]
  172. # # 0326 checked S1 to Go Forward
  173. # self.S2G_2[3,:,:] = Gmin * self.S2G_2_def[3,:,:]
  174. # #self.S2G_2[3,:,:] = 3.0*Gmin * self.S2G_2_def[3,:,:]
  175. # self.S2N_1 = np.empty((N_state, N, N_in))
  176. # self.S2N_2 = np.empty((N_state, N, N_in))
  177. # # S3 to NoGo Backward
  178. # self.S2N_1[0,:,:] = Nmax * self.S2N_1_def[0,:,:]
  179. # #self.S2N_1[0,:,:] = Nmax * self.S2N_1_def[0,:,:]
  180. # # S2 to NoGo Backward
  181. # self.S2N_1[1,:,:] = Nmax * self.S2N_1_def[1,:,:]
  182. # #self.S2N_1[1,:,:] = w_S2N * self.S2N_1_def[1,:,:]
  183. # # S4 to NoGo Backward
  184. # self.S2N_1[2,:,:] = Nmin * self.S2N_1_def[2,:,:]
  185. # #self.S2N_1[2,:,:] = w_S2N * self.S2N_1_def[2,:,:]
  186. # # S1 to NoGo Backward
  187. # self.S2N_1[3,:,:] = Nmin * self.S2N_1_def[3,:,:]
  188. # #self.S2N_1[3,:,:] = Nmin * self.S2N_1_def[3,:,:]
  189. # # S3 to NoGo Forward
  190. # self.S2N_2[0,:,:] = Nmin * self.S2N_2_def[0,:,:]
  191. # #self.S2N_2[0,:,:] = Nmin * self.S2N_2_def[0,:,:]
  192. # # S2 to NoGo Forward
  193. # self.S2N_2[1,:,:] = Nmin * self.S2N_2_def[1,:,:]
  194. # #self.S2N_2[1,:,:] = w_S2N * self.S2N_2_def[1,:,:]
  195. # # S4 to NoGo Forkward
  196. # self.S2N_2[2,:,:] = Nmax * self.S2N_2_def[2,:,:]
  197. # #self.S2N_2[2,:,:] = w_S2N * self.S2N_2_def[2,:,:]
  198. # # S1 to NoGo Forward
  199. # self.S2N_2[3,:,:] = Nmax * self.S2N_2_def[3,:,:]
  200. # #self.S2N_2[3,:,:] = Nmax * self.S2N_2_def[3,:,:]
  201. ## ---------------------------------------------------------------
  202. def initialize_states(self):
  203. """シナプス重みと膜電位を初期化する"""
  204. self.S.initialize_states()
  205. self.Neurons.initialize_states()
  206. self.num_spike_1.fill(0)
  207. self.num_spike_2.fill(0)
  208. self.spike_rate_1 = 0
  209. self.spike_rate_2 = 0
  210. def return_action(self, id_obs):
  211. """環境の状態を受け取り,行動を返す"""
  212. # 複数回使うスパイク列は呼び出し回数を減らすために変数に格納しておく
  213. y_S = self.S()
  214. C_S1 = self.Neurons.spike[0:500]
  215. C_S2 = self.Neurons.spike[500:1000]
  216. E_S1 = self.Neurons.spike[3000:3500]
  217. E_S2 = self.Neurons.spike[3500:4000]
  218. STN_S = self.Neurons.spike[5000:5500]
  219. # 重み行列のリスト
  220. matrices = [self.S2C_1, self.T2C_1, self.S2C_2, self.T2C_2, self.l_0, self.l_0.T, self.S2G_1[id_obs,:,:], self.C2G_1,
  221. self.S2G_2[id_obs,:,:], self.C2G_2, self.S2N_1[id_obs,:,:], self.C2N_1, self.S2N_2[id_obs,:,:], self.C2N_2,
  222. self.STN2E_1, self.STN2E_2, self.N2E_1, self.N2E_2, self.STN2I_1, self.STN2I_2, self.G2I_1, self.E2I_1, self.G2I_2,
  223. self.E2I_2, self.C2STN_1, self.C2STN_2, self.E2STN_1, self.E2STN_2, self.C2T_1, self.C2T_2, self.I2T_1, self.I2T_2]
  224. # スパイク列のリスト
  225. spikes = [y_S, self.Neurons.spike[5500:6000], y_S, self.Neurons.spike[6000:6500], C_S2, C_S1, y_S, C_S1, y_S, C_S2, y_S, C_S1, y_S, C_S2, STN_S, STN_S,
  226. self.Neurons.spike[2000:2500], self.Neurons.spike[2500:3000], STN_S, STN_S, self.Neurons.spike[1000:1500], E_S1, self.Neurons.spike[1500:2000],
  227. E_S2, C_S1, C_S2, E_S1, E_S2, C_S1, C_S2, self.Neurons.spike[4000:4500], self.Neurons.spike[4500:5000]]
  228. # 並列計算する
  229. result = parallel_matrix_multiplication(matrices, spikes)
  230. # 興奮性入力配列の作成
  231. ex = np.concatenate([result[0]+result[1], result[2]+result[3], result[6]+result[7], result[8]+result[9], result[10]+result[11], result[12]+result[13],
  232. result[14], result[15], result[18], result[19], result[24]+result[25], result[28], result[29]], 0)
  233. # 抑制性入力配列の作成
  234. inh = np.concatenate([result[4], result[5], np.zeros(2000), result[16], result[17], result[20]+result[21], result[22]+result[23],
  235. result[26]+result[27], result[30], result[31]], 0)
  236. # 膜電位を変化させる
  237. self.Neurons(ex=ex, inh=inh, ext_inp=self.ext_inp)
  238. # 発火率の計算と更新
  239. self.num_spike_1 = np.concatenate((self.num_spike_1[1:], [np.mean(self.Neurons.spike[0:500])/self.dt]))
  240. self.num_spike_2 = np.concatenate((self.num_spike_2[1:], [np.mean(self.Neurons.spike[500:1000])/self.dt]))
  241. self.spike_rate_1 = np.mean(self.num_spike_1)
  242. self.spike_rate_2 = np.mean(self.num_spike_2)
  243. return np.argmax([self.spike_rate_1, self.threshold, self.spike_rate_2])

Agent_intermittent.py at commit 2f7bb40, under Apache-2.0 · at the source

Overview

Authors: Shota Tsugaya1, Akihiro Nakamura1, Taishin Nomura2
ORCID iDs: Taishin Nomura
  1. Graduate School of Engineering Science, The University of Osaka, Osaka 560-8531, Japan
  2. Graduate School of Informatics, Kyoto University, Kyoto 606-8501, Japan
Institutions: The University of Osaka (Japan); Kyoto University (Japan)
Journal: eNeuro, volume 13, issue 9, pages ENEURO.0283-26.2026
Dates: received 31 August 2026; accepted 31 August 2026; published online 18 September 2026; in print September 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1523/eneuro.0283-26.2026 · PMID 42697731 · PMCID PMC13592803 · OpenAlex W7208792921
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: EEG (modality), human (organism), Parkinson's (population), computational (subfield)
Methods: Spectral & time-frequency, Single-unit activity, calcium imaging, Smoothing, state filtering, decompositions, Connectivity
Keywords: action selection, basal ganglia, beta oscillation, decision-making, Parkinson’s disease, postural control
MeSH: Basal Ganglia*, Beta Rhythm*, Cerebral Cortex*, Models, Neurological*, Postural Balance*, Thalamus*, Computer Simulation, Humans, Neural Pathways (* major topic)
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: MEXT | Japan Society for the Promotion of Science (22H03662)
Citations: not cited yet (Europe PMC); 65 references in the paper

Abstract

Electroencephalographic (EEG) studies of human quiet stance demonstrate beta-band event-related desynchronization (beta-ERD) during the micro-fall phase of postural sway, followed by event-related synchronization (beta-ERS; post-movement beta rebound) during the micro-recovery phase. These modulations correlate with intermittent ankle muscle inactivation that exploits the stable manifolds of an unstable upright equilibrium; however, how such sway-related beta dynamics arise within closed-loop brain–body interactions remains unclear. Here, we investigated a possible circuit-level account of these dynamics using an embodied spiking neural network model of the cortico-basal ganglia-thalamic (CBGT) circuitry integrated with an inverted pendulum. In this closed-loop system, continuous sensory feedback is integrated into the striatum, while the motor cortex executes decisions via drift-diffusion-like population competition, where decision time (DT) represents the intermittent control-off period. We demonstrate that simulated cortical LFPs exhibit characteristic sway-phase-locked beta-ERD and beta-ERS when corticostriatal synaptic weights are functionally balanced to implement intermittent control. Conversely, a forced-choice continuous-like regime that ceaselessly generates feedback torque fails to replicate these modulations, sustaining flat network states devoid of control-off periods (DT). Structural dissections show that, within the model, disrupting bidirectional thalamocortical loops or the GPe–STN circuit abolishes sway-phase-locked beta modulation, despite continuous sensory drive. Our findings provide a computational account linking sway-phase-locked beta activity to intermittent motor selection within the proposed CBGT framework. This closed-loop modeling framework offers a testable candidate account for how alterations in brain–body dynamics may jointly affect behavioral intermittency and beta-band modulation, with potential relevance to postural impairments in Parkinson's disease.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repository

Its files are read in the Code ↔ Paper reader above, with 4 matches between paragraphs and lines of code.

nomura-taishin/cbgt-intermittent-postural-control

License: Apache-2.0
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: 2f7bb402749e2d92683be317729bf91842aa3463, 2 September 2026
Languages: Python (10)
Size: 20 files, 10 scripts
Software Heritage: not archived
Found in: “Code accessibility”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (10 files), SciPy (3 files), Matplotlib (2 files)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
12 files

Code accessibility

The custom computer code and algorithms generated during the current study are publicly available in the GitHub repository (https://github.com/nomura-taishin/cbgt-intermittent-postural-control/).

Reproduced under the paper's license (CC BY), from the paper cited above.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 10 scripts, each with its path and the digest of its content;
  • 4 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 3 authors, 6 keywords, 9 MeSH terms, 1 funder, 64 references.

Cite

This paper

Tsugaya, S., Nakamura, A., & Nomura, T. (2026). A Cortico-Basal Ganglia-Thalamic Network Model Linking Intermittent Postural Control to Sway-Related Beta-Band Oscillations. eNeuro, 13(9), ENEURO.0283-26.2026. https://doi.org/10.1523/eneuro.0283-26.2026

BibTeX

@article{tsugaya2026cortico,
author = {Tsugaya, Shota and Nakamura, Akihiro and Nomura, Taishin},
title = {{A Cortico-Basal Ganglia-Thalamic Network Model Linking Intermittent Postural Control to Sway-Related Beta-Band Oscillations}},
journal = {eNeuro},
year = {2026},
month = sep,
volume = {13},
number = {9},
pages = {ENEURO.0283--26.2026},
publisher = {Society for Neuroscience},
issn = {2373-2822},
doi = {10.1523/eneuro.0283-26.2026},
url = {https://doi.org/10.1523/eneuro.0283-26.2026},
pmid = {42697731},
pmcid = {PMC13592803}
}

RIS

TY - JOUR
AU - Tsugaya, Shota
AU - Nakamura, Akihiro
AU - Nomura, Taishin
TI - A Cortico-Basal Ganglia-Thalamic Network Model Linking Intermittent Postural Control to Sway-Related Beta-Band Oscillations
T2 - eNeuro
J2 - eNeuro
PY - 2026
DA - 2026/09/18
VL - 13
IS - 9
SP - ENEURO.0283
EP - 26.2026
SN - 2373-2822
PB - Society for Neuroscience
DO - 10.1523/eneuro.0283-26.2026
UR - https://doi.org/10.1523/eneuro.0283-26.2026
LA - en
ER -

CSL-JSON

{
"id": "10.1523/eneuro.0283-26.2026",
"type": "article-journal",
"title": "A Cortico-Basal Ganglia-Thalamic Network Model Linking Intermittent Postural Control to Sway-Related Beta-Band Oscillations",
"container-title": "eNeuro",
"author": [
{
"family": "Tsugaya",
"given": "Shota"
},
{
"family": "Nakamura",
"given": "Akihiro"
},
{
"family": "Nomura",
"given": "Taishin"
}
],
"container-title-short": "eNeuro",
"volume": "13",
"issue": "9",
"page": "ENEURO.0283-26.2026",
"DOI": "10.1523/eneuro.0283-26.2026",
"PMID": "42697731",
"PMCID": "PMC13592803",
"ISSN": "2373-2822",
"publisher": "Society for Neuroscience",
"URL": "https://doi.org/10.1523/eneuro.0283-26.2026",
"language": "en",
"issued": {
"date-parts": [
[
2026,
9,
18
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1371/journal.pcbi.1013942 [code]
Reconciling contradictory models of subthalamic nucleus contributions to basal ganglia beta oscillations.
Journal: PLoS computational biology
In common: SciPy, Matplotlib, NumPy, computational, Parkinson's, EEG, 6 references
[2] doi:10.1016/j.ebiom.2026.106418 [code]
Corticostriatal glutamate mechanisms underlying beta synchrony and motor deficits via striatal NMDA receptors in Parkinson's disease.
Journal: EBioMedicine
In common: SciPy, Matplotlib, NumPy, Parkinson's, EEG, 3 references
[3] doi:10.1093/braincomms/fcag245 [code]
Reduced pre-movement subthalamic beta desynchronization marks motor deficit in Parkinson's disease.
Journal: Brain communications
In common: Parkinson's, 4 references
[4] doi:10.1016/j.ebiom.2026.106293 [code]
Dynamic neural states underpin motor symptom severity in Parkinson's disease: a longitudinal analysis of chronic cortico-subthalamic nucleus recordings.
Journal: EBioMedicine
In common: SciPy, Matplotlib, NumPy, Parkinson's, 2 references
[5] doi:10.1093/braincomms/fcag043 [code]
Linking movement-related beta oscillations to cortical excitability, structural damage, and fatigue in multiple sclerosis.
Journal: Brain communications
In common: EEG, 4 references
[6] doi:10.3389/fncom.2026.1786996 [code]
Schumann-anchored golden ratio organization of human neural oscillations.
Journal: Frontiers in computational neuroscience
In common: SciPy, Matplotlib, NumPy, EEG, 2 references
[7] doi:10.1016/j.xcrm.2026.103001
Cortical-to-pallidal beta cascade underlies network pathophysiology in Parkinson's disease.
Journal: Cell reports. Medicine
In common: Parkinson's, 3 references
[8] doi:10.1038/s41467-026-73553-8 [code]
Universal rhythmic architecture uncovers two modes of neural dynamics.
Journal: Nature communications
In common: SciPy, Matplotlib, NumPy, EEG, 2 references
[9] doi:10.1371/journal.pcbi.1012966 [code]
How the dynamic interplay of cortico-basal ganglia-thalamic pathways shapes the time course of deliberation and commitment.
Journal: PLoS computational biology
In common: SciPy, Matplotlib, NumPy, 2 references
[10] doi:10.1186/s12984-026-02041-3 [code]
Mental tasks induce common modulations of oscillations in cortex and spinal cord.
Journal: Journal of neuroengineering and rehabilitation
In common: Matplotlib, EEG, 3 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.