#!/bin/tcsh -f # # xhemi-tal # # Computes the talairach.xfm for xhemi (see xhemireg) based # on the original (unflipped) talairach.xfm # # Original Author: Doug Greve # # Copyright © 2021 The General Hospital Corporation (Boston, MA) "MGH" # # Terms and conditions for use, reproduction, distribution and contribution # are found in the 'FreeSurfer Software License Agreement' contained # in the file 'LICENSE' found in the FreeSurfer distribution, and here: # # https://surfer.nmr.mgh.harvard.edu/fswiki/FreeSurferSoftwareLicense # # Reporting: freesurfer@nmr.mgh.harvard.edu # set VERSION = 'xhemi-tal dev'; set subject = (); set tmpdir = (); 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 source $FREESURFER_HOME/sources.csh goto parse_args; parse_args_return: goto check_params; check_params_return: set StartTime = `date`; set tSecStart = `date '+%s'`; set sd = $SUBJECTS_DIR/$subject set outdir = $sd/xhemi/mri/transforms mkdir -p $outdir if($#tmpdir == 0) then set tmpdir = `fs_temp_dir --scratch --base $outdir` endif mkdir -p $tmpdir # Set up log file if($#LF == 0) set LF = $outdir/xhemi-tal.log if($LF != /dev/null) rm -f $LF echo "Log file for xhemi-tal" >> $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 cat $FREESURFER_HOME/build-stamp.txt | tee -a $LF echo $VERSION | tee -a $LF uname -a | tee -a $LF #======================================================== set orig = $sd/mri/orig.mgz set N = $tmpdir/N.fsl set cmd = (mri_info --o $N --vox2ras $orig) echo $cmd $cmd | tee -a $LF if($status) exit 1; set T = $tmpdir/T.fsl set cmd = (mri_info --o $T --vox2ras-tkr $orig) echo $cmd $cmd | tee -a $LF if($status) exit 1; set V = $tmpdir/V.fsl rm -f $V echo "-1 0 0 1" >> $V echo " 0 1 0 0" >> $V echo " 0 0 1 0" >> $V echo " 0 0 0 1" >> $V set talxfm = $sd/mri/transforms/talairach.xfm set X = $tmpdir/X.fsl tail -n 3 $talxfm | sed 's/;//g' > $X echo "0 0 0 1" >> $X set Xxhemi = $tmpdir/Xxhemi.fsl set cmd = (mri_matrix_multiply -fsl -om $Xxhemi \ -im $X -im $N -iim $T -iim $V -im $T -iim $N) echo $cmd $cmd | tee -a $LF if($status) exit 1; echo "" cat $Xxhemi | tee -a $LF echo "" set talxfmxhemi = $sd/xhemi/mri/transforms/talairach.xfm rm -f $talxfmxhemi echo "MNI Transform File" >> $talxfmxhemi echo "% xhemi-tal" >> $talxfmxhemi echo "" >> $talxfmxhemi echo "Transform_Type = Linear;" >> $talxfmxhemi echo "Linear_Transform = " >> $talxfmxhemi cat $tmpdir/Xxhemi.fsl | \ awk '{if(NR==1 || NR==2) print $0;if(NR==3) print $0";"}' \ >> $talxfmxhemi echo "" | tee -a $LF cat $talxfmxhemi | tee -a $LF echo "" | tee -a $LF #======================================================== # Cleanup if($cleanup) rm -rf $tmpdir # Done echo " " |& tee -a $LF set tSecEnd = `date '+%s'`; @ tSecRun = $tSecEnd - $tSecStart; echo "Started at $StartTime " |& tee -a $LF echo "Ended at `date`" |& tee -a $LF echo "Xhemi-Tal-Run-Time-Sec $tSecRun" |& tee -a $LF echo " " |& tee -a $LF echo "xhemi-tal 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 "--log": if($#argv < 1) goto arg1err; set LF = $argv[1]; shift; breaksw case "--nolog": case "--no-log": set LF = /dev/null breaksw case "--tmp": case "--tmpdir": if($#argv < 1) goto arg1err; set tmpdir = $argv[1]; shift; set cleanup = 0; breaksw case "--nocleanup": set cleanup = 0; breaksw case "--cleanup": set cleanup = 1; 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 if(! -e $SUBJECTS_DIR/$subject/xhemi) then echo "ERROR: cannot find $subject/xhemi" echo "Run xhemireg " exit 1; endif goto check_params_return; ############--------------################## ############--------------################## arg1err: echo "ERROR: flag $flag requires one argument" exit 1 ############--------------################## arg2err: echo "ERROR: flag $flag requires two arguments" exit 1 ############--------------################## ############--------------################## usage_exit: echo "" echo "xhemi-tal --s subject" 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 Computes the talairach.xfm for xhemi (see xhemireg) based on the original (unflipped) talairach.xfm