Once you have loaded the data onto the CfN cluster, it must be preprocessed and analyzed. Here are some demonstration scripts which have been successfully used to analyze a continuous carry-over experiment.
See also arrangement_of_data_directory.
This step takes the raw data files and produces an Anatomy
directory, containing the anatomical images in various formats, and one directory per scan containing the 4D data files.
The recommended way to do this is to have a single prep script which applies to all subjects, and then a file for each subject which calls that master file, defining various parameters.
Here is the master VBP file:
## Core script for processing experiments # Prep anatomy runonce shellcommand "mkdir -p Anatomy" runonce shellcommand "mkdir -p Anatomy/raw" runonce shellcommand "mkdir -p Models" runonce shellcommand "vb2tes $RawEPI Anatomy/Functional.tes" runonce shellcommand "tes2cub Anatomy/Functional.tes Anatomy/Functional.cub" runonce shellcommand "rm Anatomy/Functional.tes" runonce shellcommand "vb2cub $MPRAGE1 Anatomy/Anatomical.cub" runonce shellcommand "mv $MPRAGE1 Anatomy/raw/" runonce shellcommand "mv $FirstLoc Anatomy/raw/" runonce shellcommand "mv $RawEPI Anatomy/raw/" # Align origins of functional and anatomical data runonce shellcommand "setorigin -m Anatomy/Anatomical.cub Anatomy/Functional.cub" runonce shellcommand "setorigin -m Anatomy/Functional.cub Anatomy/Anatomical.cub" runonce shellcommand "resample Anatomy/Anatomical.cub Anatomy/Display.cub -ra Anatomy/Functional.cub" # Perform normalization of anatomicals runonce spm2_norm_calc $DIR/Anatomy/ $paramfile Anatomical.cub $refvol $xa $ya $za $bb_anat runonce spm2_norm_apply3d $DIR/Anatomy $DIR/Anatomy/$paramfile $anat nAnatomical.cub $xa $ya $za $bb_anat runonce spm2_norm_apply3d $DIR/Anatomy $DIR/Anatomy/$paramfile $func nFunctional.cub $xf $yf $zf $bb_func runonce spm2_norm_apply3d $DIR/Anatomy $DIR/Anatomy/$paramfile $anat nDisplay.cub $xa $ya $zf $bb_disp # Perform noise reduction, skull-stripping and inhomogeneity correction with FSL tools runonce shellcommand "vb2img Anatomy/nAnatomical.cub Anatomy/nAnatomical.img[small]" runonce shellcommand "/usr/local/fsl/bin/susan_smooth Anatomy/nAnatomical 23.3302 Anatomy/nAnatomical 3 3D 1 0" runonce shellcommand "/usr/local/fsl/bin/bet Anatomy/nAnatomical Anatomy/nAnatomical_BET -f 0.5 -g 0 -o -m" runonce shellcommand "merge3d Anatomy/nAnatomical.img Anatomy/nAnatomical_BET_mask.img -o Anatomy/nAnatomical_BET.img -m" runonce shellcommand "/usr/local/fsl/bin/fast -t1 -c 3 -or -ob -od Anatomy/nAnatomical_BET_FAST Anatomy/nAnatomical_BET" runonce shellcommand "merge3d Anatomy/nAnatomical.img Anatomy/nAnatomical_BET_FAST_bias.img -o Anatomy/nAnatomical.img -m" runonce shellcommand "rm Anatomy/nAnatomical_BET_FAST_restore.hdr" runonce shellcommand "rm Anatomy/nAnatomical_BET_FAST_restore.img" runonce shellcommand "rm Anatomy/nAnatomical_BET_overlay.hdr" runonce shellcommand "rm Anatomy/nAnatomical_BET_overlay.img" runonce shellcommand "rm Anatomy/nAnatomical_BET.hdr" runonce shellcommand "rm Anatomy/nAnatomical_BET.img" runonce shellcommand "rm Anatomy/nAnatomical_BET_mask.hdr" runonce shellcommand "rm Anatomy/nAnatomical_BET_mask.img" runonce shellcommand "mv Anatomy/nAnatomical_BET_FAST_bias.img Anatomy/nAnatomical_bias.img" runonce shellcommand "mv Anatomy/nAnatomical_BET_FAST_bias.hdr Anatomy/nAnatomical_bias.hdr" runonce shellcommand "mv Anatomy/nAnatomical_BET_FAST_seg.hdr Anatomy/nAnatomical_seg.hdr" runonce shellcommand "mv Anatomy/nAnatomical_BET_FAST_seg.img Anatomy/nAnatomical_seg.img" runonce shellcommand "mv Anatomy/nAnatomical.hdr Anatomy/nAnatomical_fsl.hdr" runonce shellcommand "mv Anatomy/nAnatomical.img Anatomy/nAnatomical_fsl.img" runonce shellcommand "resample Anatomy/nAnatomical_fsl.img Anatomy/Anat_ISO_SAG_TAL.img[small] -xx -49 1 256 -yy -16 1 256 -zz -77 1 256" runonce shellcommand "vborient Anatomy/Anat_ISO_SAG_TAL.img Anatomy/Anat_ISO_SAG_TAL.img[small] ASR -from RPI" # make the data directory and raw subdirectory # make the tes file from the raw # mv the raw Siemens data to the raw subdirectory shellcommand "mkdir $scan" shellcommand "mkdir $scan/raw" vb2tes $raw $scan/$scan.tes shellcommand "mv $raw $scan/raw/" # process the tes file shellcommand "sliceacq -i $scan/$scan.tes -o $scan/$scan.tes -n" # NOTE THAT THE FOLLOWING LINE MUST BE CHANGED TO CORRESPOND TO YOUR NUMBER OF TRs. # Here we are dropping the first 5 TRs to account for the CCO overlap. shellcommand "vb2tes $scan/$scan.tes $scan/$scan.tes -i 5-157" realign $scan/$scan.tes $scan/$scan.tes 0.5 Anatomy/Functional.cub shellcommand "setorigin -c Anatomy/Functional.cub $scan/$scan.tes spm2_norm_apply4d $DIR/$scan $DIR/Anatomy/$paramfile $scan.tes $scan.tes $xf $yf $zf $bb_func shellcommand "vbsmooth -vox $smooth $smooth $smooth -o $scan/s$scan.tes $scan/$scan.tes # threshold and calculate global signal and power spectrum threshold $scan/$scan.tes $scan/$scan.tes $thresh calcgs $scan/$scan.tes calcps $scan/$scan.tes # same thing for smoothed threshold $scan/s$scan.tes $scan/s$scan.tes $thresh calcgs $scan/s$scan.tes calcps $scan/s$scan.tes ###################### # Create the average power spectrum and one-over-f file ##################### ## NOTE THAT THE FOLLOWING LINE MUST BE CHANGED TO CORRESPOND TO YOUR NUMBER OF TRs. # This number should correspond to the numbers you used above (157 - 5 + 1 == 153) runonce shellcommand "vbfit 3000 153 *_*/*_PS.ref -o Models/OneOverF.ref"
Here is a subject file which calls the above:
script /ajet/ddrucker/experiments/dioctmoons/PrepScripts/VBPs/dioctmoons_prep.vbp SEQUENCENAME RawPrep_A011609I DIR /ajet/ddrucker/dioctmoons_data/subjects/A011609I PRIORITY 3 globals FirstLoc=0001_localizer globals MPRAGE1=0008_t1_mpr_AX_MPRAGE globals RawEPI=0002_ep2d_pace FILE scan=A011609I_01 raw=0003_ep2d_pace_159 FILE scan=A011609I_02 raw=0004_ep2d_pace_159 FILE scan=A011609I_03 raw=0005_ep2d_pace_159 FILE scan=A011609I_04 raw=0006_ep2d_pace_159 FILE scan=A011609I_05 raw=0007_ep2d_pace_159 LOGGING 2 globals thresh=200 globals smooth=3 globals xa=1 globals ya=1 globals za=1 globals xf=3 globals yf=3 globals zf=3 globals refvol=/usr/local/spm2/templates/T1.mnc globals paramfile=params.mat globals anat=Anatomical.cub globals func=Functional.cub globals "bb_anat=[-79,-112,-51;79,76,86]" globals "bb_func=[-78,-111,-50;78,75,85]" globals "bb_disp=[-79,-112,-50;79,76,85]"
This file is parsed with vbprep.
Next, a GDS script generates your .G file:
gsession /ajet/ddrucker/dioctmoons_data/subjects/A011609I/Models/A011609I_adapts_GLM scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_01/sA011609I_01.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_02/sA011609I_02.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_03/sA011609I_03.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_04/sA011609I_04.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_05/sA011609I_05.tes TR 3000 newcov single /ajet/ddrucker/experiments/dioctmoons/PrepScripts/REFs/main.ref cov-name main option convolve /pkg/VoxBo/elements/filters/Eigen1.ref 2000 end newcov single /ajet/ddrucker/experiments/dioctmoons/PrepScripts/REFs/rept.ref cov-name rept option convolve /pkg/VoxBo/elements/filters/Eigen1.ref 2000 end newcov single /ajet/ddrucker/experiments/dioctmoons/PrepScripts/REFs/new.ref cov-name new option convolve /pkg/VoxBo/elements/filters/Eigen1.ref 2000 end newcov single /ajet/ddrucker/experiments/dioctmoons/PrepScripts/REFs/adaptP.ref cov-name d1_diff option convolve /pkg/VoxBo/elements/filters/Eigen1.ref 2000 end newcov single /ajet/ddrucker/experiments/dioctmoons/PrepScripts/REFs/adaptQ.ref cov-name d2_diff option convolve /pkg/VoxBo/elements/filters/Eigen1.ref 2000 end newcov single /ajet/ddrucker/experiments/dioctmoons/PrepScripts/REFs/adaptOrthoEuclid.ref cov-name adaptOrthoEuclid option convolve /pkg/VoxBo/elements/filters/Eigen1.ref 2000 end # include the no-interest covs include A011609I.nointerest
The following file is included by reference:
newcov global-signal end newcov scan-effect end newcov intercept end newcov spike "333,444,555" end
This file is parsed with gds
Next, create the GLM.
lows 25 highs 1 orderg 765 pri 3 audit no meannorm yes driftcorrect yes glm A011609I_adapts_GLM noisemodel /ajet/ddrucker/dioctmoons_data/subjects/A011609I/Models/OneOverF.ref gmatrix /ajet/ddrucker/dioctmoons_data/subjects/A011609I/Models/A011609I_adapts_GLM/A011609I_adapts_GLM.G dirname /ajet/ddrucker/dioctmoons_data/subjects/A011609I/Models/A011609I_adapts_GLM scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_01/sA011609I_01.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_02/sA011609I_02.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_03/sA011609I_03.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_04/sA011609I_04.tes scan /ajet/ddrucker/dioctmoons_data/subjects/A011609I/A011609I_05/sA011609I_05.tes end
This file is parsed with vbmakeglm.