Multi-Echo fMRI

-fmri -methods
fMRI with multiple echoes
Author

Alexander Weber

Published

September 17, 2025

Modified

September 17, 2025

Intro

What is multi-echo fMRI? https://tedana.readthedocs.io/en/stable/multi-echo.html

Advantages: can tell motion and non-motion: if slope is non-normal, you can remove it.

Literature

  • lynch, charles j., jonathan d. power, matthew a. scult, marc dubin, faith m. gunning, and conor liston. “rapid precision functional mapping of individuals using multi-echo fmri.” cell reports 33, no. 12 (2020): 108540. https://doi.org/10.1016/j.celrep.2020.108540 .

  • lynch, charles j., immanuel elbau, and conor liston. “improving precision functional mapping routines with multi-echo fmri.” current opinion in behavioral sciences 40 (august 1, 2021): 113–19. https://doi.org/10.1016/j.cobeha.2021.03.017 .

Misc Notes

  • first echo time as early as possible
  • second echo as close to normal fmri echo as possible

Example: te1=12ms (this is the earliest the scanner can do); te2=30ms; te3= 48ms.

GE sequence example

adult -> other

minimum 3 echos

tr = 2,000

multiband aspect isn't super important

nova coil

hypermepi01

series type name time notes
3 3dt1 sag fspgr 3d .9x.9x.9 4:57 fov 24, matrix 256x256
4 3dt2 4:21 fov 24, matrix 256x256
5 fmri hyper mepi 12:20 3echo, tr=2000; te=30; fov 28.8; matrix 96; 45 slices, 370 volumes; cvs: image_size=96; pepolar=0
6 fmri hyper mepi 40s 3echo, tr=2000; te=30; fov 28.8; matrix 96; 45 slices, 370 volumes; cvs: image_size=96; pepolar=1
100/7? fmri se 18s pepolar=0
8 fmri se 18s pepolar=1
9 fmri hyper mepi 7mins 4echo, tr=2000; te=30; fov 28.8; matrix 96; 45 slices, 200? volumes; cvs: image_size=96; pepolar=0

total time = 44 mins

BIDS

Config file creation

t1w=3
fmri1=5
fmap1=6
fmap2=7

innert1=$(jq -n --arg dt anat \
                --arg md T1w \
                --arg fn "$(printf "%03g" $t1w)*" \
                '{datatype:$dt, suffix:$md, criteria:{SidecarFilename:$fn}}'
)
innerfmrie1=$(jq -n --arg dt func \
                   --arg md bold \
                   --arg cl task-rest_echo-1 \
                   --arg fn "$(printf "%03g" $fmri1)*" \
                   '{datatype:$dt, suffix:$md, custom_entities:$cl, criteria:{SidecarFilename:$fn, EchoNumber:1}, sidecarChanges:{TaskName:"rest"}}'
)
innerfmrie2=$(jq -n --arg dt func \
                   --arg md bold \
                   --arg cl task-rest_echo-2 \
                   --arg fn "$(printf "%03g" $fmri1)*" \
                   '{datatype:$dt, suffix:$md, custom_entities:$cl, criteria:{SidecarFilename:$fn, EchoNumber:2}, sidecarChanges:{TaskName:"rest"}}'
)
innerfmrie3=$(jq -n --arg dt func \
                   --arg md bold \
                   --arg cl task-rest_echo-3 \
                   --arg fn "$(printf "%03g" $fmri1)*" \
                   '{datatype:$dt, suffix:$md, custom_entities:$cl, criteria:{SidecarFilename:$fn, EchoNumber:3}, sidecarChanges:{TaskName:"rest"}}'
)
innerfmap1=$(jq -n --arg dt fmap \
                   --arg md epi \
                   --arg cl dir-PA \
                   --arg fn "$(printf "%03g" $fmap1)*" \
                   '{datatype:$dt, suffix:$md, custom_entities:$cl, criteria:{SidecarFilename:$fn}, sidecarChanges:{IntendedFor:["rest-echo1","rest-echo2","rest-echo3"], B0FieldIdentifier:"pepolar_fmap0"}}'
)
innerfmap2=$(jq -n --arg dt fmap \
                   --arg md epi \
                   --arg cl dir-AP \
                   --arg fn "$(printf "%03g" $fmap2)*" \
                   '{datatype:$dt, suffix:$md, custom_entities:$cl, criteria:{SidecarFilename:$fn}, sidecarChanges:{IntendedFor:["rest-echo1","rest-echo2","rest-echo3"], B0FieldIdentifier:"pepolar_fmap0"}}'
jq -n --arg dcm2niixOptions "-b y -ba y -z y -f '%3s_%f_%d_%r'" \
   --argjson descriptions "[$innert1, $innerfmrie1, $innerfmrie2, $innerfmrie3, $innerfmap1, $innerfmap2]" \
   '$ARGS.named' > BIDS_config.json

Creates:

{                                                                                                                                                                                                             
  "dcm2niixOptions": "-b y -ba y -z y -f '%3s_%f_%d_%r'",                                                                                                                                                     
  "descriptions": [                                                                                                                                                                                           
    {                                                                                                                                                                                                         
      "datatype": "anat",                                                                                                                                                                                     
      "suffix": "T1w",                                                                                                                                                                                 
      "criteria": {                                                                                                                                                                                           
        "SidecarFilename": "003*"                                                                                                                                                                             
      }                                                                                                                                                                                                       
    },                                                                                                                                                                                                        
    {                                                                                                                                                                                                         
      "id": "rest-echo1"
      "datatype": "func",                                                                                                                                                                                     
      "suffix": "bold",                                                                                                                                                                                
      "custom_entities": "task-rest_echo-1",                                                                                                                                                                     
      "criteria": {                                                                                                                                                                                           
        "SidecarFilename": "005*",                                                                                                                                                                            
        "EchoNumber": 1                                                                                                                                                                                       
      },                                                                                                                                                                                                      
      "sidecarChanges": {                                                                                                                                                                                     
        "TaskName": "rest"                                                                                                                                                                                    
      }                                                                                                                                                                                                       
    },                                                                                                                                                                                                        
    {                                                                                                                                                                                                         
      "id": "rest-echo2"
      "datatype": "func",                                                                                                                                                                                     
      "suffix": "bold",                                                                                                                                                                                
      "custom_entities": "task-rest_echo-2",                                                                                                                                                                     
      "criteria": {                                                                                                                                                                                           
        "SidecarFilename": "005*",                                                                                                                                                                            
        "EchoNumber": 2
      },
      "sidecarChanges": {
        "TaskName": "rest"
      }
    },
    {
      "id": "rest-echo3"
      "datatype": "func",
      "suffix": "bold",
      "custom_entities": "task-rest_echo-3",
      "criteria": {
        "SidecarFilename": "005*",
        "EchoNumber": 3
      },
      "sidecarChanges": {
        "TaskName": "rest"
      }
    },
    {
      "datatype": "fmap",
      "suffix": "epi",
      "custom_entities": "dir-PA",
      "criteria": {
        "SidecarFilename": "006*"
      },
      "sidecar_changes": {
        "IntendedFor": [
          "rest-echo1",
          "rest-echo2",
          "rest-echo3"
        ],
        "B0FieldIdentifier": "pepolar_fmap0"
      }
    },
    {
      "datatype": "fmap",
      "suffix": "epi",
      "custom_entities": "dir-AP",
      "criteria": {
        "SidecarFilename": "007*"
      "sidecar_changes": {
        "IntendedFor": [
          "rest-echo1",
          "rest-echo2",
          "rest-echo3"
        ],
        "B0FieldIdentifier": "pepolar_fmap0"
      }
    }
  ]
}

note EchoNumber and CustomLabels for func

dcm2bids -d sourcedata/${subid}/bids/ -p ${subid} -c sourcedata/${subid}/bids/BIDS_config.json -o . --forceDcm2niix

You then have to delete the bval and bvec files (not sure why they are made) from the resulting func folders:

rm sub-${subid}/func/*.bv*

bids-validator should then run without any major errors

Fastsurfer

see fastsurfer for information about Fastsurfer

Note

requires ~4Gb of GPU

Example:

docker run --gpus all -v /mnt/WeberLab/Projects/HYPER-MEPI/sub-${subid}/anat:/data -v /mnt/WeberLab/Projects/HYPER-MEPI/derivatives/FastSurfer:/output -v /home/aweber:/fs_license --rm fastsurfer:gpu --fs
_license /fs_license/license.txt --t1 /data/sub-${subid}_T1w.nii.gz --sid sub-${subid} --sd /output --parallel

Takes ~43 mins

fMRIprep

see fmriprep for information about fmriprep

Example:

fmriprep-docker $PWD $PWD/derivatives/fmriprep participant --participant-label ${subid} --fs-license-file /home/aweber/license.txt --dummy-scans 10 --use-aroma --me-output-echos -w /home/aweber/fmriprep_work --fs-subjects-dir $PWD/derivatives/FastSurfer

Took about 1.5 hours

Then run tedana

Back to top