Multi wave BIDS

Hi all,

Our project is trying to utilize BIDS format. However we are running into an issue with how to set it up with our multi-wave multi-session data collection. I think the following would cause the fmriprep to average together the anats from each wave, which we want to avoid :

└── sub-#####
    ├── ses-wave1bas
    │   ├── anat
    │   ├── fmap
    │   └── func
    ├── ses-wave1pro
    │   ├── fmap
    │   └── func
    ├── ses-wave1rea
    │   ├── fmap
    │   └── func
    ├── ses-wave2bas
    │   ├── anat
    │   ├── fmap
    │   └── func
    ├── ses-wave2pro
    │   ├── fmap
    │   └── func
    └── ses-wave2rea
        ├── fmap
        └── func

would we be best suited to have it as,?:

├── wave1
│   └──sub-####
│       ├── ses-bas
│       │   ├── anat
│       │   ├── fmap
│       │   └── func
│       ├── ses-pro
│       │   ├── fmap
│       │   └── func
│       └── ses-rea
│           ├── fmap
│           └── func
└── wave2
    └──sub-####
        ├── ses-bas
        │   ├── anat
        │   ├── fmap
        │   └── func
        ├── ses-pro
        │   ├── fmap
        │   └── func
        └── ses-rea
            ├── fmap
            └── func

Is there a BIDS official way of doing this?

Thanks,
Mitch

What is the definition of ‘wave’ in this context? It doesn’t seem to be a grouping of participants as I would intuitively understand it…

It’s a longitudinal-type design. For each person a “wave” consists of a set of 3 scanning sessions (“bas”, “pro”, “rea”) in a fairly short time frame, such as on 3 different days within a month. Some people are invited back to do the set of 3 sessions again, perhaps 6 months after the first set. There isn’t a fixed number of “waves” - some people may do 4 or 5 over a period of years, while others only 1 or 2.

Does that help? (Mitch and I are both working on the DMCC project.)

I see - thank you! In short, the first proposed file/folder structure is the only valid one. I would, however, encourage you to augment the dataset with more (optional) metadata (see below).

├──sessions.json
└── sub-01
    ├──sub-01_sessions.tsv
    ├── ses-wave1bas
    │   ├── anat
    │   ├── fmap
    │   └── func
    ├── ses-wave1pro
    │   ├── fmap
    │   └── func
    ├── ses-wave1rea
    │   ├── fmap
    │   └── func
    ├── ses-wave2bas
    │   ├── anat
    │   ├── fmap
    │   └── func
    ├── ses-wave2pro
    │   ├── fmap
    │   └── func
    └── ses-wave2rea
        ├── fmap
        └── func

Sessions file: /sub-01/sub-01_sessions.tsv (tabs replaced with spaced to improve readability)

session_id    wave   type
ses-wave1bas  1      bas
ses-wave1pro  1      pro
ses-wave1rea  1      rea
ses-wave2bas  2      bas
ses-wave2pro  2      pro
ses-wave2rea  2      rea

Data dictionary: /sessions.json

{  
   "wave":{  
      "Description":"A grouping of three sessions in a fairly short timeframe"
   },
   "type":{  
      "Description":"Session type",
      "Levels":{  
         "bas":"fishing for bas",
         "pro":"golfing like a pro",
         "rea":"reacting to experimenters"
      }
   }
}

Thanks for the response Chris.
Would using the sub-01/sub-01_sessions.tsv prevent fmriprep from averaging together the anatomicals from the different waves? Or would we have to process the waves in separate folders, then later merge them to prevent averaging anats across waves.

No. FMRIPREP will always create a robust (with coregistrations and exclusion of outlier voxels) participant-specific template using all T1w it will find for each participant. Why do you need to prevent averaging anats across waves?

Our data collection for each wave will be pretty far apart and we are wanting to look at the changes in the anatomical structure over that time.
We also want to ensure that our functional images are matched up with the chronologically closest anatomical.

I think you would be better off using something like FreeSurfer longitudinal pipeline that creates sessions specific templates for this purpose. It is implemented in the freesurfer BIDS App https://github.com/BIDS-Apps/freesurfer.

I would double check if this strategy is really necessary for BOLD data (it will take some effort to add it to FMRIPREP). If you want to go an extra mile you can run FMRIPREP with --longitudinal flag. It will still create one participant specific template combining all T1w, but that template will not be biased towards any particular input T1w image.

1 Like

I just want to clarify that I understand correctly: fmriprep will not use the freesurfer longitudinal pipeline if multiple sessions are found (aside from the robust template)? I suppose it would be possible to run the freesurfer BIDS app on longitudinal data and if that output directory is in the fmriprep target directory (Frmiprep: how to incorporate pre-run freesurfer?), then fmriprep will use the freesurfer assets to the extent it can?

Correct, only the robust average will be calculated across sessions. As Chris mentioned before, using the --longitudinal flag will also lead to an average T1w, not biased towards any particular input T1w.

Correct. However some users report difficulties when fMRIPrep tries to reuse FreeSurfer’s longitudinal results (https://github.com/poldracklab/smriprep/issues/4 and https://github.com/poldracklab/smriprep/issues/21).

1 Like