I have resting state data, TR=2.5s, 3 runs of 210 points per subject. The lab I’m working for had a pipeline making use of 3dFourier to perform bandpass filtering in the range 0.01-0.1 Hz, making it in two steps, fist highpass then lowpass.
I was trying to improve the code, I saw that 3dBandpass improves the demenaing of data, now I have a couple of questions
- what’s the difference in terms of implementation of the filter between 3dBandpass and 3dTproject, if I only need to filter data (no nuisance regression)?
- given that the order have at least to be reversed (fist lowpass then highpass), is there any actual advantage in splitting the bandpass filter in lowpass and highpass?
Those both apply FFTs after padding to a useful size. Trend removal in 3dBandPass might be done more appropriately. But really, 3dTproject is the most useful program for that operation. We generally do not use either 3dFourier or 3dBandPass. They are still distributed to avoid breaking people’s existing processing streams.
Projecting out terms, whether band passing or not, should generally be done all at once (as is done with afni_proc.py, if you have tried that). Later projections, if they do not account for earlier projections, can re-add components that were previously removed. For example, doing band passing in one step before projecting motion regressors (and not accounting for it) in another is a mistake. In that case, those other nuisance regressors would also need to be band passed. And if censoring is done, it is all the more important do perform all operations in a single step.
So we suggest putting all projections into a single 3dTproject command.
Consider running a similar analysis (with even just one subject) for comparison using afni_proc.py, and see how the processing is performed.