Sinus as a regressor

Hi @tsalo, I have a follow up question re using the SSS as a regressor, I figured it would be helpful to get your advice on this. I came across this thread where it’s mentioned that using the SSS may involve the risk of : "if you have vascular territories with large delays (due to pathology, or even, it seems, normal aging), then you can get multiple copies of the sLFO regressor showing up in the SSS. I refer to this as getting a "poison regressor".

Now, this problem might be relevant to my analysis as my dataset does include older adults (with potential vascular risk factors). Per my understanding I know that we have

  • The —acfix flag that might help to disambiguate these repeated signals, but I’m not sure if it is THE recommended fix for this type of “poison regressor” problem.

  • The thread also mentions that when supplying the SSS as the regressor, we should also make sure our brain mask does NOT include the SSS voxels - to avoid corrupting the subsequent regressor refinement steps. (maybe use a combination of GM+WM TPMs to create the brain mask instead of relying on FSL-BET/fmriprep default outputs)?

What do you think about using the SSS? Do you know of any repositories/papers that share an example of how to use such a regressor? (The only one I can currently find is this: Line 148-151 cvrisk-hemodynamics/BLV_func.sh at main · ahmedaak/cvrisk-hemodynamics · GitHub but there’s no inclusion of a brain mask etc)

Would greatly appreciate your thoughts on this! Thanks!

I asked one of the admins to pop this out into a separate topic because the other one is closed.

I haven’t had a chance to try out the SSS with rapidtide yet, but I’m hoping to test it out at some point. Based on the rapidtide documentation, it does seem like --acfix is a good parameter to use in your situation, although I’ve never tried it, and I don’t analyze older adults.

The best person to ask is definitely @bbfrederick.

Thanks very much @tsalo! @bbfrederick would you have any suggestions on how to use the SSS?

Using the SSS is a very good solution. Ahmed Khalil does that in patients with pathology and gets pretty stable results. The only two complications are that 1) fMRIprep (which I tend to use) uses a very tight mask that pretty efficiently removes the SSS from preprocessed data, you have to get it from data prior to skull stripping. Because of that, 2) you often have to hand draw a mask, which is quite inconvenient (but on the plus side, the SSS is really easy to find - even physicists like me can get it reliably).

If you do have MNI152 data that somehow does NOT have the SSS stripped off, or if you’ve got the transverse sinus in your image (what the SSS drains into, often preserved in fMRIprep data), there’s another option. Go into the rapidtide/data/reference directory, which has all sorts of useful bric-a-brac and find “venous_sinus_template_2mm.nii.gz” (or 1mm, if you have that), and use it to set your initial regressor using --globalmeaninclude RAPIDTIDEROOT/rapidtide/data/reference/venous_sinus_template_2mm.nii.gz. That should get you a nice clean blood regressor.

Thanks very much @bbfrederick! Interesting, so while passing in the sinus mask to the —globalmeaninclude flag, do I omit passing in a typical whole brainmask? Or do I maintain that for regressor refinement.

Also, I understand that the one drawback of using the SSS is that, you could get multiple copies of the sLFO - termed the “poison regressor” problem. Would passing in a strict GM/WM based —brainmask plus using the —acfix flag help deal with this? What would you recommend

This is still a bit of an open question - I just don’t have a good solution to the poison regressor that works in every case.

One thing that I tinker with of and on is treating this like an echo cancellation problem - assume that there is one “real” sLFO signal, and some echos (delayed versions) that occur at a later time. The problem is that unlike a real echo, there is no guarantee that the pools of delayed blood will be smaller than the undelayed blood, so the echos may be larger than the “source” signal.

The most reliable thing you could do is if you have some part of the brain that you are very sure has no pathology, you can just lock that down as the only region you trust to generate and refine regressors using the globalmeaninclude and refineinclude (or exclude) masks.

In answer to your previous question, if everything is working properly, setting the brainmask sets the globalmeaninclude mask, but not the other way around. globalmeaninclude only sets itself - unlike the anatomic masks, it won’t set other masks that haven’t been specified.

So what I’d suggest is:
If you have masks for brain, GM, WM, and CSF, you should always supply those:

  1. If there’s a gray matter mask, globalmeaninclude will default to be that (unless you override it), and since gray matter has generally high SNR and short delays, you’re likely to get a pretty good starting regressor.
  2. A proper anatomic brain mask will probably conform to the shape of the brain better than anything rapidtide estimates from fMRI data, especially if your image intensity is non-uniform.
  3. If you have GM, WM, and CSF masks, you will get some additional interesting metrics in your output files.
  4. If you have WM and CSF masks you also get rapidtide cleaned WM and CSF regressors, which should be much more effective for denoising in later processing than the ones you get from conventional sources, since they are so heavily contaminated with delayed sLFO.

If there is a region you know is bad, use globalmeanexclude and refineexclude to make sure those don’t confuse rapidtide. Conversely, use globalmeaninclude and refineinclude to select regions you know are good.

You usually won’t need to mess with the other masks.

There’s a slightly outdated discussion of mask logic in the Theory of Operation section of the manual (Theory of operation — rapidtide 3.1.6 documentation). I’m going to update it now to include some of the points made above.

1 Like

Thank you very much for clarifying @bbfrederick !