Reconcile QSIPrep's Schaefer 4S labels with those of AtlasPack

Summary of what happened:

I’m performing a multimodal analysis that includes both fMRI and DTI scans. I’m using fMRIPrep and QSIPrep for the respective modalities. While not imperative, it would be nice if the parcellations of both modalities were identical. I read that QSIPrep reconstruction uses atlases from AtlasPack (GitHub - PennLINC/AtlasPack: Combined cortical/subcortical atlases for xcp-d and qsiprep). So I used fMRIPrep for the fMRI scans, requesting a cifti output in the fsLR space, and then parcellated the results using AtlasPack’s tpl-fsLR_atlas-4S456Parcels_den-91k_dseg.dlabel.nii. On the DTI side, after construction of the connectomes via qsiprep --recon-only, I fish out schaefer400.sift.radius2.count.connectivity along with
schaefer400.region.ids and schaefer400.region.labels from sub-*_ses-01_run-01_space-T1w_desc-preproc_connectivity.mat to produce my specific connectome of interest.

While the labeling between the AtlasPack and QSIPrep largely matches, there are some discrepancies. I have some questions about reconciling QSIPrep’s labels to match those of AtlasPack. (See Atlas agreement between qsiprep and xcp_d for a related discussion.)

I’m assuming that the underlying physical parcels are identical between the two (save for amygdala and hippocampus, which are only present in AtlasPack), and that only the label names differ. Here are the modifications the the QSIPrep labels I’ve made so far, with increasing levels of uncertainty, in order to reconcile them to the AtlasPack names:

  • removed the CIT168Subcortical and Thalamus prefixes
  • replaced Cerebellum with Cerebellar
  • moved trailing lr and rh to the beginning of the label where applicable
  • replaced FrOper with FrOperIns
  • replaced PCC with pCunPCC
  • replaced PFCm with PFCdPFCm

If I paste AtlasPack indices and labels side-by-side with the QSIPrep indices and the updated labels (with making the adjustments noted above), and then eliminate rows where the AtlasPack labels do match the updated QSIPrep labels, we get the following labels that do not match:

AtlasPack_index QSIPrep_index AtlasPack_label QSIPrep_label_updated QSIPrep_label match
134 134 LH_Cont_OFC_1 LH_Cont_PFCl_1 LH_Cont_PFCl_1 FALSE
135 135 LH_Cont_PFCl_1 LH_Cont_PFCl_2 LH_Cont_PFCl_2 FALSE
136 136 LH_Cont_PFCl_2 LH_Cont_PFCl_3 LH_Cont_PFCl_3 FALSE
137 137 LH_Cont_PFCl_3 LH_Cont_PFCl_4 LH_Cont_PFCl_4 FALSE
138 138 LH_Cont_PFCl_4 LH_Cont_PFCl_5 LH_Cont_PFCl_5 FALSE
139 139 LH_Cont_PFCl_5 LH_Cont_PFCl_6 LH_Cont_PFCl_6 FALSE
140 140 LH_Cont_PFCl_6 LH_Cont_PFCl_7 LH_Cont_PFCl_7 FALSE
141 141 LH_Cont_PFCl_7 LH_Cont_PFCl_8 LH_Cont_PFCl_8 FALSE
142 142 LH_Cont_PFCl_8 LH_Cont_PFCl_9 LH_Cont_PFCl_9 FALSE
159 159 LH_Default_Par_1 LH_Default_Temp_11 LH_Default_Temp_11 FALSE
160 160 LH_Default_Par_2 LH_Default_Temp_12 LH_Default_Temp_12 FALSE
161 161 LH_Default_Par_3 LH_Default_Temp_13 LH_Default_Temp_13 FALSE
162 162 LH_Default_Par_4 LH_Default_Temp_14 LH_Default_Temp_14 FALSE
163 163 LH_Default_Par_5 LH_Default_Temp_15 LH_Default_Temp_15 FALSE
164 164 LH_Default_Par_6 LH_Default_Temp_16 LH_Default_Temp_16 FALSE
165 165 LH_Default_Par_7 LH_Default_Temp_17 LH_Default_Temp_17 FALSE
401 402 LH-Pu RH-Pu CIT168Subcortical_Pu_rh FALSE
402 403 LH-Ca RH-Ca CIT168Subcortical_Ca_rh FALSE
403 404 LH-NAC RH-NAC CIT168Subcortical_NAC_rh FALSE
404 405 LH-EXA RH-EXA CIT168Subcortical_EXA_rh FALSE
405 406 LH-GPe RH-GPe CIT168Subcortical_GPe_rh FALSE
406 407 LH-GPi RH-GPi CIT168Subcortical_GPi_rh FALSE
407 408 LH-SNc_PBP_VTA RH-SNc_PBP_VTA CIT168Subcortical_SNc_CIT168Subcortical_PBP_CIT168Subcortical_VTA_rh FALSE
408 409 LH-RN RH-RN CIT168Subcortical_RN_rh FALSE
409 410 LH-SNr RH-SNr CIT168Subcortical_SNr_rh FALSE
410 411 LH-VeP RH-VeP CIT168Subcortical_VeP_rh FALSE
411 412 LH-HN RH-HN CIT168Subcortical_HN_rh FALSE
412 413 LH-HTH RH-HTH CIT168Subcortical_HTH_rh FALSE
413 414 LH-MN RH-MN CIT168Subcortical_MN_rh FALSE
414 415 LH-STH RH-STH CIT168Subcortical_STH_rh FALSE
415 416 RH-Pu LH-Pu CIT168Subcortical_Pu_lh FALSE
416 417 RH-Ca LH-Ca CIT168Subcortical_Ca_lh FALSE
417 418 RH-NAC LH-NAC CIT168Subcortical_NAC_lh FALSE
418 419 RH-EXA LH-EXA CIT168Subcortical_EXA_lh FALSE
419 420 RH-GPe LH-GPe CIT168Subcortical_GPe_lh FALSE
420 421 RH-GPi LH-GPi CIT168Subcortical_GPi_lh FALSE
421 422 RH-SNc_PBP_VTA LH-SNc_PBP_VTA CIT168Subcortical_SNc_CIT168Subcortical_PBP_CIT168Subcortical_VTA_lh FALSE
422 423 RH-RN LH-RN CIT168Subcortical_RN_lh FALSE
423 424 RH-SNr LH-SNr CIT168Subcortical_SNr_lh FALSE
424 425 RH-VeP LH-VeP CIT168Subcortical_VeP_lh FALSE
425 426 RH-HN LH-HN CIT168Subcortical_HN_lh FALSE
426 427 RH-HTH LH-HTH CIT168Subcortical_HTH_lh FALSE
427 428 RH-MN LH-MN CIT168Subcortical_MN_lh FALSE
428 429 RH-STH LH-STH CIT168Subcortical_STH_lh FALSE

There are a total of 44 labels that do not match. The unmatched labels fall into three blocks:

    1. AtlasPack Indices 134–142: If we match by order, QSIPrep’s LH_Cont_PFCl_1 becomes
      LH_Cont_OFC_1, and the remaining LH_Cont_PFCl from _2 to _9 get shifted to LH_Cont_PFCl from _1 to _8. The alternative would be to match by name, leaving an unmatched LH_Cont_OFC_1 in AtlasPack to link with QSIPrep’s LH_PFCl_9?
    1. AtlasPack indices 159–165: It looks as if QSIPrep’s LH_Default_Temp from _11 to _17 should be renamed as LH_Default_Par from _1 to _7. There is no such discrepancy on the right hand hemisphere, where there is a mix of five RH_Default_Par and eight RH_Default_Temp regions. In contrast, there are no LH_Default_Par labels in QSIPrep’s list of labels; only seventeen LH_Default_Temp ones.
    1. AtlasPack indices 401–428: the ordering of the subcortical ROIs differs from AtlasPack and QSIPrep. In AtlasPack, the left-hand structures come first, followed by the right-hand structures. For QSIPrep, the ordering of the hemispheres are reversed: right-hand first, then left-hand. Should I trust the label names? Or assume that the ordering matches AtlasPack and match them up that way? Also, note that starting after AtlasPack index 400 (the end of the Schaefer cortical regions), there is a difference of one between AtlasPack indices and those of QSIPrep. It turns out that the QSIPrep indices jump from 400 to 402.

In summary, I’m not certain how to correctly reconcile the labels between the two packages, or what might have led to the discrepancies. Any insight you might have would be much appreciated.

Thank you!

  • Daniel

Command used (and if a helper script was used, a link to the helper script or the command generated):

PASTE CODE HERE

Version:

qsiprep 0.22.0

Environment (Docker, Singularity / Apptainer, custom installation):

Data formatted according to a validatable standard? Please provide the output of the validator:

PASTE VALIDATOR OUTPUT HERE

Relevant log outputs (up to 20 lines):

PASTE LOG OUTPUT HERE

Screenshots / relevant information:


Following up: I extracted from the singularity container the 400 parcel Schaefer voxel-wise dseg file used in QSIPrep reconstruction: tpl-MNI152NLin2009cAsym_res-01_atlasSchaefer2018Ext_desc-400Parcels7NetworksLPS_dseg.nii.gz in directory /atlas/qsirecon_atlases.

Regarding Point 3 (from above) concerning the different ordering of left and right hemisphere subcortical ROIs between AtlasPack and QSIPrep: examining the atlas, the difference in order is indeed real (the block of right subcortical labels comes first, then the left in the QSIPrep version of the atlas). In other words, the labeling for the CIT168 subcortical features in schaefer400.region.labels is correct.

Regarding Point 2 (from above) concerning the missing LH_Default_Par labels in the QSIPrep atlas. Working from the inferior slices and working my way up in the axial view from temporal lobe up through parietal, I found that right hemisphere analogs of LH_Default_Temp_11LH_Default_Temp_17 have labels starting with RH_Default_Par. Given this observation along with the facts that 1) there are no LH_Default_Par labels in the QSIPrep atlas labels at all; and 2) the labels from AtlasPack (and associated indices) for LH_Default_Par do seem to match the actual geometry of the atlas, I feel moderately confident in replacing LH_Default_Temp_11LH_Default_Temp_17 in the QSIPrep labels with LH_Default_Par_1LH_Default_Par_7, as indicated by the AtlasPack labels.

Regarding Point 1 (from above) concerning the lack of AtlasPack’s LH_Cont_OFC_1 in the QSIPrep labels, I’m not quite certain how to proceed. There is not right handed version, i.e. RH_Cont_OFC_1 in the AtlasPack to compare it with to help confirm the labeling. However, I see in the Schaefer site that in 2019, LH_Cont_PFCl_2LH_Cont_PFCl_9 were renamed to LH_Cont_PFCl_1LH_Cont_PFCl_8, I’m assuming to relabel the original LH_Cont_PFCl_1 as LH_Cont_OFC_1 based on the AtlasPack labels. So again, moderately confident to replace LH_Cont_PFC_1 in QSIPrep with LH_Cont_OFC_1 and subtract one from the remaining LH_Cont_PFC’s, as specified by the AtlasPack labels.

If anybody can tell me, “Daniel, you’re a numbskull; this was all hashed out 6 years ago!”; or “You’re using the wrong version of QSIPrep!”, and point me to the explanations, I would appreciate any input you would have.

Thank you all,

  • Daniel