Hi @roeysc - I can’t speak to fmriprep particulars, but can hopefully give some overall insight.
The total readout time for the synthesized image should indeed be 0 (infinite bandwidth).
This next statement has some caveats: The total readout time for the acquired (distorted) image doesn’t matter, and we typically default to something like 0.05. If you were to use topup to estimate the field, then applytopup to apply this field to the unwrapping process, as long as you give applytopup the acquisition parameters (i.e., the total readout time you gave topup) it will correctly scale the field.
However, if the units/magnitude of the field map matters for subsequent processing, then the total readout time matters. I’m not sure how fmriprep chooses to estimate and apply the field, so this value possibly does matter.
We also also recommend using reverse PE or field maps when those are available, and only using the synthesis method when these are unavailable. Hope that helps answer some of the questions.
I have not tried fMRIprep’s “syn” pipeline per se, and I have no experience with which approach, SynBOLD or fMRIprep’s Syn, results in better SDC. Any guide/help is appreciated.
Take the synthesized undistorted BOLD-contrast image (BOLD_s_3D.nii.gz), place in the fmap folder, give it a name such as sub-xx_ses-xx_acq-synbold_dir-PA/AP_epi.nii.gz, where the dir-<> label is the opposite of what your original BOLD is.
Make your own JSON. Just needs a few fields: (1) TotalReadoutTime - make it whatever you define at runtime or the default (1 second), (2) PhaseEncodingDirection - make it the opposite as your original image (so add or remove the minus sign), (3) Add the IntendedFor and/or B0FieldSource/Identifier fields to link the fieldmap to your BOLD image. The JSON should be called sub-xx_ses-xx_acq-synbold_dir-PA/AP_epi.json.
use a TotalReadOutTime of close to 0? The idea is the synthesized image is close to undistorted, so it should have very small total readout time. For DWI, I have done
I am trying to do the same - use the fieldmaps generated by SynBOLD-disco with fMRIprep. I trialled renaming the top-up outputs and putting them into the sub-XX/fmap/ folder.
I’m a bit confused as to what goes where and what info goes into the json.
The topup_results_field.nii.gz is the same dimensions as the functional run - does that become sub-XX_ses-BL_field.nii.gz? And then the topup_results_fieldcoef.nii.gz becomes sub-XX_ses-BL_magnitude.nii.gz? And then you put the functional runs as the Intended for files in the json? And then add the readout time? And this would be a
Apologies if this is a daft question - I’m not familiar with the topup outputs and how they’re typically used.
Thanks so much Steven, you’re right, I should have been able to follow this. I was just a bit surprised that the undistorted image works as a field map but I guess that’s because it’s before topup has been applied so its more like the reverse phase, rather than a corrected image?
Do I need to extract a volume from one of the functional runs and create a set of AP/PA pairs and have it more ‘typical’? Am I missing something silly in the json spec or layout?
This is not correct, as you are mixing up the IntendedFor and B0Field* metadata fields.
First, if you have any B0Field*defined, then IntendedFor will be ignored, even if your IntendedFor is right and your B0Field* is wrong.
This looks fine. But what is the phase encoding direction on your BOLD image? I ask because most commonly "PhaseEncodingDirection": "j" corresponds to PA, not AP, as is in your EPI.
B0FieldIdentifier should go in the fmap json, not the BOLD. And the B0FieldIdentifier should not be an BIDS URI like you have here, but instead some easy to understand identifer (e.g. synb0_fmap). And then in your BOLD json you specify the B0FieldSource as the same thing you put in as your B0FieldIdentifier.