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.

Reply via email to