#!/bin/tcsh -f # mni152reg set VERSION = '$Id: mni152reg,v 1.4.2.1 2013/10/08 15:21:31 greve Exp $'; set subject = (); set res = 2; set outreg = (); set cleanup = 1; set LF = (); set inputargs = ($argv); set PrintHelp = 0; if($#argv == 0) goto usage_exit; set n = `echo $argv | grep -e -help | wc -l` if($n != 0) then set PrintHelp = 1; goto usage_exit; endif set n = `echo $argv | grep -e -version | wc -l` if($n != 0) then echo $VERSION exit 0; endif goto parse_args; parse_args_return: goto check_params; check_params_return: set sd = $SUBJECTS_DIR/$subject if($#outreg == 0) then set LF = $sd/scripts/mni152reg.log set outreg = $sd/mri/transforms/reg.mni152.$res"mm.dat" else set LF = $outreg.log endif rm -f $LF echo "Log file for mni152reg" >> $LF date | tee -a $LF echo "" | tee -a $LF echo "setenv SUBJECTS_DIR $SUBJECTS_DIR" | tee -a $LF echo "cd `pwd`" | tee -a $LF echo $0 $inputargs | tee -a $LF echo "" | tee -a $LF uname -a | tee -a $LF if(-e /scratch) then set tmpdir = /scratch/mni152reg.$$ else set tmpdir = $SUBJECTS_DIR/$subject/tmp/mni152reg.$$ endif set cmd = (fslregister --mov $mni152 --s $subject --reg $outreg --dof 12) set cmd = ($cmd --tmp $tmpdir --cleanup) echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; if(-e $SUBJECTS_DIR/$subject/mri/) then set orig = $SUBJECTS_DIR/$subject/mri/orig.mgz set mni152orig = $SUBJECTS_DIR/$subject/mri/mni152.orig.mgz set cmd = (mri_vol2vol --mov $mni152 --targ $orig --reg $outreg --inv --o $mni152orig) echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; endif date | tee -a $LF echo "mni152reg done" | tee -a $LF exit 0 ############################################### ############--------------################## parse_args: set cmdline = ($argv); while( $#argv != 0 ) set flag = $argv[1]; shift; switch($flag) case "--s": if($#argv < 1) goto arg1err; set subject = $argv[1]; shift; breaksw case "--o": if($#argv < 1) goto arg1err; set outreg = $argv[1]; shift; breaksw case "--1": set res = 1; breaksw case "--2": set res = 2; breaksw case "--debug": set verbose = 1; set echo = 1; breaksw default: echo ERROR: Flag $flag unrecognized. echo $cmdline exit 1 breaksw endsw end goto parse_args_return; ############--------------################## ############--------------################## check_params: if($#subject == 0) then echo "ERROR: must spec subject" exit 1; endif if(! -e $SUBJECTS_DIR/$subject) then echo "ERROR: cannot find $subject" exit 1; endif set mni152 = $FSLDIR/data/standard/MNI152_T1_$res"mm_brain.nii.gz" if(! -e $mni152) then echo "ERROR: cannot find $mni152" exit 1; endif goto check_params_return; ############--------------################## ############--------------################## arg1err: echo "ERROR: flag $flag requires one argument" exit 1 ############--------------################## ############--------------################## usage_exit: echo "" echo "mni152reg --s subject" echo "" echo " --1 : register to 1mm target (instead of 2mm)" echo " --o outreg : explicity set output" echo "" if(! $PrintHelp) exit 1; echo $VERSION cat $0 | awk 'BEGIN{prt=0}{if(prt) print $0; if($1 == "BEGINHELP") prt = 1 }' exit 1; #---- Everything below here is printed out as part of help -----# BEGINHELP Registers the FreeSurfer subject to the FSL MNI 152 brain to create a tkregister-style registration matrix. The registration created by this program is primarily for integrating FreeSurfer with higher level FSL functional analysis (GFEAT) of a SINGLE subject, particularly for preparing for a surface-based group analysis. Currently, this program is just a front-end for the FSL FLIRT program. To check the registration, run: tkregister2 --mov $FSLDIR/data/standard/MNI152_T1_2mm_brain.nii.gz \ --reg $SUBJECTS_DIR/$subject/mri/transforms/reg.mni152.2mm.dat \ --surf Note that the surfaces will not line up with the mni152 because this is a volumetric registration. You should also check the registration with your GFEAT results: tkregister2 --mov subject.gfeat/mean_func.nii.gz \ --reg $SUBJECTS_DIR/$subject/mri/transforms/reg.mni152.2mm.dat \ --surf This matrix can also be used with tkmedit, tksurfer, mri_vol2vol, mri_vol2surf, and any other FreeSurfer program that uses a tkregister-style registration matrix. The mni152 registration target will be either MNI152_T1_1mm_brain.nii.gz or MNI152_T1_2mm_brain.nii.gz and is assumed to be in $FSLDIR/data/standard. 2mm is the default because this is what the FSL functional analysis uses. To create the 1mm reg, add --1 to the command line. The output will be either reg.mni152.1mm.dat or reg.mni152.2mm.dat, depending upon the resolution selected. The output will be stored in $SUBJECTS_DIR/$subject/mri/transforms ---------------------------------------------------------------------- Example usage with FSL GFEAT of a single subject: tkmedit subject orig.mgz -aparc+aseg \ -overlay subject.gfeat/cope1.feat/stats/zstat1.nii.gz \ -reg $SUBJECTS_DIR/$subject/mri/transforms/reg.mni152.2mm.dat mri_vol2surf --mov subject.gfeat/cope1.feat/stats/zstat1.nii.gz \ -reg $SUBJECTS_DIR/$subject/mri/transforms/reg.mni152.2mm.dat \ --hemi lh --projfrac 0.5 --o lh.subject.zstat1.mgh tksurfer subject lh inflated -aparc -overlay lh.subject.zstat1.mgh ---------------------------------------------------------------------- Example usage with FSL GFEAT of multiple subjects in preparation for a surface-based group analysis: # Map the copes mris_preproc --hemi lh --target fsaverage \ --iv subject1.gfeat/cope1.feat/stats/cope1.nii.gz \ $SUBJECTS_DIR/$subject1/mri/transforms/reg.mni152.2mm.dat \ --iv subject2.gfeat/cope1.feat/stats/cope1.nii.gz \ $SUBJECTS_DIR/$subject2/mri/transforms/reg.mni152.2mm.dat \ --iv subject3.gfeat/cope1.feat/stats/cope1.nii.gz \ $SUBJECTS_DIR/$subject3/mri/transforms/reg.mni152.2mm.dat \ --out lh.fsaverage.cope1.mgh # Map the varcopes mris_preproc --hemi lh --target fsaverage \ --iv subject1.gfeat/cope1.feat/stats/varcope1.nii.gz \ $SUBJECTS_DIR/$subject1/mri/transforms/reg.mni152.2mm.dat \ --iv subject2.gfeat/cope1.feat/stats/varcope1.nii.gz \ $SUBJECTS_DIR/$subject2/mri/transforms/reg.mni152.2mm.dat \ --iv subject3.gfeat/cope1.feat/stats/varcope1.nii.gz \ $SUBJECTS_DIR/$subject3/mri/transforms/reg.mni152.2mm.dat \ --out lh.fsaverage.varcope1.mgh