I've attached a script that should do this. Let me know if this does not
work
doug
On 01/13/2014 02:40 PM, Shani Ben Amitay wrote:
Hi
I have a volume of diffusion index in freesurfer dimensions and I
would like to compare the left and right hemis.
That means I need to register the volume/surface to the fsaverage_sym
using xhemi?Is there more documentation about this tool?
Thnanks!
Shani
On Mon, Jan 13, 2014 at 6:12 PM, Douglas N Greve
<gr...@nmr.mgh.harvard.edu <mailto:gr...@nmr.mgh.harvard.edu>> wrote:
What do you mean by a volume of a single subject? We have tools to do
surface-based interhemispheric analysis
http://surfer.nmr.mgh.harvard.edu/fswiki/Xhemi
doug
On 01/13/2014 05:28 AM, Shani Ben Amitay wrote:
> Hello freesurfers
>
> I would like to preform inter-hemispheric comparison (or
> hemispheric asymmetry) for a volume of a single subject.
> what would be the best way to do it?
>
> Thanks
>
> Shani
>
>
> _______________________________________________
> Freesurfer mailing list
> Freesurfer@nmr.mgh.harvard.edu
<mailto:Freesurfer@nmr.mgh.harvard.edu>
> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer
--
Douglas N. Greve, Ph.D.
MGH-NMR Center
gr...@nmr.mgh.harvard.edu <mailto:gr...@nmr.mgh.harvard.edu>
Phone Number: 617-724-2358 <tel:617-724-2358>
Fax: 617-726-7422 <tel:617-726-7422>
Bugs: surfer.nmr.mgh.harvard.edu/fswiki/BugReporting
<http://surfer.nmr.mgh.harvard.edu/fswiki/BugReporting>
FileDrop: https://gate.nmr.mgh.harvard.edu/filedrop2
www.nmr.mgh.harvard.edu/facility/filedrop/index.html
<http://www.nmr.mgh.harvard.edu/facility/filedrop/index.html>
Outgoing:
ftp://surfer.nmr.mgh.harvard.edu/transfer/outgoing/flat/greve/
_______________________________________________
Freesurfer mailing list
Freesurfer@nmr.mgh.harvard.edu <mailto:Freesurfer@nmr.mgh.harvard.edu>
https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer
The information in this e-mail is intended only for the person to
whom it is
addressed. If you believe this e-mail was sent to you in error and
the e-mail
contains patient information, please contact the Partners
Compliance HelpLine at
http://www.partners.org/complianceline . If the e-mail was sent to
you in error
but does not contain patient information, please contact the
sender and properly
dispose of the e-mail.
--
Douglas N. Greve, Ph.D.
MGH-NMR Center
gr...@nmr.mgh.harvard.edu
Phone Number: 617-724-2358
Fax: 617-726-7422
Bugs: surfer.nmr.mgh.harvard.edu/fswiki/BugReporting
FileDrop: https://gate.nmr.mgh.harvard.edu/filedrop2
www.nmr.mgh.harvard.edu/facility/filedrop/index.html
Outgoing: ftp://surfer.nmr.mgh.harvard.edu/transfer/outgoing/flat/greve/
#!/bin/tcsh -f
# vol2symsurf
set VERSION = '$Id: vol2symsurf,v 1.2 2013/11/28 20:13:50 greve Exp $';
set outstem = ();
set outfmt = ();
set subject = ();
set hemilist = ();
set func = ();
set projfrac = .5;
set reg = ();
set fwhm = ();
set symsubject = fsaverage_sym
set symhemi = lh
set DoRegHeader = 0;
set DoDiff = 1;
set DoLI = 0;
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
goto parse_args;
parse_args_return:
goto check_params;
check_params_return:
set StartTime = `date`;
set tSecStart = `date '+%s'`;
set year = `date +%Y`
set month = `date +%m`
set day = `date +%d`
set hour = `date +%H`
set min = `date +%M`
mkdir -p $outdir
pushd $outdir > /dev/null
set outdir = `pwd`;
popd > /dev/null
if($#tmpdir == 0) then
if(-e /scratch) set tmpdir = /scratch/tmpdir.vol2symsurf.$$
if(! -e /scratch) set tmpdir = $outdir/tmpdir.vol2symsurf.$$
endif
mkdir -p $tmpdir
# Set up log file
if($#LF == 0) set LF = $outstem.vol2symsurf.log
if($LF != /dev/null) rm -f $LF
echo "Log file for vol2symsurf" >> $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
#========================================================
foreach hemi (lh rh)
# Map func to self
set surffunc = $tmpdir/func.self.$hemi.mgh
set cmd = (mri_vol2surf --mov $func --hemi $hemi \
--projfrac $projfrac --o $surffunc --cortex)
if($#reg) set cmd = ($cmd --reg $reg)
if($DoRegHeader) set cmd = ($cmd --regheader $subject)
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) goto error_exit;
# Map func self to sym subject. lh and rh are tricky!
set surffuncsym = $tmpdir/func.fsasym.$symhemi.$hemi.mgh
# Always use $symhemi.$symsubject.sphere.reg, change xhemi or not
if($hemi == lh) then
set srcreg = $SUBJECTS_DIR/$subject/surf/$symhemi.$symsubject.sphere.reg
else
set srcreg =
$SUBJECTS_DIR/$subject/xhemi/surf/$symhemi.$symsubject.sphere.reg
endif
set cmd = (mris_apply_reg --src $surffunc --trg $surffuncsym \
--streg $srcreg $trgreg)
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) goto error_exit;
set fname = $outstem.$hemi.$outfmt
if($#fwhm && $fwhm != 0) then
set cmd = (mris_fwhm --s $symsubject --hemi $symhemi --so \
--fwhm $fwhm --i $surffuncsym --o $fname --cortex)
else
set cmd = (mri_convert $surffuncsym $fname)
endif
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) goto error_exit;
end # hemi
if($DoDiff) then
set lhout = $outstem.lh.$outfmt
set rhout = $outstem.rh.$outfmt
if($DoLI) then
# LI = (LH-RH)/(LH+RH)
set diffout = $outstem.li.lh-rh.$outfmt
set cmd = (fscalc $lhout pctdiff $rhout div 200 -o $diffout)
else
# Simple difference
set diffout = $outstem.lh-rh.$outfmt
set cmd = (fscalc $lhout sub $rhout -o $diffout)
endif
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) goto error_exit;
endif
#========================================================
# Cleanup
if($cleanup) rm -rf $tmpdir
# Done
echo " " |& tee -a $LF
set tSecEnd = `date '+%s'`;
@ tSecRun = $tSecEnd - $tSecStart;
set tRunHours = `echo $tSecRun/3600|bc -l`
set tRunHours = `printf %5.2f $tRunHours`
echo "Started at $StartTime " |& tee -a $LF
echo "Ended at `date`" |& tee -a $LF
echo "vol2symsurf-Run-Time-Sec $tSecRun" |& tee -a $LF
echo " " |& tee -a $LF
echo "vol2symsurf Done" |& tee -a $LF
exit 0
###############################################
############--------------##################
error_exit:
echo "ERROR: $cmd" |& tee -a $LF
echo ""|& tee -a $LF
echo "If reporting to freesurfer@nmr.mgh.harvard.edu, make"|& tee -a $LF
echo "sure to include the log file $LF"|& tee -a $LF
echo ""|& tee -a $LF
echo "vol2symsurf exited with errors" |& tee -a $LF
exit 1;
###############################################
############--------------##################
parse_args:
set cmdline = ($argv);
while( $#argv != 0 )
set flag = $argv[1]; shift;
switch($flag)
case "--o":
if($#argv < 1) goto arg1err;
set outstem = $argv[1]; shift;
breaksw
case "--fmt":
if($#argv < 1) goto arg1err;
set ofmt = $argv[1]; shift;
breaksw
case "--fwhm":
if($#argv < 1) goto arg1err;
set fwhm = $argv[1]; shift;
breaksw
case "--projfrac":
if($#argv < 1) goto arg1err;
set projfrac = $argv[1]; shift;
breaksw
case "--regheader":
case "--reg-header":
case "--init-header":
if($#argv < 1) goto arg1err;
set subject = $argv[1]; shift;
set DoRegHeader = 1;
breaksw
case "--reg":
if($#argv < 1) goto arg1err;
set reg = $argv[1]; shift;
if(! -e $reg) then
echo "ERROR: cannot find $reg"
exit 1;
endif
set subject = `head -n 1 $reg`
breaksw
case "--i":
case "--f":
if($#argv < 1) goto arg1err;
set func = $argv[1]; shift;
if(! -e $func) then
echo "ERROR: cannot find $func"
exit
endif
breaksw
case "--lh":
set hemilist = (lh)
breaksw
case "--rh":
set hemilist = (rh)
breaksw
case "--sym-lh":
set symhemi = lh
breaksw
case "--sym-rh":
set symhemi = rh
breaksw
case "--no-diff":
set DoDiff = 0;
breaksw
case "--li":
set DoLI = 1;
breaksw
case "--no-li":
set DoLI = 0;
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($#func == 0) then
echo "ERROR: must spec input volume"
exit 1;
endif
if($#reg == 0 && ! $DoRegHeader) then
echo "ERROR: must spec --reg or --regheader"
exit 1;
endif
if($#reg && $DoRegHeader) then
echo "ERROR: cannot spec both --reg and --regheader"
exit 1;
endif
if(! -e $SUBJECTS_DIR/$subject) then
echo "ERROR: cannot find $subject"
exit 1;
endif
if($#fwhm == 0) set fwhm = 0;
if($#outfmt == 0) set outfmt = `fname2ext $func`
if($#outstem == 0) then
set funcstem = `fname2stem $func`
set fwhmstr = `printf %02d $fwhm`
set outstem = $funcstem.$symsubject.sm$fwhmstr.$symhemi
endif
set outdir = `dirname $outstem`
set trgreg = $SUBJECTS_DIR/$symsubject/surf/$symhemi.sphere.reg
if(! -e $trgreg) then
echo "ERROR: cannot find $trgreg"
exit 1;
endif
set err = 0;
set srcreg = $SUBJECTS_DIR/$subject/surf/$symhemi.$symsubject.sphere.reg
if(! -e $srcreg) then
echo ""
echo "ERROR: cannot find $srcreg"
echo "You must run: surfreg --s $subject --t $symsubject --$symhemi"
set err = 1;
endif
set srcreg = $SUBJECTS_DIR/$subject/xhemi/surf/$symhemi.$symsubject.sphere.reg
if(! -e $srcreg) then
echo ""
echo "ERROR: cannot find $srcreg"
echo "You must run: surfreg --s $subject --t $symsubject --$symhemi --xhemi"
echo ""
set err = 1;
endif
if($err) exit 1;
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 "vol2symsurf --reg reg.dat --i vol.nii "
echo " --fwhm FWHMmm : surface smooth by FWHMmm"
echo " --o outstem (default instem.$symsubject.smFWHM.$symhemi.hemi)"
echo " --regheader subject"
echo " --projfrac ProjFrac (default is $projfrac)"
echo " --no-diff : do not compute lh-rh difference"
echo " --li : compute laterality index instead of simple difference"
echo ""
echo " --help : get help"
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
This program samples a volume onto the surface of the left-right
symmetric subject (fsaverage_sym). The volume is first sampled onto
the left and right surfaces of the native subject using a default
projection fraction of 0.5. These surfaces are then mapped onto the
left hemisphere of fsaverage_sym after which they will be in
vertex-to-vertex alignment. Note that since fsaverage_sym is left-right
symmetric, it does not matter whether data are sampled onto the left
hemi or the right hemi. The lh-rh difference is also computed (unless
--no-diff is specified). If --li is used then the laterality index
(LI) is computed as (lh-rh)/(lh+rh).
The source subject must have been surface registered to the symmetric
subject with something like:
surfreg --s $subject --t fsaverage_sym --lh
surfreg --s $subject --t fsaverage_sym --lh --xhemi
This will take a couple of hours but only needs to be done once.
EXAMPLE:
vol2symsurf --reg register.dat --i func.nii --fwhm 7
Creates func.fsaverage_sym.sm07.lh.lh.nii and
func.fsaverage_sym.sm07.lh.rh.nii and
func.fsaverage_sym.sm07.lh.lh-rh.nii
vol2symsurf --reg register.dat --i func.nii --fwhm 7 --li
Same as above but creates func.fsaverage_sym.sm07.lh.li.lh-rh.nii
_______________________________________________
Freesurfer mailing list
Freesurfer@nmr.mgh.harvard.edu
https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer
The information in this e-mail is intended only for the person to whom it is
addressed. If you believe this e-mail was sent to you in error and the e-mail
contains patient information, please contact the Partners Compliance HelpLine at
http://www.partners.org/complianceline . If the e-mail was sent to you in error
but does not contain patient information, please contact the sender and properly
dispose of the e-mail.