OSCR

Laminar CBV and BOLD response characteristics over time and space in the human primary somatosensory cortex at 7T.

Code ↔ Paper

16 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 16 matches · 1 of them tie a paragraph to a whole file without given lines: a weak match, whose lines are not tinted
  1. [1] § Functional Data Processing › Definition of digit ROIs ↔ code/analysis/func/05_registerFuncToAnat.py, the whole file · a weak match · score 0.85 · antsRegistration, registration mask, MP2RAGE, functional EPI, T1w image, spline · Report a mismatch
  2. [2] § Methods › Anatomical data processing ↔ code/analysis/anat/01_registerHighResSlabs.py, lines 17 to 100 · score 0.75 · n4_bias_field_correction, antsPy, rigid, anatomical, MP2RAGE, transformations · Report a mismatch
  3. [3] § Functional Data Processing › Pre-processing ↔ code/analysis/func/01-0_mocoCoregistration.py, lines 68 to 126 · score 0.71 · antsPy, motion outliers, motion correction, transformations, volumes · Report a mismatch
  4. [4] § Functional Data Processing › Definition of digit ROIs ↔ code/analysis/retired/08_selectROIs.py, lines 89 to 138 · score 0.71 · LN2_UVD_FILTER, largest cluster, cortical depth, propagate, radius, max · Report a mismatch
  5. [5] § Functional Data Processing › Pre-processing ↔ code/analysis/func/01-0_mocoCoregistration.py, lines 68 to 126 · score 0.70 · transformation matrices, EPI space, motion correction, T1w images · Report a mismatch
  6. [6] § Functional Data Processing › Pre-processing ↔ code/misc/computeT1w.py, lines 13 to 49 · score 0.69 · EPI space, motion correction, T1w images, variation, inverse, concatenated · Report a mismatch
  7. [7] § Functional Data Processing › Definition of digit ROIs ↔ code/analysis/retired/08_selectROIs.py, lines 1 to 43 · score 0.65 · binarized activation map, cortical depth, propagation, thresholded, D3, D4 · Report a mismatch
  8. [8] § Temporal Analysis › The triphasic response changes as a function of distance from the activation peak ↔ code/analysis/func/99_quantifyPeakTrough.py, lines 178 to 232 · score 0.63 · post stimulus peak, quantified, 4–6 mm, 6–8 mm, trough, TTP · Report a mismatch
  9. [9] § Temporal Analysis › The triphasic response changes as a function of distance from the activation peak ↔ code/analysis/func/99_quantifyPeakTrough.py, lines 178 to 232 · score 0.58 · post stimulus peak, 8–10 mm, 6–8 mm, trough, TTPs, phases · Report a mismatch
  10. [10] § Functional Data Processing › Extraction of event-related averages ↔ code/analysis/func/01-3_saveNusianceRegressors.py, lines 13 to 85 · score 0.57 · motion outliers, motion traces, regressed, linearly · Report a mismatch
  11. [11] § Functional Data Processing › (Statistical) response estimation ↔ code/analysis/func/01-3_saveNusianceRegressors.py, lines 13 to 85 · score 0.57 · motion regressors, motion outliers, linear, derivative, VASO, sub · Report a mismatch
  12. [12] § Methods › Anatomical data processing ↔ code/analysis/func/01-0_mocoCoregistration.py, lines 132 to 207 · score 0.53 · antsPy, rigid, T1w images, transformations · Report a mismatch
  13. [13] § Functional Data Processing › Definition of digit ROIs ↔ code/analysis/func/01-0_mocoCoregistration.py, lines 262 to 340 · score 0.53 · transformation matrices, T1w image, spline, EPI · Report a mismatch
  14. [14] § Functional Data Processing › Definition of digit ROIs ↔ code/analysis/func/08_selectROIs_revised.py, lines 1 to 21 · score 0.52 · activation map, cortical depth, propagation, thresholded, voxels, ROI · Report a mismatch
  15. [15] § Functional Data Processing › Pre-processing ↔ code/analysis/func/03_boco.py, lines 59 to 146 · score 0.51 · dUpsample, duplicated, match, upsampled, volume, VASO · Report a mismatch
  16. [16] § Temporal Analysis › The triphasic response changes as a function of distance from the activation peak ↔ code/analysis/func/99_quantifyPeakTrough.py, lines 235 to 272 · score 0.50 · post stimulus peak, signal changes, 4–6 mm, 6–8 mm, trough, phase · Report a mismatch

Paper

Loaded from Europe PMC by your browser; OSCR does not store it: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 391 lines · 14 KB · MIT · 4 matches

  1. """
  2. Doing motion correction and registering multiple runs across sessions.
  3. """
  4. import ants
  5. import os
  6. import glob
  7. import nibabel as nb
  8. import numpy as np
  9. import subprocess
  10. import sys
  11. sys.path.append(f'./code/misc')
  12. from computeT1w import *
  13. subs = ['sub-12', 'sub-15', 'sub-16', 'sub-17', 'sub-18']
  14. # subs = ['sub-07', 'sub-09', 'sub-10']
  15. subs = ['sub-14']
  16. ROOT = '/Users/sebastiandresbach/data/s1Anfunco/Nifti'
  17. # ========================================================================================
  18. # Do motion-correction within runs
  19. print('Doing motion-correction within runs')
  20. for sub in subs:
  21. print(f'Processing {sub}')
  22. funcDir = f'{ROOT}/derivatives/{sub}/func'
  23. if not os.path.exists(funcDir):
  24. os.makedirs(funcDir)
  25. print("Func directory is created")
  26. # Look for individual runs (containing both nulled and not-nulled images)
  27. runs = sorted(glob.glob(f'{ROOT}/{sub}/ses-0*/func/{sub}_ses-0*_task-*run-00*_cbv.nii.gz'))
  28. for i in range(1, 4):
  29. if f'ses-0{i}' in runs[0]:
  30. ses = f'ses-0{i}'
  31. # Make folder to dump motion traces
  32. motionDir = f'{funcDir}/motionParameters'
  33. if not os.path.exists(motionDir):
  34. os.makedirs(motionDir)
  35. print("Motion directory is created")
  36. for run in runs:
  37. base = os.path.basename(run).rsplit('.', 2)[0][:-4]
  38. print(f'Processing run {base}')
  39. # Make folder to dump motion traces for the run
  40. os.system(f'mkdir {funcDir}/motionParameters/{base}')
  41. for start, modality in enumerate(['notnulled', 'nulled']):
  42. print(modality)
  43. # Load timeseries containing both nulled and notnulled
  44. nii = nb.load(run)
  45. # get header and affine
  46. header = nii.header
  47. affine = nii.affine
  48. # Load data as array
  49. dataComplete = nii.get_fdata()
  50. # Separate nulled and not-nulled data
  51. # Start is defined by "enumerate" above. 0 for notnulled, 1 for nulled.
  52. data = dataComplete[:, :, :, start::2]
  53. # Make new nii and save
  54. img = nb.Nifti1Image(data, header=header, affine=affine)
  55. nb.save(img, f'{funcDir}/{base}_{modality}.nii')
  56. # Make reference image
  57. reference = np.mean(data[..., 4:6], axis=-1)
  58. # And save it
  59. img = nb.Nifti1Image(reference, header=header, affine=affine)
  60. nb.save(img, f'{funcDir}/{base}_{modality}_reference.nii')
  61. # Make motion mask
  62. print('Generating mask')
  63. command = '3dAutomask '
  64. command += f'-prefix {funcDir}/{base}_{modality}_moma.nii.gz '
  65. command += f'-peels 3 -dilate 2 '
  66. command += f'{funcDir}/{base}_{modality}_reference.nii'
  67. subprocess.run(command, shell=True)
  68. # Define mask and reference images in 'antspy-style'
  69. fixed = ants.image_read(f'{funcDir}/{base}_{modality}_reference.nii')
  70. # Get motion mask
  71. mask = ants.image_read(f'{funcDir}/{base}_{modality}_moma.nii.gz')
  72. # Load data in antsPy style
  73. ts = ants.image_read(f'{funcDir}/{base}_{modality}.nii')
  74. # Perform motion correction
  75. corrected = ants.motion_correction(ts, fixed=fixed, mask=mask)
  76. ants.image_write(corrected['motion_corrected'], f'{funcDir}/{base}_{modality}_moco.nii.gz')
  77. # Save transformation matrix for later
  78. for vol, matrix in enumerate(corrected['motion_parameters']):
  79. mat = matrix[0]
  80. os.system(f"cp {mat} {funcDir}/motionParameters/{base}/{base}_{modality}_vol{vol:03d}.mat")
  81. # =========================================================================
  82. # Computing motion outliers
  83. command = 't '
  84. command += f'-i {funcDir}/{base}_{modality}.nii '
  85. command += f'-o {funcDir}/motionParameters/{base}/{base}_{modality}_motionOutliers.txt '
  86. command += f'--nomoco'
  87. subprocess.run(command, shell=True)
  88. # =========================================================================
  89. # Compute T1w image in EPI space within run
  90. nulledFile = f'{funcDir}/{base}_nulled_moco.nii.gz'
  91. notNulledFile = f'{funcDir}/{base}_notnulled_moco.nii.gz'
  92. t1w = computeT1w(nulledFile, notNulledFile)
  93. header = nb.load(nulledFile).header
  94. affine = nb.load(nulledFile).affine
  95. img = nb.Nifti1Image(t1w, header=header, affine=affine)
  96. nb.save(img, f'{funcDir}/{base}_T1w.nii')
  97. # =============================================================================
  98. # Register run-wise T1w images to rest
  99. # =============================================================================
  100. # # Set subjects to work on
  101. # subs = ['sub-05']
  102. # # # Set sessions to work on
  103. # # sessions = ['ses-01', 'ses-02']
  104. # # sessions = ['ses-05']
  105. #
  106. print('Registering run-wise T1w images to rest')
  107. for sub in subs:
  108. print(f'Processing {sub}')
  109. # Look for individual STIMULATION runs (containing both nulled and not-nulled images)
  110. runs = sorted(glob.glob(f'{ROOT}/{sub}/ses-0*/func/{sub}_ses-0*_task-stim*run-00*_cbv.nii.gz'))
  111. for i in range(1, 4):
  112. if f'ses-0{i}' in runs[0]:
  113. ses = f'ses-0{i}'
  114. outFolder = f'{ROOT}/derivatives/{sub}/func'
  115. # look for individual runs
  116. runs = sorted(glob.glob(f'{outFolder}/{sub}_{ses}_task-stim*_run-0*_T1w.nii'))
  117. # Set name of reference image
  118. refImage = (sorted(glob.glob(f'{outFolder}/{sub}_{ses}_task-restBA3b_run-001_T1w.nii')))[0]
  119. # Get basename of reference image
  120. refBase = os.path.basename(refImage).rsplit('.', 2)[0]
  121. # Load reference image in antsPy style
  122. fixed = ants.image_read(refImage)
  123. # Define motion mask
  124. mask = ants.image_read(
  125. sorted(glob.glob(f'{outFolder}/{sub}_{ses}_task-restBA3b_run-001_nulled_moma.nii.gz'))[0]
  126. )
  127. for run in runs:
  128. base = os.path.basename(run).rsplit('.', 2)[0].split('_')
  129. tmp = base[0]
  130. for subString in base[1:-1]:
  131. tmp = tmp + f'_{subString}'
  132. base = tmp
  133. # Define moving image
  134. moving = ants.image_read(run)
  135. # Compute transformation matrix
  136. mytx = ants.registration(
  137. fixed=fixed,
  138. moving=moving,
  139. type_of_transform='Rigid',
  140. mask=mask
  141. )
  142. # Apply transformation
  143. mywarpedimage = ants.apply_transforms(
  144. fixed=fixed,
  145. moving=moving,
  146. transformlist=mytx['fwdtransforms'],
  147. interpolator='bSpline'
  148. )
  149. # Save image
  150. ants.image_write(
  151. mywarpedimage,
  152. f'{outFolder}'
  153. + f'/{base}_T1w_registered-{refBase}.nii')
  154. # Get transformation name
  155. transform1 = (
  156. f'{outFolder}'
  157. + f'/{base}_T1w_registered-{refBase}.mat'
  158. )
  159. # Save transform for future
  160. os.system(f"cp {mytx['fwdtransforms'][0]} {transform1}")
  161. # =============================================================================
  162. # Apply between run registration
  163. # =============================================================================
  164. print('Apply between run registration')
  165. # # Set subjects to work on
  166. # subs = ['sub-05']
  167. # # Set sessions to work on
  168. # sessions = ['ses-01', 'ses-02']
  169. # sessions = ['ses-04']
  170. for sub in subs:
  171. print(sub)
  172. # Look for individual STIMULATION runs (containing both nulled and not-nulled images)
  173. runs = sorted(glob.glob(f'{ROOT}/{sub}/ses-0*/func/{sub}_ses-0*_task-stim*run-00*_cbv.nii.gz'))
  174. for i in range(1, 4):
  175. if f'ses-0{i}' in runs[0]:
  176. ses = f'ses-0{i}'
  177. outFolder = f'{ROOT}/derivatives/{sub}/func'
  178. # Set name of reference image
  179. refImage = (sorted(glob.glob(f'{outFolder}/{sub}_{ses}_task-restBA3b_run-001_T1w.nii')))[0]
  180. # Get basename of reference image
  181. refBase = os.path.basename(refImage).rsplit('.', 2)[0].split('_')
  182. tmp1 = refBase[0]
  183. for subString in refBase[1:-1]:
  184. tmp1 = tmp1 + f'_{subString}'
  185. refBase = tmp1
  186. # Get header and affine of reference image to easily assign later
  187. refHeader = nb.load(refImage).header
  188. refAffine = nb.load(refImage).affine
  189. # Load reference image in antspy style
  190. fixed = ants.image_read(refImage)
  191. for modality in ['nulled', 'notnulled']:
  192. # Load motion mask of reference image in antspy style
  193. mask = ants.image_read(
  194. f'{outFolder}/{refBase}_{modality}_moma.nii.gz'
  195. )
  196. # Look for individual runs
  197. runs = sorted(glob.glob(f'{outFolder}/{sub}_{ses}_task-stim_run-0*_{modality}.nii'))
  198. # Loop over runs
  199. for run in runs:
  200. # Get the base name of the run
  201. runBase = os.path.basename(run).rsplit('.', 2)[0].split('_')
  202. tmp2 = runBase[0]
  203. for subString in runBase[1:-1]:
  204. tmp2 = tmp2 + f'_{subString}'
  205. runBase = tmp2
  206. # Load registration matrix between run and reference
  207. transformBetween = f'{outFolder}/{runBase}_T1w_registered-{refBase}_T1w.mat'
  208. # =============================================================
  209. # Separate run into individual volumes
  210. nii = nb.load(run)
  211. # get header and affine
  212. header = nii.header
  213. affine = nii.affine
  214. # Load data as array
  215. data = nii.get_fdata()
  216. # Loop over volumes
  217. for i in range(data.shape[-1]):
  218. # Overwrite volumes 0,1,2 with volumes 3,4,5
  219. if i <= 2:
  220. vol = data[..., i + 3]
  221. else:
  222. vol = data[..., i]
  223. # Save individual volumes
  224. img = nb.Nifti1Image(vol, header=header, affine=affine)
  225. nb.save(img, f'{outFolder}/{runBase}_{modality}_vol{i:03d}.nii')
  226. # Loop over the volumes we just created to do the correction
  227. for i in range(data.shape[-1]):
  228. # Load volume
  229. moving = ants.image_read(f'{outFolder}/{runBase}_{modality}_vol{i:03d}.nii')
  230. # Get within run transformation matrix of the volume
  231. transformWithin = f'{outFolder}/motionParameters' \
  232. f'/{runBase}/{runBase}_{modality}_vol{i:03d}.mat'
  233. # Apply transformation matrices
  234. mywarpedimage = ants.apply_transforms(
  235. fixed=fixed,
  236. moving=moving,
  237. transformlist=[transformWithin, transformBetween],
  238. interpolator='bSpline'
  239. )
  240. # Save warped image
  241. ants.image_write(mywarpedimage, f'{outFolder}/{runBase}_{modality}_vol{i:03d}_warped.nii')
  242. # =============================================================
  243. # Assemble images of run
  244. newData = np.zeros(data.shape)
  245. for i in range(data.shape[-1]):
  246. vol = nb.load(
  247. f'{outFolder}'
  248. + f'/{runBase}_{modality}_vol{i:03d}_warped.nii'
  249. ).get_fdata()
  250. newData[..., i] = vol
  251. img = nb.Nifti1Image(newData, header=refHeader, affine=refAffine)
  252. nb.save(img, f'{outFolder}/{runBase}_{modality}_moco-reg.nii')
  253. # Remove individual volumes
  254. os.system(f'rm {outFolder}/{runBase}_{modality}_vol*.nii')
  255. # =========================================================================
  256. # Compute T1w image in EPI space within run
  257. nulledFile = f'{outFolder}/{runBase}_nulled_moco-reg.nii'
  258. notNulledFile = f'{outFolder}/{runBase}_notnulled_moco-reg.nii'
  259. t1w = computeT1w(nulledFile, notNulledFile)
  260. header = nb.load(nulledFile).header
  261. affine = nb.load(nulledFile).affine
  262. img = nb.Nifti1Image(t1w, header=header, affine=affine)
  263. nb.save(img, f'{outFolder}/{runBase}_T1w_reg.nii')
  264. # =========================================================================
  265. # Compute T1w image in EPI space across runs
  266. print('Computing T1w image in EPI space across runs')
  267. for sub in subs:
  268. print(sub)
  269. runs = sorted(glob.glob(f'{ROOT}/{sub}/ses-0*/func/{sub}_ses-0*_task-stim*run-00*_cbv.nii.gz'))
  270. for i in range(1, 4):
  271. if f'ses-0{i}' in runs[0]:
  272. ses = f'ses-0{i}'
  273. outFolder = f'{ROOT}/derivatives/{sub}/func'
  274. for i, run in enumerate(runs):
  275. base = os.path.basename(run).rsplit('.', 2)[0][:-4]
  276. for modality in ['notnulled', 'nulled']:
  277. data = nb.load(f'{outFolder}/{base}_{modality}_moco-reg.nii').get_fdata()
  278. # For first run, initiate combined data
  279. if i == 0 and modality == 'notnulled':
  280. combined = data.copy()
  281. # And get header/ affine information to save data later
  282. header = nb.load(f'{outFolder}/{base}_{modality}_moco-reg.nii').header
  283. affine = nb.load(f'{outFolder}/{base}_{modality}_moco-reg.nii').affine
  284. # For other runs, just concatenate
  285. else:
  286. combined = np.concatenate((combined, data), axis=3)
  287. # De-trend before std. dev. calculation
  288. # combinedDemean = signal.detrend(combined, axis=3, type='constant')
  289. # combinedDetrend = signal.detrend(combinedDemean, axis=3, type='linear')
  290. stdDev = np.std(combined, axis=3)
  291. mean = np.mean(combined, axis=3)
  292. cvar = np.divide(stdDev, mean)
  293. cvarInv = 1 / cvar
  294. img = nb.Nifti1Image(cvarInv, header=header, affine=affine)
  295. nb.save(img, f'{outFolder}/{sub}_{ses}_T1w.nii')
  296. # t1w = ants.image_read(f'{outFolder}/{sub}_{ses}_T1w.nii')
  297. # t1w_n4 = ants.n4_bias_field_correction(t1w)
  298. # ants.image_write(t1w_n4, f'{outFolder}/{sub}_{ses}_T1w_N4corrected.nii')

01-0_mocoCoregistration.py at commit fcfa528, under MIT · at the source

Overview

Authors: Sebastian Dresbach1,2, Omer Faruk Gulban1,3, Till Steinbach1, Judith Eck1,3, Sriranga Kashyap4, Amanda Kaas1, Nikolaus Weiskopf2,5,6, Rainer Goebel1,3, Renzo Huber7,8
  1. Faculty of Psychology and Neuroscience, Maastricht University, Maastricht, The Netherlands
  2. Department of Neurophysics, Max Planck Institute for Human Cognitive and Brain Sciences, Leipzig, Germany
  3. Brain Innovation, Maastricht, The Netherlands
  4. Krembil Brain Institute, University Health Network, Toronto, ON, Canada
  5. Felix Bloch Institute for Solid State Physics, Faculty of Physics and Earth System Sciences, Leipzig University, Leipzig, Germany
  6. Wellcome Centre for Human Neuroimaging, Institute of Neurology, University College London, London, United Kingdom
  7. National Institutes of Health, Bethesda, MD, United States
  8. Martinos Center for Biomedical Imaging, HMS, MGH, Charlestown, MA, United States
Journal: Imaging neuroscience (Cambridge, Mass.), volume 4, article IMAG.a.1157
Dates: received 1 July 2024; accepted 6 February 2026; published online 27 March 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1162/imag.a.1157 · PMID 41918767 · PMCID PMC13034615 · OpenAlex W7129648528
Open access: diamond, a free copy (OpenAlex)
Status: code verified (how the code is found and verified)
Categories: fMRI (modality), human (organism), systems (subfield)
Methods: Connectivity, Preprocessing, Spectral & time-frequency, fMRI & imaging
Keywords: 7T, CBV, layers, somatosensory stimulation, (f)MRI, temporal dynamics
Topic: Functional Brain Connectivity Studies (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: European Research Council (616905, 101142153); Intramural NIH HHS (ZIA MH002783, ZIC MH002884); NIBIB NIH HHS (P41 EB030006); Dutch Research Council (NWO) (016.Veni.198.032)
Citations: cited by 1 paper (Europe PMC); 103 references in the paper

Abstract

Uncovering the cortical representation of the body has been at the core of human brain mapping for decades, with special attention given to the digits. In the last decade, advances in functional magnetic resonance imaging (fMRI) technologies have opened the possibility of non-invasively unraveling the 3rd dimension of digit representations in humans along cortical layers. In laminar fMRI, it is common to combine the use of highly sensitive blood oxygen level dependent (BOLD) measurements with cerebral blood volume sensitive measurements, such as slice-saturation slab-inversion vascular space occupancy (SS-SI VASO, henceforth referred to as VASO), which are more specific to the underlying neuronal populations. However, the spatial and temporal VASO response characteristics across cortical depth to passive stimulation of the digits are still unknown. Therefore, we characterized hemodynamic responses to vibrotactile stimulation of individual digit tips across cortical depth at 0.75 mm in-plane spatial resolution using BOLD and VASO fMRI at 7T. We could identify digit-specific regions of interest (ROIs) in putative Brodmann area 3b, following the known anatomical organization. In these ROIs, the BOLD response increased toward the cortical surface due to the draining vein effect, while the VASO response was more shifted toward middle cortical layers, likely reflecting bottom-up input from the thalamus, as expected. As an incidental finding, we also saw slightly negative BOLD and VASO responses for non-preferred digits in the ROIs. Therefore, we conducted an exploratory analysis in which we investigated the temporal signal dynamics for BOLD and VASO as a function of distance from activation peaks resulting from stimulation of contralateral digits. With this analysis, we found a triphasic response consisting of an initial peak and a subsequent negative deflection during stimulation, followed by a positive post-stimulus response in BOLD and to some extent in VASO. Similar response dynamics have been observed in the animal literature using invasive methods and in the ipsilateral somatosensory cortex in humans. Furthermore, lateral inhibition has been implicated in models of sensory aging. However, our study is the first to show these temporospatial signal fluctuations directly in human contralateral cortex upon stimulation of individual digits using sub-millimeter BOLD and VASO fMRI. In this context, our findings might offer new windows into the investigations of the potential neuronal excitation–inhibition mechanism in a center-surround architecture in the human somatosensory cortex using layer-specific CBV and BOLD measurements.

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 16 matches between paragraphs and lines of code.

sdres/s1Anfunco

License: MIT
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Commit: fcfa5287675a56ff6b3f79d74c8de77a0588cc38, 12 December 2024
Languages: Python (64), Shell (2)
Size: 83 files, 66 scripts
Software Heritage: not archived
Found in: “Data and Code Availability”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (47 files), NiBabel (43 files), pandas (23 files), Matplotlib (22 files), seaborn (20 files), Nilearn (16 files), ANTs (9 files), SciPy (9 files), FSL (7 files), scikit-image (5 files), Nipype (4 files), AFNI (2 files), dcm2niix (2 files), HeuDiConv (2 files), imageio (1 file)
Availability: 1 check, the latest on 30 September 2026: the link answers
  • 30 September 2026: the link answers
68 files

figshare 26135296

License: CC-BY-4.0
State: the link answers, verified on 30 September 2026
Evidence: files inventoried
Size: 1 file, 0 scripts
Software Heritage: not checked
Found in: the references
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;
  • 66 scripts, each with its path and the digest of its content;
  • 16 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

Datasets cited

Data and Code Availability

Analysis code is available on GitHub: https://github.com/sdres/s1Anfunco. Raw data are available on OpenNeuro: https://openneuro.org/datasets/ds005238/versions/1.0.0.

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, pages, dates, 9 authors, 6 keywords, 4 funders, 98 references.

Cite

This paper

Dresbach, S., Gulban, O. F., Steinbach, T., Eck, J., Kashyap, S., Kaas, A., Weiskopf, N., Goebel, R., & Huber, R. (2026). Laminar CBV and BOLD response characteristics over time and space in the human primary somatosensory cortex at 7T. Imaging neuroscience (Cambridge, Mass.), 4, IMAG.a.1157. https://doi.org/10.1162/imag.a.1157

BibTeX

@article{dresbach2026laminar,
author = {Dresbach, Sebastian and Gulban, Omer Faruk and Steinbach, Till and Eck, Judith and Kashyap, Sriranga and Kaas, Amanda and Weiskopf, Nikolaus and Goebel, Rainer and Huber, Renzo},
title = {{Laminar CBV and BOLD response characteristics over time and space in the human primary somatosensory cortex at 7T}},
journal = {Imaging neuroscience (Cambridge, Mass.)},
year = {2026},
month = mar,
volume = {4},
pages = {IMAG.a.1157},
publisher = {MIT Press},
issn = {2837-6056},
doi = {10.1162/imag.a.1157},
url = {https://doi.org/10.1162/imag.a.1157},
pmid = {41918767},
pmcid = {PMC13034615}
}

RIS

TY - JOUR
AU - Dresbach, Sebastian
AU - Gulban, Omer Faruk
AU - Steinbach, Till
AU - Eck, Judith
AU - Kashyap, Sriranga
AU - Kaas, Amanda
AU - Weiskopf, Nikolaus
AU - Goebel, Rainer
AU - Huber, Renzo
TI - Laminar CBV and BOLD response characteristics over time and space in the human primary somatosensory cortex at 7T
T2 - Imaging neuroscience (Cambridge, Mass.)
J2 - Imaging Neurosci (Camb)
PY - 2026
DA - 2026/03/27
VL - 4
SP - IMAG.a.1157
SN - 2837-6056
PB - MIT Press
DO - 10.1162/imag.a.1157
UR - https://doi.org/10.1162/imag.a.1157
LA - en
ER -

CSL-JSON

{
"id": "10.1162/imag.a.1157",
"type": "article-journal",
"title": "Laminar CBV and BOLD response characteristics over time and space in the human primary somatosensory cortex at 7T",
"container-title": "Imaging neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Dresbach",
"given": "Sebastian"
},
{
"family": "Gulban",
"given": "Omer Faruk"
},
{
"family": "Steinbach",
"given": "Till"
},
{
"family": "Eck",
"given": "Judith"
},
{
"family": "Kashyap",
"given": "Sriranga"
},
{
"family": "Kaas",
"given": "Amanda"
},
{
"family": "Weiskopf",
"given": "Nikolaus"
},
{
"family": "Goebel",
"given": "Rainer"
},
{
"family": "Huber",
"given": "Renzo"
}
],
"container-title-short": "Imaging Neurosci (Camb)",
"volume": "4",
"page": "IMAG.a.1157",
"DOI": "10.1162/imag.a.1157",
"PMID": "41918767",
"PMCID": "PMC13034615",
"ISSN": "2837-6056",
"publisher": "MIT Press",
"URL": "https://doi.org/10.1162/imag.a.1157",
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
27
]
]
}
}

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.1162/imag_a_00263 [code]
Characterisation of laminar and vascular spatiotemporal dynamics of CBV and BOLD signals using VASO and ME-GRE at 7T in humans.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: HeuDiConv, dcm2niix, Nipype, 12 other tools, fMRI, systems, 20 references, 3 authors
[2] doi:10.1093/cercor/bhad151 [code]
Imaging the columnar functional organization of human area MT+ to axis-of-motion stimuli using VASO at 7 Tesla.
Journal: Cerebral cortex (New York, N.Y. : 1991)
In common: dcm2niix, AFNI, ANTs, 8 other tools, fMRI, 16 references, author Rainer Goebel
[3] doi:10.1162/imag.a.1279 [code]
Multimodal laminar characterization of visual areas along the cortical hierarchy.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: ANTs, FSL, scikit-image, 5 other tools, systems, 8 references, 3 authors
[4] doi:10.1371/journal.pone.0280855 [code]
Cerebral blood volume sensitive layer-fMRI in the human auditory cortex at 7T: Challenges and capabilities.
Journal: PloS one
In common: dcm2niix, imageio, AFNI, 7 other tools, fMRI, systems, 13 references
[5] doi:10.1016/j.isci.2025.112967 [code]
Contextual responses drive a unique laminar signature in human V1.
Journal: iScience
In common: Nipype, imageio, ANTs, 9 other tools, systems, 11 references
[6] doi:10.3389/fnins.2025.1537026 [code]
Mapping curvature domains in human V4 using CBV-sensitive layer-fMRI at 3T.
Journal: Frontiers in neuroscience
In common: FSL, fMRI, systems, 13 references, author Rainer Goebel
[7] doi:10.1523/eneuro.0069-22.2022 [code]
Fast Event-Related Mapping of Population Fingertip Tuning Properties in Human Sensorimotor Cortex at 7T.
Journal: eNeuro
In common: FSL, NiBabel, pandas, 2 other tools, fMRI, systems, 12 references
[8] doi:10.64898/2026.02.06.704362 [code]
Functional gradients dissociate between cortical layers
Journal: bioRxiv (preprint)
In common: Nipype, AFNI, ANTs, 8 other tools, fMRI, systems, 8 references
[9] doi:10.1007/s10548-023-01000-8 [code]
Two-Dimensional Population Receptive Field Mapping of Human Primary Somatosensory Cortex.
Journal: Brain topography
In common: FSL, NiBabel, pandas, 2 other tools, fMRI, systems, 11 references
[10] doi:10.1162/imag.a.1124 [code]
Decoding of columnar-level organization across cortical depth using BOLD- and CBV-fMRI at 7 T.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: NiBabel, pandas, SciPy, 2 other tools, fMRI, systems, 14 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.

Add the badge to the code's README

OSCR: the badge of this paper

If you are an author or a maintainer of this paper's code, you can add this badge. It says what OSCR knows of the paper (its code, its validated tracing map) and links the code to this page. Paste one of these snippets under the README's title. Keep the two marks around it, so that the badge can be replaced in place and is never added twice. OSCR changes nothing in your repository.

Markdown
<!-- oscr-badge:start -->
[![OSCR](https://openscicode.org/badge/doi/10.1162/imag.a.1157.svg)](https://openscicode.org/badge/doi/10.1162/imag.a.1157)
<!-- oscr-badge:end -->
reStructuredText
.. oscr-badge:start

.. image:: https://openscicode.org/badge/doi/10.1162/imag.a.1157.svg
   :target: https://openscicode.org/badge/doi/10.1162/imag.a.1157
   :alt: OSCR

.. oscr-badge:end
HTML
<!-- oscr-badge:start -->
<a href="https://openscicode.org/badge/doi/10.1162/imag.a.1157"><img src="https://openscicode.org/badge/doi/10.1162/imag.a.1157.svg" alt="OSCR"></a>
<!-- oscr-badge:end -->

On GitHub, open the README, choose Edit (the pencil), paste the snippet under the title, then "Commit changes".

If you choose to, you can have the badge kept up to date for you, with oscr badge --write from the command line or with the GitHub Action in your repository's workflows. Every other form and option (a card, AsciiDoc, LaTeX, shields.io) is on the badge 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: code errors and mismatches between the code and the paper about this paper and its code, from readers and its authors, beside the paper and its tracing map.

Report a mismatch between the code and the paper · Report a code error (signed in)

Reproductions: reports from readers who ran the authors' code and did not get the paper's result, what they ran, with which environment, commit and data.

Report a reproduction failure (signed in)

Versions of its code: the releases of its code tied to a version of this paper (the preprint, the accepted manuscript, the version of record…), each with the tracing map versioned with it.

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