Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refine multi-echo fMRI walkthrough #690

Closed
tsalo opened this issue Feb 22, 2021 · 12 comments
Closed

Refine multi-echo fMRI walkthrough #690

tsalo opened this issue Feb 22, 2021 · 12 comments
Labels
documentation issues related to improving documentation for the project effort: medium Theoretically <40h total work impact: medium Improves code/documentation functionality for some users priority: low issues that are not urgent

Comments

@tsalo
Copy link
Member

tsalo commented Feb 22, 2021

Summary

I'm working on improving our walkthrough of multi-echo fMRI and sources of noise in fMRI in my improved-walkthrough branch. Here I'd like to document the approach I want to take.

Additional Detail

  1. How does single-echo fMRI work?
    1. A sequence diagram.
    2. What is BOLD signal?
      1. Basic physics refresher: excitation, T2 relaxation, signal decay, T2*, blood oxygenation, BOLD signal
    3. Links to references.
    4. Sources of noise: non-neural BOLD signal, non-BOLD noise, any others?
  2. What is multi-echo fMRI?
    1. A sequence diagram.
    2. Links to references.
    3. What does the signal looks like? I can recycle some figures from our "processing pipeline details" page here.
    4. Sources of noise. T2* and S0.
    5. How do fluctuations in S0 and T2* impact signal?
      1. Show the simulated decay curve change as S0/T2* fluctuate (see Figure 1 and Figure 2 below).
      2. Show the simulated multi-echo signal (points without decay curve).
      3. Show both simulated multi-echo signals from equivalent S0 and T2* fluctuations, so we can see how they differentially impact the signal.
    6. What do these fluctuations look like in single-echo data? Show how it's impossible to dissociate T2* and S0 fluctuations in single-echo data.
  3. Denoising multi-echo data
    1. Why don't we just estimate T2*/S0 directly from the data?
      1. Motivate TEDICA and other denoising approaches.
      2. Discuss FIT, maybe.
    2. Can basically recycle the TE-dependence models page for this.
  4. What can't multi-echo fMRI deal with?
    1. BOLD-based noise, like sLFOs and physiological signals.
    2. Brain vs. vein (i.e., mis-localization of neural activity due to nearby macrovasculature).

Figure 1: The impact of T2* fluctuations on multi-echo signal

t2star_fluctuations

Figure 2: The impact of S0 fluctuations on multi-echo signal

s0_fluctuations

@tsalo tsalo added the documentation issues related to improving documentation for the project label Feb 22, 2021
@emdupre
Copy link
Member

emdupre commented Feb 22, 2021

These are beautiful 🤩

I think @jsheunis and @dowdlelt would like them too -- and might have feedback on the updated walk-through plan !

@dowdlelt
Copy link
Collaborator

I'm in awe - this is wonderful. It builds the intuition perfectly and I can't wait to how it fits into the bigger story!

And I like the end section - I think with clever, multirun and parameter informed denoising approaches (aka this map is BOLD like, but its voxels has S0 and T2* parameters, and negative time lags map onto non vein areas (think rapidtide) it could all happen. But thats for another day.

@eurunuela
Copy link
Collaborator

I'm pretty sure @CesarCaballeroGaudes has some ideas for the walkthrough.

@CesarCaballeroGaudes
Copy link
Contributor

I also like these animations very much. My main suggestion is that it would be nice to plot the percentage change signals at the top.

@jsheunis
Copy link
Contributor

These figures and the walkthrough points are great, Taylor! I'll be happy to spend some time on this, either as part of the review process or earlier on if that can help.

@dowdlelt
Copy link
Collaborator

Some more thoughts - One idea is to have some "baseline" period, that remains on the plot - and then you can visualize the fluctuations around it. That could help drive intuition for how the curve varies in addition to the S0 change being obvious. Don't think that is necessary though.

Another thing is it looks like your outline jumps straight to denoising, and skips the combination step - but perhaps that is part of the "TEDICA so important bit"

and finally, the other thing that catches my attention is that the framing of "TEDICA" as you've written it out there seems somewhat exclusive. In line with our goal of getting new denoising methods into tedana, I think the framing should be:
3.i. We can't estimate it directly so easily/usefully but don't lose hope. Here is an example of how to deal with this, using our current method, TEDICA.
but perhaps you were already thinking along those lines.

@tsalo
Copy link
Member Author

tsalo commented Feb 23, 2021

Thanks all! I'll try to open a draft PR soonish so everyone can weigh in directly.

And I like the end section - I think with clever, multirun and parameter informed denoising approaches (aka this map is BOLD like, but its voxels has S0 and T2* parameters, and negative time lags map onto non vein areas (think rapidtide) it could all happen. But thats for another day.

@dowdlelt I know right?! I am planning to hint at that in this document (and/or in our FAQ) without going into too much detail.

One idea is to have some "baseline" period, that remains on the plot - and then you can visualize the fluctuations around it.

Can do.

Another thing is it looks like your outline jumps straight to denoising, and skips the combination step - but perhaps that is part of the "TEDICA so important bit"

Good point... I think the intuitive leap between "T2* fluctuates over time" and "we need to use ICA" is key, but I agree that optimal combination and coverage improvement need to be covered too.

We can't estimate it directly so easily/usefully but don't lose hope. Here is an example of how to deal with this, using our current method, TEDICA.

I like it. Once I have a PR open, maybe we can generalize and at least reference a couple of other approaches. I don't want to make this document tedana-specific. That's what the Processing Pipeline Details page is for. As you say, TEDICA shouldn't be the focus, even if it is the approach I know the most about.

My main suggestion is that it would be nice to plot the percentage change signals at the top.

@CesarCaballeroGaudes That's a great idea. I can rescale the single-echo and multi-echo time series plots to be in percent signal change.

@jbteves
Copy link
Collaborator

jbteves commented Feb 24, 2021

@tsalo this looks awesome! I think it's great to move in this direction with the documentation details, and perhaps the code can even be packaged into more reports so that you can easily check out your own tedana-analyzed data this way.

@jsheunis
Copy link
Contributor

@tsalo some thoughts:

Another thing is it looks like your outline jumps straight to denoising, and skips the combination step - but perhaps that is part of the "TEDICA so important bit"

Good point... I think the intuitive leap between "T2* fluctuates over time" and "we need to use ICA" is key, but I agree that optimal combination and coverage improvement need to be covered too.

Agreed, would be great to see a section here on combination methods and comments on how they can be useful (highlighting improved signal recover and T2*-weighting, as in the JOSS manuscript). Perhaps this could also be a good place to add a sentence or two that explains "optimal combination", provided there is actually a common understanding of what this means (why not just say T2*-weighted?). IME that term is the cause of some ambiguity so would be good to be explicit about it if we can. My personal view: "optimal" is not a useful way to describe a method, because its meaning depends on what the user finds optimal.

Sources of noise. T2* and S0.

Perhaps at the point where T2* and S0 are introduced it's also prudent to state the assumption of mono-exponential decay and note that multi-exponential decay models could also be valid (with reference). Especially since all of the rest of the content of the walkthrough (especially the figures) and the tedica pipeline are dependent on the mono-exponential assumption.

a. Show the decay curve change as S0/T2* fluctuate (see Figure 1 and Figure 2 below).

These animations are great. Is this from simulated or real data? Task/resting state? Single voxel / region averaged? Some readers might find it useful if we provide these extra details. I'm a bit on the fence about it, because on the one hand it can provide good context for T2* or S0 variations differing across task-related regions or anatomy (which is useful practical information for those interested in starting to implement multi-echo sequences in their studies), but on the other hand this might require a lot of background explanations that could distract from the flow of information in the walk-through.

@tsalo tsalo added effort: medium Theoretically <40h total work impact: medium Improves code/documentation functionality for some users priority: low issues that are not urgent labels Mar 22, 2021
@handwerkerd
Copy link
Member

This looks great, but a lot of work & it seems like @tsalo has only filled out a bit of it so far. This seems like a bit much to ask Taylor to do solo. If we want to get this all done, my suggestion is to assign people parts of text to write (depending on time/skill a writer can personally create or just propose specific figures).

A few specific comments:
Either in 1ii or 2iii might be a good place to put something based on Figure 3 from Poser 2006 MRM which shows how you lose TSR if your true T2* in a voxel is different from your single echo TE
image

The whole weighted combination of echoes (optimal combination) math seems obvious, but seems to create confusion every time I try to explain it to someone. It's probably worth it's explanation in section 3.

Section 4 seems to be a good place to fold in an expanded explanation of the acquisition parameter recommendations and general text on how different parameter priorities balance

@tsalo
Copy link
Member Author

tsalo commented Apr 16, 2021

Everyone can contribute to the walkthrough more directly in the new improved-walkthrough branch. Per today's dev call, we want to continue discussing the walkthrough here as well.

@tsalo
Copy link
Member Author

tsalo commented Jan 2, 2022

Given ME-ICA/multi-echo-data-analysis#11, I am going to close this issue. We can always port some stuff back over to the tedana documentation later, but I think I'd rather keep most of the theoretical background/methods walkthrough stuff in the Jupyter book from now on, to keep the tedana repo lighter.

@tsalo tsalo closed this as completed Jan 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation issues related to improving documentation for the project effort: medium Theoretically <40h total work impact: medium Improves code/documentation functionality for some users priority: low issues that are not urgent
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants