OSCR

Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex.

Code ↔ Paper

1 match 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 1 match
  1. [1] § Results › In silico predictions about the organization of NM input ↔ circuit.ipynb, lines 1–371 · score 0.52 · rat somatosensory cortex, biological details, neuromodulatory systems, synaptic transmission, morphologies, neuronal

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

Jupyter notebook · 584 lines · 23 KB · CC-BY-4.0 · 1 match

  1. # %% [markdown]
  2. # We have reconstructed a neuromodulated version of a rat somatosensory
  3. # cortex *microcolumn* based on the one presented at the
  4. # [NMC-portal](https://bbp.epfl.ch/nmc-portal/welcome.html), using the
  5. # same pipeline used to build the [full scale non-barrel
  6. # SSCx](https://elifesciences.org/reviewed-preprints/99688#c25).
  7. #
  8. # ![](attachment:./figures/tissue-model.gif)
  9. #
  10. # **FIGURE 1**. Summary of the biologically detailed tissue model of
  11. # neocortical microcircuitry. Top left: overview of neuronal anatomy in
  12. # the reconstruction. Top right: summary of neuronal physiology. Middle
  13. # left: overview of synaptic anatomy. Middle right: fact and figures on
  14. # synaptic physiology. Bottom left: summary of microcircuit anatomy.
  15. # Bottom right: overview of microcircuit physiology. (taken from
  16. # \[cite:@Ramaswamy2018DataDriven\])
  17. #
  18. # In the `circuit` directory (we will assume it is the current working
  19. # directory), you will find `NmNCx` circuit's network and components data,
  20. # in addition to the circuit's configuration file and a file provide named
  21. # `node-sets` that we can use to analyze and simulate our reconstruction,
  22. #
  23. # ``` bash
  24. # ls -alt ./circuit/
  25. # ```
  26. #
  27. # ``` example
  28. # total 12288
  29. # -rwx------ 1 <user> staff 5219 Dec 16 12:02 circuit_config.json
  30. # -rwx------ 1 <user> staff 6490 Dec 16 12:02 node_sets.json
  31. # drwx------ 1 <user> staff 1048576 Dec 15 17:50 .
  32. # drwx------ 1 <user> staff 1048576 Dec 15 17:45 ..
  33. # drwx------ 1 <user> staff 1048576 Dec 11 17:00 components
  34. # drwx------ 1 <user> staff 1048576 Sep 9 13:40 networks
  35. # ```
  36. #
  37. # In `networks` we find the nodes representing four kings of cell
  38. # populations,
  39. #
  40. # ``` bash
  41. # ls -al ./circuit/networks/nodes
  42. # ```
  43. #
  44. # ``` example
  45. # ./circuit/networks/nodes/Cholinergic_neurons:
  46. # total 6144
  47. # -rwx------ 1 <user> staff 17088 Sep 9 17:22 nodes.h5
  48. #
  49. # ./circuit/networks/nodes/Dopaminergic_neurons:
  50. # -rwx------ 1 <user> staff 12760 Sep 9 17:22 nodes.h5
  51. #
  52. # ./circuit/networks/nodes/SSCx_neurons:
  53. # total 83968
  54. # -rwx------ 1 <user> staff 40480712 Sep 9 16:47 nodes.h5
  55. #
  56. # ./circuit/networks/nodes/Serotonergic_neurons:
  57. # total 6144
  58. # -rwx------ 1 <user> staff 12760 Sep 9 17:22 nodes.h5
  59. # ```
  60. #
  61. # and seven kind of edge populations
  62. #
  63. # ``` bash
  64. # NETWORKS=$PWD/circuit/networks/
  65. # ls -al $NETWORKS/edges/functional/*
  66. # ```
  67. #
  68. # ``` example
  69. # ./circuit/networks/edges/functional/Cholinergic_neurons__SSCx_neurons__chemical_synapse:
  70. # -rwx------ 1 <user> staff 196744064 Sep 9 17:52 projections_ST.h5
  71. # -rwx------ 1 <user> staff 47421629904 Sep 9 17:52 projections_VT.h5
  72. #
  73. # ./circuit/networks/edges/functional/Dopaminergic_neurons__SSCx_neurons__chemical_synapse:
  74. # -rwx------ 1 <user> staff 164224266 Sep 9 17:52 projections_ST.h5
  75. # -rwx------ 1 <user> staff 2976780662 Sep 9 17:52 projections_VT.h5
  76. #
  77. # ./circuit/networks/edges/functional/SSCx_neurons__SSCx_neurons__chemical_synapse:
  78. # -rwx------ 1 <user> staff 37272440760 Sep 9 17:22 edges.h5
  79. #
  80. # ./circuit/networks/edges/functional/Serotonergic_neurons__SSCx_neurons__chemical_synapse:
  81. # -rwx------ 1 <user> staff 153982252 Sep 9 17:52 projections_ST.h5
  82. # -rwx------ 1 <user> staff 4744384198 Sep 9 17:52 projections_VT.h5
  83. # ```
  84. #
  85. # The `components` directory contains single-cell models for morphologies
  86. # and electrophysiologies (`hoc` and `mod` files),
  87. #
  88. # ``` bash
  89. # COMPONENTS=$PWD/circuit/components
  90. # echo "Circuit components"
  91. # ls -alt $COMPONENTS
  92. #
  93. # echo "Circuit cell models"
  94. # ls -alt $COMPONENTS/cell_models
  95. # ```
  96. #
  97. # # Circuit configuration
  98. #
  99. # The circuit is described in SONATA format. The only variable in the
  100. # `circuit-config` presented below is `BASE_DIR` which should point to the
  101. # directory containing circuit `networks` and `components`. We assume that
  102. # the `circuit` directory is located in the current workding directory,
  103. #
  104. # ``` json
  105. # {
  106. # "version": "0.0.1",
  107. # "manifest": {
  108. # "$BASE_DIR": "./circuit",
  109. # "$NETWORK_NODES_DIR": "$BASE_DIR/networks/nodes",
  110. # "$NETWORK_EDGES_DIR": "$BASE_DIR/networks/edges/functional",
  111. # "$COMPONENTS_DIR": "$BASE_DIR/components",
  112. # "$CELL_MODELS_DIR": "$BASE_DIR/components/cell_models"
  113. # },
  114. # "components": {
  115. # "morphologies_dir": ".",
  116. # "synaptic_models_dir": ".",
  117. # "point_neuron_models_dir": ".",
  118. # "mechanisms_dir": "$BASE_DIR/components/mechanisms",
  119. # "mecombo_info": ".",
  120. # "biophysical_neuron_models_dir": ".",
  121. # "templates_dir": "."
  122. # },
  123. # "node_sets_file": "$BASE_DIR/node_sets.json",
  124. # "networks": {
  125. # "nodes": [
  126. # {
  127. # "nodes_file": "$NETWORK_NODES_DIR/SSCx_neurons/nodes.h5",
  128. # "populations":{
  129. # "SSCx_neurons": {
  130. # "type": "biophysical",
  131. # "morphologies_dir": "$CELL_MODELS_DIR/morphologies",
  132. # "biophysical_neuron_models_dir": "$CELL_MODELS_DIR/hoc",
  133. # "mecombo_info": "$CELL_MODELS_DIR/mecombo_emodel.tsv",
  134. # "alternate_morphologies": {
  135. # "neurolucida-asc": "$CELL_MODELS_DIR/morphologies/ascii",
  136. # "h5v1": "$CELL_MODELS_DIR/morphologies/h5"
  137. # }
  138. # }
  139. # }
  140. # },
  141. # {
  142. # "nodes_file": "$NETWORK_NODES_DIR/Cholinergic_neurons/nodes.h5",
  143. # "populations": {
  144. # "Cholinergic_neurons": {
  145. # "type": "virtual"
  146. # }
  147. # }
  148. # },
  149. # {
  150. # "nodes_file": "$NETWORK_NODES_DIR/Dopaminergic_neurons/nodes.h5",
  151. # "populations": {
  152. # "Dopaminergic_neurons": {
  153. # "type": "virtual"
  154. # }
  155. # }
  156. # },
  157. # {
  158. # "nodes_file": "$NETWORK_NODES_DIR/Serotonergic_neurons/nodes.h5",
  159. # "populations": {
  160. # "Serotonergic_neurons": {
  161. # "type": "virtual"
  162. # }
  163. # }
  164. # }
  165. # ],
  166. # "edges": [
  167. # {
  168. # "edges_file": "$NETWORK_EDGES_DIR/SSCx_neurons__SSCx_neurons__chemical_synapse/edges.h5",
  169. # "edge_types_file": null,
  170. # "populations":{
  171. # "SSCx_neurons__SSCx_neurons__chemical_synapse":{
  172. # "type": "chemical"
  173. # }
  174. # }
  175. # },
  176. # {
  177. # "edges_file": "$NETWORK_EDGES_DIR/Cholinergic_neurons__SSCx_neurons__chemical_synapse/projections_ST.h5",
  178. # "edge_types_file": null,
  179. # "populations":{
  180. # "Cholinergic_neurons__SSCx_neurons__chemical_synaptic_transmission":{
  181. # "type": "chemical"
  182. # }
  183. # }
  184. # },
  185. # {
  186. # "edges_file": "$NETWORK_EDGES_DIR/Cholinergic_neurons__SSCx_neurons__chemical_synapse/projections_VT.h5",
  187. # "edge_types_file": null,
  188. # "populations":{
  189. # "Cholinergic_neurons__SSCx_neurons__chemical_volumetric_transmission":{
  190. # "type": "chemical"
  191. # }
  192. # }
  193. # },
  194. # {
  195. # "edges_file": "$NETWORK_EDGES_DIR/Dopaminergic_neurons__SSCx_neurons__chemical_synapse/projections_ST.h5",
  196. # "edge_types_file": null,
  197. # "populations":{
  198. # "Dopaminergic_neurons__SSCx_neurons__chemical_synaptic_transmission":{
  199. # "type": "chemical"
  200. # }
  201. # }
  202. # },
  203. # {
  204. # "edges_file": "$NETWORK_EDGES_DIR/Dopaminergic_neurons__SSCx_neurons__chemical_synapse/projections_VT.h5",
  205. # "edge_types_file": null,
  206. # "populations":{
  207. # "Dopaminergic_neurons__SSCx_neurons__chemical_volumetric_transmission":{
  208. # "type": "chemical"
  209. # }
  210. # }
  211. # },
  212. # {
  213. # "edges_file": "$NETWORK_EDGES_DIR/Serotonergic_neurons__SSCx_neurons__chemical_synapse/projections_ST.h5",
  214. # "edge_types_file": null,
  215. # "populations":{
  216. # "Serotonergic_neurons__SSCx_neurons__chemical_synaptic_transmission":{
  217. # "type": "chemical"
  218. # }
  219. # }
  220. # },
  221. # {
  222. # "edges_file": "$NETWORK_EDGES_DIR/Serotonergic_neurons__SSCx_neurons__chemical_synapse/projections_VT.h5",
  223. # "edge_types_file": null,
  224. # "populations":{
  225. # "Serotonergic_neurons__SSCx_neurons__chemical_volumetric_transmission":{
  226. # "type": "chemical"
  227. # }
  228. # }
  229. # }
  230. # ]
  231. # }
  232. # }
  233. #
  234. # ```
  235. #
  236. # Above we can read the `SONATA-network` `node` and `edge` population
  237. # names that we have defined for our circuit. While we can use this
  238. # `base-config` to study the circuit's anatomy (see accompanying notebook
  239. # `antomy.ipynb`, we will need to generate neuromodulatory system specific
  240. # `circuit-configs` to run a simulation. We will discuss setup of a
  241. # simulation with neuromodulation in the accompanying notebook
  242. # `physiology.ipynb`. In the next section, let us next look at a
  243. # `SONATA-simulation-config` without *neuromodulation*.
  244. #
  245. # # Simulation configuration
  246. #
  247. # To run a simulation campaign we will create a folder, `$PWD/simulations`
  248. # under which we place individual directories, one for each combination of
  249. # physiological parameters values we want to scan, and value of the
  250. # random-seed used by the simulation run.
  251. #
  252. # ``` json
  253. # {
  254. # "version": 2,
  255. # "manifest": {
  256. # "$BASE_DIR": ".",
  257. # },
  258. # "run": {
  259. # "dt": 0.025,
  260. # "tstop": 4000.000,
  261. # "random_seed": 98671
  262. # },
  263. # "conditions": {
  264. # "extracellular_calcium": 1.7,
  265. # "v_init": -80.0,
  266. # "spike_location": "AIS",
  267. # "randomize_gaba_rise_time": true,
  268. # "mechanisms": {
  269. # "ProbAMPANMDA_EMS": {
  270. # "init_depleted": true,
  271. # "minis_single_vesicle": true
  272. # },
  273. # "ProbGABAAB_EMS": {
  274. # "init_depleted": true,
  275. # "minis_single_vesicle": true
  276. # }
  277. # }
  278. # },
  279. # "target_simulator": "CORENEURON",
  280. # "network": "$BASE_DIR/circuit_config.json",
  281. # "node_sets_file": "$CIRCUIT_DIR/node_sets.json",
  282. # "inputs": {
  283. # "depol-mosaic": {
  284. # "module": "noise",
  285. # "input_type": "current_clamp",
  286. # "mean_percent": 97.500,
  287. # "variance": 0.001,
  288. # "delay": 500.000,
  289. # "duration": 4000.00,
  290. # "node_set": "All"
  291. # },
  292. # "hypamp": {
  293. # "module": "hyperpolarizing",
  294. # "input_type": "current_clamp",
  295. # "delay": 0.000,
  296. # "duration": 4000.00,
  297. # "node_set": "All"
  298. # }
  299. # },
  300. # "output": {
  301. # "output_dir": "./reporting",
  302. # "spikes_file": "spikes.h5"
  303. # },
  304. # "reports": {
  305. # "soma": {
  306. # "type": "compartment",
  307. # "start_time": 0,
  308. # "end_time": 4000,
  309. # "cells": "All",
  310. # "variable_name": "v",
  311. # "unit": "mV",
  312. # "sections": "soma",
  313. # "dt": 0.1,
  314. # "file_name": "soma"}
  315. # },
  316. # "connection_overrides": [
  317. # {
  318. # "name": "verbose-projections",
  319. # "source": "NM_ChAT_Sources",
  320. # "target": "NM_ChAT_Targets",
  321. # "synapse_configure": "%s.verboseLevel = 1"
  322. # },
  323. # {
  324. # "name": "verbose-projections",
  325. # "source": "NM_SER_Sources",
  326. # "target": "NM_SER_Targets",
  327. # "synapse_configure": "%s.verboseLevel = 1"
  328. # },
  329. # {
  330. # "name": "verbose-projections",
  331. # "source": "NM_DA_Sources",
  332. # "target": "NM_DA_Targets",
  333. # "synapse_configure": "%s.verboseLevel = 1"
  334. # }
  335. # ]
  336. # }
  337. # ```
  338. #
  339. # This `simulation-config` summarizes the common parameters for our
  340. # neuromodulatory campaign but does not contain any
  341. # `neuromodulatory-inputs`. We can use it to configure a
  342. # simulation-campaign to study spontaneous responses of SSCx neurons to
  343. # input values of extracellular-calcium and the amount of depolarization
  344. # (injected as a current and specified as mean-percent of `rheobase`
  345. # current in the SONATA config). We have included some results from such a
  346. # `spontaneous-activity` simulations in the physiology notebook.
  347. #
  348. # # Load a SONATA circuit
  349. #
  350. # Here we load our `NmNCx` (SONATA) circuit using BBP's package
  351. # [bluepysnap](https://github.com/BlueBrain/snap). We will not use any
  352. # other circuit tools. For more extensive analyses we will need the
  353. # package `nmncx`, and we can find several examples in that repository.
  354. # Here we begin by importing the necessary code-packages,
  355. # %%
  356. import matplotlib.pyplot as plt
  357. import matplotlib.patches as patches
  358. from mpl_toolkits.mplot3d import Axes3D
  359. plt.rcParams.update({'font.size': 16})
  360. plt.rcParams.update({'axes.spines.top': False})
  361. plt.rcParams.update({'axes.spines.right': False})
  362. from matplotlib import cm
  363. from bluepysnap import Circuit
  364. from bluepysnap.bbp import Cell
  365. from bluepysnap.bbp import Edge as Synapse
  366. import numpy as np
  367. import pandas as pd
  368. import time
  369. # %% [markdown]
  370. # Next we will need code and data for the NmNCx circuit we want to
  371. # analyze. Assuming that the circuit data directory is located in the
  372. # current working directory, we have,
  373. # %%
  374. PROJ_ROOT = Path.cwd()/"circuit"
  375. nmncxt = Circuit(PROJ_ROOT/"circuit_config.json")
  376. sscx_cells = nmncxt.nodes["SSCx_neurons"]
  377. central_GIDs = sscx_cells.ids("mc2_Column")
  378. all_GIDs = sscx_cells.ids("All")
  379. neuromod_GIDs = {}
  380. central_neuromod_GIDs = {}
  381. central_PYR_GIDs = {}
  382. central_INT_GIDs = {}
  383. for NM in ["NM_ChAT", "NM_DA", "NM_SER"]:
  384. neuromod_GIDs[NM] = sscx_cells.ids(f"{NM}_Targets")
  385. central_neuromod_GIDs[NM] = (
  386. np.intersect1d(neuromod_GIDs[NM], central_GIDs))
  387. central_PYR_GIDs[NM] = (
  388. np.intersect1d(central_neuromod_GIDs[NM], sscx_cells.ids("Excitatory")))
  389. central_INT_GIDs[NM] =(
  390. np.intersect1d(central_neuromod_GIDs[NM], sscx_cells.ids("Inhibitory")))
  391. # %% [markdown]
  392. # We are interested into analyze how external projections (e.g.,
  393. # neuromodulatory inputs, cholinergic projections in this case) are
  394. # defined
  395. # %%
  396. nodepops = {
  397. "NM_ChAT": "Cholinergic_neurons",
  398. "NM_DA": "Dopaminergic_neurons",
  399. "NM_SER": "Serotonergic_neurons"}
  400. edgepops = {
  401. "NM_ChAT_ST": 'Cholinergic_neurons__SSCx_neurons__chemical_synaptic_transmission',
  402. "NM_ChAT_VT": 'Cholinergic_neurons__SSCx_neurons__chemical_volumetric_transmission',
  403. "NM_DA_ST": 'Dopaminergic_neurons__SSCx_neurons__chemical_synaptic_transmission',
  404. "NM_DA_VT": 'Dopaminergic_neurons__SSCx_neurons__chemical_volumetric_transmission',
  405. "NM_SER_ST": 'Serotonergic_neurons__SSCx_neurons__chemical_synaptic_transmission',
  406. "NM_SER_VT": 'Serotonergic_neurons__SSCx_neurons__chemical_volumetric_transmission'}
  407. LOG.info(
  408. f"There are {len(all_GIDs)} neuron in the whole O1, {len(central_GIDs)}"
  409. " in the central column\n\n")
  410. LOG.info("Number of potential target neurons:\n")
  411. projection_ST = {}
  412. projection_VT = {}
  413. virtual_sources = {}
  414. for NM in ["NM_ChAT", "NM_DA", "NM_SER"]:
  415. projection_ST[NM] = nmncxt.edges[edgepops[f"{NM}_ST"]]
  416. projection_VT[NM] = nmncxt.edges[edgepops[f"{NM}_VT"]]
  417. virtual_sources[NM] = nmncxt.nodes[nodepops[NM]].ids()
  418. LOG(f"There are {len(virtual_sources[NM])} virtual sources for {NM}")
  419. LOG(f"There are {len(neuromod_GIDs[NM])} neuron modulated by {NM} in the whole O1,"
  420. f"{len(central_neuromod_GIDs[NM])} in the central column")
  421. # %% [markdown]
  422. # ``` example
  423. # ________________________________________________________________________________
  424. # PLOG-NmNCx INFO: [2024-12-13-16-49]
  425. # --------------------------------------------------------------------------------
  426. # There are 163528 neuron in the whole O1, 22898 in the central column
  427. #
  428. #
  429. # ________________________________________________________________________________
  430. # PLOG-NmNCx INFO: [2024-12-13-16-49]
  431. # --------------------------------------------------------------------------------
  432. # Number of potential target neurons:
  433. #
  434. # There are 282 virtual sources for NM_ChAT
  435. # There are 151746 neuron modulated by NM_ChAT in the whole O1,21251 in the central column
  436. # There are 102 virtual sources for NM_DA
  437. # There are 156428 neuron modulated by NM_DA in the whole O1,21916 in the central column
  438. # There are 53 virtual sources for NM_SER
  439. # There are 90203 neuron modulated by NM_SER in the whole O1,12495 in the central column
  440. # ```
  441. #
  442. # We will need projections data,
  443. # %%
  444. all_projections = {}
  445. all_central_projections = {}
  446. all_central_projections_PYR = {}
  447. all_central_projections_INT = {}
  448. LOG.info("Number of synapses targeting the whole O1 and the central column")
  449. for NM in ["NM_ChAT", "NM_DA", "NM_SER"]:
  450. all_projections[NM] = {}
  451. all_central_projections[NM] = {}
  452. all_central_projections_PYR[NM] = {}
  453. all_central_projections_INT[NM] = {}
  454. for projection, name in zip([projection_ST[NM], projection_VT[NM]], ["ST", "VT"]):
  455. N_proj = 0
  456. projs = []
  457. for target in neuromod_GIDs[NM]:
  458. proj = projection.afferent_edges(target)
  459. N_proj += len(proj)
  460. projs.append(proj)
  461. N_proj_mc2 = 0
  462. central_projs = []
  463. for target in central_neuromod_GIDs[NM]:
  464. proj = projection.afferent_edges(target)
  465. N_proj_mc2 += len(proj)
  466. central_projs.append(proj)
  467. central_PYR_projs = []
  468. for target in central_PYR_GIDs[NM]:
  469. proj = projection.afferent_edges(target)
  470. central_PYR_projs.append(proj)
  471. central_INT_projs = []
  472. for target in central_INT_GIDs[NM]:
  473. proj = projection.afferent_edges(target)
  474. central_INT_projs.append(proj)
  475. LOG(f"{NM}_{name} - {N_proj} synapses in the whole O1,"
  476. f" {N_proj_mc2} synapses in the central column")
  477. all_projections[NM][name] = np.concatenate(projs)
  478. all_central_projections[NM][name] = np.concatenate(central_projs)
  479. all_central_projections_PYR[NM][name] = np.concatenate(central_PYR_projs)
  480. all_central_projections_INT[NM][name] = np.concatenate(central_INT_projs)
  481. # %% [markdown]
  482. # ``` example
  483. # ________________________________________________________________________________
  484. # PLOG-NmNCx INFO: [2024-12-13-16-49]
  485. # --------------------------------------------------------------------------------
  486. # Number of synapses targeting the whole O1 and the central column
  487. # NM_ChAT_ST - 667880 synapses in the whole O1, 93917 synapses in the central column
  488. # NM_ChAT_VT - 290952862 synapses in the whole O1, 47769462 synapses in the central column
  489. # NM_DA_ST - 458424 synapses in the whole O1, 64404 synapses in the central column
  490. # NM_DA_VT - 18494738 synapses in the whole O1, 3016779 synapses in the central column
  491. # NM_SER_ST - 174565 synapses in the whole O1, 24287 synapses in the central column
  492. # NM_SER_VT - 16104091 synapses in the whole O1, 2597090 synapses in the central column
  493. # ```
  494. #
  495. # ``` example
  496. # ________________________________________________________________________________
  497. # PLOG-NmNCx INFO: [2024-12-05-12-33]
  498. # --------------------------------------------------------------------------------
  499. # Number of synapses targeting the whole O1 and the central column
  500. # NM_ChAT_ST - 667880 synapses in the whole O1, 93917 synapses in the central column
  501. # NM_ChAT_VT - 290952862 synapses in the whole O1, 47769462 synapses in the central column
  502. # NM_DA_ST - 458424 synapses in the whole O1, 64404 synapses in the central column
  503. # NM_DA_VT - 18494738 synapses in the whole O1, 3016779 synapses in the central column
  504. # NM_SER_ST - 174565 synapses in the whole O1, 24287 synapses in the central column
  505. # NM_SER_VT - 16104091 synapses in the whole O1, 2597090 synapses in the central column
  506. # ```
  507. # %%
  508. LOG.info("Number of ACTUAL target neurons:\n")
  509. central_pre = {}
  510. central_post = {}
  511. for NM in ["NM_ChAT", "NM_DA", "NM_SER"]:
  512. central_pre[NM] = {}
  513. central_post[NM] = {}
  514. post_ST = projection_ST[NM].get(all_projections[NM]["ST"], Synapse.TARGET_NODE_ID)
  515. pre_ST = projection_ST[NM].get(all_projections[NM]["ST"], Synapse.SOURCE_NODE_ID)
  516. post_VT = projection_VT[NM].get(all_projections[NM]["VT"], Synapse.TARGET_NODE_ID)
  517. pre_VT = projection_VT[NM].get(all_projections[NM]["VT"], Synapse.SOURCE_NODE_ID)
  518. central_post_ST = projection_ST[NM].get(all_central_projections[NM]["ST"],
  519. Synapse.TARGET_NODE_ID)
  520. central_pre_ST = projection_ST[NM].get(all_central_projections[NM]["ST"],
  521. Synapse.SOURCE_NODE_ID)
  522. central_post[NM]["ST"] = central_post_ST
  523. central_pre[NM]["ST"] = central_pre_ST
  524. central_post_VT = projection_VT[NM].get(all_central_projections[NM]["VT"], Synapse.TARGET_NODE_ID)
  525. central_pre_VT = projection_VT[NM].get(all_central_projections[NM]["VT"], Synapse.SOURCE_NODE_ID)
  526. central_post[NM]["VT"] = central_post_VT
  527. central_pre[NM]["VT"] = central_pre_VT
  528. LOG(
  529. f"There are {len(np.unique(pre_ST))}/{len(virtual_sources[NM])}"
  530. " ACTUAL virtual sources for {NM} for ST"
  531. f" {len(np.unique(pre_VT))}/{len(virtual_sources[NM])} for VT targeting the whole O1")
  532. LOG(
  533. f"There are {len(np.unique(central_pre_ST))}/{len(virtual_sources[NM])}"
  534. " ACTUAL virtual sources"
  535. f" for {NM} for ST, {len(np.unique(central_pre_VT))}/{len(virtual_sources[NM])}"
  536. f" for VT targeting the central column")
  537. LOG(
  538. f"There are {len(np.unique(post_ST))}/{len(neuromod_GIDs[NM])}"
  539. " ACTUAL modulated neurons"
  540. f" for {NM} for ST, {len(np.unique(post_VT))}/{len(neuromod_GIDs[NM])}"
  541. f" for VT in the whole O1")
  542. LOG(
  543. f"There are {len(np.unique(central_post_ST))}/{len(central_neuromod_GIDs[NM])}"
  544. " ACTUAL modulated neurons"
  545. f" for {NM} for ST, {len(np.unique(central_post_VT))}/{len(central_neuromod_GIDs[NM])}"
  546. f" for VT in the central column\n")
  547. # %% [markdown]
  548. # A more detailed analysis of the circuit's anatomy is provided in the
  549. # accompanying notebook `anatomy.ipynb` or `anatomy.org`, and simulations
  550. # are further described in `physiology.ipynb / physiology.org`.

circuit.ipynb, under CC-BY-4.0 · at the source

Overview

Authors: Cristina Colangelo1, Alberto Muñoz2,3,4, Alberto Antonietti1,5, Vishal Sood1, Alejandro Antón-Fernández2,4, Joni Herttuainen1, Armando Romani1, Javier DeFelipe2,4,6, Srikanth Ramaswamy1,7
  1. Blue Brain Project, École polytechnique fédérale de Lausanne (EPFL), Campus Biotech, Geneva, Switzerland
  2. Laboratorio Cajal de Circuitos Corticales, CTBUniversidad Politécnica de Madrid, Spain
  3. Department of Cell Biology, Complutense University, Madrid, Spain
  4. Instituto Cajal, CSIC, Madrid, Spain
  5. Department of Electronics, Information and Bioengineering, Politecnico di MilanoMilano, Italy
  6. CIBERNED, Centro de Investigación Biomédica en Red de Enfermedades Neurodegenerativas, Spain
  7. Neural Circuits Laboratory, Biosciences Institute, Newcastle University, United Kingdom
Journal: PLoS computational biology, volume 22, issue 6, article e1014460
Dates: received 8 August 2025; accepted 15 June 2026; published online 26 June 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1371/journal.pcbi.1014460 · PMID 42361121 · PMCID PMC13345462 · OpenAlex W7166054300
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: rat (organism)
Methods: Spectral & time-frequency, Statistics, Single-unit activity, calcium imaging, Preprocessing
MeSH: Models, Neurological*, Neocortex*, Neurotransmitter Agents*, Acetylcholine, Animals, Computational Biology, Computer Simulation, Nerve Net, Neurons, Rats, Rats, Wistar, Serotonin, Somatosensory Cortex (* major topic)
Journal subjects: Biology and Life Sciences, Biochemistry, Neurochemistry, Neurotransmitters, Cholinergics, Neuroscience, Cell Biology, Cellular Types, Animal Cells, Neurons, Nerve Fibers, Cellular Neuroscience, Neuromodulation, Engineering and Technology, Electrical Engineering, Electrical Circuits, Microcircuits, Brain Mapping, Optogenetics, Research and Analysis Methods, Bioassays and Physiological Analysis, Neurophysiological Analysis, Cholinergic Fibers, Neurochemicals, Dopaminergics
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: Board of the Swiss Federal Institutes of Technology (Blue Brain Project); Ministerio de Ciencia, Innovación y Universidades (PID2021-127924NB-I00); H2020 Marie Sklodowska-Curie Actions (Global Fellowship Agreement 842492); Newcastle University Academic Track; Fulbright Association; Lister Institute of Preventive Medicine; Academy of Medical Sciences (Springboard Award); Air Force (FA9550-23-1-0533); International Brain Research Organization (IBRO) (Early Career Award); Okinawa Institute of Science and Technology Graduate University (Theoretical Sciences Visiting Program (TSVP))
Citations: not cited yet (Europe PMC); 123 references in the paper

Abstract

The hindlimb representation in the somatosensory cortex of two-week old Wistar rats has been a valuable model system for dissecting the microcircuitry of neurons and their synaptic connections. In this study, we present a comprehensive experimental dataset quantifying the fiber length per cortical volume and the density of varicosities for cholinergic, catecholaminergic, and serotonergic neuromodulatory systems within the cortical neuropil using immunocytochemical staining and stereological techniques, along with a methodological framework for generating biophysically detailed computational models from these data. Acquired data were integrated into a biophysically detailed computational model of the somatosensory cortex to explore the anatomical organization and functional implications of neuromodulatory innervation. We found that neuromodulatory innervation, although sparse, substantially impacts network activity. Network simulations support the hypothesis that acetylcholine suppresses slow oscillations and promotes the desynchronization of cortical networks, consistent with the extensive findings in existing literature. Additionally, the temporal properties of acetylcholine modulation are consistent with synaptic rather than volume release. Furthermore, we found that the release of dopamine and serotonin in sensory cortices induces network desynchronization by inhibiting delta oscillations and that serotonin also initiates the emergence of theta oscillations, pointing to previously unexplored aspects of their function in governing cortical network activity. The experimental data and the biophysical computational model are available as an open-access community resource.

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 1 match between paragraphs and lines of code.

Zenodo 14587678

License: CC-BY-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Languages: Jupyter (3)
Size: 7 files, 3 scripts
Software Heritage: not checked
Found in: “Data and code availability.”
Holds: README, 3 notebooks
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Matplotlib (1 file), NumPy (1 file), pandas (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
2 files

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:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 1 script, each with its path and the digest of its content;
  • 1 match 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

Data on varicosity densities of neuromodulatory inputs are reported in figures and text in this publication and deposited at Zenodo (https://doi.org/10.5281/zenodo.14587678). Volumetric atlases, neuron reconstructions, the parameterization of connectivity in JSON format, and the description of the model in SONATA format have been deposited at Zenodo and are publicly available as of the data of the publication. Original code has been deposited at Zenodo and is publicly available at https://doi.org/10.5281/zenodo.14587678.

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

Data and code availability

Data on varicosity densities of neuromodulatory inputs are reported in figures and text in this publication and deposited at Zenodo (https://doi.org/10.5281/zenodo.14587678).

Volumetric atlases, neuron reconstructions, the parameterization of connectivity in JSON format, and the description of the model in SONATA format have been deposited at Zenodo and are publicly available as of the date of the publication.

Original code has been deposited at Zenodo and is publicly available at https://doi.org/10.5281/zenodo.14587678.

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

Recorded: type, language, journal, volume, issue, pages, dates, 9 authors, 13 MeSH terms, 10 funders, 122 references.

Cite

This paper

Colangelo, C., Muñoz, A., Antonietti, A., Sood, V., Antón-Fernández, A., Herttuainen, J., Romani, A., DeFelipe, J., & Ramaswamy, S. (2026). Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex. PLoS computational biology, 22(6), e1014460. https://doi.org/10.1371/journal.pcbi.1014460

BibTeX

@article{colangelo2026quantitative,
author = {Colangelo, Cristina and Muñoz, Alberto and Antonietti, Alberto and Sood, Vishal and Antón-Fernández, Alejandro and Herttuainen, Joni and Romani, Armando and DeFelipe, Javier and Ramaswamy, Srikanth},
title = {{Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex}},
journal = {PLoS computational biology},
year = {2026},
month = jun,
volume = {22},
number = {6},
pages = {e1014460},
publisher = {PLOS},
issn = {1553-734X},
doi = {10.1371/journal.pcbi.1014460},
url = {https://doi.org/10.1371/journal.pcbi.1014460},
pmid = {42361121},
pmcid = {PMC13345462}
}

RIS

TY - JOUR
AU - Colangelo, Cristina
AU - Muñoz, Alberto
AU - Antonietti, Alberto
AU - Sood, Vishal
AU - Antón-Fernández, Alejandro
AU - Herttuainen, Joni
AU - Romani, Armando
AU - DeFelipe, Javier
AU - Ramaswamy, Srikanth
TI - Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex
T2 - PLoS computational biology
J2 - PLoS Comput Biol
PY - 2026
DA - 2026/06/26
VL - 22
IS - 6
SP - e1014460
SN - 1553-734X
PB - PLOS
DO - 10.1371/journal.pcbi.1014460
UR - https://doi.org/10.1371/journal.pcbi.1014460
LA - en
ER -

CSL-JSON

{
"id": "10.1371/journal.pcbi.1014460",
"type": "article-journal",
"title": "Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex",
"container-title": "PLoS computational biology",
"author": [
{
"family": "Colangelo",
"given": "Cristina"
},
{
"family": "Muñoz",
"given": "Alberto"
},
{
"family": "Antonietti",
"given": "Alberto"
},
{
"family": "Sood",
"given": "Vishal"
},
{
"family": "Antón-Fernández",
"given": "Alejandro"
},
{
"family": "Herttuainen",
"given": "Joni"
},
{
"family": "Romani",
"given": "Armando"
},
{
"family": "DeFelipe",
"given": "Javier"
},
{
"family": "Ramaswamy",
"given": "Srikanth"
}
],
"container-title-short": "PLoS Comput Biol",
"volume": "22",
"issue": "6",
"page": "e1014460",
"DOI": "10.1371/journal.pcbi.1014460",
"PMID": "42361121",
"PMCID": "PMC13345462",
"ISSN": "1553-734X",
"publisher": "PLOS",
"URL": "https://doi.org/10.1371/journal.pcbi.1014460",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
26
]
]
}
}

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.1126/sciadv.adz6495
Pupil-linked arousal heterogeneously modulates cell-type-specific sensory processing.
Journal: Science advances
In common: 8 references
[2] doi:10.1038/s42003-026-10032-2 [code]
Data-driven mouse motor thalamus model reveals topography and spatial weight scaling govern spindle dynamics.
Journal: Communications biology
In common: pandas, Matplotlib, NumPy, 1 reference, author Alberto Antonietti
[3] 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: pandas, Matplotlib, NumPy, rat, 3 references
[4] doi:10.1093/bioinformatics/btag328 [code]
eFEL: electrophysiology feature extraction library.
Journal: Bioinformatics (Oxford, England)
In common: pandas, Matplotlib, NumPy, 3 references
[5] doi:10.1126/sciadv.aed6417 [code]
Intrinsic timing, not temporal prediction, underlies ramping dynamics in visual and parietal cortex during passive behavior.
Journal: Science advances
In common: pandas, Matplotlib, NumPy, 3 references
[6] doi:10.1371/journal.pcbi.1013252 [code]
Dynamic cholinergic signaling differentially desynchronizes cortical microcircuits dependent on modulation rate and network connectivity.
Journal: PLoS computational biology
In common: Matplotlib, NumPy, 3 references
[7] doi:10.1073/pnas.2532072123 [code]
Spatially structured heterogeneity shapes large-scale cortical dynamics in a model of the human cortex.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: Matplotlib, NumPy, 3 references
[8] doi:10.7554/elife.110795 [code]
REM sleep prefrontal high-frequency oscillation chains mediate distinct cortical - hippocampal reactivation patterns compared to NREM sleep.
Journal: eLife
In common: rat, 3 references
[9] doi:10.1016/j.isci.2026.117130 [code]
Region-specific weighting of sensory intensity and reward prediction error by dopamine signals.
Journal: iScience
In common: pandas, Matplotlib, NumPy, 2 references
[10] doi:10.1158/0008-5472.can-25-4018 [code]
MIF-Induced CD74+ Microglia and Macrophages Promote Progression of Brain Metastasis and Are Clinically Relevant across Central Nervous System Disorders.
Journal: Cancer research
In common: author Alejandro Antón-Fernández

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.