#!/bin/csh -f

# This is a script that will run through the non-interactive
# commands of the FSL/FreeSurfer FEAT tutorail

# Setup the environment
if(-e /usr/pubsw/packages/fsl/4.1.2) then
  # This is internal to MGH
  setenv FSLDIR /usr/pubsw/packages/fsl/4.1.2
endif
echo $FSLDIR
source $FSLDIR/etc/fslconf/fsl.csh
setenv FSLOUTPUTTYPE NIFTI_GZ

if(! -e $SUBJECTS_DIR/fsaverage) then
  echo "ERROR: cannot find $SUBJECTS_DIR/fsaverage"
  exit 1;
endif

# A log file
set LF = fsfeat-tut.log
if(-e $LF) mv $LF $LF.bak
date | tee -a $LF
echo $FSLDIR | tee -a $LF
hostname | tee -a $LF
echo $user | tee -a $LF
echo "------------------------------------------------" | tee -a $LF

# Loop thru each run
foreach run (1 2)

  echo "------------------------------------------------" | tee -a $LF
  echo "#@# Run $run ---------------------------------------" | tee -a $LF
  date | tee -a $LF

  rm -rf fbert$run.feat

  echo --------------------------------------- | tee -a $LF
  date | tee -a $LF

  # Create custom design.fsf file
  set func = `pwd`/fbert$run.nii.gz
  set fsf = fbert$run.design.fsf
  rm -f $fsf
  cp fbert.design0.fsf $fsf
  chmod a+w $fsf
  echo "set feat_files(1) " \" $func \" >> $fsf

  # Run feat
  set cmd = ($FSLDIR/bin/feat $fsf)
  echo $cmd | tee -a $LF
  $cmd | tee -a $LF
  if($status) exit 1;

  # Registration with FreeSurfer 
  echo --------------------------------------- | tee -a $LF
  date | tee -a $LF
  set cmd = (reg-feat2anat --feat fbert$run.feat --subject bert)
  echo $cmd | tee -a $LF
  $cmd | tee -a $LF
  if($status) exit 1;

  # Resample copes to surface
  echo --------------------------------------- | tee -a $LF
  date | tee -a $LF
  set cmd = (feat2surf --feat fbert$run.feat --cope-only)
  echo $cmd | tee -a $LF
  $cmd | tee -a $LF
  if($status) exit 1;

  # Resample aseg+aparc to functional space
  echo --------------------------------------- | tee -a $LF
  date | tee -a $LF
  set cmd = (aseg2feat --feat fbert$run.feat --aseg aparc+aseg)
  echo $cmd | tee -a $LF
  $cmd | tee -a $LF
  if($status) exit 1;

  # Make a binary mask of the left putamen in functional space
  echo --------------------------------------- | tee -a $LF
  date | tee -a $LF
  set cmd = (fslmaths ./fbert$run.feat/reg/freesurfer/aparc+aseg.nii.gz \
      -thr 12 -uthr 12 ./fbert$run.feat/reg/freesurfer/lh.putamen.nii.gz)
  echo $cmd | tee -a $LF
  $cmd | tee -a $LF
  if($status) exit 1;

  # Get ROI summaries
  echo --------------------------------------- | tee -a $LF
  date | tee -a $LF
  set cmd = (mri_segstats --seg fbert$run.feat/reg/freesurfer/aparc+aseg.nii.gz \
    --nonempty --ctab-default --in fbert$run.feat/stats/cope1.nii.gz \
    --sum fbert1.segstats.dat)
  echo $cmd | tee -a $LF
  $cmd | tee -a $LF
  if($status) exit 1;

  echo --------------------------------------- | tee -a $LF
  echo Done | tee -a $LF
  date | tee -a $LF

end
#----------------------------------------------------------------

# Combine runs together with gfeat (one-sample group mean FFx)
echo --------------------------------------- | tee -a $LF
date | tee -a $LF
rm -rf fbert.gfeat
set fsf = xrun.design.tmp.fsf
rm -f $fsf
cp xrun.design.fsf $fsf
chmod a+w $fsf
echo "set feat_files(1) " \"`pwd`/fbert1.feat\" >> $fsf
echo "set feat_files(2) " \"`pwd`/fbert2.feat\" >> $fsf
rm -r fbert.gfeat
set cmd = (feat $fsf)
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) exit 1;

# Extract and concat copes for each run on surface
echo --------------------------------------- | tee -a $LF
date | tee -a $LF
rm -rf xrun
set cmd = (mris_preproc --out xrun/lh.cope1.mgh \
  --target fsaverage --hemi lh --fwhm 5 --projfrac .5\
  --iv fbert1.feat/stats/cope1.nii.gz fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  --iv fbert2.feat/stats/cope1.nii.gz fbert2.feat/reg/freesurfer/anat2exf.register.dat)
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) exit 1;

# Extract and concat varcopes for each run on surface
echo --------------------------------------- | tee -a $LF
date | tee -a $LF
set cmd = (mris_preproc --out xrun/lh.varcope1.mgh \
  --target fsaverage --hemi lh --fwhm 5 --projfrac .5\
  --iv fbert1.feat/stats/varcope1.nii.gz fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  --iv fbert2.feat/stats/varcope1.nii.gz fbert2.feat/reg/freesurfer/anat2exf.register.dat)
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) exit 1;

# One-sample group mean FFX of the two runs
echo --------------------------------------- | tee -a $LF
date | tee -a $LF
set DOF = 163  # sum of fbert?.feat/stats/dof
set cmd = (mri_glmfit --y xrun/lh.cope1.mgh \
           --yffxvar xrun/lh.varcope1.mgh --ffxdof $DOF \
           --osgm --glmdir xrun/lh.osgm.ffx \
           --surf fsaverage lh);  #--label lh.cortex.label)
echo $cmd | tee -a $LF
$cmd | tee -a $LF
if($status) exit 1;

echo --------------------------------------- | tee -a $LF
date | tee -a $LF
echo "run-fsfeat-tut done" | tee -a $LF
exit 0
#--------------------------------------------------------------------

# Check reg from std space func to anat (can use reg from run1 or run2)
tkregister2 --mov fbert.gfeat/mean_func.nii.gz --surf \
  --reg fbert1.feat/reg/freesurfer/anat2std.register.dat 

# Show gfeat results on anat volume
tkmedit bert orig.mgz -seg aparc+aseg.mgz \
  -ov fbert.gfeat/cope1.feat/stats/zstat1.nii \
  -ovreg fbert1.feat/reg/freesurfer/anat2std.register.dat \
  -fthresh 2.3 -fmax 4.3

# Show gfeat results on anat surface
tksurfer bert lh inflated -annot aparc.annot \
  -ov fbert.gfeat/cope1.feat/stats/zstat1.nii \
  -ovreg fbert1.feat/reg/freesurfer/anat2std.register.dat \
  -fthresh 2.3 -fmid 3.3 -fslope 1

tksurfer fsaverage lh inflated -annot aparc.annot \
  -ov xrun/osgm.ffx/osgm/sig.mgh \
  -fthresh 2.3 -fmid 3.3 -fslope 1


