Motion scrubbing with xcp_d

Hi xcp_d experts,

I would like to customize the xcp_d motion scrubbing. Specifically, I would like to:

  • Target volumes that exceed FD or DVARS thresholds. It would be nice to have the option to customize this boolean logic.
  • Target neighboring volumes (e.g., 2 before and 1 after). Again, it would be nice to customize which neighboring volumes are included or base the volumes included on scan TR.
  • Remove participants/scans with too many scrubbed volumes (e.g., good scan time ≤ 7 min, good volumes ≤ 75% total scan).
  • Interpolation between scrubbed volumes.

Does anyone know (1) if these options are already feasible with xcp_d, (2) if not, how to incorporate them into the xcp_d pipeline. I have already run all of my scans through fMRIPrep.

I’m also happy to receive feedback; for instance, are some of these features unnecessary or problematic, do you use these options in your own analyses, are they analysis-specific, and how have you chosen values (i.e. what is your reasoning for them [citations are appreciated])?

Cheers,
Bram

These are all totally reasonable requests. Implementing them in xcp_d could be tough, but I think it’s worth opening two separate feature request issues on GitHub.

I think this might be something to address in your group-level sample selection, rather than within xcp_d. The QC files xcp_d outputs should make it easy to flag any bad subjects, although we could work on a more BIDS-compliant way to output that kind of info.

I believe xcp_d does this already.

1 Like

Good idea. I just submitted requests for neighboring volumes and boolean logic.

Seems right. Looks like it is done in line 66 of modified_data.py. Should the following line from the automatic methods description be updated to include the mention of interpolation?

“Volumes with filtered framewise displacement greater than 0.4 mm were flagged as outliers and excluded from nuisance regression (Power et al. 2014).”

1 Like