-
Notifications
You must be signed in to change notification settings - Fork 299
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Multi-echo derivatives #2542
Comments
The T2* map is the boldref as of #2547, which will be in 21.0.0. I think by BIDS, we should change the suffix to |
Let's call this space Just trying to figure out the branching logic that we're going to need and how many flags will be needed to cover the range of plausible outputs. |
The T2* map shouldn't be the boldref since we removed that option in #2109, right? |
Do you want to check #2547? I'm not sure if we re-did that or not, but it's definitely what's set to be saved as a |
You're right. For posterity, here it is: fmriprep/fmriprep/workflows/bold/base.py Lines 1005 to 1008 in a02c1c1
I'm not sure why that was done. In #2181, we started calculating the final boldref based on the first echo's STC+MCed data (i.e., post- fmriprep/fmriprep/workflows/bold/base.py Lines 574 to 575 in 5e291b8
We stopped using the T2* map because, while it was originally thought to have better contrast (hence the old BTW, to respond to your other question:
I don't think there's a strong reason to have the OC data in the T2starmap/boldref space, since it's (1) easy enough to calculate when you have the echoes, echo times, and T2* map, and (2) tedana doesn't actually allow you to provide the OC data when you're running the classification workflow on an existing mixing matrix, due to (1). So it won't be much use. That said, if it doesn't add many LOC, then I don't see the harm. |
Okay, so we should revert the Would people just want the raw T2* map or transformed into the Regarding the OC, it's not really a question of LOC, and the harm would be space wasted on an unwanted derivative. So the upshot of my question and your answer is that we shouldn't use So let's suppose I have
Seem reasonable? (Might need to do something other than |
So it looks like we're performing SDC on the optimal combination, rather than on the individual echos prior to T2*-map estimation. To get STC+HMC+SDC echos, we can either apply the SDC to the echos after the fact (and I guess the T2* map), or we can pass in SDC'd time series to Tedana. What is the Tedana best practice here? |
The main benefit is in running tedana, but it can also be useful for QC. I don't know if that QC needs to be in standard space, but it could help. That said, I don't think it's a big deal if the T2* map is just in boldref space. @handwerkerd do you think a standard space T2* map would be necessary? The outputs you list seem reasonable, though having the brain mask in
We currently recommend using non-SDCed data in tedana, but we don't have any actual tests comparing pre-SDC vs post-SDC. I have been using the SDCed data in my own analyses, because it's easier to take STC+MC+SDCed data, run it through tedana, and then apply the necessary transforms than to grab the data before SDC. If it's easy enough to run tedana within fMRIPrep before SDC, then I'd lean slightly toward that. |
So when you get your individual echo derivatives, you would want them STC+HMC but not SDC'd? And similarly, the T2* map should not be SDC'd? But your optimal combinations should still be SDC'd? Would you also need the SDC warp (I think we should do this, but it will affect priorities) to be output? |
Since I'm not an fMRIprep user, I don't completely follow the specific issue at hand here. If I get the part where you're asking me a question, it's whether there might be a need to allow someone to input a T2* map that isn't generated directly from the multi-echo time series data? That is currently a viable option in tedana. I don't know if anyone has specifically evaluated if it's better or worse. My sense it that there will be situations where a separately acquired, more empirical T2* map would be useful. |
Apologies to all since I'm joining late to the party, and actually proposing related things on the PR Chris just linked.
Totally understandable, sorry that the conversation is so unclear, and thanks for nonetheless responding! Basically we are discussing the preferred order of operations when integrating tedana. Options are:
(STC=slice-timing correction, HMC=head-motion correction, SDC=susceptibility-distortion correction) This far, it seems that option (2) is preferred #2542 (comment). That means: each echo is corrected for slice-times and head-motion. Then However, as I discuss in #2610, option (1) seems preferable for the following reasons
Is this to say that there is about the same evidence to suggest one or another? In that case, if you were promised a very careful HM+SD one-shot correction, do you think what I mention above would be reasonable (i.e., tedana having to discard less bad voxels)? On the other hand, there is the question of whether applying SDC on the T2* map or the optimal combination is safe. My impression is that the workflow is already very restrictive (in the sense that a fair amount of voxels around the vmPFC and temporal lobes will be dropped), so applying the nonlinear warping will definitely be tricky (if not unnecessary as distortions are smaller due to the acceleration of the sequence, and the fact that some regions have been completely erased due to dropout). |
I agree that (2) is currently what we consider best practice. This is primarily because aggressive non-linear spatial warps, as typical for distortion correction, will almost definitely distort the relationship between echoes. There might be ways to adjust for this in how tedana calculates multi-echo metrics and uses them for selecting components to reject, but that's a non-trivial bit of work. I've recently been thinking about a proposal that might address this issue. The end of the component selection process is a list of ICA components to reject. Denoising is effectively regressing those time series from the inputted data. A plausible processing pipeline would be This approach has not been validated or even implemented, but I was already talking about something similar to this for including respiration regressors. It might also be a way to balance the need to generate components that retain the relationship between echoes, but actually denoise the data that only had one applied spatial transform. |
In the context of this thread, we also want to output derivative echos for flexible use in Tedana. So from fMRIPrep's perspective, it sounds like we want to run SDC before calculating the T2*-map + OC, but not for the derivative echos:
If fMRIPrep incorporates the tedana decomposition into it, then we can also have:
I assume there's no plausible way to cast the optimal combination as just another transform in a sequence so that we could single shot?
|
why not the derivative echos? seems a bit concerning if you are feeding something different to tedana, wdyt? It doesn't seem like this problem has been comprehensively explored, so I would lean towards option 1, with the expectation that we will provide feedback to tedana about that choice and form some knowledge base. |
Because the goal is to provide as clean as possible inputs to Tedana for calculating the noise components that you want to remove. This was @handwerkerd's suggestion. |
So the cleanest way forward in the short term is going to be to continue fully-correcting (i.e., including SDC) each echo before before running Tedana (for T2* map and OC) or sinking individual echos as derivatives. This should at any rate not degrade the current ability to integrate fMRIPrep+Tedana. We'll also be outputting preprocessed fieldmaps, which would allow a user to run with/without SDC, run tedana on the SDC-free and then correct those results with the fieldmaps from the SDC run. From there we can assess whether it's worth significantly complicating the workflow. |
I agree that outputting pre-SDC echo-wise derivatives shouldn't be a high priority. Outputting post-SDC echo-wise derivatives and running tedana on those files within the workflow sounds like a clean way to do things. |
I'll stay out of the prioritization Q so I might be missing something in @tsalo's comment. I do agree with @effigies that the current approach would say do both: That said, the spatial interpolation issues with SDC might affect the quality of the optimal combination, but not enough to really care about. |
To come back to the T2* map question:
The question is "What would be useful to somebody using preprocessed ME data?" Assuming you're interested in either assessing the quality of preprocessing or doing further processing with Tedana. We can output T2* maps as directly generated by Tedana, or transform them into another space. It seems the can be regenerated at-will from the individual echos, but would they save processing time to have available? And if they are useful for QC, in what space(s) would they be most useful to be sampled? |
Sorry for the delay. For the sake of using ME data, I don't think there's any benefit to outputting the T2* map in anything other than the space in which tedana generated it ("scanner" or "boldref").
It won't generally save much time to have the T2* map saved instead of generating it again from the individual echos.
It could be helpful to make sure that the T2* map looks reasonable, but I don't think it's necessary. Maybe it's just something that can be added in the future if folks request it? If it was being used for QC, then I'd say that standard space would be the way to go. |
I noticed that multi-echo |
boldref
?)cc @jbteves @tsalo @eurunuela for verification
The text was updated successfully, but these errors were encountered: