User Tools

Site Tools


biac:analysis:physiological

This is an old revision of the document!


Physiological Correction Methods

Generate resampled TSV from raw GE physio files automatically copied from the scanners

Stock GE physio is hardcoded by GE to be 25Hz for respiration and 100Hz for pulse. The continuous gating files will start 30 seconds before the scan is triggered.

[cmp12@blade17 20211218_03399]$ /usr/local/packages/biacpython/bin/convert_GEphysio.py --help
usage: convert_GEphysio.py [-h] --xmlh XMLFNAME [--json JSONFNAME] --physdir
                           PHYSDIR [--bidsout] [--afnislicetime]
                           [--delay DELAYTIME]

create 100Hz resampled TSV from raw GE physio data

optional arguments:
  -h, --help         show this help message and exit
  --xmlh XMLFNAME    BXH data
  --json JSONFNAME   JSON data
  --physdir PHYSDIR  physio directory
  --bidsout          write BIDS specific TSV data and json sidecar
  --afnislicetime    write AFNI slicetiming 1D files for RetroTS and tshift
  --delay DELAYTIME  time past ending time of functional to end search for
                     matching physio files

Provide a valid BXH ( and JSON if possible ) and a path to your subject physio folder to convert_GEphysio.py function. If the BXH does not contain slice timing information the JSON is required.

This function will search the physio directory for physio files within a specified time range based on the functional scantime + timepoints + a default delay in writing.

If matching respiration and pulse files are found theoretical scan triggers on each TR will be created and the respiration and pulse data will be resampled to 100Hz and locked to the onset of the scan. If disdaqs are detected in the BXH the corresponding physio time will be discarded.

/usr/local/packages/biacpython/bin/convert_GEphysio.py --xmlh Data/Func/20211218_03399/bia6_03399_004_01.bxh --physdir Data/Func/20211218_03399 --bidsout

By default you will get a 100Hz resampled TSV with headers and timing.

The –bidsout flag will output a TSV without headers and a BIDS sidecar with appropriate column labels and sampling frequency.

The –afnislicetime flag will output two 1D slicetiming files to be used with RetroTS.py and afni_proc.py directly.

Using afni

You can create regressors for afni preprocessing from output files above using RetroTS.py

python3 /usr/local/packages/afni/21.1.04/RetroTS.py -phys_file series013_01_physio.tsv -phys_json series013_01_physio.json -n 42 -v 2 -slice_order series013_01_slicetimingV.1D -prefix  series013_01

-n #slices
-v TR in seconds

RetroTS will produce “slibase” regressors to be used with retroicor during afni preprocessing, or afni retroicor regression

CIGAL pdigm specific

Currently this assumes that you have recorded your physiological responses through Cigal. Also, these types of corrections should be done before any type of slice-time correction or pre-processing.

physio_run.py

There is currently a tool for running AFNI-based correction of functional image data using physiological data. In the future it may support FSL-based correction.

physio_run.py --help
Usage: 
physio_run.py /path/to/run4.bxh /path/to/pdigm5_12345_4_2 OUTPUTPREFIX [ -f FORMAT ]

Program to produce formatted physiological data:
    Data will be corrected and recreated from the pdigm file based on information from run data
    BXH and PDIGM required
    OUTPUTPREFIX is the prefix for the physio-corrected output
    FORMAT: what pipeline to use, only supports 'afni' for now (default)

Options:
  -h, --help            show this help message and exit
  -f string, --format=string
                        output format ( afni )

physio_run.py runs physio_create.py under the hood to write physiological data in the format AFNI requires (see below for how to run physio_create.py yourself to create data usable by FSL), and then runs various AFNI tools to actually create the physio-corrected image data.

The outputs will be OUTPUTPREFIX.bxh, OUTPUTPREFIX.nii.gz, OUTPUTPREFIX_cardiac.txt and OUTPUTPREFIX_respiration.txt. OUTPUTPREFIX.bxh can be used as the input for resting_pipeline.py.

physio_create.py

The underlying tool used by physio_run.py to create the regressors is physio_create.py. It takes an input image along with your cigal pdigm file to create various types of corrected text files to be used for physio corrections in a number of different packages.

This tool uses various fields from the bxh and pdigm file to output “corrected” (physiological) data/regressors. “Corrected” here means accounting for potential time-locking issues, different TR in the cigal recording verses the actual data acquisition, ddqs, etc.

The python tool will call cigal functions directly to do the corrections, then output new text data in the format requested.

physio_create.py --help
physio_create.py --bxh /path/to/run4.bxh --pdigm /path/to/pdigm5_12345_4_2 -f fsl --outpath /here/ --hz 100

Program to produce formatted physiological data:
    Data will be corrected and recreated from the pdigm file based on information from run data
    BXH and PDIGM required
    OUTPATH defaults to PWD
    HZ sampling rate
    FORMAT: defaults to fsl
        - fsl = cardio,resp,TR pulse ( 3 column file ) 
        - npm = time,cardio,resp ( 3 column file )
        - afni = cardiac.txt, respiration.txt, script.m


Options:
  -h, --help            show this help message and exit
  -b FILE, --bxh=FILE   bxh file for run
  -p FILE, --pdigm=FILE
                        pdigm file for run
  -f string, --format=string
                        output format ( fsl,npm,afni )
  --hz                  sampling rate is hz ( 100 )
  -o PATH, --outpath=PATH
                        location to store output files

AFNI details

This section details the steps that the tool physio_run.py (described above) does for you automatically.

Create the AFNI formated physiological text data.

physio_create.py -b Data/Func/20111025_12345/run004.bxh -p Data/Behav/12345/pdigm5_12345_4_2 -f afni --hz 100 

This would create my “cardiac.txt” and “respiration.txt”, and a MATLAB script script.m that will create the regressors, and has the following contents:

addpath /usr/local/packages/MATLAB/afni/
Opt.Respfile = '/path/to/respiration.txt'
Opt.Cardfile = '/path/to/cardiac.txt'
Opt.VolTR = 1.5
Opt.Nslices = 34
Opt.PhysFS = 100
Opt.SliceOrder = 'alt+z'
%please choose the correct order if not running interleaved: **'alt+z'**/'alt-z'/'seq+z'/'seq-z'
 
RetroTS(Opt)

The output of runnning the MATLAB script will be “oba.slibase.1D”, which is a text file containing regressors to remove from your data on a slice-by-slice basis.

Convert your data to 4D nifti if you haven't already done so:

bxh2analyze --niigz -s input.bxh run004

Create the afni script which you will use to actually run the 3dretroicor functionality:

afni_proc.py -subj_id 12345 -dsets run004.nii.gz -blocks despike -do_block ricor -tcat_remove_first_trs 0 -ricor_regs *.slibase.1D -ricor_regs_nfirst 0 -ricor_regre
ss_method 'per-run'

The result of the above command would be a tcsh script, which would run the despiking and 3dretroicor correction only. Run it:

tcsh -xef proc.12345 |& tee output.proc.12345

There will be a resulting folder with all the afni data inside. You can convert the afni HEAD/BRIK to a nifti file, then proceed to whatever you're doing afterwards:

#convert afni to nii, create bxh
bxh2analyze --niigz -s 12345.results/pb02.12345.r01.ricor+orig.BRIK physiocorrected

Run the resting state pipeline:

resting_pipeline.py -f physiocorrected.bxh -s 0,1,2,3,4,5,6,7 -p func --sliceorder odd
biac/analysis/physiological.1642523370.txt.gz · Last modified: 2022/01/18 16:29 by cmp12