OSCR

Protein trafficking and synaptic demand configure complex and dynamic synaptome architectures of individual neurons.

Code ↔ Paper

6 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 6 matches · 2 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § Methods › Simulation and parameter optimisation ↔ simulation/CA1_3dv_identifiability_PSO_GA.py, lines 314–380 · score 0.61 · global optimum, Nelder Mead, PSO, GA, Simulation
  2. [2] § Methods › Simulation and parameter optimisation ↔ simulation/CA1_identifiability_PSO_GA.py, lines 315–410 · score 0.61 · global optimum, Nelder Mead, PSO, GA, Simulation
  3. [3] § Methods › Simulation and parameter optimisation ↔ Eddie/runDGIdentifiability.sh, the whole file · a weak match · score 0.60 · GB memory, runtime limit, python
  4. [4] § Methods › Simulation and parameter optimisation ↔ Eddie/runDG_Identifiability_10.sh, the whole file · a weak match · score 0.60 · GB memory, runtime limit, python
  5. [5] § Results › Spatiotemporal distribution of PSD95 is tuned by local transport ↔ simulation/CA1_20reg_1dv_3w_2par_PSO_GA.py, lines 234–292 · score 0.58 · CA1slm, CA1so, CA1sr, fit, degradation, simulation
  6. [6] § Results › Spatiotemporal distribution of PSD95 is tuned by local transport ↔ simulation/CA1_20reg_1dv_3w_3par_PSO_GA.py, lines 234–292 · score 0.58 · CA1slm, CA1so, CA1sr, fit, degradation, simulation

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 · 406 lines · 14 KB · CC-BY-4.0 · 1 match

  1. # If in Jupyter or within ipython run both following lines
  2. # If in the terminal run nrnivmodl to load Neuron engine
  3. # %%bash
  4. # nrnivmodl
  5. from neuron import h
  6. import numpy as np
  7. import matplotlib.pyplot as plt
  8. import math
  9. import scipy.linalg
  10. from PyNeuronToolbox.record import ez_record,ez_convert
  11. from PyNeuronToolbox.morphology import dist_between,allsec_preorder
  12. #np.random.seed(123456789)
  13. import logging
  14. FORMAT = '%(asctime)s :: %(levelname)s :: %(message)s'
  15. logging.basicConfig(format=FORMAT,level=logging.INFO)
  16. log = logging.getLogger("GA-logger")
  17. # Load morphology and other stuff
  18. # --> SegLists: soma[2], dend[74], dend_5[37], apic[42], axon[1]
  19. # --> Files from Migliore & Migliore (2012)
  20. # --> CA1 pyramidal neuron
  21. h.load_file('stdrun.hoc')
  22. h.xopen('ri06.hoc')
  23. h.xopen('fixnseg.hoc')
  24. h.xopen('5a_nogui.hoc')
  25. h.tstop = 700.0
  26. from sko.GA import RCGA
  27. from sko.PSO import PSO
  28. from scipy.optimize import minimize, Bounds
  29. import pandas as pd
  30. import sushibelt
  31. import time
  32. def sushi_system(a, b, c, d, l):
  33. """
  34. Returns a matrix A, such that dx/dt = A*x
  35. N = # of compartments
  36. A is (2N x 2N) matrix
  37. x is (2N x 1) vector.
  38. The first N elements correspond to concentrations of u (molecules in transit)
  39. The second half correspond to concentrations of u-star (active molecules)
  40. The trafficking rate constants along the microtubules are given by the vectors "a" and "b"
  41. The rate constants for u turning into u* is given by the vector "c"
  42. The rate constants for u* turning into u is given by the vector "d"
  43. The rate constants for the degradation of u* is given by the vector "l"
  44. """
  45. # number of compartments
  46. N = len(l)
  47. ## State-space equations
  48. # dx/dt = Ax + Bu
  49. A = np.zeros((2 * N, 2 * N))
  50. # Trafficking along belt
  51. # Iterative traversal of dendritic tree in pre-order
  52. i = 0
  53. section = None
  54. parentStack = [(None, h.soma[0])]
  55. while len(parentStack) > 0:
  56. # Get next section to traverse
  57. # --> p is parent index, section is h.Section object
  58. (p, section) = parentStack.pop()
  59. # Trafficking to/from parent
  60. if p is not None:
  61. # Out of parent, into child
  62. ai = a.pop()
  63. A[p, p] += -ai
  64. A[i, p] += ai
  65. # Into parent, out of child
  66. bi = b.pop()
  67. A[p, i] += bi
  68. A[i, i] += -bi
  69. # visit all segments in compartment
  70. for (j, seg) in enumerate(section):
  71. # Deal with out/into rates within compartment, just tridiag matrix
  72. if j > 0:
  73. # Out of parent, into child
  74. ai = a.pop()
  75. A[i - 1, i - 1] += -ai
  76. A[i, i - 1] += ai
  77. # Into parent, out of child
  78. bi = b.pop()
  79. A[i - 1, i] += bi
  80. A[i, i] += -bi
  81. # move onto next compartment
  82. i += 1
  83. # now visit children in pre-order
  84. child_list = list(h.SectionRef(sec=section).child)
  85. if child_list is not None:
  86. child_list.reverse()
  87. for c_sec in child_list:
  88. parentStack.append([i - 1, c_sec]) # append parent index and child
  89. # Trafficking off the belt
  90. for i in range(N):
  91. A[i, i] += -c[i]
  92. A[i + N, i] += c[i]
  93. # Reattachment to belt
  94. # for i in range(N):
  95. # # reattachment
  96. # A[i, i + N] += d[i]
  97. # A[i + N, i + N] += -d[i]
  98. # Degradation after being taken off the belt
  99. for i in range(N):
  100. A[i + N, i + N] = -l[i]
  101. return A
  102. def trafficking_solution(utarg):
  103. """ Solve the problem by tuning trafficking rates, like Figs 1 and 2. """
  104. x = []
  105. # Iterative traversal of dendritic tree in pre-order
  106. i = 0
  107. section = None
  108. parentStack = [(None, h.soma[0])]
  109. while len(parentStack) > 0:
  110. # Get next section to traverse
  111. # --> p is parent index, section is h.Section object
  112. (p, section) = parentStack.pop()
  113. # Trafficking to/from parent
  114. if p is not None:
  115. mp = utarg[p] # concentration in parent
  116. mc = utarg[i] # concentration in child
  117. x.insert(0, mp / mc)
  118. # visit all segments in compartment
  119. for (j, seg) in enumerate(section):
  120. # Deal with out/into rates within compartment, just tridiag matrix
  121. if j > 0:
  122. mp = utarg[i - 1]
  123. mc = utarg[i]
  124. x.insert(0, mp / mc)
  125. # move onto next compartment
  126. i += 1
  127. # now visit children in pre-order
  128. child_list = list(h.SectionRef(sec=section).child)
  129. if child_list is not None:
  130. child_list.reverse()
  131. for c_sec in child_list:
  132. parentStack.append([i - 1, c_sec]) # append parent index and child
  133. # return calculated guesses (flip, up/down since get_deriv pops from start)
  134. return np.array(x)
  135. def get_sys_matrix(utarg, F=0.5, Ctau=1e-3, dscale=0.1, dv=1e-7):
  136. # F is a mixing factor between 0 and 1
  137. K = np.sum(utarg) / N
  138. x = trafficking_solution(F * utarg + (1 - F) * K)
  139. a = (1 / (1 + x))
  140. a = list(a)
  141. b = list((1 / (1 + x ** -1)))
  142. l = list(np.ones(N) * dv)
  143. c = list(Ctau * utarg / (F * utarg + (1 - F) * K))
  144. d = list([ci * dscale for ci in c])
  145. A = sushi_system(a, b, c, d, l)
  146. return A
  147. def solve_u(u0,w,V,Vinv,t):
  148. D = np.diag(np.exp(w*t)) # diagonal matrix exponential
  149. PHI = np.real(V.dot(D.dot(Vinv))) # state transition matrix
  150. return PHI.dot(u0) # calculate u(t)
  151. def sim_time(A,u0,time,nframes=10):
  152. # Run a simulation (log time)
  153. # --> this is a linear system; thus, matrix exponential provides exact solution
  154. utrace = [u0]
  155. w,V = scipy.linalg.eig(A)
  156. Vinv = np.linalg.inv(V)
  157. t = np.logspace(-0.5,math.log10(time),nframes)
  158. for t_ in t: utrace.append(solve_u(u0,w,V,Vinv,t_))
  159. return np.array(utrace).T
  160. bgSignal = 1e-5
  161. def calcUtrace(par,delta=bgSignal):
  162. F = par[0]
  163. Ctau = 10 ** par[1]
  164. mProp = par[2]
  165. dv = np.zeros(N)
  166. utarg = delta*np.ones(N)
  167. for k in range(N):
  168. if itarg[k] > 2:
  169. dv[k] = 10 ** par[itarg[k]]
  170. utarg[k] = par[itarg[k]+3]
  171. utarg /= np.sum(utarg)
  172. K = np.sum(utarg) / N
  173. x = trafficking_solution(F * utarg + (1 - F) * K)
  174. a = (1 / (1 + x))
  175. a = list(a)
  176. b = list((1 / (1 + x ** -1)))
  177. l = list(dv)
  178. c = list(Ctau * utarg / (F * utarg + (1 - F) * K))
  179. d = list(np.zeros(N))
  180. A = sushi_system(a, b, c, d, l)
  181. u0 = np.concatenate((mProp * dinit, (1 - mProp) * dinit))
  182. utrace = sim_time(A, u0, day7)
  183. return utrace
  184. log.info("function defined")
  185. ##### Read data ######
  186. #seglist in pre-order
  187. sec_list = allsec_preorder(h)
  188. seg_list = []
  189. for sec in sec_list:
  190. locs = np.linspace(0,1,sec.nseg+2)[1:-1]
  191. for loc in locs:
  192. seg_list.append(sec(loc))
  193. N = len(seg_list)
  194. tdf=pd.read_csv('../data/seg_mapping.csv')
  195. abbCA1=tdf['abb']
  196. abbT={}
  197. segIdx={}
  198. for i in range(N):
  199. abbT[abbCA1[i]] = 1+ abbT.get(abbCA1[i],0)
  200. ll=segIdx.get(abbCA1[i],[])
  201. ll.append(i)
  202. segIdx[abbCA1[i]] = ll
  203. expD=pd.read_csv('../data/CA1_gradient.csv')
  204. subreg = ['CA1so', 'CA1sr', 'CA1slm']
  205. cname0='D0M3'
  206. d0w = -1 * np.ones(N)
  207. for i in range(expD.shape[0]):
  208. abb = expD['Abbreviation'][i]
  209. sidx= segIdx[abb]
  210. d0w[sidx] *= -1*expD[f"{cname0}_MEAN"][i]/len(sidx)
  211. for i in range(N):
  212. if d0w[i]<0:
  213. d0w[i] = bgSignal
  214. dinit = d0w/np.sum(d0w)
  215. cname7='D7M3'
  216. d7w = -1*np.ones(N)
  217. for i in range(expD.shape[0]):
  218. abb = expD['Abbreviation'][i]
  219. sidx= segIdx[abb]
  220. d7w[sidx] *= -1 * expD[f"{cname7}_MEAN"][i]/len(sidx)
  221. for i in range(N):
  222. if d7w[i]<0:
  223. d7w[i] = bgSignal
  224. target = np.array(expD[f"{cname7}_MEAN"])/np.sum(expD[f"{cname0}_MEAN"]) #norm target to Day0 sum to take into accound degradation
  225. targSD = np.array(expD[f"{cname7}_SD"])/np.sum(expD[f"{cname0}_MEAN"]) #measurement errors
  226. tnorm = np.sum(target ** 2)
  227. day7 = 7 * 24 * 3600 # final time point
  228. itarg = np.ones(N, dtype=int)
  229. for i in range(expD.shape[0]):
  230. abb = expD['Abbreviation'][i]
  231. sidx = segIdx[abb]
  232. itarg[sidx] *= [j + 3 for j in range(len(subreg)) if subreg[j] == expD['Subregion'][i]][0]
  233. log.info("data read")
  234. cfiCounter = 0
  235. cfCounter = 0
  236. dumpCSV = True
  237. def costFunction(par):
  238. initTime = time.time()
  239. global cfCounter, dumpCSV
  240. cfCounter += 1
  241. log.info(f'Cost function starts: {cfCounter}')
  242. log.info(f'{par}')
  243. mProp = par[2]
  244. utrace = calcUtrace(par)
  245. resM, resF = sushibelt.aggregate_segments(utrace[:, -1], segIdx, expD['Abbreviation'], fun=np.sum)
  246. cost=np.sum(((resF/(1-mProp) - target)/targSD) ** 2)
  247. FinalTime = time.time() - initTime
  248. if dumpCSV:
  249. best_line = np.append(cfCounter, par)
  250. best_line = np.append(best_line, cost)
  251. df = pd.DataFrame(best_line).T
  252. #log.info(f'best df={df}')
  253. df.to_csv('CA1_3dv_cfi.csv',header=False,mode='a')
  254. log.info(f'Cost function done: cost={cost}. ({FinalTime})')
  255. return cost
  256. lowb=np.array([0, -18, 1e-7, -18, -18, -18, 1e-3, 1e-3, 1e-3])
  257. upbga=np.array([1, -1, 1-1e-7, 1, 1, 1, 1, 1, 1])
  258. bnds=Bounds(lb=lowb,ub=upbga)
  259. parnames=['F','Ctau','mProp','dv_CA1so','dv_CA1sr','dv_CA1slm','demand_CA1so','demand_CA1sr','demand_CA1slm']
  260. Nvals = 4 #10
  261. parvals = [1.0 * i/Nvals for i in range(Nvals+1)]
  262. numPar=len(parnames)
  263. def prepPar(cpar,pn,pval,pidx,bidx):
  264. lpar = np.zeros(numPar)
  265. lpar[pidx] = pval
  266. for j in range(numPar - 1):
  267. lpar[bidx[j]] = cpar[j]
  268. return lpar
  269. def profileChiSq(pn,pv=0,pso_iter=15,nm_iter=100,ga_cycles=200):
  270. pidx=[i for i in range(numPar) if parnames[i]==pn][0]
  271. pval=lowb[pidx]+(upbga[pidx]-lowb[pidx])*pv
  272. bidx= [i for i in range(numPar) if i != pidx]
  273. log.info(f'ChiSq starts: numPar={numPar}, pn={pn}, pidx={pidx}, pv={pv}, pval={pval}.')
  274. clowb=lowb[bidx]
  275. cupbga=upbga[bidx]
  276. cbnds=Bounds(lb=clowb,ub=cupbga)
  277. def costFunctionC(cpar):
  278. global cfiCounter
  279. cfiCounter += 1
  280. lpar = prepPar(cpar,pn,pval,pidx,bidx)
  281. pDF = pd.DataFrame(lpar).T
  282. pDF.index = [cfiCounter]
  283. pDF['ParamName'] = pn
  284. pDF['ParamVal'] = pval
  285. cost = costFunction(lpar)
  286. pDF['Cost'] = cost
  287. pDF.to_csv('CA1_3dv_cf_idnt.csv',header=False,mode='a')
  288. return cost
  289. log.info(f'{pn}={pval}, Start PSO')
  290. # Population size for the PSO should be at least 2*numPar and in ideal situation 5*numPar
  291. pso = PSO(func=costFunctionC, n_dim=(numPar - 1), pop=2*numPar, max_iter=pso_iter, lb=clowb,
  292. ub=cupbga, w=0.8, c1=0.5, c2=0.5)
  293. pso.run()
  294. log.info(f'{pn}={pval}, best_x is {pso.gbest_x}, best_y is {pso.gbest_y}')
  295. log.info(f'{pn}={pval}, Run Nelder-Mead on PSO result')
  296. result = minimize(costFunctionC, pso.gbest_x, method='nelder-mead',bounds=cbnds,options={'maxiter':nm_iter})
  297. log.info(f'{pn}={pval}, Prepare GA population')
  298. #use pso.gbest_x and pso.gbest_y to get access to the global optimum found
  299. psox = pso.pbest_x
  300. psoy=pso.pbest_y
  301. idx=np.argsort(psoy.flatten())
  302. gainit=np.vstack([psox[idx[:(2*(numPar-1)-1)]],result.x])
  303. #log.info(f'{pn}={pval}, psox: {psox.shape}, idx: {len(idx)}, pop_size={2*(numPar-1)}, gainit: {gainit.shape}')
  304. log.info(f'{pn}={pval}, GA starts, population dimensions: {gainit.shape}')
  305. ga = RCGA(func=costFunctionC, n_dim=(numPar-1), size_pop=2*(numPar-1), max_iter=50000, prob_mut=0.01, lb=clowb,
  306. ub=cupbga)
  307. ga.Chrom = (gainit-clowb)/(cupbga-clowb)
  308. bestX=result.x
  309. bestY=result.fun
  310. for cnt in range(ga_cycles):
  311. log.info(f'{pn}={pval}, Continue GA {cnt}')
  312. best_x, best_y = ga.run(10)
  313. best_x_p=prepPar(best_x,pn,pval,pidx,bidx)
  314. log.info(f'GA {pn}={pval} done {cnt}: cfCounter={cfCounter}, best CF={best_y}')
  315. log.info(f'{pn}={pval}, best par={best_x} ({len(best_x)})')
  316. best_line = np.append(cnt,best_x_p)
  317. #log.info(f'{pn}={pval}, best line={best_line} ({len(best_line)})')
  318. chrom = ga.Chrom
  319. bpar_dist = np.sum((bestX-ga.best_x) ** 2)
  320. if bpar_dist > 1e-7 :
  321. log.info(f'{pn}={pval}, Run Nelder-Mead on the best GA result {cnt}, best par distance = {bpar_dist}')
  322. result = minimize(costFunctionC, ga.best_x, method='nelder-mead', bounds=cbnds, options={'maxiter': nm_iter})
  323. chrom[np.argmax(ga.Y), :] = (result.x - clowb) / (cupbga - clowb)
  324. ga.Chrom=chrom
  325. bestX = result.x
  326. bestY = result.fun
  327. else :
  328. bestX = ga.best_x
  329. bestY = best_y
  330. log.info(f'{pn}={pval}, best par distance = {bpar_dist} and Nelder-Mead run on the best GA result is omitted.')
  331. log.info(f'GA {pn}={pval} completed {cnt}: cfCounter={cfCounter}, best CF={bestY}')
  332. return bestX, bestY
  333. chiCounter = 0
  334. i = 0
  335. jval = [1 + k for k in range(Nvals)]
  336. for pni in parnames :
  337. for pvj in parvals :
  338. cfiCounter = 0
  339. #pni = parnames[i]
  340. bestX, bestY = profileChiSq(pni,pvj,pso_iter=10,nm_iter=10,ga_cycles=10)
  341. pidx=[k for k in range(numPar) if parnames[k]==pni][0]
  342. pval=lowb[pidx]+(upbga[pidx]-lowb[pidx])*pvj
  343. bidx= [k for k in range(numPar) if k != pidx]
  344. bestX_p = prepPar(bestX, pni, pval, pidx, bidx)
  345. log.info(f'GA {pni}={pval} best found: cfCounter={cfCounter}, best CF={bestY}')
  346. log.info(f'{pni}={pval}, best found: par={bestX_p} ({len(bestX_p)}')
  347. bestLine = np.append(cfiCounter, bestX_p)
  348. log.info(f'{pni}={pval}, best found: line={bestLine} ({len(bestLine)})')
  349. bdf = pd.DataFrame(bestLine).T
  350. bdf['ParamName'] = pni
  351. bdf['ParamVal'] = pval
  352. bdf['Cost'] = bestY
  353. bdf.index = [chiCounter]
  354. log.info(f'{pni}={pval}, best found: df={bdf}')
  355. bdf.to_csv('CA1_3dv_ident.csv', header=False, mode='a')
  356. chiCounter += 1

CA1_3dv_identifiability_PSO_GA.py at commit 4bfbe08, under CC-BY-4.0 · at the source

Overview

Authors: Oksana Sorokina1, Edita Bulovaite2,3, Anatoly Sorokin4, Seth G N Grant2,3,5,6, J Douglas Armstrong1,6,7
  1. School of Informatics, Institute for Machine Learning, University of Edinburgh, Edinburgh, EH8 9AB UK
  2. Genes to Cognition Programme, Centre for Clinical Brain Sciences, University of Edinburgh, Edinburgh, EH16 4SB UK
  3. Institute of Neuroscience and Cardiovascular Research, University of Edinburgh, Edinburgh, EH16 4SB UK
  4. Okinawa Institute of Science and Technology, Okinawa, 904-0497 Japan
  5. Euan MacDonald Centre, University of Edinburgh, Edinburgh, EH16 4SB UK
  6. Simons Initiative for the Developing Brain (SIDB), Centre for Discovery Brain Sciences, University of Edinburgh, Edinburgh, EH8 9XD UK
  7. Computational Biomedicine Institute (IAS-5 / INM-9), Forschungszentrum Jülich, Jülich, 52425 Germany
Journal: Scientific reports, volume 16, issue 1, article 11541
Dates: received 24 September 2025; accepted 13 February 2026; published online 2 March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1038/s41598-026-40513-7 · PMID 41771946 · PMCID PMC13057022 · OpenAlex W7133197733
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: computational modeling (no new data) (modality), mouse (organism), cellular / molecular (subfield)
Keywords: Synapse, Synaptome, Dendrite, Neuron, Simulation, Biophysics, Computational biology and bioinformatics, Neuroscience
MeSH: Neurons*, Synapses*, Animals, Brain, Computer Simulation, Dendrites, Mice, Models, Neurological, Protein Transport (* major topic)
Topic: Neuroscience and Neuropharmacology Research (Cellular and Molecular Neuroscience, Neuroscience), according to OpenAlex
Funding: European Research Council (885069 SYNAPTOME); Biotechnology and Biological Sciences Research Council (BB/X009343/1)
Citations: cited by 1 paper (Europe PMC); 32 references in the paper

Abstract

Excitatory synapses are the most abundant synapse type in the brain. Being essential for behaviour and implicated in hundreds of brain disorders, these synapses exhibit striking structural and functional diversity. Synaptome mapping at single-synapse resolution reveals that synaptic protein diversity is spatially organised along the dendritic tree of individual neurons and varies with age and cell type. However, the cell biological mechanisms underlying the generation of these complex spatial synaptic patterns remain poorly understood. Potential mechanisms include somatic and dendritic protein synthesis, protein trafficking, and local regulatory mechanisms such as activity-dependent degradation. Here we developed computational models to test how combinations of these processes account for empirical synaptome data. We found that a combination of molecular transport mechanisms and local synaptic demand for proteins was sufficient to explain very complex profiles of synaptic protein distributions observed in young, mature and old mice and in different cell types. Our findings suggest the highly complex and dynamic synaptome architecture of the brain is an emergent property of a minimal set of cell biological processes. Our model sets the stage for simulations of brain tissue incorporating molecularly diverse neuronal and synaptic types in a synaptome and connectome architecture.

Supplementary Information: The online version contains supplementary material available at 10.1038/s41598-026-40513-7.

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

Repositories

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

oksankas/Sushi_belt_PSD95

License: CC-BY-4.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: 4bfbe08ec8528238cc8f4ac7b1c0074714943245, 5 December 2025
Languages: Python (62), NEURON (20), Jupyter (12), Shell (9)
Size: 126 files, 103 scripts
Software Heritage: not archived
Found in: the text, “Model development”
Holds: README, environment (environment.yml), 12 notebooks
Not found: license file, CITATION.cff, tests, continuous integration, documentation
Tools: NEURON (73 files), NumPy (72 files), pandas (70 files), SciPy (48 files), Matplotlib (45 files)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
104 files

digitalresearchservices.ed.ac.uk/resources/eddie

License: none: the authors keep all their rights
State: the link answers, verified on 30 September 2026
Evidence: the link answers
Software Heritage: not checked
Found in: “Data availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
  • 30 September 2026: the link answers (HTTP 200)

The paper's code and data availability statement is in the Data section.

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:

  • 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 103 scripts, each with its path and the digest of its content;
  • 6 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.

Data availability

All research code is available on a GitHub repository (https://digitalresearchservices.ed.ac.uk/resources/eddie).

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

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, 30 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 8 keywords, 9 MeSH terms, 2 funders, 28 references.

Cite

This paper

Sorokina, O., Bulovaite, E., Sorokin, A., Grant, S. G. N., & Armstrong, J. D. (2026). Protein trafficking and synaptic demand configure complex and dynamic synaptome architectures of individual neurons. Scientific reports, 16(1), 11541. https://doi.org/10.1038/s41598-026-40513-7

BibTeX

@article{sorokina2026protein,
author = {Sorokina, Oksana and Bulovaite, Edita and Sorokin, Anatoly and Grant, Seth G N and Armstrong, J Douglas},
title = {{Protein trafficking and synaptic demand configure complex and dynamic synaptome architectures of individual neurons}},
journal = {Scientific reports},
year = {2026},
month = mar,
volume = {16},
number = {1},
pages = {11541},
publisher = {Nature Publishing Group},
issn = {2045-2322},
doi = {10.1038/s41598-026-40513-7},
url = {https://doi.org/10.1038/s41598-026-40513-7},
pmid = {41771946},
pmcid = {PMC13057022}
}

RIS

TY - JOUR
AU - Sorokina, Oksana
AU - Bulovaite, Edita
AU - Sorokin, Anatoly
AU - Grant, Seth G N
AU - Armstrong, J Douglas
TI - Protein trafficking and synaptic demand configure complex and dynamic synaptome architectures of individual neurons
T2 - Scientific reports
J2 - Sci Rep
PY - 2026
DA - 2026/03/02
VL - 16
IS - 1
SP - 11541
SN - 2045-2322
PB - Nature Publishing Group
DO - 10.1038/s41598-026-40513-7
UR - https://doi.org/10.1038/s41598-026-40513-7
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41598-026-40513-7",
"type": "article-journal",
"title": "Protein trafficking and synaptic demand configure complex and dynamic synaptome architectures of individual neurons",
"container-title": "Scientific reports",
"author": [
{
"family": "Sorokina",
"given": "Oksana"
},
{
"family": "Bulovaite",
"given": "Edita"
},
{
"family": "Sorokin",
"given": "Anatoly"
},
{
"family": "Grant",
"given": "Seth G N"
},
{
"family": "Armstrong",
"given": "J Douglas"
}
],
"container-title-short": "Sci Rep",
"volume": "16",
"issue": "1",
"page": "11541",
"DOI": "10.1038/s41598-026-40513-7",
"PMID": "41771946",
"PMCID": "PMC13057022",
"ISSN": "2045-2322",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41598-026-40513-7",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
2
]
]
}
}

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.1014571 [code]
SynAPSeg: A novel dataset and image analysis framework for deep learning-based synapse detection and quantification.
Journal: PLoS computational biology
In common: pandas, SciPy, Matplotlib, 1 other tool, 3 references
[2] doi:10.1016/j.celrep.2026.117793 [code]
Clustered inputs engage dendritic nonlinearities and calcium signaling to support efficient place-field formation in CA1 pyramidal neurons.
Journal: Cell reports
In common: NEURON, pandas, SciPy, 2 other tools, computational modeling (no new data), cellular / molecular
[3] doi:10.3389/fncom.2026.1771884 [code]
NEURONpyxl: fast, flexible, Python-integrated simulation of biophysical neural networks with complex plastic synapses.
Journal: Frontiers in computational neuroscience
In common: NEURON, pandas, SciPy, 2 other tools, computational modeling (no new data)
[4] doi:10.1063/5.0308450 [code]
Computational modeling of human vagus nerve stimulation with three-dimensional fascicular morphology.
Journal: APL bioengineering
In common: NEURON, pandas, SciPy, 2 other tools, computational modeling (no new data)
[5] doi:10.1126/sciadv.aec4911 [code]
Dendritic shaft constrictions shape synaptic integration in neurons.
Journal: Science advances
In common: NEURON, pandas, SciPy, 2 other tools, mouse, cellular / molecular
[6] doi:10.1126/sciadv.aec3961 [code]
Linking functional and structural dendritic spine remodeling during fear learning and extinction in vivo.
Journal: Science advances
In common: NEURON, pandas, SciPy, 2 other tools, mouse
[7] doi:10.1073/pnas.2533168123 [code]
Dendritic morphology and synaptic nonlinearities enhance functional complexity in human cortical neurons.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: NEURON, pandas, SciPy, 2 other tools, cellular / molecular
[8] doi:10.1016/j.isci.2026.115488 [code]
An integrated &lt;i&gt;i&lt;/i&gt; &lt;i&gt;n vitro&lt;/i&gt; platform and biophysical modeling approach for studying synaptic transmission in isolated neuronal pairs.
Journal: iScience
In common: NEURON, pandas, SciPy, 2 other tools, cellular / molecular
[9] doi: [code]
Going deeper with morphologically detailed neural networks by simulation-based gradient propagation
Journal: Frontiers in computational neuroscience
In common: NEURON, SciPy, Matplotlib, 1 other tool, computational modeling (no new data)
[10] doi:10.1371/journal.pcbi.1014283 [code]
Spatial richness of neural magnetic fields.
Journal: PLoS computational biology
In common: NEURON, SciPy, Matplotlib, 1 other tool, computational modeling (no new data)

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.