#!/bin/tcsh -ef # # make_average_surface # # Creates average surfaces and curvatures from a set of subjects. # set VERSION = '$Id: make_average_surface,v 1.1 2005/06/14 22:37:26 nicks Exp $'; set PrintHelp = 0; if ( $?SUBJECTS) then set SUBJECTS=($SUBJECTS) endif if ( $?SUBJECTS_DIR) then set SUBJECTS_DIR=($SUBJECTS_DIR) endif set average_subject=average set ddir = ${SUBJECTS_DIR}/${average_subject} # note: SUBJECTS can be set by --subjects # SUBJECTS_DIR can be set by --sdir # and average_subject can be set by --out if($#argv == 0) then # zero args is allowed only if SUBJECTS env var is declared if ( ! $?SUBJECTS) then goto usage_exit; endif endif 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 set PWD = `getpwdcmd`; if($status) exit 1; goto parse_args; parse_args_return: goto check_params; check_params_return: # # Begin script guts... # echo ==================== echo make_average_surface echo ==================== echo input subjects: ${SUBJECTS} echo output subject: ${average_subject} mkdir -p ${ddir} \ ${ddir}/surf \ ${ddir}/mri \ ${ddir}/mri/transforms \ ${ddir}/mri/T1 \ ${ddir}/mri/orig \ ${ddir}/mri/label if (-e ${SUBJECTS_DIR}/${average_subject} == 0) then mksubjdirs ${SUBJECTS_DIR}/${average_subject} else mkdir -p ${SUBJECTS_DIR}/${average_subject}/surf endif set primer_subject=$SUBJECTS[1]; cp ${SUBJECTS_DIR}/${primer_subject}/mri/T1/COR-.info \ ${SUBJECTS_DIR}/${average_subject}/mri/T1 cp ${SUBJECTS_DIR}/${primer_subject}/mri/orig/COR-.info \ ${SUBJECTS_DIR}/${average_subject}/mri/orig foreach hemi (lh rh) foreach c (sulc curv) echo mris_average_curvature... mris_average_curvature \ sulc \ ${hemi} \ sphere.reg \ $SUBJECTS \ ../${average_subject}/surf/${hemi}.avg_${c} end foreach s (orig white pial inflated) echo mris_make_average_surface... mris_make_average_surface \ -i 7 \ -o $s \ ${hemi} \ ${s}_avg sphere.reg \ ${average_subject} \ $SUBJECTS end cd ${SUBJECTS_DIR}/${average_subject}/surf pwd mris_smooth -n 5 ./${hemi}.white_avg ./${hemi}.smoothwm mris_inflate ./${hemi}.smoothwm ./${hemi}.inflated mris_curvature -a 10 -w ./${hemi}.white_avg cp ${hemi}.white_avg.H ${hemi}.curv cp ${FREESURFER_HOME}/average/surf/${hemi}.sphere.reg . ln -s -f ${hemi}.sphere.reg ${hemi}.sphere set echo=1 mris_average_curvature \ -o ${average_subject} \ curv \ ${hemi} \ sphere.reg \ $SUBJECTS \ ./${hemi}.curv mris_average_curvature \ -o ${average_subject} \ sulc \ ${hemi} sphere.reg \ $SUBJECTS \ ./${hemi}.sulc mris_average_curvature \ -o ${average_subject} \ thickness \ ${hemi} \ sphere.reg \ $SUBJECTS \ ./${hemi}.thickness end exit 0 ############################################### ############--------------################## parse_args: set cmdline = ($argv); set getting_subjects = 0; while( $#argv != 0 ) set flag = $argv[1]; if (! $getting_subjects) then shift; endif switch($flag) case "--subjects": if ( $#argv == 0) goto arg1moreerr; set SUBJECTS = $argv[1]; shift; # loop on getting variable number of subject names set getting_subjects = 1; # see 'default:' case breaksw case "--out": if ( $getting_subjects ) then # got em all, from --subjects variable arg loop set getting_subjects = 0; shift; endif if ( $#argv == 0) goto arg1err; set average_subject = $argv[1]; shift; set ddir = ${SUBJECTS_DIR}/${average_subject} breaksw case "--sd": case "--sdir": if ( $getting_subjects ) then # got em all, from --subjects variable arg loop set getting_subjects = 0; shift; endif if ( $#argv == 0) goto arg1err; set SUBJECTS_DIR = $argv[1]; shift; set SUBJECTS_DIR = `basename ${SUBJECTS_DIR}`; # remove trailing / set ddir = ${SUBJECTS_DIR}/${average_subject} breaksw case "--debug": case "--echo": set echo = 1; if ( $getting_subjects ) then set getting_subjects = 0; # got em all, from --subjects variable arg loop endif breaksw default: if ( $getting_subjects ) then # loop on getting variable number of subjects, # until a new flag is found, or no more args set SUBJECTS = "$SUBJECTS $argv[1]"; shift; set getting_subjects = 1; else echo ERROR: Flag $flag unrecognized. echo $cmdline exit 1 endif breaksw endsw end goto parse_args_return; ############--------------################## ############--------------################## check_params: if (! $?SUBJECTS) then echo "ERROR: no subjects declared!" echo "Either declare subjects in SUBJECTS variable," echo "or declare using --subjects argument." exit 1 endif if (! $?SUBJECTS_DIR) then echo "ERROR: SUBJECTS_DIR is not declared!" echo "Either set the SUBJECTS_DIR environment variable," echo "or declare using --sdir argument, the root directory" echo "for subject data files." exit 1 endif if(! -e $SUBJECTS_DIR ) then echo "ERROR: SUBJECTS_DIR $SUBJECTS_DIR does not exist." exit 1; endif if(! $?FREESURFER_HOME ) then echo "ERROR: environment variable FREESURFER_HOME not set." exit 1; endif if(! -e $FREESURFER_HOME ) then echo "ERROR: FREESURFER_HOME $FREESURFER_HOME does not exist." exit 1; endif goto check_params_return; ############--------------################## ############--------------################## arg1err: echo "ERROR: flag $flag requires one argument" exit 1 ############--------------################## ############--------------################## arg1moreerr: echo "ERROR: flag $flag requires one or more arguments" exit 1 ############--------------################## ############--------------################## usage_exit: echo "" echo "USAGE: make_average_surface" echo "" echo "Required Arguments" echo " --subjects ... " echo " : or declare subjects in SUBJECTS env var" echo "" echo "Optional Arguments" echo " --out : default name is 'average'" echo " --sdir " echo " --sd : same as --sdir" echo "" echo " --help : short descriptive help" echo " --version : script version info" echo " --echo : enable command echo, for debug" echo "" echo "See also: recon-all, make_final_surfaces, morph_subject" echo "" if(! $PrintHelp) exit 1; echo Version: $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 Creates average surfaces and curvatures from a set of subjects. Calls mris_average_curvature, mris_make_average_surface, mris_smooth, mris_inflate, and mris_curvature. GETTING HELP Run recon-all --help for extensive text on the reconstruction process. Or, send email to freesurfer@nmr.mgh.harvard.edu. Also see http://surfer.nmr.mgh.harvard.edu.