Multiple b-values acquired separately: what to consider?

Hi,

I’m planning to analyze a dataset with QSIprep. Now, that I’m converting the data into BIDS (with HeudiConv), I would like to know what you think the appropriate way is.

First, the data:

  1. Whole dMRI sequence (single shell: b1000) acquired once with a Phase-Encoding (PE) dir and once with the opposite PE

  2. Each b-value shell is acquired separately (64 b700, 64 b1000, and 64 b2000 with a few additional b0s in both in-, and opposite PE dirs).

Second, what I did:

For (1), I’m assigning one of the acquisitions as main (dwi/sub-01_acq-singleshell_dir-AP_dwi) and the other as fmap (fmap/sub-01_acq-singleshell_dir-PA_epi). I’m utilizing POPULATE_INTENDED_FOR_OPTS with 'matching_parameters': ['CustomAcquisitionLabel'] in order to automatically populate “intended for” fields in fmap JSON files based on the “acq” field.

For (2), I’m assigning each b-value as separate "acq"s (e.g., dwi/sub-01_acq-multishellB700_dir-AP_dwi). I did not utilize populate intended for fields for its relevant fmap file (fmap/sub-01_acq-multishellB0_dir-PA_epi), as I was interested in preprocessing all shells together in a combined file.

And here comes my questions:

  1. I noticed QSIprep can be used to combine different “runs” within a session. Thus, I assume it combines all the MRI "run"s. So, would it be better if I have defined different b-values as “run-bvalue” instead of “acq-bvalue” or it doesn’t matter and it works even though they have no “run” field in their name?

  2. If it combines all dMRI runs within a session, does it also use the inverse PE fmap data for preprocessing even though its “Intended_For” field is empty?

  3. Does it also automatically concatenate fmaps in case I have many?

I’d be glad to hear your opinions! Any additional comments are welcome.

Cheers,
Amir

Hi @AmirHussein,

You should not make the whole DWI sequence as an fmap. If you use the distortion merge option in qsiprep you can use one sequence to SDC the other (e.g., what HCP does).

I am not clear what you mean by this. Perhaps a tree directory structure of an example subject would help.

You should assign the fmap to all files if you want to SDC all files.

QSIPrep will combine everything during processing by default. If you want to separate something for any reason you can do separate runs with different BIDS filter files.

You should define IntendedFor.

What use case do you have for concatenating fmaps?

Best,
Steven

Hi Steven,

Thanks for the reply. Here is the tree structure of a sample multi-b subject:

sub-01/
└── ses-001
    ├── anat
    │   ├── sub-01_ses-001_T1w.json
    │   └── sub-01_ses-001_T1w.nii.gz
    ├── dwi
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-1_dwi.json
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-1_dwi.nii.gz
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-2_dwi.json
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-2_dwi.nii.gz
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-3_dwi.json
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-3_dwi.nii.gz
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-4_dwi.json
    │   ├── sub-01_ses-001_acq-multishellb0_dir-PA_run-4_dwi.nii.gz
    │   ├── sub-01_ses-001_acq-multishellb1000_dir-PA_run-1_dwi.bval
    │   ├── sub-01_ses-001_acq-multishellb1000_dir-PA_run-1_dwi.bvec
    │   ├── sub-01_ses-001_acq-multishellb1000_dir-PA_run-1_dwi.json
    │   ├── sub-01_ses-001_acq-multishellb1000_dir-PA_run-1_dwi.nii.gz
    │   ├── sub-01_ses-001_acq-multishellb2000_dir-PA_run-1_dwi.bval
    │   ├── sub-01_ses-001_acq-multishellb2000_dir-PA_run-1_dwi.bvec
    │   ├── sub-01_ses-001_acq-multishellb2000_dir-PA_run-1_dwi.json
    │   ├── sub-01_ses-001_acq-multishellb2000_dir-PA_run-1_dwi.nii.gz
    │   ├── sub-01_ses-001_acq-multishellb700_dir-PA_run-1_dwi.bval
    │   ├── sub-01_ses-001_acq-multishellb700_dir-PA_run-1_dwi.bvec
    │   ├── sub-01_ses-001_acq-multishellb700_dir-PA_run-1_dwi.json
    │   └── sub-01_ses-001_acq-multishellb700_dir-PA_run-1_dwi.nii.gz
    ├── fmap
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-01_epi.json
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-01_epi.nii.gz
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-02_epi.json
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-02_epi.nii.gz
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-03_epi.json
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-03_epi.nii.gz
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-04_epi.json
    │   ├── sub-01_ses-001_acq-multishell_dir-AP_run-04_epi.nii.gz
    └── sub-01_ses-001_scans.tsv

Now about your comments:

Cool! I don’t know why I wasn’t aware of –distortion-group-merge flag! Thanks! Just one quick relevant question: Does SDC work if I conduct the same script for all my subjects (for both with whole sequence in reverse PE and those who are like the tree above) even the SDC strategy is different for each of them?

My point was that I am interested in combining all shells together, then run SDC, rather than doing it separately. But to my understanding and as you said, QSIprep automatically combines all the runs together even though they have no “_run-bvalue _” in their name, and runs SDC if relevant RPE b0 is available.

If QSIprep combines all images in dwi/ together, so the IntendedFor of RPE_b0.json images in fmap/ should include paths of all images in dwi/ folder, so QSIprep will later use fmap/ content to perform SDC on the combined dMRIs, am I right?

By fmap I meant RPE_b0s (check tree output). Does QSIprep also automatically combines all RPE_b0s to be used in SDC later?

Cheers,
Amir

Hi @AmirHussein,

Do you have subjects that have both cases 1 and 2? I believe that the distortion group merge won’t do anything on subjects who with case 2, so I guess the same script should work.

This is up to you. If it fmaps were collected such that fmap run-1 is supposed to go to a particular shell, then code it that way. I don’t think SDCFlows likes when two separate pepolar pairs are IntendedFor a single EPI image.

Perhaps it might make sense to copy (not move, as you still want b0s in your DWI) your B0 images as fmap epis/jsons (with intended for defined)? I really haven’t worked with a dataset organized like this before.

Best,
Steven

No, some are 1 (whole sequence RPE, b1000) and some 2 (multiple b-values separately, a few RPE b0s).

My question is about how QSIprep handles type (2): if it combines all dMRI runs in a session (the multiple b-values acquired separately), will it also use the RPE b0 in fmap/ folder for this combined file, even though the IntendedFor field in the JSON file of this RPE b0 image does not point to this combined dMRI file (since it does not exist at the first place).

The initial plan I had was to combine all shells into a single file using MRtrix dwicat, adding “IntendedFor” in RPE b0 to this combined file, then run QSIprep for preprocessing. What do you think?

Cheers,
Amir