#! /bin/sh

### update-fsaverage: marty sereno - add csurf CsurfMaps1 updates to fsaverage
# 17 Sep 2022 -- 01a: initial hack
# 22 Sep 2022 -- 01b: touchup

if [ $# -ne 1 ]; then
  echo ""
  echo "Use: cd \$CSURF_DIR"
  echo "     update-fsaverage [go]"
  echo ""
  echo \
"  Purpose: add CsurfMaps1 labels/README/surf/flat/area files to curr fsaverage"
  echo ""
  echo "  N.B.: requires csurf is installed"
  echo "  N.B.: fsaverage in SUBJECTS_DIR must be writable"
  echo "  N.B.: orig area/inflated_avg will be moved aside"
  echo ""
  echo "  Updates fsaverage as follows:"
  echo "  ---------------------------------------------------------------------"
  echo "  (1) add {rh,lh}-CsurfMaps1.{annot,label.gii} to fsaverage/label"
  echo "  (2) add {rh,lh}-FIX-POLES.label (for inflated_avg) to fsaverage/label"
  echo "  (3) add csurf README files to fsaverage/scripts"
  echo "  (4) add CsurfMaps1 parcellation images to fsaverage/rgb"
  echo \
"  (5) add true-area flattens: fsaverage/surf/{rh,lh}.cortex{2}.patch.{3d,flat}"
  echo "  (6) update {rh,lh}.inflated_avg to fix 'poles' (move aside orig)"
  echo "  (7) update {rh,lh}.area (from inflated_avg, move aside orig)"
  echo \
"    => standard .area from smoothwm (avg of folded surfs) loses 30% total area"
  echo "          because idiosyncratic sulcal 'crinkles' are averaged/smoothed"
  echo "    => inflated_avg (avg of inflated surfaces) preserves orig true area"
  echo "  ---------------------------------------------------------------------"
  echo ""
  echo "                                                          version: 01b"
  exit
fi

### checks
# arg
echo ""
echo "Checking ..."
if [ "$1" != "go" ]; then
  echo "update-fsaverage: ### arg ($1) was not 'go'  ...quitting"
  exit
fi
# check inside csurf
dir=`pwd`
if [ `basename $dir` != "csurf" ]; then
  echo "update-fsaverage: ### current dir not 'csurf'  ...quitting"
  exit
else
  echo "  in directory named 'csurf'"
fi
# check fsaverage-ADDITIONS there
if [ ! -e subjects/fsaverage-ADDITIONS ]; then
  echo "update-fsaverage: ### subjects/fsaverage-ADDITIONS not found ..quitting"
  exit
else
  echo "  found subjects/fsaverage-ADDITIONS"
fi
# check SUBJECTS_DIR defined
if [ -z "$SUBJECTS_DIR" ]; then
  echo "update-fsaverage: ### SUBJECTS_DIR unset (or empty)  ...quitting"
  exit
else
  echo "  SUBJECTS_DIR currently set to:\n    $SUBJECTS_DIR"
fi
# check SUBJECTS_DIR exists
if [ ! -e $SUBJECTS_DIR ]; then
  echo "update-fsaverage: ### SUBJECTS_DIR not found  ...quitting"
  exit
else
  echo "  SUBJECTS_DIR exists"
fi
# check fsaverage in SUBJECTS_DIR
if [ ! -e $SUBJECTS_DIR/fsaverage ]; then
  echo "update-fsaverage: ### subject fsaverage not found  ...quitting"
  exit
else
  echo "  found subject fsaverage in it"
fi
# check fsaverage writable
if [ ! -w $SUBJECTS_DIR/fsaverage ]; then
  echo "update-fsaverage: ### subject: $SUBJECTS_DIR/fsaverage"
  echo "update-faaverage:  not writable ...quitting"
  exit
else
  echo "  SUBJECTS_DIR fsaverage is writable"
fi
# from/to
srcdir=subjects/fsaverage-ADDITIONS   # rel
targdir=$SUBJECTS_DIR/fsaverage       # abs

# OK to go?
echo ""
echo "Ready to update fsaverage:"
echo "  source dir: `pwd`/$srcdir"
echo "  target dir: $targdir"
echo "  -----------------------------------------------------------------"
echo "  (1) add {rh,lh}-CsurfMaps1.{annot,label.gii} to fsaverage/label"
echo "  (2) add {rh,lh}-FIX-POLES.label to fsaverage/label"
echo "  (3) add CsurfMaps1 README files to fsaverage/scripts"
echo "  (4) add CsurfMaps1 parcellation images to fsaverage/rgb"
echo "  (5) add {rh,lh}.cortex{2}.patch.{3d,flat} to fsaverage/surf"
# if inflated_avg already done, skip move aside
echo "  (6) update {rh,lh}.inflated_avg (orig moved aside if not already)"
if [ -e $targdir/surf/rh.inflated_avgORIG ]; then
  echo "    N.B.: rh.inflated_avgORIG already exists, skipping move aside"
else
  echo "    N.B.: rh.inflated_avg will be moved aside to rh.inflated_avgORIG"
fi
if [ -e $targdir/surf/lh.inflated_avgORIG ]; then
  echo "    N.B.: lh.inflated_avgORIG already exists, skipping move aside"
else
  echo "    N.B.: lh.inflated_avg will be moved aside to lh.inflated_avgORIG"
fi
# if area files already done, skip move aside
echo "  (7) update {rh,lh}.area (orig moved aside if not already)"
if [ -e $targdir/surf/rh.areaORIG ]; then
  echo "    N.B.: rh.areaORIG already exists, skipping move aside"
else
  echo "    N.B.: rh.area will be moved aside to rh.areaORIG"
fi
if [ -e $targdir/surf/lh.areaORIG ]; then
  echo "    N.B.: lh.areaORIG already exists, skipping move aside"
else
  echo "    N.B.: lh.area will be moved aside to lh.areaORIG"
fi
echo "  -----------------------------------------------------------------"
echo ""
echo " => ctrl-D to go"
echo " => ctrl-C to quit"
read resp
echo ""
echo "update-fsaverage: starting fsaverage update"

##### go
### label/annotations (silently overwrite previous)
echo ""
echo "update-fsaverage: annotations"
cmd="cp $srcdir/label/lh-CsurfMaps1.annot     $targdir/label"
echo "  $cmd"; $cmd
cmd="cp $srcdir/label/lh-CsurfMaps1.label.gii $targdir/label"
echo "  $cmd"; $cmd
cmd="cp $srcdir/label/rh-CsurfMaps1.annot     $targdir/label"
echo "  $cmd"; $cmd
cmd="cp $srcdir/label/rh-CsurfMaps1.label.gii $targdir/label"
echo "  $cmd"; $cmd

### labels for inflated_avg 'lg triangles at poles' repair (silent overwrite)
echo ""
echo "update-fsaverage: fix-poles labels"
cmd="cp $srcdir/label/rh-FIX-POLES.label  $targdir/label"
echo "  $cmd"; $cmd
cmd="cp $srcdir/label/lh-FIX-POLES.label  $targdir/label"
echo "  $cmd"; $cmd

### parcellation images (silently overwrite previous)
echo ""
echo "update-fsaverage: parcellation images"
if [ ! -e $targdir/rgb ]; then
  echo "update-fsaverage: made fsaverage/rgb directory"
  mkdir $targdir/rgb
fi
cmd="cp $srcdir/rgb/CsurfMaps1-areas.jpg          $targdir/rgb"
echo "  $cmd"; $cmd
cmd="cp $srcdir/rgb/CsurfMaps1-maps.jpg           $targdir/rgb"
echo "  $cmd"; $cmd
cmd="cp $srcdir/rgb/CsurfMaps1-areas-lh-flat.tiff $targdir/rgb"
echo "  $cmd"; $cmd
cmd="cp $srcdir/rgb/CsurfMaps1-maps-lh-flat.tiff  $targdir/rgb"
echo "  $cmd"; $cmd
# make links for hemi-specific csurf view (illus have both hemis)
csurfdir=`pwd`
cd $targdir/rgb
if [ -e CsurfMaps1-areas-rh-flat.tiff ]; then
  rm CsurfMaps1-areas-rh-flat.tiff
fi
cmd="ln -s CsurfMaps1-areas-lh-flat.tiff CsurfMaps1-areas-rh-flat.tiff"
echo "  $cmd"; $cmd
if [ -e CsurfMaps1-areas-lh-flat.tiff ]; then
  rm CsurfMaps1-maps-rh-flat.tiff
fi
cmd="ln -s CsurfMaps1-maps-lh-flat.tiff  CsurfMaps1-maps-rh-flat.tiff"
echo "  $cmd"; $cmd
cd $csurfdir

### scripts/NOTES
echo ""
echo "update-fsaverage: README files"
cmd="cp $srcdir/scripts/CsurfMaps1-abbrev.txt $targdir/scripts"
echo "  $cmd"; $cmd
cmd="cp $srcdir/scripts/CsurfMaps1.ctab.txt   $targdir/scripts"
echo "  $cmd"; $cmd
cmd="cp $srcdir/scripts/README-general.txt    $targdir/scripts"
echo "  $cmd"; $cmd
cmd="cp $srcdir/scripts/README-labels.txt     $targdir/scripts"
echo "  $cmd"; $cmd
cmd="cp $srcdir/scripts/README-mpg.txt        $targdir/scripts"
echo "  $cmd"; $cmd
cmd="cp $srcdir/scripts/README-rgb.txt        $targdir/scripts"
echo "  $cmd"; $cmd

### new flattenings
echo ""
echo "update-fsaverage: new flattenings"
cmd="cp $srcdir/surf/lh.cortex2.patch.3d    $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/rh.cortex2.patch.3d    $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/lh.cortex2.patch.flat  $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/rh.cortex2.patch.flat  $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/lh.cortex2a.patch.flat $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/rh.cortex2a.patch.flat $targdir/surf"
echo "  $cmd"; $cmd

### fixed inflated_avg surface files
echo ""
echo "update-fsaverage: fixed inflated_avg surfaces"
if [ -e $targdir/surf/rh.inflated_avgORIG ]; then
  echo "  ### rh.inflated_avgORIG there - existing not moved aside again"
else
  cmd="mv $targdir/surf/rh.inflated_avg $targdir/surf/rh.inflated_avgORIG"
  echo "  $cmd"; $cmd
fi
if [ -e $targdir/surf/lh.inflated_avgORIG ]; then
  echo "  ### lh.inflated_avgORIG there - existing not moved aside again"
else
  cmd="mv $targdir/surf/lh.inflated_avg $targdir/surf/lh.inflated_avgORIG"
  echo "  $cmd"; $cmd
fi
cmd="cp $srcdir/surf/rh.inflated_avg $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/lh.inflated_avg $targdir/surf"
echo "  $cmd"; $cmd
# make explicitly named for revert
cmd="cp $srcdir/surf/rh.inflated_avg $targdir/surf/rh.inflated_avgNEW"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/lh.inflated_avg $targdir/surf/lh.inflated_avgNEW"
echo "  $cmd"; $cmd

### fixed area files
echo ""
echo "update-fsaverage: fixed area files"
if [ -e $targdir/surf/rh.areaORIG ]; then
  echo "  ### rh.areaORIG there - existing not moved aside again"
else
  cmd="mv $targdir/surf/rh.area $targdir/surf/rh.areaORIG"
  echo "  $cmd"; $cmd
fi
if [ -e $targdir/surf/lh.areaORIG ]; then
  echo "  ### lh.areaORIG there - existing not moved aside again"
else
  cmd="mv $targdir/surf/lh.area $targdir/surf/lh.areaORIG"
  echo "  $cmd"; $cmd
fi
cmd="cp $srcdir/surf/rh.area $targdir/surf"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/lh.area $targdir/surf"
echo "  $cmd"; $cmd
# make explicitly named for revert
cmd="cp $srcdir/surf/rh.area $targdir/surf/rh.areaNEW"
echo "  $cmd"; $cmd
cmd="cp $srcdir/surf/lh.area $targdir/surf/lh.areaNEW"
echo "  $cmd"; $cmd
echo ""
echo "update-fsaverage: finished"
echo ""

