#! /bin/tcsh -f

set bin=mri_create_t2combined

set inargs = ($argv)

# inputs:
set subj=$1
set t1wb=$2
set t2upper=$3
set t2middle=$4
set t2lower=$5

# outputs:
set t2combined=$6
set log=$PWD/${bin}.log

# options:
set show=$6

# check args:
if ( "$subj" == "" ) goto usage
if ( "$t1wb" == "" ) goto usage
if ( "$t2upper" == "" ) goto usage
if ( "$t2lower" == "" ) goto usage
if ( "$t2combined" == "" ) goto usage
goto start

usage:
echo "Usage:"
echo "-----"
echo "$bin subjid t1wb t2upper t2middle t2lower t2combined [show]"
echo ""
echo "Inputs:"
echo "------"
echo "subjid   - subject id of the freesurfer anatomical"
echo "t1wb     - T1 7T whole-brain"
echo "t2upper  - T2* 7T partial-brain upper half"
echo "t2middle - T2* 7T partial-brain middle half, or enter none"
echo "t2lower  - T2* 7T partial-brain lower half"
echo ""
echo "Outputs:"
echo "-------"
echo "t2combined - T2* 7T combined partial-brain halves"
echo "A logfile named $log is generated."
echo ""
echo "Option:"
echo "------"
echo "show - if the last argument is 'show', then the commands"
echo "       that will run are shown, but not executed."
echo ""
echo "Example:"
echo "-------"
echo "$bin bert t1-7t.nii.gz t2upper.nii.gz none t2lower.nii.gz t2combined.nii.gz"
echo ""
echo "The purpose of this utility is to combine two (or three) T2* 7T partial-"
echo "brain volumes into one volume, retaining the resolution, and"
echo "registered to mprage anatomical, such that surfaces can be overlayed."
echo "To do this requires: 1. anatomical data processed by Freesurfer;"
echo "2. 7T T1-weighted scan taken in the same session as the 7T T2*-weighted"
echo "scans; and 3. set of 7T T2*-weighted upper, [middle] and lower brain scans."
echo ""
echo "tkregister2 is run during this script.  When it appears, the "
echo "registration should be inspected, and the Save Reg button pressed to"
echo "save the registration. Then exit tkregister2 to continue the script."
echo ""

exit 1

start:

if ("$show" == "show") then
  set RunIt=0
else
  set RunIt=1
  if (-e $log) mv -f $log $log.old
  echo ""
  echo "Writing to logfile '$log'..."
endif

pwd |& tee -a $log
echo $0 |& tee -a $log
echo $inargs |& tee -a $log
date |& tee -a $log
uname -a |& tee -a $log
echo "setenv SUBJECTS_DIR $SUBJECTS_DIR" |& tee -a $log
echo "FREESURFER_HOME $FREESURFER_HOME" |& tee -a $log

#########################################################################
# Register the 7T whole-brain to the 3T structural
#########################################################################
set cmd=(fslregister \
  --s $subj \
  --mov $t1wb \
  --reg register-t1wb-${subj}.dat)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if($RunIt) $cmd |& tee -a $log
if($status) exit 1;


#########################################################################
# Produce an initial alignment of the pial surface to each the 
# 7T partial-brain scans (via the intermediate registration)
#########################################################################
set cmd=(tkregister2 \
  --mov $t2upper \
  --int $t1wb register-t1wb-${subj}.dat \
  --reg register-t2upper.dat \
  --surf pial \
  --s $subj)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

if ("$t2middle" != "none") then
  set cmd=(tkregister2 \
    --mov $t2middle \
    --int $t1wb register-t1wb-${subj}.dat \
    --reg register-t2middle.dat \
    --surf pial \
    --s $subj)
  echo ------------------- |& tee -a $log
  echo $cmd |& tee -a $log
  echo ------------------- |& tee -a $log
  if ($RunIt) $cmd |& tee -a $log
endif

set cmd=(tkregister2 \
  --mov $t2lower \
  --int $t1wb register-t1wb-${subj}.dat \
  --reg register-t2lower.dat \
  --surf pial \
  --s $subj)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log


#########################################################################
# Use the BB registration utility, mri_segreg, to refine the 3T to 
# 7T-(upper/lower) alignments
#########################################################################
segreg:
set cmd=(mri_segreg \
  --mov $t2upper \
  --reg register-t2upper.dat \
  --out-reg segreg-t2upper.dat \
  --cost cost.upper \
  --1dpreopt -10 10 1 --no-mask)

echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo -------------------
if ($RunIt) $cmd |& tee -a $log

if ("$t2middle" != "none") then
  set cmd=(mri_segreg \
    --mov $t2middle \
    --reg register-t2middle.dat \
    --out-reg segreg-t2middle.dat \
    --cost cost.middle \
    --1dpreopt -10 10 1 --no-mask)
  echo ------------------- |& tee -a $log
  echo $cmd |& tee -a $log
  echo ------------------- |& tee -a $log
  if ($RunIt) $cmd |& tee -a $log
endif

set cmd=(mri_segreg \
  --mov $t2lower \
  --reg register-t2lower.dat \
  --out-reg segreg-t2lower.dat \
  --cost cost.lower \
  --1dpreopt -10 10 1 --no-mask)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log


#########################################################################
# Create a hi-res cropped template volume from the 3T structural
# and a registration to it, and to each of the 7T partial-brain scans
#########################################################################
set cmd=(mri_vol2vol \
  --mov $SUBJECTS_DIR/${subj}/mri/brain.mgz \
  --crop 3 \
  --o ${subj}-brain-hires-template.nii.gz)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

set cmd=(tkregister2 \
  --mov ${subj}-brain-hires-template.nii.gz \
  --s $subj \
  --regheader \
  --reg register-${subj}-brain-hires-template.dat)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

set cmd=(mri_matrix_multiply \
  -im segreg-t2upper.dat \
  -iim register-${subj}-brain-hires-template.dat \
  -om register-t2upper-${subj}-brain-hires.dat)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

if ("$t2middle" != "none") then
  set cmd=(mri_matrix_multiply \
    -im segreg-t2middle.dat \
    -iim register-${subj}-brain-hires-template.dat \
    -om register-t2middle-${subj}-brain-hires.dat)
  echo ------------------- |& tee -a $log
  echo $cmd |& tee -a $log
  echo ------------------- |& tee -a $log
  if ($RunIt) $cmd |& tee -a $log
endif

set cmd=(mri_matrix_multiply \
  -im segreg-t2lower.dat \
  -iim register-${subj}-brain-hires-template.dat \
  -om register-t2lower-${subj}-brain-hires.dat)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log


#########################################################################
# Combine the two 7T partial-brain scans into one volume (7T-combined)
#########################################################################
set cmd=(mri_vol2vol \
  --mov $t2upper \
  --targ ${subj}-brain-hires-template.nii.gz \
  --reg register-t2upper-${subj}-brain-hires.dat \
  --o tmp-t2upper-hires.nii.gz)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

if ("$t2middle" != "none") then
  set cmd=(mri_vol2vol \
    --mov $t2middle \
    --targ ${subj}-brain-hires-template.nii.gz \
    --reg register-t2middle-${subj}-brain-hires.dat \
    --o tmp-t2middle-hires.nii.gz)
  echo ------------------- |& tee -a $log
  echo $cmd |& tee -a $log
  echo ------------------- |& tee -a $log
  if ($RunIt) $cmd |& tee -a $log
endif

set cmd=(mri_vol2vol \
  --mov $t2lower \
  --targ ${subj}-brain-hires-template.nii.gz \
  --reg register-t2lower-${subj}-brain-hires.dat \
  --o tmp-t2lower-hires.nii.gz)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

set tmpmid=()
if ("$t2middle" != "none") set tmpmid=(--i tmp-t2middle-hires.nii.gz)
set cmd=(mri_concat \
  --combine \
  --i tmp-t2upper-hires.nii.gz $tmpmid  \
  --i tmp-t2lower-hires.nii.gz \
  --o $t2combined)
echo ------------------- |& tee -a $log
echo $cmd |& tee -a $log
echo ------------------- |& tee -a $log
if ($RunIt) $cmd |& tee -a $log

echo ------------------- |& tee -a $log
if ($RunIt) echo done! |& tee -a $log
echo ------------------- |& tee -a $log

echo "To view: "
set cmd=(scuba2 --subject $subj \
   --volume $t2combined ${subj}-brain-hires-template.nii.gz \
   --surface lh.pial lh.white rh.pial rh.white)
echo $cmd |& tee -a $log

exit 0
