OSCR

Larg-scale multimodal fMRI dataset of visual and haptic 3D object category learning.

Code ↔ Paper

9 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 9 matches · 4 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
  1. [1] § Experimental Design › fMRI data preprocessing pipeline › Task-based fMRI ↔ task-based-fMRI-preprocesing/08-Registration.ipynb, lines 1–140 · score 0.86 · MNI152_T1_2mm, high resolution, anatomical images, nonlinear, rigid, intensity
  2. [2] § Experimental Design › fMRI data preprocessing pipeline › rs-fMRI ↔ resting-state-fMRI-preprocessing/10-Denoising.ipynb, the whole file · a weak match · score 0.79 · ICA AROMA, cerebrospinal fluid, global signals, WM, CSF, filtering
  3. [3] § Experimental Design › fMRI data preprocessing pipeline › rs-fMRI ↔ resting-state-fMRI-preprocessing/11-TemporalFilterring.ipynb, the whole file · a weak match · score 0.75 · bandpass filtering, global signals, 0.01–0.1 Hz, CSF, regressed, temporal
  4. [4] § Experimental Design › fMRI data preprocessing pipeline › Task-based fMRI ↔ resting-state-fMRI-preprocessing/10-Denoising.ipynb, the whole file · a weak match · score 0.71 · ICA AROMA, motion artifacts, motion related, tissue, filter, regressors
  5. [5] § Experimental Design › Data acquisition ↔ task-based-fMRI-preprocesing/04-SliceTimeCorrection.ipynb, the whole file · a weak match · score 0.58 · multiband acceleration factor, single shot, slices, repetition, fMRI
  6. [6] § Technical Validation › Motion parameters ↔ resting-state-fMRI-preprocessing/01- Framewise_displacment_FD.ipynb, lines 1–98 · score 0.58 · fsl_motion_outliers, framewise displacement, confound, FD, threshold, head
  7. [7] § Technical Validation › Motion parameters ↔ task-based-fMRI-preprocesing/01- Framewise_displacment_FD.ipynb, lines 1–98 · score 0.58 · fsl_motion_outliers, framewise displacement, confound, FD, threshold, head
  8. [8] § Technical Validation › Stimuli ↔ PlotSimilarity_Correlation_Stress_MDS.m, lines 87–125 · score 0.58 · dissimilarity matrices, MDS, correlation, stress, dimensions, modalities
  9. [9] § Experimental Design › Data acquisition ↔ task-based-fMRI-preprocesing/08-Registration.ipynb, lines 1–140 · score 0.55 · High resolution anatomical, slices, EPI

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 · 494 lines · 19 KB · no license · 2 matches

  1. # %% [markdown]
  2. # # Registration
  3. # This script will creat "reg" directory in ses-01 directory and get registration infromation from functional space to anatomical space and from anatomical space to standard space. At the end, it will concatinate the results to have transformation from funrtional space to standard space.
  4. #
  5. # Linear registration: functional space >>> anatomical space (epi_reg from FSL)
  6. #
  7. # Non-Lineare registration: anatomical space >>> standard space (antsRegistration from ANT's)
  8. #
  9. # Converting ANTs output into the FSL format:
  10. #
  11. # c3d_affine_too: https://gist.github.com/MSchnei/240bc49f504ef93540d33b02f12bbe8d
  12. #
  13. # Workbench Command: https://www.humanconnectome.org/software/workbench-command
  14. #
  15. #
  16. #
  17. # -----------------------------------------------------------
  18. # Script written by Sepideh Tabrik& Mehdi Behroozi
  19. # <br>
  20. # Biopsychology,
  21. # <br>
  22. # Ruhr-University Bochum, Bochum, Germany
  23. # <br>
  24. # (2024.11)
  25. #
  26. # -----------------------------------------------------------
  27. # %% [markdown]
  28. # ## Anatomical >> Standard space registration
  29. # %%
  30. import glob
  31. import os
  32. from pathlib import Path
  33. # Define data paths
  34. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  35. reference_path = Path("/home/mehdi/fsl/data/standard")
  36. # Find subject directories
  37. sub_dirs = list(data_path.glob("sub*/ses-02"))
  38. # Process each subject directory
  39. for curr_sub in sub_dirs:
  40. subject_id = curr_sub.parts[-2]
  41. session_id = curr_sub.parts[-1]
  42. print("1) Creating 'reg' directory.")
  43. print(f"\t - Current subject is >> {subject_id}/{session_id}")
  44. reg_directory = curr_sub / "reg"
  45. # Check if the directory exists and remove if necessary
  46. if reg_directory.exists():
  47. print(f"\t {reg_directory} already exists! Removing...")
  48. os.system(f"rm -r {reg_directory}")
  49. # Create new reg directory
  50. print(f"\t Creating directory {reg_directory}...")
  51. reg_directory.mkdir(parents=True, exist_ok=True)
  52. # Copy atlas images to reg directory
  53. print("2) Copying standard images to the reg directory.")
  54. os.system(f"fslmaths {reference_path}/MNI152_T1_2mm_brain {reg_directory}/standard")
  55. os.system(f"fslmaths {reference_path}/MNI152_T1_2mm {reg_directory}/standard_head")
  56. os.system(f"fslmaths {reference_path}/MNI152_T1_2mm_brain_mask_dil {reg_directory}/standard_mask")
  57. # Copy anatomical images to reg directory
  58. print("3) Copying anatomical images to reg directory.")
  59. anat_dir = curr_sub / "anat"
  60. # Find T1w image
  61. t1w_files = list(anat_dir.glob("*T1w.nii.gz"))
  62. if not t1w_files:
  63. print("Warning: No T1w file found, skipping brain masking step.")
  64. else:
  65. t1w_image = t1w_files[0] # Get first matching file
  66. print(f"Processing T1w image: {t1w_image}")
  67. # Copy high-resolution anatomical head
  68. os.system(f"fslmaths {t1w_image} {reg_directory}/highres_head")
  69. # Copy mask and brain images
  70. mask_file = anat_dir / "mask.nii.gz"
  71. brain_file = anat_dir / "brain.nii.gz"
  72. if mask_file.exists():
  73. print(f"Copying anatomical mask: {mask_file} to reg directory...")
  74. os.system(f"fslmaths {mask_file} {reg_directory}/highres_mask")
  75. # Apply mask only if T1w exists
  76. if t1w_files:
  77. print(f"Applying mask: Multiplying {t1w_image} with {mask_file} to generate highres...")
  78. os.system(f"fslmaths {t1w_image} -mul {mask_file} {reg_directory}/highres")
  79. # Change directory to reg
  80. print("\t Changing the working directory to reg directory.")
  81. os.chdir(reg_directory)
  82. # Nonlinear registration using ANTs
  83. print("4) Running nonlinear registration using ANTs.")
  84. os.system("antsRegistration --dimensionality 3 --float 0 "
  85. "--output [highres2standard_,highres2standard.nii.gz] "
  86. "--interpolation Linear "
  87. "--winsorize-image-intensities [0.005,0.995] "
  88. "--use-histogram-matching 0 "
  89. "--initial-moving-transform [standard.nii.gz,highres.nii.gz,1] "
  90. "--transform Rigid[0.1] "
  91. "--metric MI[standard.nii.gz,highres.nii.gz,1,32,Regular,0.25] "
  92. "--convergence [1000x500x250x100,1e-6,10] "
  93. "--shrink-factors 8x4x2x1 "
  94. "--smoothing-sigmas 3x2x1x0vox "
  95. "--transform Affine[0.1] "
  96. "--metric MI[standard.nii.gz,highres.nii.gz,1,32,Regular,0.25] "
  97. "--convergence [1000x500x250x100,1e-6,10] "
  98. "--shrink-factors 8x4x2x1 "
  99. "--smoothing-sigmas 3x2x1x0vox "
  100. "--transform SyN[0.1,3,0] "
  101. "--metric CC[standard.nii.gz,highres.nii.gz,1,4] "
  102. "--convergence [100x70x50x20,1e-6,10] "
  103. "--shrink-factors 8x4x2x1 "
  104. "--smoothing-sigmas 3x2x1x0vox ")
  105. # Generate slices and visualization
  106. os.system("slicer highres2standard standard -s 2 -x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  107. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  108. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  109. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  110. "+ sli.png + slj.png + slk.png + sll.png highres2standard1.png ; "
  111. "slicer standard highres2standard -s 2 -x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  112. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  113. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  114. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  115. "+ sli.png + slj.png + slk.png + sll.png highres2standard2.png ; "
  116. "pngappend highres2standard1.png - highres2standard2.png highres2standard.png; "
  117. "rm -f sl?.png highres2standard2.png")
  118. os.system("rm highres2standard1.png")
  119. print("\n")
  120. # %% [markdown]
  121. # ### Plot Anatomical >> Atlas registration results
  122. # %%
  123. %matplotlib inline
  124. from IPython.display import display, Image
  125. import matplotlib.pyplot as plt
  126. from pathlib import Path
  127. import glob
  128. # Define data path
  129. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  130. # Find registration directories
  131. reg_dirs = list(data_path.glob("sub*/ses-02/reg"))
  132. # Process each registration directory
  133. for curr_reg in reg_dirs:
  134. subject_id = curr_reg.parts[-3] # Extract subject ID dynamically
  135. print(f"Processing subject: {subject_id}")
  136. # Ensure the image file exists before displaying
  137. image_path = curr_reg / "highres2standard.png"
  138. if image_path.exists():
  139. display(Image(filename=str(image_path)))
  140. else:
  141. print(f"Warning: {image_path} not found, skipping.")
  142. # %% [markdown]
  143. # # copy reg directory for each resting-state sessions
  144. # %%
  145. import glob
  146. import os
  147. from pathlib import Path
  148. # Define data path
  149. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  150. # Find subject directories
  151. sub_dirs = list(data_path.glob("sub*/ses-02"))
  152. # Process each subject directory
  153. for curr_sub in sub_dirs:
  154. subject_id = curr_sub.parts[-2] # Extract subject ID dynamically
  155. print(f"Processing subject: {subject_id}")
  156. # Copy reg directory to different sessions
  157. reg_src = curr_sub / "reg"
  158. sessions = curr_sub.glob("func/run*")
  159. for curr_sess in sessions:
  160. exp_name = curr_sess.parts[-1]
  161. print(f"\t Creating reg directory at {exp_name}.")
  162. reg_dst = curr_sess / "reg" # Fixed indentation issue
  163. reg_dst.mkdir(parents=True, exist_ok=True) # Ensures the directory is created safely
  164. print(f"\t Copying the reg folder to {exp_name}.")
  165. if reg_src.exists():
  166. os.system(f"cp -R {reg_src}/* {reg_dst}")
  167. else:
  168. print(f"\t Warning: Source directory {reg_src} does not exist, skipping copy.")
  169. # Create example_func file using mean function images
  170. print(f"\t Copying the mean_function as example_func file for {exp_name}.")
  171. mean_Img = curr_sess / "mean_func.nii.gz"
  172. mean_Img_Brain = curr_sess / "mean_func_brain.nii.gz"
  173. mean_Img_Brain_mask = curr_sess / "mean_func_brain_mask.nii.gz"
  174. for img_file, output_file in [(mean_Img, "example_func.nii.gz"),
  175. (mean_Img_Brain, "example_func_brain.nii.gz"),
  176. (mean_Img_Brain_mask, "example_func_brain_mask.nii.gz")]:
  177. if img_file.exists():
  178. os.system(f"cp -R {img_file} {reg_dst}/{output_file}")
  179. else:
  180. print(f"\t Warning: {img_file} not found, skipping copy.")
  181. print()
  182. # %% [markdown]
  183. # ## Linear registration of Functional data into the Anatomical space
  184. #
  185. # You must check the results to make sure the registration is done in correct way.
  186. # %%
  187. import glob
  188. import os
  189. from pathlib import Path
  190. # Define data path
  191. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  192. # Find registration directories
  193. reg_dirs = list(data_path.glob("sub*/ses-02/func/run*/reg"))
  194. # Process each registration directory
  195. for curr_reg in reg_dirs:
  196. subject_id = curr_reg.parts[-5]
  197. session_id = curr_reg.parts[-4]
  198. task_id = curr_reg.parts[-2]
  199. print(f"Current subject: {subject_id}")
  200. print(f"\tCurrent session: {session_id}")
  201. print(f"\tCurrent task: {task_id}")
  202. # Change path only if it exists
  203. if curr_reg.exists():
  204. os.chdir(curr_reg)
  205. else:
  206. print(f"\tWarning: {curr_reg} does not exist, skipping.")
  207. continue
  208. # FSL Registration: func2highres
  209. print("\tRunning FSL registration...")
  210. # Check if epi_reg is applicable
  211. epi_reg_command = "epi_reg --epi=example_func --t1=highres_head --t1brain=highres --out=example_func2highres"
  212. flirt_command = "flirt -in example_func_brain -ref highres -out example_func2highres -omat example_func2highres.mat -bins 256 -cost corratio -searchrx 0 0 -searchry 0 0 -searchrz 0 0 -dof 7 -interp trilinear"
  213. if os.system(epi_reg_command) != 0:
  214. print("\tWarning: epi_reg failed, falling back to flirt.")
  215. os.system(flirt_command)
  216. # Generate transformation matrix
  217. os.system("convert_xfm -inverse -omat highres2example_func.mat example_func2highres.mat")
  218. # Generate visualization
  219. print("\tGenerating visualization...")
  220. os.system("slicer example_func2highres highres -s 2 "
  221. "-x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  222. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  223. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  224. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  225. "+ sli.png + slj.png + slk.png + sll.png example_func2highres1.png ; "
  226. "slicer highres example_func2highres -s 2 "
  227. "-x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  228. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  229. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  230. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  231. "+ sli.png + slj.png + slk.png + sll.png example_func2highres2.png ; "
  232. "pngappend example_func2highres1.png - example_func2highres2.png example_func2highres.png; "
  233. "rm -f sl?.png example_func2highres2.png")
  234. os.system("rm example_func2highres1.png")
  235. print()
  236. # %% [markdown]
  237. # ### Plot example_func >> anatomical space registeration results
  238. # %%
  239. %matplotlib inline
  240. from IPython.display import display, Image
  241. import matplotlib.pyplot as plt
  242. from pathlib import Path
  243. # Define data path
  244. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  245. # Find registration directories
  246. reg_dirs = list(data_path.glob("sub*/ses-02/func/run*/reg"))
  247. # Process first 10 registration directories
  248. for curr_reg in reg_dirs:
  249. subject_id = curr_reg.parts[-5]
  250. session_id = curr_reg.parts[-4]
  251. task_id = curr_reg.parts[-2]
  252. print(f"Current subject: {subject_id}, Session: {session_id}, Task: {task_id}")
  253. # Ensure the image file exists before displaying
  254. image_path = curr_reg / "example_func2highres.png"
  255. if image_path.exists():
  256. display(Image(filename=str(image_path)))
  257. else:
  258. print(f"Warning: {image_path} not found, skipping.")
  259. # %% [markdown]
  260. # # Conver Ants file to FSL formt
  261. # %%
  262. import glob
  263. import os
  264. from pathlib import Path
  265. # Define data path
  266. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  267. # Find registration directories
  268. reg_dirs = list(data_path.glob("sub*/ses-02/func/run*/reg"))
  269. # Process each registration directory
  270. for curr_reg in reg_dirs:
  271. subject_id = curr_reg.parts[-5]
  272. session_id = curr_reg.parts[-4]
  273. task_id = curr_reg.parts[-2]
  274. print(f"Current subject: {subject_id}, Session: {session_id}, Task: {task_id}")
  275. # Change path only if it exists
  276. if curr_reg.exists():
  277. os.chdir(curr_reg)
  278. else:
  279. print(f"\tWarning: {curr_reg} does not exist, skipping.")
  280. continue
  281. # Convert Transform Files
  282. print("\tConverting transformation files...")
  283. os.system("c3d_affine_tool -itk highres2standard_0GenericAffine.mat -o ants_affine_world.txt")
  284. os.system("wb_command -convert-affine -from-world ants_affine_world.txt -to-flirt ants_affine_flirt.txt standard.nii.gz highres.nii.gz")
  285. os.system("convert_xfm -inverse ants_affine_flirt.txt -omat ants_affine_inv_flirt.txt")
  286. # Apply X and Y flips to warp fields
  287. print("\tApplying flips to warp fields...")
  288. os.system("wb_command -volume-math '-x' ants_warponly_negative.nii.gz -var x highres2standard_1Warp.nii.gz")
  289. os.system("wb_command -volume-merge ants_warponly_world.nii.gz -volume ants_warponly_negative.nii.gz -subvolume 1 -up-to 2 -volume highres2standard_1Warp.nii.gz -subvolume 3")
  290. os.system("wb_command -convert-warpfield -from-world ants_warponly_world.nii.gz -to-fnirt ants_warponly_fnirt.nii.gz standard.nii.gz")
  291. # Compose transformation
  292. print("\tComposing transformation...")
  293. os.system("convertwarp --ref=standard.nii.gz --premat=ants_affine_inv_flirt.txt --warp1=ants_warponly_fnirt.nii.gz --out=highres2standard_warp.nii.gz")
  294. # Resample for sanity check
  295. print("\tResampling for sanity check...")
  296. os.system("applywarp --ref=standard.nii.gz --in=highres.nii.gz --warp=highres2standard_warp.nii.gz --out=highres2standard.nii.gz")
  297. # Generate visualization
  298. print("\tGenerating visualization...")
  299. os.system("slicer highres2standard standard -s 2 "
  300. "-x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  301. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  302. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  303. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  304. "+ sli.png + slj.png + slk.png + sll.png highres2standard1.png ; "
  305. "slicer standard highres2standard -s 2 "
  306. "-x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  307. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  308. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  309. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  310. "+ sli.png + slj.png + slk.png + sll.png highres2standard2.png ; "
  311. "pngappend highres2standard1.png - highres2standard2.png highres2standard.png; "
  312. "rm -f sl?.png highres2standard2.png")
  313. os.system("rm highres2standard1.png")
  314. # Apply transformation to functional image
  315. print("\tApplying transformation to functional image...")
  316. os.system("convertwarp --ref=standard --premat=example_func2highres.mat --warp1=highres2standard_warp --out=example_func2standard_warp")
  317. os.system("applywarp --ref=standard --in=example_func_brain --out=example_func2standard --warp=example_func2standard_warp")
  318. # Generate visualization for functional transformation
  319. print("\tGenerating visualization for functional transformation...")
  320. os.system("slicer example_func2standard standard -s 2 "
  321. "-x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  322. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  323. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  324. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  325. "+ sli.png + slj.png + slk.png + sll.png example_func2standard1.png ; "
  326. "slicer standard example_func2standard -s 2 "
  327. "-x 0.35 sla.png -x 0.45 slb.png -x 0.55 slc.png -x 0.65 sld.png "
  328. "-y 0.35 sle.png -y 0.45 slf.png -y 0.55 slg.png -y 0.65 slh.png "
  329. "-z 0.35 sli.png -z 0.45 slj.png -z 0.55 slk.png -z 0.65 sll.png ; "
  330. "pngappend sla.png + slb.png + slc.png + sld.png + sle.png + slf.png + slg.png + slh.png "
  331. "+ sli.png + slj.png + slk.png + sll.png example_func2standard2.png ; "
  332. "pngappend example_func2standard1.png - example_func2standard2.png example_func2standard.png; "
  333. "rm -f sl?.png example_func2standard2.png")
  334. print()
  335. # %% [markdown]
  336. # # plot registration results: functional >> Atlas space
  337. # %%
  338. %matplotlib inline
  339. from IPython.display import display, Image
  340. import matplotlib.pyplot as plt
  341. from pathlib import Path
  342. # Define data path
  343. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  344. # Find registration directories
  345. reg_dirs = list(data_path.glob("sub*/ses-02/func/run*/reg"))
  346. # Process each registration directory
  347. for curr_reg in reg_dirs:
  348. subject_id = curr_reg.parts[-5]
  349. session_id = curr_reg.parts[-4]
  350. task_id = curr_reg.parts[-2]
  351. print(f"Current subject: {subject_id}, Session: {session_id}, Task: {task_id}")
  352. # Ensure the image file exists before displaying
  353. image_path = curr_reg / "example_func2standard.png"
  354. if image_path.exists():
  355. display(Image(filename=str(image_path)))
  356. else:
  357. print(f"Warning: {image_path} not found, skipping.")
  358. # %% [markdown]
  359. # # Invert the warp from MNI 2 functional space
  360. # %%
  361. import glob
  362. import os
  363. from pathlib import Path
  364. # Define data path
  365. data_path = Path("/mnt/d/Data/Human/ObjectCategorization/analysis2")
  366. # Find registration directories
  367. sub_dirs = list(data_path.glob("sub*/ses-02/func/run*/reg"))
  368. # Process each registration directory
  369. for curr_reg in sub_dirs:
  370. print(f"Processing: {curr_reg}")
  371. # Change directory only if it exists
  372. if curr_reg.exists():
  373. os.chdir(curr_reg)
  374. else:
  375. print(f"\tWarning: {curr_reg} does not exist, skipping.")
  376. continue
  377. # Define warp file paths
  378. warp_file = curr_reg / "example_func2standard_warp.nii.gz"
  379. ref_image = curr_reg / "example_func_brain.nii.gz"
  380. output_warp = curr_reg / "standard2example_func_warp.nii.gz"
  381. output_image = curr_reg / "standard2example_func.nii.gz"
  382. # Ensure warp file exists before running transformations
  383. if warp_file.exists():
  384. print("\tRunning inverse warp...")
  385. os.system(f"invwarp --ref={ref_image} --warp={warp_file} --out={output_warp}")
  386. print("\tApplying warp transformation...")
  387. os.system(f"applywarp --ref={ref_image} --in=standard --out={output_image} --warp={output_warp}")
  388. else:
  389. print(f"\tWarning: Warp file {warp_file} not found, skipping transformations.")
  390. # %%

08-Registration.ipynb at commit c67a3d2, no license · at the source

Overview

Authors: Sepideh Tabrik1,2, Sama Rahnemayan3,4, Martin Tegenthoff1, Mehdi Behroozi5,6
ORCID iDs: Mehdi Behroozi
  1. Department of Neurology, BG-University Hospital Bergmannsheil, Ruhr University Bochum,44789 Bochum, Germany
  2. Department of Information Technology, University of Applied Sciences and Arts Dortmund,Dortmund, Germany
  3. Department of Neurosurgery, Medical University of Vienna,Vienna, Austria
  4. High Field MR Centre, Department of Biomedical Imaging and Image-guided Therapy, Medical University of Vienna,Vienna, Austria
  5. Institute of Cognitive Neuroscience, Department of Biopsychology, Faculty of Psychology, Ruhr University Bochum,44780 Bochum, Germany
  6. Cognitive Neurobiology, Research Center “One Health” Ruhr, University Alliance Ruhr, Faculty of Biology and Biotechnology, Ruhr-University Bochum,Universitätsstraße 150, 44801 Bochum, Germany
Journal: Scientific data, volume 13, issue 1, article 1064
Dates: received 2 July 2025; accepted 30 June 2026; published online 16 July 2026
Type: Data paper · Language: English
License: CC BY
Identifiers: DOI 10.1038/s41597-026-07814-y · PMID 42463676 · PMCID PMC13376767 · OpenAlex W7168814765
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: fMRI (modality), human (organism)
Methods: Spectral & time-frequency, Statistics, Smoothing, state filtering, decompositions, fMRI & imaging, Preprocessing
Keywords: Cognitive neuroscience, Short-term memory
MeSH: Learning*, Touch Perception*, Visual Perception*, Female, Humans, Magnetic Resonance Imaging, Male (* major topic)
Journal subjects: Data Descriptor
Funding: Deutsche Forschungsgemeinschaft (DFG) (SFB 1280, SFB1280 project #316803389)
Citations: not cited yet (Europe PMC); 42 references in the paper

Abstract

How do humans recognize objects in their environment using either vision or touch, even when only one sense is available? Humans routinely integrate visual and haptic sensory systems for object recognition, yet the mechanisms behind cross-modal transfer of category information are not fully understood. In this study, we collected behavioral and fMRI data from 134 participants. Fifty participants (25 per group; 13 females each) performed a similarity rating task with novel 3D objects (“digital embryos”) using either visual or haptic modalities. The remaining 84 participants completed a 3D object category learning experiment in unimodal (Visual-Visual: n = 19, 11 females; Haptic-Haptic: n = 22, 10 females) or cross-modal (Visual-Haptic: n = 22, 11 females; Haptic-Visual: n = 21, 10 females) conditions. Alongside task-based fMRI, we acquired resting-state fMRI data at four time points: pre-training, post-training, pre-test, and post-test. High-resolution T1-weighted images were also obtained for each MRI session. These data support investigations into visual and haptic representations of the environment, representational similarity across modalities, cross-modal transfer of category information for object recognition, and neural plasticity in brain networks.

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

Sepideh-Tabrik/Similarity-Rating-Task

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: ded9f64b08f0ff67e00753b999fd4648507a2a6c, 15 May 2025
Languages: MATLAB (1)
Size: 20 files, 1 script
Software Heritage: not archived
Found in: “Code availability”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
2 files

Sepideh-Tabrik/Neural-mechanisms-underlying-cross-modal-3D-category-learning

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: c67a3d2286492d113a66a496ab0cee3b80178d21, 26 May 2026
Languages: Jupyter (26), MATLAB (5)
Size: 34 files, 31 scripts
Software Heritage: not archived
Found in: “Code availability”
Holds: README, 26 notebooks
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: FSL (20 files), Matplotlib (6 files), AFNI (4 files), ANTs (2 files), FreeSurfer (2 files), Violinplot-Matlab (2 files), Connectome Workbench (2 files), Statistics and Machine Learning Toolbox (1 file), NumPy (1 file), pandas (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
32 files

Zenodo 15646449

License: CC-BY-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 5 files
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 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
At the source:

Code availability

The stimuli and data preprocessing scripts for the similarity rating task are available on GitHub at https://github.com/Sepideh-Tabrik/Similarity-Rating-Task. The code for neuroimaging data processing is accessible at https://github.com/Sepideh-Tabrik/Neural-mechanisms-underlying-cross-modal-3D-category-learning.

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

Tracing map

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

What the map holds:

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

The datasets described in this manuscript are openly available at the following repositories: raw neuroimaging data (10.60517/0874db71-e087-444b-96eb-41b97dc49a7d), preprocessed neuroimaging data (10.60517/80bf4025-2594-4a46-93b2-b729867d6d48), and similarity rating experiment data (https://data.mendeley.com/datasets/8k7ys2xw4h/1).

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, 4 authors, 2 keywords, 7 MeSH terms, 1 funder, 38 references.

Cite

This paper

Tabrik, S., Rahnemayan, S., Tegenthoff, M., & Behroozi, M. (2026). Larg-scale multimodal fMRI dataset of visual and haptic 3D object category learning. Scientific data, 13(1), 1064. https://doi.org/10.1038/s41597-026-07814-y

BibTeX

@article{tabrik2026larg,
author = {Tabrik, Sepideh and Rahnemayan, Sama and Tegenthoff, Martin and Behroozi, Mehdi},
title = {{Larg-scale multimodal fMRI dataset of visual and haptic 3D object category learning}},
journal = {Scientific data},
year = {2026},
month = jul,
volume = {13},
number = {1},
pages = {1064},
publisher = {Nature Publishing Group},
issn = {2052-4463},
doi = {10.1038/s41597-026-07814-y},
url = {https://doi.org/10.1038/s41597-026-07814-y},
pmid = {42463676},
pmcid = {PMC13376767}
}

RIS

TY - JOUR
AU - Tabrik, Sepideh
AU - Rahnemayan, Sama
AU - Tegenthoff, Martin
AU - Behroozi, Mehdi
TI - Larg-scale multimodal fMRI dataset of visual and haptic 3D object category learning
T2 - Scientific data
J2 - Sci Data
PY - 2026
DA - 2026/07/16
VL - 13
IS - 1
SP - 1064
SN - 2052-4463
PB - Nature Publishing Group
DO - 10.1038/s41597-026-07814-y
UR - https://doi.org/10.1038/s41597-026-07814-y
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41597-026-07814-y",
"type": "article-journal",
"title": "Larg-scale multimodal fMRI dataset of visual and haptic 3D object category learning",
"container-title": "Scientific data",
"author": [
{
"family": "Tabrik",
"given": "Sepideh"
},
{
"family": "Rahnemayan",
"given": "Sama"
},
{
"family": "Tegenthoff",
"given": "Martin"
},
{
"family": "Behroozi",
"given": "Mehdi"
}
],
"container-title-short": "Sci Data",
"volume": "13",
"issue": "1",
"page": "1064",
"DOI": "10.1038/s41597-026-07814-y",
"PMID": "42463676",
"PMCID": "PMC13376767",
"ISSN": "2052-4463",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41597-026-07814-y",
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
16
]
]
}
}

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.1038/s41467-026-71151-2 [code]
Common and distinct neural correlates of social interaction processing and theory of mind in narratives.
Journal: Nature communications
In common: Violinplot-Matlab, Connectome Workbench, AFNI, 7 other tools
[2] doi:10.1002/hbm.70483 [code]
Untamed: Unconstrained Tensor Decomposition and Graph Node Embedding for Cortical Parcellation.
Journal: Human brain mapping
In common: Connectome Workbench, AFNI, ANTs, 5 other tools, fMRI, 2 references
[3] doi:10.1002/hbm.70577 [code]
Disgust Propensity, Not Disgust Sensitivity, Shapes the Reactivity of a Subjective Disgust Circuit in Humans.
Journal: Human brain mapping
In common: Violinplot-Matlab, Connectome Workbench, AFNI, 6 other tools, fMRI
[4] doi:10.1371/journal.pbio.3003856 [code]
Aging and metabolism contribute separately to brain-body health.
Journal: PLoS biology
In common: Connectome Workbench, AFNI, ANTs, 6 other tools, 1 reference
[5] doi:10.1016/j.neuroimage.2026.122171 [code]
A conserved node degree-based backbone and flexible hub organization of brain connectome during naturalistic movie watching.
Journal: NeuroImage
In common: Connectome Workbench, AFNI, ANTs, 5 other tools, fMRI, 1 reference
[6] doi:10.1016/j.isci.2026.116903 [code]
Neurobiological and behavioral relevance of intrinsic functional connectome constraints on task-evoked neural activation.
Journal: iScience
In common: Connectome Workbench, AFNI, ANTs, 5 other tools, fMRI, 1 reference
[7] doi:10.1016/j.neuron.2026.04.011 [code]
Precision fMRI reveals densely interdigitated network patches with conserved motifs in the lateral prefrontal cortex.
Journal: Neuron
In common: Connectome Workbench, AFNI, ANTs, 5 other tools, fMRI, 1 reference
[8] doi:10.1038/s41467-026-73668-y [code]
Convergent and divergent brain-cognition development in early adolescence.
Journal: Nature communications
In common: Connectome Workbench, AFNI, ANTs, 6 other tools, fMRI
[9] doi:10.1038/s41467-026-74565-0 [code]
The functional neurobiology of dispositions towards negative emotions.
Journal: Nature communications
In common: Violinplot-Matlab, Connectome Workbench, AFNI, 6 other tools
[10] doi:10.1038/s41467-026-76011-7 [code]
Human cortex organizes dynamic co-fluctuations along the sensorimotor-association axis.
Journal: Nature communications
In common: Connectome Workbench, AFNI, ANTs, 5 other tools, 1 reference

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.