ME-ICA / tedana

TE-dependent analysis of multi-echo fMRI
https://tedana.readthedocs.io
GNU Lesser General Public License v2.1
161 stars 95 forks source link

Supplement or replace adaptive mask with R-squared #543

Open tsalo opened 4 years ago

tsalo commented 4 years ago

Summary

In Cohen Adad et al. (2012), they used an R^2 threshold of 0.8 to define masks for their ME-GRE-based T2* maps. Related to #230 and #113. Would override changes proposed in #312.

Additional Detail

I don't know if the threshold translates perfectly to the smaller numbers of echoes we typically have with ME-EPI, but I calculated R^2 for both my own four-echo and @dowdlelt's eight-echo data and the results look reasonable.

Next Steps

  1. Calculate R^2 in fit_decay.
    • There are a few ways we could do it. The easiest is probably to compare S0 * exp(-TE/T2*) to the data averaged over time. We could also take a time-series-based approach, but that would take a very long time.
  2. Use R^2 to derive brain mask.
  3. Save R^2 to file.
tsalo commented 4 years ago

It might also be a good idea to exclude voxels with invalid T2*/S0 values from further analysis, rather than replacing them with values in reasonable ranges. At least for the denoising pipeline.

handwerkerd commented 4 years ago

I think this should be more of a supplement rather than a replacement of the adaptive mask. The adaptive mask will first remove echoes that are clearly noise (as is now happening in #358 ). Only then, if there are at least 3 remaining echos, should the T2* & S0 fits be calculated & then additional voxels should be masked based on low R^2.

One thing to consider is, if there are >3 echos and there is a sub-threshold R^2, we should probably iteratively remove the latest echo until R^2 is above threshold or there are fewer than 3 echoes remaining. That is, if a later echo wasn't removed in the adaptive masking step, allow for it to be removed int he T2* fitting step, without masking the entire voxel..

This issue also brings up a previous discussion regarding tedana generating multiple masks. There will be one adaptive mask created early in the processing pipeline (or by user input). The T2* and S0 estimates are a later step and it makes sense to just have them create their own mask rather than trying to bring these estimates into the masking part of the pipeline. You ok with potentially having derivative masks with some type of naming guide?

tsalo commented 4 years ago

One thing to consider is, if there are >3 echos and there is a sub-threshold R^2, we should probably iteratively remove the latest echo until R^2 is above threshold or there are fewer than 3 echoes remaining.

I think that's doable, as long as R^2 isn't directly dependent on degrees of freedom in any weird ways. That said, it kind of eliminates the need for the current mask-determination method (which we know has arbitrary thresholds [#113]), since it will create an adaptive mask as part of the procedure.

EDIT: We probably want to loop through all of the echoes (starting at 3) to estimate T2* and calculate R^2, regardless of the adaptive mask value, right?

The T2* and S0 estimates are a later step and it makes sense to just have them create their own mask rather than trying to bring these estimates into the masking part of the pipeline. You ok with potentially having derivative masks with some type of naming guide?

I personally would prefer just to update the mask and write it out a little later in the workflow. Still, I'd like to hear what everyone else thinks about it.

stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had any activity in 90 days. It will be closed in 600 days if no further activity occurs. Thank you for your contributions to tedana:tada: !