OSCR

Aging and metabolism contribute separately to brain-body health.

Code ↔ Paper

8 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 8 matches
  1. [1] § Materials and methods › UK Biobank: Brain imaging measurements ↔ external_packages/matlab/default_packages/cifti-matlab/ft_write_cifti.m, lines 188–297 · score 0.84 · cerebellar white matter, brain stem, cerebral white matter, accumbens, amygdala, diencephalon
  2. [2] § Materials and methods › UK Biobank: Brain imaging measurements ↔ stable_projects/disorder_subtypes/Tang2020_ASDFactors/step3_analyses/utilities/CBIG_ASDf_Plot400Schaefer19Subcor17Networks_419by419Input.m, lines 1–93 · score 0.82 · brain stem, Subcortical structures, striatum, accumbens, amygdala, diencephalon
  3. [3] § Materials and methods › HCP–A: Brain imaging acquisition ↔ hcpasl/empirical_banding/prepare_estimation.py, lines 22–112 · score 0.70 · spin echo, calibration images, pCASL, MB, band, Pipeline
  4. [4] § Materials and methods › HCP–A: Brain imaging acquisition ↔ hcpasl/asl_differencing.py, lines 17–96 · score 0.65 · arterial spin, distortion correction, background, band, ASL, sequence
  5. [5] § Materials and methods › HCP–A: Brain imaging acquisition ↔ external_packages/matlab/non_default_packages/palm/palm-alpha109/fileio/@nifti/private/nifti1.h, lines 1070–1158 · score 0.55 · phase encoding direction, slices, SPACE, field
  6. [6] § Materials and methods › Statistics and null models ↔ stable_projects/disorder_subtypes/Sun2019_ADJointFactors/step2_MMLDA/CBIG_MMLDA_visualize_factors.m, lines 235–294 · score 0.55 · medial wall, fsaverage surface, parcel, vertex
  7. [7] § Materials and methods › Statistics and null models ↔ stable_projects/brain_parcellation/Kong2022_ArealMSHBM/step1_generate_profiles_and_ini_params/CBIG_ArealMSHBM_generate_ini_params.m, lines 1–142 · score 0.55 · medial wall, fsaverage surface, parcel, vertex, brain
  8. [8] § Materials and methods › HCP–A: Brain imaging acquisition ↔ external_packages/matlab/non_default_packages/palm/palm-alpha109/fileio/@nifti/private/nifti1.h, lines 1070–1158 · score 0.52 · phase encoding, EPI, fMRI, scans

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

C/C++ header · 1,222 lines · 55 KB · MIT · 2 matches

  1. #ifndef _NIFTI_HEADER_
  2. #define _NIFTI_HEADER_
  3. /*****************************************************************************
  4. ** This file defines the "NIFTI-1" header format. **
  5. ** It is derived from 2 meetings at the NIH (31 Mar 2003 and **
  6. ** 02 Sep 2003) of the Data Format Working Group (DFWG), **
  7. ** chartered by the NIfTI (Neuroimaging Informatics Technology **
  8. ** Initiative) at the National Institutes of Health (NIH). **
  9. **--------------------------------------------------------------**
  10. ** Neither the National Institutes of Health (NIH), the DFWG, **
  11. ** nor any of the members or employees of these institutions **
  12. ** imply any warranty of usefulness of this material for any **
  13. ** purpose, and do not assume any liability for damages, **
  14. ** incidental or otherwise, caused by any use of this document. **
  15. ** If these conditions are not acceptable, do not use this! **
  16. **--------------------------------------------------------------**
  17. ** Author: Robert W Cox (NIMH, Bethesda) **
  18. ** Advisors: John Ashburner (FIL, London), **
  19. ** Stephen Smith (FMRIB, Oxford), **
  20. ** Mark Jenkinson (FMRIB, Oxford) **
  21. ******************************************************************************/
  22. /*---------------------------------------------------------------------------*/
  23. /* Note that the ANALYZE 7.5 file header (dbh.h) is
  24. (c) Copyright 1986-1995
  25. Biomedical Imaging Resource
  26. Mayo Foundation
  27. Incorporation of components of dbh.h are by permission of the
  28. Mayo Foundation.
  29. Changes from the ANALYZE 7.5 file header in this file are released to the
  30. public domain, including the functional comments and any amusing asides.
  31. -----------------------------------------------------------------------------*/
  32. /*---------------------------------------------------------------------------*/
  33. /*! INTRODUCTION TO NIFTI-1:
  34. ------------------------
  35. The twin (and somewhat conflicting) goals of this modified ANALYZE 7.5
  36. format are:
  37. (a) To add information to the header that will be useful for functional
  38. neuroimaging data analysis and display. These additions include:
  39. - More basic data types.
  40. - Two affine transformations to specify voxel coordinates.
  41. - "Intent" codes and parameters to describe the meaning of the data.
  42. - Affine scaling of the stored data values to their "true" values.
  43. - Optional storage of the header and image data in one file (.nii).
  44. (b) To maintain compatibility with non-NIFTI-aware ANALYZE 7.5 compatible
  45. software (i.e., such a program should be able to do something useful
  46. with a NIFTI-1 dataset -- at least, with one stored in a traditional
  47. .img/.hdr file pair).
  48. Most of the unused fields in the ANALYZE 7.5 header have been taken,
  49. and some of the lesser-used fields have been co-opted for other purposes.
  50. Notably, most of the data_history substructure has been co-opted for
  51. other purposes, since the ANALYZE 7.5 format describes this substructure
  52. as "not required".
  53. NIFTI-1 FLAG (MAGIC STRINGS):
  54. ----------------------------
  55. To flag such a struct as being conformant to the NIFTI-1 spec, the last 4
  56. bytes of the header must be either the C String "ni1" or "n+1";
  57. in hexadecimal, the 4 bytes
  58. 6E 69 31 00 or 6E 2B 31 00
  59. (in any future version of this format, the '1' will be upgraded to '2',
  60. etc.). Normally, such a "magic number" or flag goes at the start of the
  61. file, but trying to avoid clobbering widely-used ANALYZE 7.5 fields led to
  62. putting this marker last. However, recall that "the last shall be first"
  63. (Matthew 20:16).
  64. If a NIFTI-aware program reads a header file that is NOT marked with a
  65. NIFTI magic string, then it should treat the header as an ANALYZE 7.5
  66. structure.
  67. NIFTI-1 FILE STORAGE:
  68. --------------------
  69. "ni1" means that the image data is stored in the ".img" file corresponding
  70. to the header file (starting at file offset 0).
  71. "n+1" means that the image data is stored in the same file as the header
  72. information. We recommend that the combined header+data filename suffix
  73. be ".nii". When the dataset is stored in one file, the first byte of image
  74. data is stored at byte location (int)vox_offset in this combined file.
  75. GRACE UNDER FIRE:
  76. ----------------
  77. Most NIFTI-aware programs will only be able to handle a subset of the full
  78. range of datasets possible with this format. All NIFTI-aware programs
  79. should take care to check if an input dataset conforms to the program's
  80. needs and expectations (e.g., check datatype, intent_code, etc.). If the
  81. input dataset can't be handled by the program, the program should fail
  82. gracefully (e.g., print a useful warning; not crash).
  83. SAMPLE CODES:
  84. ------------
  85. The associated files nifti1_io.h and nifti1_io.c provide a sample
  86. implementation in C of a set of functions to read, write, and manipulate
  87. NIFTI-1 files. The file nifti1_test.c is a sample program that uses
  88. the nifti1_io.c functions.
  89. -----------------------------------------------------------------------------*/
  90. /*---------------------------------------------------------------------------*/
  91. /* HEADER STRUCT DECLARATION:
  92. -------------------------
  93. In the comments below for each field, only NIFTI-1 specific requirements
  94. or changes from the ANALYZE 7.5 format are described. For convenience,
  95. the 348 byte header is described as a single struct, rather than as the
  96. ANALYZE 7.5 group of 3 substructs.
  97. Further comments about the interpretation of various elements of this
  98. header are after the data type definition itself. Fields that are
  99. marked as ++UNUSED++ have no particular interpretation in this standard.
  100. (Also see the UNUSED FIELDS comment section, far below.)
  101. The presumption below is that the various C types have particular sizes:
  102. sizeof(int) = sizeof(float) = 4 ; sizeof(short) = 2
  103. -----------------------------------------------------------------------------*/
  104. /*=================*/
  105. #ifdef __cplusplus
  106. extern "C" {
  107. #endif
  108. /*=================*/
  109. /*************************/ /************************/
  110. struct nifti_1_header { /* NIFTI-1 usage */ /* ANALYZE 7.5 field(s) */
  111. /*************************/ /************************/
  112. /*--- was header_key substruct ---*/
  113. int sizeof_hdr; /*!< MUST be 348 */ /* int sizeof_hdr; */
  114. char data_type[10]; /*!< ++UNUSED++ */ /* char data_type[10]; */
  115. char db_name[18]; /*!< ++UNUSED++ */ /* char db_name[18]; */
  116. int extents; /*!< ++UNUSED++ */ /* int extents; */
  117. short session_error; /*!< ++UNUSED++ */ /* short session_error; */
  118. char regular; /*!< ++UNUSED++ */ /* char regular; */
  119. char dim_info; /*!< MRI slice ordering. */ /* char hkey_un0; */
  120. /*--- was image_dimension substruct ---*/
  121. short dim[8]; /*!< Data array dimensions.*/ /* short dim[8]; */
  122. float intent_p1 ; /*!< 1st intent parameter. */ /* short unused8; */
  123. /* short unused9; */
  124. float intent_p2 ; /*!< 2nd intent parameter. */ /* short unused10; */
  125. /* short unused11; */
  126. float intent_p3 ; /*!< 3rd intent parameter. */ /* short unused12; */
  127. /* short unused13; */
  128. short intent_code ; /*!< NIFTI_INTENT_* code. */ /* short unused14; */
  129. short datatype; /*!< Defines data type! */ /* short datatype; */
  130. short bitpix; /*!< Number bits/voxel. */ /* short bitpix; */
  131. short slice_start; /*!< First slice index. */ /* short dim_un0; */
  132. float pixdim[8]; /*!< Grid spacings. */ /* float pixdim[8]; */
  133. float vox_offset; /*!< Offset into .nii file */ /* float vox_offset; */
  134. float scl_slope ; /*!< Data scaling: slope. */ /* float funused1; */
  135. float scl_inter ; /*!< Data scaling: offset. */ /* float funused2; */
  136. short slice_end; /*!< Last slice index. */ /* float funused3; */
  137. char slice_code ; /*!< Slice timing order. */
  138. char xyzt_units ; /*!< Units of pixdim[1..4] */
  139. float cal_max; /*!< Max display intensity */ /* float cal_max; */
  140. float cal_min; /*!< Min display intensity */ /* float cal_min; */
  141. float slice_duration;/*!< Time for 1 slice. */ /* float compressed; */
  142. float toffset; /*!< Time axis shift. */ /* float verified; */
  143. int glmax; /*!< ++UNUSED++ */ /* int glmax; */
  144. int glmin; /*!< ++UNUSED++ */ /* int glmin; */
  145. /*--- was data_history substruct ---*/
  146. char descrip[80]; /*!< any text you like. */ /* char descrip[80]; */
  147. char aux_file[24]; /*!< auxiliary filename. */ /* char aux_file[24]; */
  148. short qform_code ; /*!< NIFTI_XFORM_* code. */ /*-- all ANALYZE 7.5 ---*/
  149. short sform_code ; /*!< NIFTI_XFORM_* code. */ /* fields below here */
  150. /* are replaced */
  151. float quatern_b ; /*!< Quaternion b param. */
  152. float quatern_c ; /*!< Quaternion c param. */
  153. float quatern_d ; /*!< Quaternion d param. */
  154. float qoffset_x ; /*!< Quaternion x shift. */
  155. float qoffset_y ; /*!< Quaternion y shift. */
  156. float qoffset_z ; /*!< Quaternion z shift. */
  157. float srow_x[4] ; /*!< 1st row affine transform. */
  158. float srow_y[4] ; /*!< 2nd row affine transform. */
  159. float srow_z[4] ; /*!< 3rd row affine transform. */
  160. char intent_name[16];/*!< 'name' or meaning of data. */
  161. char magic[4] ; /*!< MUST be "ni1\0" or "n+1\0". */
  162. } ; /**** 348 bytes total ****/
  163. typedef struct nifti_1_header nifti_1_header ;
  164. /*---------------------------------------------------------------------------*/
  165. /* DATA DIMENSIONALITY (as in ANALYZE 7.5):
  166. ---------------------------------------
  167. dim[0] = number of dimensions;
  168. - if dim[0] is outside range 1..7, then the header information
  169. needs to be byte swapped appropriately
  170. - ANALYZE supports dim[0] up to 7, but NIFTI-1 reserves
  171. dimensions 1,2,3 for space (x,y,z), 4 for time (t), and
  172. 5,6,7 for anything else needed.
  173. dim[i] = length of dimension #i, for i=1..dim[0] (must be positive)
  174. - also see the discussion of intent_code, far below
  175. pixdim[i] = voxel width along dimension #i, i=1..dim[0] (positive)
  176. - cf. ORIENTATION section below for use of pixdim[0]
  177. - the units of pixdim can be specified with the xyzt_units
  178. field (also described far below).
  179. Number of bits per voxel value is in bitpix, which MUST correspond with
  180. the datatype field. The total number of bytes in the image data is
  181. dim[1] * ... * dim[dim[0]] * bitpix / 8
  182. In NIFTI-1 files, dimensions 1,2,3 are for space, dimension 4 is for time,
  183. and dimension 5 is for storing multiple values at each spatiotemporal
  184. voxel. Some examples:
  185. - A typical whole-brain FMRI experiment's time series:
  186. - dim[0] = 4
  187. - dim[1] = 64 pixdim[1] = 3.75 xyzt_units = NIFTI_UNITS_MM
  188. - dim[2] = 64 pixdim[2] = 3.75 | NIFTI_UNITS_SEC
  189. - dim[3] = 20 pixdim[3] = 5.0
  190. - dim[4] = 120 pixdim[4] = 2.0
  191. - A typical T1-weighted anatomical volume:
  192. - dim[0] = 3
  193. - dim[1] = 256 pixdim[1] = 1.0 xyzt_units = NIFTI_UNITS_MM
  194. - dim[2] = 256 pixdim[2] = 1.0
  195. - dim[3] = 128 pixdim[3] = 1.1
  196. - A single slice EPI time series:
  197. - dim[0] = 4
  198. - dim[1] = 64 pixdim[1] = 3.75 xyzt_units = NIFTI_UNITS_MM
  199. - dim[2] = 64 pixdim[2] = 3.75 | NIFTI_UNITS_SEC
  200. - dim[3] = 1 pixdim[3] = 5.0
  201. - dim[4] = 1200 pixdim[4] = 0.2
  202. - A 3-vector stored at each point in a 3D volume:
  203. - dim[0] = 5
  204. - dim[1] = 256 pixdim[1] = 1.0 xyzt_units = NIFTI_UNITS_MM
  205. - dim[2] = 256 pixdim[2] = 1.0
  206. - dim[3] = 128 pixdim[3] = 1.1
  207. - dim[4] = 1 pixdim[4] = 0.0
  208. - dim[5] = 3 intent_code = NIFTI_INTENT_VECTOR
  209. - A single time series with a 3x3 matrix at each point:
  210. - dim[0] = 5
  211. - dim[1] = 1 xyzt_units = NIFTI_UNITS_SEC
  212. - dim[2] = 1
  213. - dim[3] = 1
  214. - dim[4] = 1200 pixdim[4] = 0.2
  215. - dim[5] = 9 intent_code = NIFTI_INTENT_GENMATRIX
  216. - intent_p1 = intent_p2 = 3.0 (indicates matrix dimensions)
  217. -----------------------------------------------------------------------------*/
  218. /*---------------------------------------------------------------------------*/
  219. /* DATA STORAGE:
  220. ------------
  221. If the magic field is "n+1", then the voxel data is stored in the
  222. same file as the header. In this case, the voxel data starts at offset
  223. (int)vox_offset into the header file. Thus, vox_offset=348.0 means that
  224. the data starts immediately after the NIFTI-1 header. If vox_offset is
  225. greater than 348, the NIFTI-1 format does not say anything about the
  226. contents of the dataset file between the end of the header and the
  227. start of the data.
  228. FILES:
  229. -----
  230. If the magic field is "ni1", then the voxel data is stored in the
  231. associated ".img" file, starting at offset 0 (i.e., vox_offset is not
  232. used in this case, and should be set to 0.0).
  233. When storing NIFTI-1 datasets in pairs of files, it is customary to name
  234. the files in the pattern "name.hdr" and "name.img", as in ANALYZE 7.5.
  235. When storing in a single file ("n+1"), the file name should be in
  236. the form "name.nii" (the ".nft" and ".nif" suffixes are already taken;
  237. cf. http://www.icdatamaster.com/n.html ).
  238. BYTE ORDERING:
  239. -------------
  240. The byte order of the data arrays is presumed to be the same as the byte
  241. order of the header (which is determined by examining dim[0]).
  242. Floating point types are presumed to be stored in IEEE-754 format.
  243. -----------------------------------------------------------------------------*/
  244. /*---------------------------------------------------------------------------*/
  245. /* DATA SCALING:
  246. ------------
  247. If the scl_slope field is nonzero, then each voxel value in the dataset
  248. should be scaled as
  249. y = scl_slope * x + scl_inter
  250. where x = voxel value stored
  251. y = "true" voxel value
  252. Normally, we would expect this scaling to be used to store "true" floating
  253. values in a smaller integer datatype, but that is not required. That is,
  254. it is legal to use scaling even if the datatype is a float type (crazy,
  255. perhaps, but legal).
  256. - However, the scaling is to be ignored if datatype is DT_RGB24.
  257. - If datatype is a complex type, then the scaling is to be
  258. applied to both the real and imaginary parts.
  259. The cal_min and cal_max fields (if nonzero) are used for mapping (possibly
  260. scaled) dataset values to display colors:
  261. - Minimum display intensity (black) corresponds to dataset value cal_min.
  262. - Maximum display intensity (white) corresponds to dataset value cal_max.
  263. - Dataset values below cal_min should display as black also, and values
  264. above cal_max as white.
  265. - Colors "black" and "white", of course, may refer to any scalar display
  266. scheme (e.g., a color lookup table specified via aux_file).
  267. - cal_min and cal_max only make sense when applied to scalar-valued
  268. datasets (i.e., dim[0] < 5 or dim[5] = 1).
  269. -----------------------------------------------------------------------------*/
  270. /*---------------------------------------------------------------------------*/
  271. /* TYPE OF DATA (acceptable values for datatype field):
  272. ---------------------------------------------------
  273. Values of datatype smaller than 256 are ANALYZE 7.5 compatible.
  274. Larger values are NIFTI-1 additions. These are all multiples of 256, so
  275. that no bits below position 8 are set in datatype. But there is no need
  276. to use only powers-of-2, as the original ANALYZE 7.5 datatype codes do.
  277. The additional codes are intended to include a complete list of basic
  278. scalar types, including signed and unsigned integers from 8 to 64 bits,
  279. floats from 32 to 128 bits, and complex (float pairs) from 64 to 256 bits.
  280. Note that most programs will support only a few of these datatypes!
  281. A NIFTI-1 program should fail gracefully (e.g., print a warning message)
  282. when it encounters a dataset with a type it doesn't like.
  283. -----------------------------------------------------------------------------*/
  284. #undef DT_UNKNOWN /* defined in dirent.h on some Unix systems */
  285. /*--- the original ANALYZE 7.5 type codes ---*/
  286. #define DT_NONE 0
  287. #define DT_UNKNOWN 0 /* what it says, dude */
  288. #define DT_BINARY 1 /* binary (1 bit/voxel) */
  289. #define DT_UNSIGNED_CHAR 2 /* unsigned char (8 bits/voxel) */
  290. #define DT_SIGNED_SHORT 4 /* signed short (16 bits/voxel) */
  291. #define DT_SIGNED_INT 8 /* signed int (32 bits/voxel) */
  292. #define DT_FLOAT 16 /* float (32 bits/voxel) */
  293. #define DT_COMPLEX 32 /* complex (64 bits/voxel) */
  294. #define DT_DOUBLE 64 /* double (64 bits/voxel) */
  295. #define DT_RGB 128 /* RGB triple (24 bits/voxel) */
  296. #define DT_ALL 255 /* not very useful (?) */
  297. /*----- another set of names for the same ---*/
  298. #define DT_UINT8 2
  299. #define DT_INT16 4
  300. #define DT_INT32 8
  301. #define DT_FLOAT32 16
  302. #define DT_COMPLEX64 32
  303. #define DT_FLOAT64 64
  304. #define DT_RGB24 128
  305. /*------------------- new codes for NIFTI ---*/
  306. #define DT_INT8 256 /* signed char (8 bits) */
  307. #define DT_UINT16 512 /* unsigned short (16 bits) */
  308. #define DT_UINT32 768 /* unsigned int (32 bits) */
  309. #define DT_INT64 1024 /* long long (64 bits) */
  310. #define DT_UINT64 1280 /* unsigned long long (64 bits) */
  311. #define DT_FLOAT128 1536 /* long double (128 bits) */
  312. #define DT_COMPLEX128 1792 /* double pair (128 bits) */
  313. #define DT_COMPLEX256 2048 /* long double pair (256 bits) */
  314. /*------- aliases for all the above codes ---*/
  315. /*! unsigned char. */
  316. #define NIFTI_TYPE_UINT8 2
  317. /*! signed short. */
  318. #define NIFTI_TYPE_INT16 4
  319. /*! signed int. */
  320. #define NIFTI_TYPE_INT32 8
  321. /*! 32 bit float. */
  322. #define NIFTI_TYPE_FLOAT32 16
  323. /*! 64 bit complex = 2 32 bit floats. */
  324. #define NIFTI_TYPE_COMPLEX64 32
  325. /*! 64 bit float = double. */
  326. #define NIFTI_TYPE_FLOAT64 64
  327. /*! 3 8 bit bytes. */
  328. #define NIFTI_TYPE_RGB24 128
  329. /*! signed char. */
  330. #define NIFTI_TYPE_INT8 256
  331. /*! unsigned short. */
  332. #define NIFTI_TYPE_UINT16 512
  333. /*! unsigned int. */
  334. #define NIFTI_TYPE_UINT32 768
  335. /*! signed long long. */
  336. #define NIFTI_TYPE_INT64 1024
  337. /*! unsigned long long. */
  338. #define NIFTI_TYPE_UINT64 1280
  339. /*! 128 bit float = long double. */
  340. #define NIFTI_TYPE_FLOAT128 1536
  341. /*! 128 bit complex = 2 64 bit floats. */
  342. #define NIFTI_TYPE_COMPLEX128 1792
  343. /*! 256 bit complex = 2 128 bit floats */
  344. #define NIFTI_TYPE_COMPLEX256 2048
  345. /*-------- sample typedefs for complicated types ---*/
  346. #if 0
  347. typedef struct { float r,i; } complex_float ;
  348. typedef struct { double r,i; } complex_double ;
  349. typedef struct { long double r,i; } complex_longdouble ;
  350. typedef struct { unsigned char r,g,b; } rgb_byte ;
  351. #endif
  352. /*---------------------------------------------------------------------------*/
  353. /* INTERPRETATION OF VOXEL DATA:
  354. ----------------------------
  355. The intent_code field can be used to indicate that the voxel data has
  356. some particular meaning. In particular, a large number of codes is
  357. given to indicate that the the voxel data should be interpreted as
  358. being drawn from a given probability distribution.
  359. VECTOR-VALUED DATASETS:
  360. ----------------------
  361. The 5th dimension of the dataset, if present (i.e., dim[0]=5 and
  362. dim[5] > 1), contains multiple values (e.g., a vector) to be stored
  363. at each spatiotemporal location. For example, the header values
  364. - dim[0] = 5
  365. - dim[1] = 64
  366. - dim[2] = 64
  367. - dim[3] = 20
  368. - dim[4] = 1 (indicates no time axis)
  369. - dim[5] = 3
  370. - datatype = DT_FLOAT
  371. - intent_code = NIFTI_INTENT_VECTOR
  372. mean that this dataset should be interpreted as a 3D volume (64x64x20),
  373. with a 3-vector of floats defined at each point in the 3D grid.
  374. A program reading a dataset with a 5th dimension may want to reformat
  375. the image data to store each voxels' set of values together in a struct
  376. or array. This programming detail, however, is beyond the scope of the
  377. NIFTI-1 file specification! Uses of dimensions 6 and 7 are also not
  378. specified here.
  379. STATISTICAL PARAMETRIC DATASETS (i.e., SPMs):
  380. --------------------------------------------
  381. Values of intent_code from NIFTI_FIRST_STATCODE to NIFTI_LAST_STATCODE
  382. (inclusive) indicate that the numbers in the dataset should be interpreted
  383. as being drawn from a given distribution. Most such distributions have
  384. auxiliary parameters (e.g., NIFTI_INTENT_TTEST has 1 DOF parameter).
  385. If the dataset DOES NOT have a 5th dimension, then the auxiliary parameters
  386. are the same for each voxel, and are given in header fields intent_p1,
  387. intent_p2, and intent_p3.
  388. If the dataset DOES have a 5th dimension, then the auxiliary parameters
  389. are different for each voxel. For example, the header values
  390. - dim[0] = 5
  391. - dim[1] = 128
  392. - dim[2] = 128
  393. - dim[3] = 1 (indicates a single slice)
  394. - dim[4] = 1 (indicates no time axis)
  395. - dim[5] = 2
  396. - datatype = DT_FLOAT
  397. - intent_code = NIFTI_INTENT_TTEST
  398. mean that this is a 2D dataset (128x128) of t-statistics, with the
  399. t-statistic being in the first "plane" of data and the degrees-of-freedom
  400. parameter being in the second "plane" of data.
  401. If the dataset 5th dimension is used to store the voxel-wise statistical
  402. parameters, then dim[5] must be 1 plus the number of parameters required
  403. by that distribution (e.g., intent_code=NIFTI_INTENT_TTEST implies dim[5]
  404. must be 2, as in the example just above).
  405. Note: intent_code values 2..10 are compatible with AFNI 1.5x (which is
  406. why there is no code with value=1, which is obsolescent in AFNI).
  407. OTHER INTENTIONS:
  408. ----------------
  409. The purpose of the intent_* fields is to help interpret the values
  410. stored in the dataset. Some non-statistical values for intent_code
  411. and conventions are provided for storing other complex data types.
  412. The intent_name field provides space for a 15 character (plus 0 byte)
  413. 'name' string for the type of data stored. Examples:
  414. - intent_code = NIFTI_INTENT_ESTIMATE; intent_name = "T1";
  415. could be used to signify that the voxel values are estimates of the
  416. NMR parameter T1.
  417. - intent_code = NIFTI_INTENT_TTEST; intent_name = "House";
  418. could be used to signify that the voxel values are t-statistics
  419. for the significance of 'activation' response to a House stimulus.
  420. - intent_code = NIFTI_INTENT_DISPVECT; intent_name = "ToMNI152";
  421. could be used to signify that the voxel values are a displacement
  422. vector that transforms each voxel (x,y,z) location to the
  423. corresponding location in the MNI152 standard brain.
  424. - intent_code = NIFTI_INTENT_SYMMATRIX; intent_name = "DTI";
  425. could be used to signify that the voxel values comprise a diffusion
  426. tensor image.
  427. If no data name is implied or needed, intent_name[0] should be set to 0.
  428. -----------------------------------------------------------------------------*/
  429. /*! default: no intention is indicated in the header. */
  430. #define NIFTI_INTENT_NONE 0
  431. /*-------- These codes are for probability distributions ---------------*/
  432. /* Most distributions have a number of parameters,
  433. below denoted by p1, p2, and p3, and stored in
  434. - intent_p1, intent_p2, intent_p3 if dataset doesn't have 5th dimension
  435. - image data array if dataset does have 5th dimension
  436. Functions to compute with many of the distributions below can be found
  437. in the CDF library from U Texas.
  438. Formulas for and discussions of these distributions can be found in the
  439. following books:
  440. [U] Univariate Discrete Distributions,
  441. NL Johnson, S Kotz, AW Kemp.
  442. [C1] Continuous Univariate Distributions, vol. 1,
  443. NL Johnson, S Kotz, N Balakrishnan.
  444. [C2] Continuous Univariate Distributions, vol. 2,
  445. NL Johnson, S Kotz, N Balakrishnan. */
  446. /*----------------------------------------------------------------------*/
  447. /*! [C2, chap 32] Correlation coefficient R (1 param):
  448. p1 = degrees of freedom
  449. R/sqrt(1-R*R) is t-distributed with p1 DOF. */
  450. #define NIFTI_INTENT_CORREL 2
  451. /*! [C2, chap 28] Student t statistic (1 param): p1 = DOF. */
  452. #define NIFTI_INTENT_TTEST 3
  453. /*! [C2, chap 27] Fisher F statistic (2 params):
  454. p1 = numerator DOF, p2 = denominator DOF. */
  455. #define NIFTI_INTENT_FTEST 4
  456. /*! [C1, chap 13] Standard normal (0 params): Density = N(0,1). */
  457. #define NIFTI_INTENT_ZSCORE 5
  458. /*! [C1, chap 18] Chi-squared (1 param): p1 = DOF.
  459. Density(x) proportional to exp(-x/2) * x^(p1/2-1). */
  460. #define NIFTI_INTENT_CHISQ 6
  461. /*! [C2, chap 25] Beta distribution (2 params): p1=a, p2=b.
  462. Density(x) proportional to x^(a-1) * (1-x)^(b-1). */
  463. #define NIFTI_INTENT_BETA 7
  464. /*! [U, chap 3] Binomial distribution (2 params):
  465. p1 = number of trials, p2 = probability per trial.
  466. Prob(x) = (p1 choose x) * p2^x * (1-p2)^(p1-x), for x=0,1,...,p1. */
  467. #define NIFTI_INTENT_BINOM 8
  468. /*! [C1, chap 17] Gamma distribution (2 params):
  469. p1 = shape, p2 = scale.
  470. Density(x) proportional to x^(p1-1) * exp(-p2*x). */
  471. #define NIFTI_INTENT_GAMMA 9
  472. /*! [U, chap 4] Poisson distribution (1 param): p1 = mean.
  473. Prob(x) = exp(-p1) * p1^x / x! , for x=0,1,2,.... */
  474. #define NIFTI_INTENT_POISSON 10
  475. /*! [C1, chap 13] Normal distribution (2 params):
  476. p1 = mean, p2 = standard deviation. */
  477. #define NIFTI_INTENT_NORMAL 11
  478. /*! [C2, chap 30] Noncentral F statistic (3 params):
  479. p1 = numerator DOF, p2 = denominator DOF,
  480. p3 = numerator noncentrality parameter. */
  481. #define NIFTI_INTENT_FTEST_NONC 12
  482. /*! [C2, chap 29] Noncentral chi-squared statistic (2 params):
  483. p1 = DOF, p2 = noncentrality parameter. */
  484. #define NIFTI_INTENT_CHISQ_NONC 13
  485. /*! [C2, chap 23] Logistic distribution (2 params):
  486. p1 = location, p2 = scale.
  487. Density(x) proportional to sech^2((x-p1)/(2*p2)). */
  488. #define NIFTI_INTENT_LOGISTIC 14
  489. /*! [C2, chap 24] Laplace distribution (2 params):
  490. p1 = location, p2 = scale.
  491. Density(x) proportional to exp(-abs(x-p1)/p2). */
  492. #define NIFTI_INTENT_LAPLACE 15
  493. /*! [C2, chap 26] Uniform distribution: p1 = lower end, p2 = upper end. */
  494. #define NIFTI_INTENT_UNIFORM 16
  495. /*! [C2, chap 31] Noncentral t statistic (2 params):
  496. p1 = DOF, p2 = noncentrality parameter. */
  497. #define NIFTI_INTENT_TTEST_NONC 17
  498. /*! [C1, chap 21] Weibull distribution (3 params):
  499. p1 = location, p2 = scale, p3 = power.
  500. Density(x) proportional to
  501. ((x-p1)/p2)^(p3-1) * exp(-((x-p1)/p2)^p3) for x > p1. */
  502. #define NIFTI_INTENT_WEIBULL 18
  503. /*! [C1, chap 18] Chi distribution (1 param): p1 = DOF.
  504. Density(x) proportional to x^(p1-1) * exp(-x^2/2) for x > 0.
  505. p1 = 1 = 'half normal' distribution
  506. p1 = 2 = Rayleigh distribution
  507. p1 = 3 = Maxwell-Boltzmann distribution. */
  508. #define NIFTI_INTENT_CHI 19
  509. /*! [C1, chap 15] Inverse Gaussian (2 params):
  510. p1 = mu, p2 = lambda
  511. Density(x) proportional to
  512. exp(-p2*(x-p1)^2/(2*p1^2*x)) / x^3 for x > 0. */
  513. #define NIFTI_INTENT_INVGAUSS 20
  514. /*! [C2, chap 22] Extreme value type I (2 params):
  515. p1 = location, p2 = scale
  516. cdf(x) = exp(-exp(-(x-p1)/p2)). */
  517. #define NIFTI_INTENT_EXTVAL 21
  518. /*! Data is a 'p-value' (no params). */
  519. #define NIFTI_INTENT_PVAL 22
  520. /*! Smallest intent_code that indicates a statistic. */
  521. #define NIFTI_FIRST_STATCODE 2
  522. /*! Largest intent_code that indicates a statistic. */
  523. #define NIFTI_LAST_STATCODE 22
  524. /*---------- these values for intent_code aren't for statistics ----------*/
  525. /*! To signify that the value at each voxel is an estimate
  526. of some parameter, set intent_code = NIFTI_INTENT_ESTIMATE.
  527. The name of the parameter may be stored in intent_name. */
  528. #define NIFTI_INTENT_ESTIMATE 1001
  529. /*! To signify that the value at each voxel is an index into
  530. some set of labels, set intent_code = NIFTI_INTENT_LABEL.
  531. The filename with the labels may stored in aux_file. */
  532. #define NIFTI_INTENT_LABEL 1002
  533. /*! To signify that the value at each voxel is an index into the
  534. NeuroNames labels set, set intent_code = NIFTI_INTENT_NEURONAME. */
  535. #define NIFTI_INTENT_NEURONAME 1003
  536. /*! To store an M x N matrix at each voxel:
  537. - dataset must have a 5th dimension (dim[0]=5 and dim[5]>1)
  538. - intent_code must be NIFTI_INTENT_GENMATRIX
  539. - dim[5] must be M*N
  540. - intent_p1 must be M (in float format)
  541. - intent_p2 must be N (ditto)
  542. - the matrix values A[i][[j] are stored in row-order:
  543. - A[0][0] A[0][1] ... A[0][N-1]
  544. - A[1][0] A[1][1] ... A[1][N-1]
  545. - etc., until
  546. - A[M-1][0] A[M-1][1] ... A[M-1][N-1] */
  547. #define NIFTI_INTENT_GENMATRIX 1004
  548. /*! To store an NxN symmetric matrix at each voxel:
  549. - dataset must have a 5th dimension
  550. - intent_code must be NIFTI_INTENT_SYMMATRIX
  551. - dim[5] must be N*(N+1)/2
  552. - intent_p1 must be N (in float format)
  553. - the matrix values A[i][[j] are stored in row-order:
  554. - A[0][0]
  555. - A[1][0] A[1][1]
  556. - A[2][0] A[2][1] A[2][2]
  557. - etc.: row-by-row */
  558. #define NIFTI_INTENT_SYMMATRIX 1005
  559. /*! To signify that the vector value at each voxel is to be taken
  560. as a displacement field or vector:
  561. - dataset must have a 5th dimension
  562. - intent_code must be NIFTI_INTENT_DISPVECT
  563. - dim[5] must be the dimensionality of the displacment
  564. vector (e.g., 3 for spatial displacement, 2 for in-plane) */
  565. #define NIFTI_INTENT_DISPVECT 1006 /* specifically for displacements */
  566. #define NIFTI_INTENT_VECTOR 1007 /* for any other type of vector */
  567. /*! To signify that the vector value at each voxel is really a
  568. spatial coordinate (e.g., the vertices or nodes of a surface mesh):
  569. - dataset must have a 5th dimension
  570. - intent_code must be NIFTI_INTENT_POINTSET
  571. - dim[0] = 5
  572. - dim[1] = number of points
  573. - dim[2] = dim[3] = dim[4] = 1
  574. - dim[5] must be the dimensionality of space (e.g., 3 => 3D space).
  575. - intent_name may describe the object these points come from
  576. (e.g., "pial", "gray/white" , "EEG", "MEG"). */
  577. #define NIFTI_INTENT_POINTSET 1008
  578. /*! To signify that the vector value at each voxel is really a triple
  579. of indexes (e.g., forming a triangle) from a pointset dataset:
  580. - dataset must have a 5th dimension
  581. - intent_code must be NIFTI_INTENT_TRIANGLE
  582. - dim[0] = 5
  583. - dim[1] = number of triangles
  584. - dim[2] = dim[3] = dim[4] = 1
  585. - dim[5] = 3
  586. - datatype should be an integer type (preferably DT_INT32)
  587. - the data values are indexes (0,1,...) into a pointset dataset. */
  588. #define NIFTI_INTENT_TRIANGLE 1009
  589. /*! To signify that the vector value at each voxel is a quaternion:
  590. - dataset must have a 5th dimension
  591. - intent_code must be NIFTI_INTENT_QUATERNION
  592. - dim[0] = 5
  593. - dim[5] = 4
  594. - datatype should be a floating point type */
  595. #define NIFTI_INTENT_QUATERNION 1010
  596. /*---------------------------------------------------------------------------*/
  597. /* 3D IMAGE (VOLUME) ORIENTATION AND LOCATION IN SPACE:
  598. ---------------------------------------------------
  599. There are 3 different methods by which continuous coordinates can
  600. attached to voxels. The discussion below emphasizes 3D volumes, and
  601. the continuous coordinates are referred to as (x,y,z). The voxel
  602. index coordinates (i.e., the array indexes) are referred to as (i,j,k),
  603. with valid ranges:
  604. i = 0 .. dim[1]-1
  605. j = 0 .. dim[2]-1 (if dim[0] >= 2)
  606. k = 0 .. dim[3]-1 (if dim[0] >= 3)
  607. The (x,y,z) coordinates refer to the CENTER of a voxel. In methods
  608. 2 and 3, the (x,y,z) axes refer to a subject-based coordinate system,
  609. with
  610. +x = Right +y = Anterior +z = Superior.
  611. This is a right-handed coordinate system. However, the exact direction
  612. these axes point with respect to the subject depends on qform_code
  613. (Method 2) and sform_code (Method 3).
  614. N.B.: The i index varies most rapidly, j index next, k index slowest.
  615. Thus, voxel (i,j,k) is stored starting at location
  616. (i + j*dim[1] + k*dim[1]*dim[2]) * (bitpix/8)
  617. into the dataset array.
  618. N.B.: The ANALYZE 7.5 coordinate system is
  619. +x = Left +y = Anterior +z = Superior
  620. which is a left-handed coordinate system. This backwardness is
  621. too difficult to tolerate, so this NIFTI-1 standard specifies the
  622. coordinate order which is most common in functional neuroimaging.
  623. N.B.: The 3 methods below all give the locations of the voxel centers
  624. in the (x,y,z) coordinate system. In many cases, programs will wish
  625. to display image data on some other grid. In such a case, the program
  626. will need to convert its desired (x,y,z) values into (i,j,k) values
  627. in order to extract (or interpolate) the image data. This operation
  628. would be done with the inverse transformation to those described below.
  629. N.B.: Method 2 uses a factor 'qfac' which is either -1 or 1; qfac is
  630. stored in the otherwise unused pixdim[0]. If pixdim[0]=0.0 (which
  631. should not occur), we take qfac=1. Of course, pixdim[0] is only used
  632. when reading a NIFTI-1 header, not when reading an ANALYZE 7.5 header.
  633. N.B.: The units of (x,y,z) can be specified using the xyzt_units field.
  634. METHOD 1 (the "old" way, used only when qform_code = 0):
  635. -------------------------------------------------------
  636. The coordinate mapping from (i,j,k) to (x,y,z) is the ANALYZE
  637. 7.5 way. This is a simple scaling relationship:
  638. x = pixdim[1] * i
  639. y = pixdim[2] * j
  640. z = pixdim[3] * k
  641. No particular spatial orientation is attached to these (x,y,z)
  642. coordinates. (NIFTI-1 does not have the ANALYZE 7.5 orient field,
  643. which is not general and is often not set properly.) This method
  644. is not recommended, and is present mainly for compatibility with
  645. ANALYZE 7.5 files.
  646. METHOD 2 (used when qform_code > 0, which should be the "normal case):
  647. ---------------------------------------------------------------------
  648. The (x,y,z) coordinates are given by the pixdim[] scales, a rotation
  649. matrix, and a shift. This method is intended to represent
  650. "scanner-anatomical" coordinates, which are often embedded in the
  651. image header (e.g., DICOM fields (0020,0032), (0020,0037), (0028,0030),
  652. and (0018,0050)), and represent the nominal orientation and location of
  653. the data. This method can also be used to represent "aligned"
  654. coordinates, which would typically result from some post-acquisition
  655. alignment of the volume to a standard orientation (e.g., the same
  656. subject on another day, or a rigid rotation to true anatomical
  657. orientation from the tilted position of the subject in the scanner).
  658. The formula for (x,y,z) in terms of header parameters and (i,j,k) is:
  659. [ x ] [ R11 R12 R13 ] [ pixdim[1] * i ] [ qoffset_x ]
  660. [ y ] = [ R21 R22 R23 ] [ pixdim[2] * j ] + [ qoffset_y ]
  661. [ z ] [ R31 R32 R33 ] [ qfac * pixdim[3] * k ] [ qoffset_z ]
  662. The qoffset_* shifts are in the NIFTI-1 header. Note that the center
  663. of the (i,j,k)=(0,0,0) voxel (first value in the dataset array) is
  664. just (x,y,z)=(qoffset_x,qoffset_y,qoffset_z).
  665. The rotation matrix R is calculated from the quatern_* parameters.
  666. This calculation is described below.
  667. The scaling factor qfac is either 1 or -1. The rotation matrix R
  668. defined by the quaternion parameters is "proper" (has determinant 1).
  669. This may not fit the needs of the data; for example, if the image
  670. grid is
  671. i increases from Left-to-Right
  672. j increases from Anterior-to-Posterior
  673. k increases from Inferior-to-Superior
  674. Then (i,j,k) is a left-handed triple. In this example, if qfac=1,
  675. the R matrix would have to be
  676. [ 1 0 0 ]
  677. [ 0 -1 0 ] which is "improper" (determinant = -1).
  678. [ 0 0 1 ]
  679. If we set qfac=-1, then the R matrix would be
  680. [ 1 0 0 ]
  681. [ 0 -1 0 ] which is proper.
  682. [ 0 0 -1 ]
  683. This R matrix is represented by quaternion [a,b,c,d] = [0,1,0,0]
  684. (which encodes a 180 degree rotation about the x-axis).
  685. METHOD 3 (used when sform_code > 0):
  686. -----------------------------------
  687. The (x,y,z) coordinates are given by a general affine transformation
  688. of the (i,j,k) indexes:
  689. x = srow_x[0] * i + srow_x[1] * j + srow_x[2] * k + srow_x[3]
  690. y = srow_y[0] * i + srow_y[1] * j + srow_y[2] * k + srow_y[3]
  691. z = srow_z[0] * i + srow_z[1] * j + srow_z[2] * k + srow_z[3]
  692. The srow_* vectors are in the NIFTI_1 header. Note that no use is
  693. made of pixdim[] in this method.
  694. WHY 3 METHODS?
  695. --------------
  696. Method 1 is provided only for backwards compatibility. The intention
  697. is that Method 2 (qform_code > 0) represents the nominal voxel locations
  698. as reported by the scanner, or as rotated to some fiducial orientation and
  699. location. Method 3, if present (sform_code > 0), is to be used to give
  700. the location of the voxels in some standard space. The sform_code
  701. indicates which standard space is present. Both methods 2 and 3 can be
  702. present, and be useful in different contexts (method 2 for displaying the
  703. data on its original grid; method 3 for displaying it on a standard grid).
  704. In this scheme, a dataset would originally be set up so that the
  705. Method 2 coordinates represent what the scanner reported. Later,
  706. a registration to some standard space can be computed and inserted
  707. in the header. Image display software can use either transform,
  708. depending on its purposes and needs.
  709. In Method 2, the origin of coordinates would generally be whatever
  710. the scanner origin is; for example, in MRI, (0,0,0) is the center
  711. of the gradient coil.
  712. In Method 3, the origin of coordinates would depend on the value
  713. of sform_code; for example, for the Talairach coordinate system,
  714. (0,0,0) corresponds to the Anterior Commissure.
  715. QUATERNION REPRESENTATION OF ROTATION MATRIX (METHOD 2)
  716. -------------------------------------------------------
  717. The orientation of the (x,y,z) axes relative to the (i,j,k) axes
  718. in 3D space is specified using a unit quaternion [a,b,c,d], where
  719. a*a+b*b+c*c+d*d=1. The (b,c,d) values are all that is needed, since
  720. we require that a = sqrt(1.0-b*b+c*c+d*d) be nonnegative. The (b,c,d)
  721. values are stored in the (quatern_b,quatern_c,quatern_d) fields.
  722. The quaternion representation is chosen for its compactness in
  723. representing rotations. The (proper) 3x3 rotation matrix that
  724. corresponds to [a,b,c,d] is
  725. [ a*a+b*b-c*c-d*d 2*b*c-2*a*d 2*b*d+2*a*c ]
  726. R = [ 2*b*c+2*a*d a*a+c*c-b*b-d*d 2*c*d-2*a*b ]
  727. [ 2*b*d-2*a*c 2*c*d+2*a*b a*a+d*d-c*c-b*b ]
  728. [ R11 R12 R13 ]
  729. = [ R21 R22 R23 ]
  730. [ R31 R32 R33 ]
  731. If (p,q,r) is a unit 3-vector, then rotation of angle h about that
  732. direction is represented by the quaternion
  733. [a,b,c,d] = [cos(h/2), p*sin(h/2), q*sin(h/2), r*sin(h/2)].
  734. Requiring a >= 0 is equivalent to requiring -Pi <= h <= Pi. (Note that
  735. [-a,-b,-c,-d] represents the same rotation as [a,b,c,d]; there are 2
  736. quaternions that can be used to represent a given rotation matrix R.)
  737. To rotate a 3-vector (x,y,z) using quaternions, we compute the
  738. quaternion product
  739. [0,x',y',z'] = [a,b,c,d] * [0,x,y,z] * [a,-b,-c,-d]
  740. which is equivalent to the matrix-vector multiply
  741. [ x' ] [ x ]
  742. [ y' ] = R [ y ] (equivalence depends on a*a+b*b+c*c+d*d=1)
  743. [ z' ] [ z ]
  744. Multiplication of 2 quaternions is defined by the following:
  745. [a,b,c,d] = a*1 + b*I + c*J + d*K
  746. where
  747. I*I = J*J = K*K = -1 (I,J,K are square roots of -1)
  748. I*J = K J*K = I K*I = J
  749. J*I = -K K*J = -I I*K = -J (not commutative!)
  750. For example
  751. [a,b,0,0] * [0,0,0,1] = [0,-b,0,a]
  752. since this expands to
  753. (a+b*I)*(K) = (a*K+b*I*K) = (a*K-b*J).
  754. The above formula shows how to go from quaternion (b,c,d) to
  755. rotation matrix and direction cosines. Conversely, given R,
  756. we can compute the fields for the NIFTI-1 header by
  757. a = 0.5 * sqrt(1+R11+R22+R33) (not stored)
  758. b = 0.25 * (R32-R23) / a => quatern_b
  759. c = 0.25 * (R13-R31) / a => quatern_c
  760. d = 0.25 * (R21-R12) / a => quatern_d
  761. If a=0 (a 180 degree rotation), alternative formulas are needed.
  762. See the nifti1_io.c function mat44_to_quatern() for an implementation
  763. of the various cases in converting R to [a,b,c,d].
  764. Note that R-transpose (= R-inverse) would lead to the quaternion
  765. [a,-b,-c,-d].
  766. The choice to specify the qoffset_x (etc.) values in the final
  767. coordinate system is partly to make it easy to convert DICOM images to
  768. this format. The DICOM attribute "Image Position (Patient)" (0020,0032)
  769. stores the (Xd,Yd,Zd) coordinates of the center of the first voxel.
  770. Here, (Xd,Yd,Zd) refer to DICOM coordinates, and Xd=-x, Yd=-y, Zd=z,
  771. where (x,y,z) refers to the NIFTI coordinate system discussed above.
  772. (i.e., DICOM +Xd is Left, +Yd is Posterior, +Zd is Superior,
  773. whereas +x is Right, +y is Anterior , +z is Superior. )
  774. Thus, if the (0020,0032) DICOM attribute is extracted into (px,py,pz), then
  775. qoffset_x = -px qoffset_y = -py qoffset_z = pz
  776. is a reasonable setting when qform_code=NIFTI_XFORM_SCANNER_ANAT.
  777. That is, DICOM's coordinate system is 180 degrees rotated about the z-axis
  778. from the neuroscience/NIFTI coordinate system. To transform between DICOM
  779. and NIFTI, you just have to negate the x- and y-coordinates.
  780. The DICOM attribute (0020,0037) "Image Orientation (Patient)" gives the
  781. orientation of the x- and y-axes of the image data in terms of 2 3-vectors.
  782. The first vector is a unit vector along the x-axis, and the second is
  783. along the y-axis. If the (0020,0037) attribute is extracted into the
  784. value (xa,xb,xc,ya,yb,yc), then the first two columns of the R matrix
  785. would be
  786. [ -xa -ya ]
  787. [ -xb -yb ]
  788. [ xc yc ]
  789. The negations are because DICOM's x- and y-axes are reversed relative
  790. to NIFTI's. The third column of the R matrix gives the direction of
  791. displacement (relative to the subject) along the slice-wise direction.
  792. This orientation is not encoded in the DICOM standard in a simple way;
  793. DICOM is mostly concerned with 2D images. The third column of R will be
  794. either the cross-product of the first 2 columns or its negative. It is
  795. possible to infer the sign of the 3rd column by examining the coordinates
  796. in DICOM attribute (0020,0032) "Image Position (Patient)" for successive
  797. slices. However, this method occasionally fails for reasons that I
  798. (RW Cox) do not understand.
  799. -----------------------------------------------------------------------------*/
  800. /* [qs]form_code value: */ /* x,y,z coordinate system refers to: */
  801. /*-----------------------*/ /*---------------------------------------*/
  802. /*! Arbitrary coordinates (Method 1). */
  803. #define NIFTI_XFORM_UNKNOWN 0
  804. /*! Scanner-based anatomical coordinates */
  805. #define NIFTI_XFORM_SCANNER_ANAT 1
  806. /*! Coordinates aligned to another file's,
  807. or to anatomical "truth". */
  808. #define NIFTI_XFORM_ALIGNED_ANAT 2
  809. /*! Coordinates aligned to Talairach-
  810. Tournoux Atlas; (0,0,0)=AC, etc. */
  811. #define NIFTI_XFORM_TALAIRACH 3
  812. /*! MNI 152 normalized coordinates. */
  813. #define NIFTI_XFORM_MNI_152 4
  814. /*---------------------------------------------------------------------------*/
  815. /* UNITS OF SPATIAL AND TEMPORAL DIMENSIONS:
  816. ----------------------------------------
  817. The codes below can be used in xyzt_units to indicate the units of pixdim.
  818. As noted earlier, dimensions 1,2,3 are for x,y,z; dimension 4 is for
  819. time (t).
  820. - If dim[4]=1 or dim[0] < 4, there is no time axis.
  821. - A single time series (no space) would be specified with
  822. - dim[0] = 4 (for scalar data) or dim[0] = 5 (for vector data)
  823. - dim[1] = dim[2] = dim[3] = 1
  824. - dim[4] = number of time points
  825. - pixdim[4] = time step
  826. - xyzt_units indicates units of pixdim[4]
  827. - dim[5] = number of values stored at each time point
  828. Bits 0..2 of xyzt_units specify the units of pixdim[1..3]
  829. (e.g., spatial units are values 1..7).
  830. Bits 3..5 of xyzt_units specify the units of pixdim[4]
  831. (e.g., temporal units are multiples of 8).
  832. This compression of 2 distinct concepts into 1 byte is due to the
  833. limited space available in the 348 byte ANALYZE 7.5 header. The
  834. macros XYZT_TO_SPACE and XYZT_TO_TIME can be used to mask off the
  835. undesired bits from the xyzt_units fields, leaving "pure" space
  836. and time codes. Inversely, the macro SPACE_TIME_TO_XYZT can be
  837. used to assemble a space code (0,1,2,...,7) with a time code
  838. (0,8,16,32,...,56) into the combined value for xyzt_units.
  839. Note that codes are provided to indicate the "time" axis units are
  840. actually frequency in Hertz (_HZ) or in part-per-million (_PPM).
  841. The toffset field can be used to indicate a nonzero start point for
  842. the time axis. That is, time point #m is at t=toffset+m*pixdim[4]
  843. for m=0..dim[4]-1.
  844. -----------------------------------------------------------------------------*/
  845. /*! NIFTI code for unspecified units. */
  846. #define NIFTI_UNITS_UNKNOWN 0
  847. /** Space codes are multiples of 1. **/
  848. /*! NIFTI code for meters. */
  849. #define NIFTI_UNITS_METER 1
  850. /*! NIFTI code for millimeters. */
  851. #define NIFTI_UNITS_MM 2
  852. /*! NIFTI code for micrometers. */
  853. #define NIFTI_UNITS_MICRON 3
  854. /** Time codes are multiples of 8. **/
  855. /*! NIFTI code for seconds. */
  856. #define NIFTI_UNITS_SEC 8
  857. /*! NIFTI code for milliseconds. */
  858. #define NIFTI_UNITS_MSEC 16
  859. /*! NIFTI code for microseconds. */
  860. #define NIFTI_UNITS_USEC 24
  861. /*** These units are for spectral data: ***/
  862. /*! NIFTI code for Hertz. */
  863. #define NIFTI_UNITS_HZ 32
  864. /*! NIFTI code for ppm. */
  865. #define NIFTI_UNITS_PPM 40
  866. #undef XYZT_TO_SPACE
  867. #undef XYZT_TO_TIME
  868. #define XYZT_TO_SPACE(xyzt) ( (xyzt) & 0x07 )
  869. #define XYZT_TO_TIME(xyzt) ( (xyzt) & 0x38 )
  870. #undef SPACE_TIME_TO_XYZT
  871. #define SPACE_TIME_TO_XYZT(ss,tt) ( (((char)(ss)) & 0x07) \
  872. | (((char)(tt)) & 0x38) )
  873. /*---------------------------------------------------------------------------*/
  874. /* MRI-SPECIFIC SPATIAL AND TEMPORAL INFORMATION:
  875. ---------------------------------------------
  876. A few fields are provided to store some extra information
  877. that is sometimes important when storing the image data
  878. from an FMRI time series experiment. (After processing such
  879. data into statistical images, these fields are not likely
  880. to be useful.)
  881. { freq_dim } = These fields encode which spatial dimension (1,2, or 3)
  882. { phase_dim } = corresponds to which acquisition dimension for MRI data.
  883. { slice_dim } =
  884. Examples:
  885. Rectangular scan multi-slice EPI:
  886. freq_dim = 1 phase_dim = 2 slice_dim = 3 (or some permutation)
  887. Spiral scan multi-slice EPI:
  888. freq_dim = phase_dim = 0 slice_dim = 3
  889. since the concepts of frequency- and phase-encoding directions
  890. don't apply to spiral scan
  891. slice_duration = If this is positive, AND if slice_dim is nonzero,
  892. indicates the amount of time used to acquire 1 slice.
  893. slice_duration*dim[slice_dim] can be less than pixdim[4]
  894. with a clustered acquisition method, for example.
  895. slice_code = If this is nonzero, AND if slice_dim is nonzero, AND
  896. if slice_duration is positive, indicates the timing
  897. pattern of the slice acquisition. The following codes
  898. are defined:
  899. NIFTI_SLICE_SEQ_INC
  900. NIFTI_SLICE_SEQ_DEC
  901. NIFTI_SLICE_ALT_INC
  902. NIFTI_SLICE_ALT_DEC
  903. { slice_start } = Indicates the start and end of the slice acquisition
  904. { slice_end } = pattern, when slice_code is nonzero. These values
  905. are present to allow for the possible addition of
  906. "padded" slices at either end of the volume, which
  907. don't fit into the slice timing pattern. If there
  908. are no padding slices, then slice_start=0 and
  909. slice_end=dim[slice_dim]-1 are the correct values.
  910. For these values to be meaningful, slice_start must
  911. be non-negative and slice_end must be greater than
  912. slice_start.
  913. The following table indicates the slice timing pattern, relative to
  914. time=0 for the first slice acquired, for some sample cases. Here,
  915. dim[slice_dim]=7 (there are 7 slices, labeled 0..6), slice_duration=0.1,
  916. and slice_start=1, slice_end=5 (1 padded slice on each end).
  917. slice
  918. index SEQ_INC SEQ_DEC ALT_INC ALT_DEC
  919. 6 -- n/a n/a n/a n/a n/a = not applicable
  920. 5 -- 0.4 0.0 0.2 0.0 (slice time offset
  921. 4 -- 0.3 0.1 0.4 0.3 doesn't apply to
  922. 3 -- 0.2 0.2 0.1 0.1 slices outside range
  923. 2 -- 0.1 0.3 0.3 0.4 slice_start..slice_end)
  924. 1 -- 0.0 0.4 0.0 0.2
  925. 0 -- n/a n/a n/a n/a
  926. The fields freq_dim, phase_dim, slice_dim are all squished into the single
  927. byte field dim_info (2 bits each, since the values for each field are
  928. limited to the range 0..3). This unpleasantness is due to lack of space
  929. in the 348 byte allowance.
  930. The macros DIM_INFO_TO_FREQ_DIM, DIM_INFO_TO_PHASE_DIM, and
  931. DIM_INFO_TO_SLICE_DIM can be used to extract these values from the
  932. dim_info byte.
  933. The macro FPS_INTO_DIM_INFO can be used to put these 3 values
  934. into the dim_info byte.
  935. -----------------------------------------------------------------------------*/
  936. #undef DIM_INFO_TO_FREQ_DIM
  937. #undef DIM_INFO_TO_PHASE_DIM
  938. #undef DIM_INFO_TO_SLICE_DIM
  939. #define DIM_INFO_TO_FREQ_DIM(di) ( ((di) ) & 0x03 )
  940. #define DIM_INFO_TO_PHASE_DIM(di) ( ((di) >> 2) & 0x03 )
  941. #define DIM_INFO_TO_SLICE_DIM(di) ( ((di) >> 4) & 0x03 )
  942. #undef FPS_INTO_DIM_INFO
  943. #define FPS_INTO_DIM_INFO(fd,pd,sd) ( ( ( ((char)(fd)) & 0x03) ) | \
  944. ( ( ((char)(pd)) & 0x03) << 2 ) | \
  945. ( ( ((char)(sd)) & 0x03) << 4 ) )
  946. #define NIFTI_SLICE_SEQ_INC 1
  947. #define NIFTI_SLICE_SEQ_DEC 2
  948. #define NIFTI_SLICE_ALT_INC 3
  949. #define NIFTI_SLICE_ALT_DEC 4
  950. /*---------------------------------------------------------------------------*/
  951. /* UNUSED FIELDS:
  952. -------------
  953. Some of the ANALYZE 7.5 fields marked as ++UNUSED++ may need to be set
  954. to particular values for compatibility with other programs. The issue
  955. of interoperability of ANALYZE 7.5 files is a murky one -- not all
  956. programs require exactly the same set of fields. (Unobscuring this
  957. murkiness is a principal motivation behind NIFTI-1.)
  958. Some of the fields that may need to be set for other (non-NIFTI aware)
  959. software to be happy are:
  960. extents dbh.h says this should be 16384
  961. regular dbh.h says this should be the character 'r'
  962. glmin, } dbh.h says these values should be the min and max voxel
  963. glmax } values for the entire dataset
  964. It is best to initialize ALL fields in the NIFTI-1 header to 0
  965. (e.g., with calloc()), then fill in what is needed.
  966. -----------------------------------------------------------------------------*/
  967. /*---------------------------------------------------------------------------*/
  968. /* MISCELLANEOUS C MACROS
  969. -----------------------------------------------------------------------------*/
  970. /*.................*/
  971. /*! Given a nifti_1_header struct, check if it has a good magic number.
  972. Returns NIFTI version number (1..9) if magic is good, 0 if it is not. */
  973. #define NIFTI_VERSION(h) \
  974. ( ( (h).magic[0]=='n' && (h).magic[3]=='\0' && \
  975. ( (h).magic[1]=='i' || (h).magic[1]=='+' ) && \
  976. ( (h).magic[2]>='1' && (h).magic[2]<='9' ) ) \
  977. ? (h).magic[2]-'0' : 0 )
  978. /*.................*/
  979. /*! Check if a nifti_1_header struct says if the data is stored in the
  980. same file or in a separate file. Returns 1 if the data is in the same
  981. file as the header, 0 if it is not. */
  982. #define NIFTI_ONEFILE(h) ( (h).magic[1] == '+' )
  983. /*.................*/
  984. /*! Check if a nifti_1_header struct needs to be byte swapped.
  985. Returns 1 if it needs to be swapped, 0 if it does not. */
  986. #define NIFTI_NEEDS_SWAP(h) ( (h).dim[0] < 0 || (h).dim[0] > 7 )
  987. /*.................*/
  988. /*! Check if a nifti_1_header struct contains a 5th (vector) dimension.
  989. Returns size of 5th dimension if > 1, returns 0 otherwise. */
  990. #define NIFTI_5TH_DIM(h) ( ((h).dim[0]>4 && (h).dim[5]>1) ? (h).dim[5] : 0 )
  991. /*****************************************************************************/
  992. /*=================*/
  993. #ifdef __cplusplus
  994. }
  995. #endif
  996. /*=================*/
  997. #endif /* _NIFTI_HEADER_ */

nifti1.h at commit 35b5664, under MIT · at the source

Overview

Authors: Asa Farahani1, Zhen-Qi Liu1, Filip Morys1, Roqaie Moqadam2,3, Yashar Zeighami3, Mahsa Dadar3, Alain Dagher1, Bratislav Misic1
  1. Montréal Neurological Institute, McGill University, Montréal, Québec, Canada
  2. Department of Medicine, University of Montréal, Montréal, Québec, Canada
  3. Douglas Mental Health Institute, McGill University, Montréal, Québec, Canada
Journal: PLoS biology, volume 24, issue 6, article e3003856
Dates: received 20 November 2025; accepted 1 June 2026; published online 15 June 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1371/journal.pbio.3003856 · PMID 42296166 · PMCID PMC13293518 · OpenAlex W7164860068
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: structural MRI / diffusion (modality), human (organism), clinical / translational (subfield)
Methods: Connectivity, Statistics, Machine learning, Preprocessing, fMRI & imaging, Smoothing, state filtering, decompositions
MeSH: Aging*, Brain*, Adult, Aged, Biomarkers, Blood Pressure, Body Mass Index, Connectome, Female, Humans, Magnetic Resonance Imaging, Male, Middle Aged, Neuroimaging, UK Biobank (* major topic)
Journal subjects: Biology and Life Sciences, Biochemistry, Biomarkers, Anatomy, Nervous System, Central Nervous System, Medicine and Health Sciences, Body Fluids, Blood, Physiology, Research and Analysis Methods, Imaging Techniques, Neuroimaging, Neuroscience, Brain Mapping, Physical Sciences, Mathematics, Probability Theory, Random Variables, Covariance, Metabolism, Carbohydrate Metabolism, Glucose Metabolism, Cognitive Science, Cognitive Neuroscience, Cognitive Neurology, Cognitive Impairment, Neurology
Topic: Functional Brain Connectivity Studies (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Funding: Molson Foundation (-); NSERC (RGPIN-2017-04265); Canadian Institutes of Health Research (PJT-180439); Brain Canada Foundation Future Leaders Fund; Canada Research Chairs (CRC-2022-00169); Michael J. Fox Foundation for Parkinson’s Research (MJFF-021133); Healthy Brains for Healthy Lives initiative
Citations: not cited yet (Europe PMC); 260 references in the paper

Abstract

The brain and body undergo coordinated changes throughout the life span, yet studies of aging have traditionally examined these systems as separate entities. Here we ask how brain health relates to aging and peripheral biomarkers of metabolic and vascular function, including body mass index, blood pressure, and blood biochemistry. We use multivariate pattern learning to identify generalizable patterns of covariance between multi-modal neuroimaging data (structural, functional, diffusion, and arterial spin labeling MRI), demographic, and physiological markers in two large-scale deeply phenotyped datasets: the Human Connectome Project–Aging and UK Biobank. This data-driven approach isolates two principal axes of brain–body associations in both biological sexes. The first axis is driven by the dominant contribution of age. Across multiple brain measures, aging is associated with loss of brain structural integrity and cerebral vascular dysfunction. The second axis is driven by metabolic features, characterized by low high-density lipoprotein cholesterol, elevated body mass index, blood pressure, glycosylated hemoglobin, insulin, glucose, and alanine aminotransferase that predominantly converge on reduced cerebral perfusion. Importantly, the aging and the metabolic axes are independent of each other, meaning that age and metabolic dysfunction have separable influences on the brain. Finally, we show that deviations from a healthy metabolic profile are linked to cognitive deficits, particularly in females. Our study contributes to development of comprehensive translatable biomarkers for brain health assessment, and highlights the importance of metabolic health as a determinant of brain health in aging population.

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

netneurolab/Farahani_Age_Metabolism

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 8c9515f1bb89510a0f33f33415cef0a56a5606f3, 22 July 2026
Languages: Python (58)
Size: 283 files, 58 scripts
Software Heritage: not archived
Found in: the text, “Materials and methods”
Holds: README
Not found: license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: NumPy (53 files), Matplotlib (37 files), pandas (37 files), SciPy (28 files), seaborn (13 files), statsmodels (13 files), NiBabel (8 files), neuromaps (6 files), scikit-learn (6 files), netneurotools (5 files), rpy2 (4 files), FSL (2 files)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
59 files

Zenodo 20412555

License: CC-BY-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Size: 1 file
Software Heritage: not checked
Found in: “Data Availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)

physimals/HCP-asl

License: Apache-2.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: dc67506f65c337a883bbcc0a6c66f9cd0dfbd887, 2 October 2025
Languages: Python (23), Shell (5)
Size: 37 files, 28 scripts
Software Heritage: not archived
Found in: the text, “HCP–A: Brain imaging acquisition”
Holds: README, license file, environment (requirements.txt, setup.py)
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: NumPy (13 files), NiBabel (11 files), FSL (10 files), SciPy (4 files), Connectome Workbench (4 files), HCP Pipelines (3 files), FreeSurfer (1 file), Matplotlib (1 file), pandas (1 file), scikit-learn (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
30 files

thomasyeolab/cbig

License: MIT
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 35b5664bec8822e2f77da5e090e96f91d0095be6, 31 August 2026
Languages: MATLAB (2100), Shell (651), Python (571), C (113), C++ (65), C/C++ (62), R (25), Jupyter (5)
Size: 9,187 files, 3,592 scripts
Software Heritage: not archived
Found in: the text, “Datasets and code”
Holds: README, license file, environment (external_packages/python/mapalign-master/requirements.txt, external_packages/python/mapalign-master/setup.py, external_packages/python/yapf-master/setup.cfg, external_packages/python/yapf-master/setup.py), tests, documentation, 2 notebooks
Not found: CITATION.cff, continuous integration
Tools: NumPy (130 files), PyTorch (122 files), FreeSurfer (93 files), SciPy (61 files), FieldTrip (60 files), Statistics and Machine Learning Toolbox (50 files), FSL (44 files), SPM (40 files), GIfTI library for MATLAB (10 files), Image Processing Toolbox (8 files), Connectome Workbench (8 files), scikit-learn (5 files), AFNI (2 files), Matplotlib (2 files), Tools for NIfTI and ANALYZE image (MATLAB) (2 files), ANTs (1 file), NiBabel (1 file), Nilearn (1 file), tedana (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
2,000 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:

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

Due to the Human Connectome Project-Aging (HCP-A) and UK Biobank data sharing policy, the data used in this study could not be shared though authors of this paper. The HCP-A data are accessible through https://www.humanconnectome.org/study/hcp-lifespan-aging. The UK Biobank data are accessible through https://www.ukbiobank.ac.uk. All code used to perform the analyses and data underlying the main figures are available on GitHub at https://github.com/netneurolab/Farahani_Age_Metabolism and on Zenodo at https://zenodo.org/records/20412555 (DOI: 10.5281/zenodo.20412555 (https://doi.org/10.5281/zenodo.20412555)). The processed numerical data underlying the graphs presented in the figures are also available on GitHub and Zenodo.

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, 8 authors, 15 MeSH terms, 7 funders, 253 references.

Cite

This paper

Farahani, A., Liu, Z.-Q., Morys, F., Moqadam, R., Zeighami, Y., Dadar, M., Dagher, A., & Misic, B. (2026). Aging and metabolism contribute separately to brain-body health. PLoS biology, 24(6), e3003856. https://doi.org/10.1371/journal.pbio.3003856

BibTeX

@article{farahani2026aging,
author = {Farahani, Asa and Liu, Zhen-Qi and Morys, Filip and Moqadam, Roqaie and Zeighami, Yashar and Dadar, Mahsa and Dagher, Alain and Misic, Bratislav},
title = {{Aging and metabolism contribute separately to brain-body health}},
journal = {PLoS biology},
year = {2026},
month = jun,
volume = {24},
number = {6},
pages = {e3003856},
publisher = {PLOS},
issn = {1544-9173},
doi = {10.1371/journal.pbio.3003856},
url = {https://doi.org/10.1371/journal.pbio.3003856},
pmid = {42296166},
pmcid = {PMC13293518}
}

RIS

TY - JOUR
AU - Farahani, Asa
AU - Liu, Zhen-Qi
AU - Morys, Filip
AU - Moqadam, Roqaie
AU - Zeighami, Yashar
AU - Dadar, Mahsa
AU - Dagher, Alain
AU - Misic, Bratislav
TI - Aging and metabolism contribute separately to brain-body health
T2 - PLoS biology
J2 - PLoS Biol
PY - 2026
DA - 2026/06/15
VL - 24
IS - 6
SP - e3003856
SN - 1544-9173
PB - PLOS
DO - 10.1371/journal.pbio.3003856
UR - https://doi.org/10.1371/journal.pbio.3003856
LA - en
ER -

CSL-JSON

{
"id": "10.1371/journal.pbio.3003856",
"type": "article-journal",
"title": "Aging and metabolism contribute separately to brain-body health",
"container-title": "PLoS biology",
"author": [
{
"family": "Farahani",
"given": "Asa"
},
{
"family": "Liu",
"given": "Zhen-Qi"
},
{
"family": "Morys",
"given": "Filip"
},
{
"family": "Moqadam",
"given": "Roqaie"
},
{
"family": "Zeighami",
"given": "Yashar"
},
{
"family": "Dadar",
"given": "Mahsa"
},
{
"family": "Dagher",
"given": "Alain"
},
{
"family": "Misic",
"given": "Bratislav"
}
],
"container-title-short": "PLoS Biol",
"volume": "24",
"issue": "6",
"page": "e3003856",
"DOI": "10.1371/journal.pbio.3003856",
"PMID": "42296166",
"PMCID": "PMC13293518",
"ISSN": "1544-9173",
"publisher": "PLOS",
"URL": "https://doi.org/10.1371/journal.pbio.3003856",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
15
]
]
}
}

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.1016/j.xcrm.2026.102943 [code]
Parent-of-origin effects in Alzheimer's liability dissociate neurocognitive and cardiovascular traits in at-risk individuals.
Journal: Cell reports. Medicine
In common: tedana, Connectome Workbench, AFNI, 18 other tools, clinical / translational, 5 references
[2] doi:10.1038/s41398-026-04025-2 [code]
Brain energetic landscapes shape state dysregulation in major depressive disorder: a morphological network controllability perspective.
Journal: Translational psychiatry
In common: tedana, neuromaps, Connectome Workbench, 19 other tools, 2 references
[3] doi:10.1038/s41467-026-73668-y [code]
Convergent and divergent brain-cognition development in early adolescence.
Journal: Nature communications
In common: tedana, Connectome Workbench, AFNI, 18 other tools, 3 references
[4] doi:10.1038/s41467-026-76452-0 [code]
Music evokes shared neural representations of imagined narratives across sensory modalities.
Journal: Nature communications
In common: tedana, Connectome Workbench, AFNI, 19 other tools, 2 references
[5] doi:10.1126/sciadv.adu9309 [code]
Variations of global brain asymmetry are associated with aging and related diseases.
Journal: Science advances
In common: tedana, Connectome Workbench, AFNI, 16 other tools, 3 references
[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: tedana, Connectome Workbench, AFNI, 16 other tools, 3 references
[7] doi:10.1162/imag.a.1222 [code]
Network-based near-scalp personalized brain stimulation targets.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: tedana, Connectome Workbench, AFNI, 16 other tools, 2 references
[8] 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: tedana, Connectome Workbench, AFNI, 16 other tools, 2 references
[9] doi:10.1038/s41467-026-71270-w [code]
Spatiotemporal dynamics of the human cortical functional hierarchy across the lifespan.
Journal: Nature communications
In common: HCP Pipelines, Connectome Workbench, GIfTI library for MATLAB, 11 other tools, 8 references
[10] doi:10.1038/s41586-026-10631-3 [code]
A prognostic human brain network for diffuse midline glioma.
Journal: Nature
In common: neuromaps, GIfTI library for MATLAB, Tools for NIfTI and ANALYZE image (MATLAB), 15 other tools, clinical / translational, 4 references

Contribute

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

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

Request its removal

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

Discussion, reproductions, activity

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

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

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