#!/bin/csh -f
#
#   Control script to submit mult_refine.com
#
#help
#help frealign_run_refine - perform standard refinement
#help Usage: frealign_run_refine
#help Control parameters must be set in local mparameters file
#
set working_directory	= `pwd`
if ( ! -e mparameters ) then
  echo ""
  echo "ERROR: no mparameters file."
  echo "Terminating..."
  echo ""
  exit
endif

\rm frealign.log >& /dev/null

set SCRATCH		= `grep scratch_dir mparameters | awk '{print $2}'`
if ( $status || $SCRATCH == "" ) then
  set SCRATCH		= ${working_directory}/scratch
endif
if ( ! -d $SCRATCH ) then
  mkdir $SCRATCH
endif

if ( ! -d $SCRATCH ) then
  echo "ERROR: cannot create scratch directory. Terminating..." >> frealign.log
  exit
endif

set cycle = ""
if ( -e $SCRATCH/pid.log ) then
if ( ${1} != "restart" ) then
set pid = `grep monitor_frealign.log $SCRATCH/pid.log | awk '{print $1}'`
set temp = `ps $pid | grep monitor_frea | grep -v grep | awk '{print $1}'`
if ( $temp != "" ) then
  echo ""
  echo "Frealign search/refinement already running."
  echo "Stop current process before starting new process."
  echo ""
  exit
endif
else
  set cycle = ${2}
endif
endif

set raw_images		= `grep raw_images_high mparameters | awk '{print $2}'`
if ( $raw_images == "" ) set raw_images = `grep raw_images mparameters | awk '{print $2}'`
set raw_images = `echo ${raw_images:r}`
ls $raw_images.* >& /dev/null
if ( $status ) then
  set raw_images = ${working_directory}/${raw_images}
endif
ls $raw_images.* >& /dev/null
if ( $status ) then
  echo ""
  echo "ERROR: particle image stack not found."
  echo "Terminating..."
  echo ""
  exit
endif

cp mparameters $SCRATCH/mparameters_run

set mode	= `grep MODE $SCRATCH/mparameters_run | awk '{print $2}'`
if ( $mode < 1 ) then
  echo "ERROR: MODE must be 1, 2, 3 or 4." >> frealign.log
  echo "Terminating..." >> frealign.log
  exit
endif

set sym		= `grep Symmetry $SCRATCH/mparameters_run | awk '{print $2}'`
if ( $sym == "H" || $sym == "HP" ) then
  set sum = 0
  grep ALPHA $SCRATCH/mparameters_run >& /dev/null
  @ sum = $sum + $status
  grep RISE $SCRATCH/mparameters_run >& /dev/null
  @ sum = $sum + $status
  grep NSUBUNITS $SCRATCH/mparameters_run >& /dev/null
  @ sum = $sum + $status
  grep NSTARTS $SCRATCH/mparameters_run >& /dev/null
  @ sum = $sum + $status
  grep STIFFNESS $SCRATCH/mparameters_run >& /dev/null
  @ sum = $sum + $status
  if ( $sum ) then
    echo "ERROR: not all helical parameters defined. Please" >> frealign.log
    echo "include the following parameters in mparameters file:" >> frealign.log
    echo "ALPHA, RISE, NSUBUNITS, NSTARTS, STIFFNESS" >> frealign.log
    echo "Terminating..." >> frealign.log
    exit
  endif
endif

set bin_dir		= `grep frealign_bin_dir $SCRATCH/mparameters_run | awk '{print $2}'`
if ( $status || $bin_dir == "" ) then
  set bin_dir		= `which frealign_v9.exe`
  set bin_dir		= ${bin_dir:h}
endif

set start		= `grep start_process mparameters | awk '{print $2}'`
set data_input		= `grep data_input mparameters | awk '{print $2}'`
ls ${data_input}_${start}_r?.* > & /dev/null
if ( ! $status ) then
  echo ""
  echo "Previous par file(s)/map(s) already exists."
  echo -n "Overwrite (y/N)? "
  set answer = $<
  echo ""
  if ( $answer != "y" && $answer != "Y" ) exit
endif

echo "Starting refinement..." >> frealign.log
echo "Starting refinement..."

${bin_dir}/mult_refine.com $cycle >& $SCRATCH/mult_refine.log &
set pid = $!
${bin_dir}/monitor_frealign.com >& $SCRATCH/monitor_frealign.log $pid &
set pid = $!
echo $pid monitor_frealign.log > $SCRATCH/pid.log
echo ""
