#!/bin/csh -f # xhemireg # Create a new subject from an existing subject by left-right reversal # of the volumes. Should be enough to be able to include in # make_average_subject. # # surfaces: # Apply xfm: orig, white, pial, smoothwm, inflated # Copy to contra hemi: area, area.pial, curv, curv.pial, avg_curv, # inflated.{H,K}, sulc, thickness, jacobian_white, aparc, aparc.a2005s # Regenerate: qsphere, sphere, sphere.reg # Not sure: before, after, defect, uncorrected, *.nofix # # volumes: # Dont convert volumes in mri/orig # set VERSION = '$Id: xhemireg,v 1.12 2010/01/25 16:55:26 greve Exp $'; set subject = (); set srchemilist = (); set surfreg = xhemi.reg set UseNoNeg = 0 set NoRandomness = 1; set RngSeed = 1234 set DoReg = 1; set PrintHelp = 0; set outdir = (); set DoAllVol = 0; set vollist = (orig aseg aparc+aseg T1 brain brainmask nu norm) set ovlist = (curv sulc area area.pial curv.pial avg_curv \ inflated.H inflated.K thickness) set surflist = (orig white pial smoothwm inflated sphere) # For cortical registration, as found in $AvgCurvTifPath/$hemi.$AvgCurvTif set AvgCurvTifPath = "$FREESURFER_HOME/average" set AvgCurvTif = average.curvature.filled.buckner40.tif set cmdargs = ($argv); if($#argv == 0) goto usage_exit; set n = `echo $argv | egrep -e -version | wc -l` if($n != 0) then echo $VERSION exit 0; endif set n = `echo $argv | egrep -e -help | wc -l` if($n != 0) then set PrintHelp = 1; goto usage_exit; endif goto parse_args; parse_args_return: goto check_params; check_params_return: cd $SUBJECTS_DIR/$subject if($DoAllVol) then # Get a list of all mgh and mgz volumes in mri cd mri set vollist = (`ls *.mgz *.mgh | sed 's/.mgz//g' | sed 's/.mgh//g'`); cd .. endif if($#outdir == 0) then set xsubject = $subject/xhemi set outdir = $SUBJECTS_DIR/$xsubject endif echo "outdir is $outdir" mkdir -p $outdir/mri $outdir/surf $outdir/label $outdir/scripts @ nthhemi = 0; foreach srchemi ($srchemilist) @ nthhemi = $nthhemi + 1; if($srchemi == lh) set trghemi = rh; if($srchemi == rh) set trghemi = lh; set LF = $outdir/xhemireg.$srchemi.log if(-e $LF) mv $LF $LF.bak echo "Logfile is $LF" echo $0 | tee -a $LF echo $cmdargs | tee -a $LF echo $VERSION | tee -a $LF date | tee -a $LF uname -a | tee -a $LF pwd | tee -a $LF echo "setenv SUBJECTS_DIR $SUBJECTS_DIR "| tee -a $LF if($nthhemi == 1) then #-------------------------------------------------------------- echo "" | tee -a $LF echo "" | tee -a $LF date | tee -a $LF foreach vol ($vollist ) set invol = mri/$vol.mgz if(! -e $invol) then set invol = mri/$vol.mgh if(! -e $invol) then echo "ERROR: canot find $vol" | tee -a $LF exit 1; endif endif set cmd = (mri_convert $invol $outdir/mri/$vol.mgz \ --left-right-reverse) echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; end #-------------------------------------------------------------- echo ""| tee -a $LF echo ""| tee -a $LF date| tee -a $LF set reg = $outdir/lrrev.register.dat set cmd = (tkregister2_cmdl --targ mri/orig.mgz \ --mov $outdir/mri/orig.mgz \ --reg $reg --regheader --noedit) echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; endif #-------------------------------------------------------------- foreach surf ($surflist) echo "" | tee -a $LF echo "" | tee -a $LF date | tee -a $LF set cmd = (mri_surf2surf --s $subject --sval-xyz $surf \ --hemi $srchemi --tval-xyz --tval $outdir/surf/$trghemi.$surf \ --reg $reg) echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; end #-------------------------------------------------------------- foreach ov ($ovlist ) if(! -e surf/$srchemi.$ov) continue; echo "" | tee -a $LF echo "" | tee -a $LF date | tee -a $LF set cmd = (cp surf/$srchemi.$ov $outdir/surf/$trghemi.$ov) echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; end if($DoReg) then #------------------------------------------------------------------ set cmd = (recon-all -sb $xsubject -hemi $trghemi \ -surfreg -cortparc -cortparc2) if($nthhemi == 1) set cmd = ($cmd -talairach) echo "" | tee -a $LF echo "" | tee -a $LF date | tee -a $LF echo $cmd | tee -a $LF $cmd | tee -a $LF if($status) exit 1; #-------------------------------------------------------------- cp $outdir/surf/$trghemi.sphere.reg \ surf/$srchemi.$trghemi.xhemi.reg |& tee -a $LF if($status) exit 1; endif end # Loop over srchemi #-------------------------------------------------------------- echo "" | tee -a $LF echo "" | tee -a $LF date | tee -a $LF echo "xhemireg 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 "--hemi": if ( $#argv < 1) goto arg1err; set srchemilist = $argv[1]; shift; breaksw case "--lh": set srchemilist = lh; breaksw case "--rh": set srchemilist = rh; breaksw case "--reg": if ( $#argv < 1) goto arg1err; set surfreg = $argv[1]; shift; breaksw case "--all-vol": set DoAllVol = 1; set DoReg = 0; breaksw case "--zilles": set vollist = (orig T1 brain brainmask nu norm) set DoReg = 0; breaksw case "--o": if ( $#argv < 1) goto arg1err; set outdir = $argv[1]; shift; breaksw case "--no-reg": set DoReg = 0; 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 a subject id" exit 1; endif if(! -e $SUBJECTS_DIR/$subject) then echo "ERROR: cannot find $subject" exit 1; endif if($#srchemilist == 0) set srchemilist = (lh rh) 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 "xhemireg" echo "" echo " --s subject" echo " --lh : srchemi = lh (map from left to right) " echo " --rh : srchemi = rh (map from right to left) " echo " --reg surfreg : output will be srchemi.trghemi.surfreg (def xhemi.reg)" echo "" echo " --o outdir : output dir (subject/xhemireg.hemi by def)" echo " --noreg : do not actually perform the reg, just set up dir" echo " --version : print version and exit" echo " --help : print help and exit" echo "" if($PrintHelp) \ 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