Preprocessing minimally processed fMRI from ABCD with C-PAC

Hi all,

I’ve been working on finalizing the preprocessing of minimally processed rs-fMRI data from the ABCD study for further analysis. According to the ABCD wiki, the minimal preprocessing steps include:

  • Head motion corrected by registering each frame to the first using AFNI’s 3dvolreg (Cox, 1996)
  • B0 distortions were corrected using the reversing gradient method with FSL’s topup (Andersson et al., 2003, Smith et al., 2004)
  • Displacement field estimated from spin-echo field map scans
  • Applied to gradient-echo images after adjustment for between-scan head motion
  • Corrected for gradient nonlinearity distortions (Jovicich, et al., 2006)
  • Between scan motion correction across all fMRI scans in imaging event
  • Registration between T2-weighted, spin-echo B0 calibration scans and T1-weighted structural images performed using mutual information (Wells, et al., 1996)

I’ve modified the default pipeline of C-PAC so it doesn’t perform motion correction twice, in case this may affect the output. However, when I try to run the code, I get an error while creating the workflow:

LookupError: When trying to connect node block 'qc_motion_plot' to workflow 'cpac_NDARINVVKA7FXC3_2YearFollowUpYArm1' after node block 'qc_coregistration': 

[!] C-PAC says: None of the listed resources in the node block being connected exist in the resource pool.

Resources:
[['desc-movementParametersUnfiltered_motion', 'desc-movementParameters_motion']]

This error doesn’t come up if I enable motion correction, but I’m afraid that performing this step twice might affect the results.

I’ve also encountered similar challenges with fMRIPrep, where skipping redundant steps (such as motion correction) isn’t straightforward. I’m starting to run out of options and would appreciate any suggestions on how to finish the pre-processing of these files.

Thanks a lot!!!

Hi @luisagulleiro,

What additional preprocessing steps are you expecting? The minimally preprocessed should be ready to go for postprocessing.

Best,
Steven

Hi @Steven, thanks for your quick reply!

I’d like to run nuisance correction (with/without global signal regression) and bandpass filtering, as well as normalize the functional images to T1w and MNI space to then extract time-series from Schaefer’s atlas.

Very best,

~L

I think the simplest way forward here is to modify one more line in your config:

pipeline_setup:
  output_directory:
    quality_control:
      generate_quality_control_images: Off

That option toggles visualizations for QC measures for motion correction, and the error you’re hitting here seems to be that this option is on but motion correction is not, so there’s nothing to visualize.

Hi @luisagulleiro,

If you’re willing to try non C-PAC things, that can be done in other tools such as nilearn (nilearn.signal.clean - Nilearn).

In regards to spatial normalization, the native-to-anat transform should already be publicly available. It’s just a rigid transform. This can be composed with a T1w-to-MNI transform calculated separately (e.g., with antsRegistration to get the fMRI to MNI transform.

That can also be done in other tools like Nilearn (nilearn.maskers.NiftiLabelsMasker - Nilearn).

Best,
Steven