#!/bin/sh
#
# ========================================================================
#
# *
# * This file is part of MARS, the MAGIC Analysis and Reconstruction
# * Software. It is distributed to you in the hope that it can be a useful
# * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
# * It is distributed WITHOUT ANY WARRANTY.
# *
# * Permission to use, copy, modify and distribute this software and its
# * documentation for any purpose is hereby granted without fee,
# * provided that the above copyright notice appear in all copies and
# * that both that copyright notice and this permission notice appear
# * in supporting documentation. It is provided "as is" without express
# * or implied warranty.
# *
#
#
#   Author(s): Daniela Dorner  08/2004 <mailto:dorner@astro.uni-wuerzburg.de>
#
#   Copyright: MAGIC Software Development, 2000-2007
#
#
# ========================================================================
#
# This script links a special callisto.rc for data, for which the 
# calibration with the standard callisto.rc failes. 
# 
# The sequences with failing calibration are searched by searching for the 
# reason of failure in the callisto.log Then the special callisto.rc is 
# linked to the directory of the sequence. 
#

source `dirname $0`/sourcefile
printprocesslog "INFO starting $0"
program=makecallistolinks
column=fCallisto
table=SequenceProcessStatus

set -C

scriptlog=$runlogpath/$program`date +%F`.log
date >> $scriptlog 2>&1

# check if script is already running
lockfile=$lockpath/lock-$program.txt
checklock  >> $scriptlog 2>&1

callistorcseq=callisto.rc
callistorcnew=callisto_Dec04Jan05.rc
# reason why calibration with standard callisto.rc fails
#reason1="Pulse is too much to the right, cannot go beyond logain limits!"
#.* == hi or lo
reason1="Pulse is too much to the right, out of .*-gain range"
#reason2="No entry for resource id '2[45]' found in"
echo "reason1: "$reason1 >> $scriptlog 2>&1
#echo "reason2: "$reason2 >> $scriptlog 2>&1

# find files containing reason 
files=`find $datapath/callisto/ -name callisto*.log`
if [ "$files" = "" ]
then 
   echo "nothing to do -> exit"  >> $scriptlog 2>&1
   finish >> $scriptlog 2>&1
fi

cd $mars

# make links for callisto.rc for which the callisto.log contains reason
printprocesslog "INFO linking callisto.rc files"
for file in $files
do 
#   pulse=`cat $file | grep "$reason1\|$reason2"`
   pulse=`cat $file | grep "$reason1"`
   sequ=`echo $file | cut -d/ -f6`
   path=`dirname $file`
   callistorc=$path/$callistorcseq

   if [ ! "$pulse" = "" ]
   then
      if ! ls -l $callistorc | grep $callistorcnew >> $scriptlog 2>&1
      then 
         printprocesslog "INFO linking $callistorcnew to $callistorc for sequ $sequ"
         # resetting the calibration
         echo "resetting the callisto for sequence $sequ" >> $scriptlog 2>&1
         echo "  reason: $pulse" >> $scriptlog 2>&1
         resetlogpath=$logpath/resetcallisto
         makedir $resetlogpath >> $scriptlog 2>&1
         resetlog=$resetlogpath/reset-callisto-$sequ.log

         check1=`root -q -b $macrospath/resetcolumn.C+\("\"$column\""\,"\"$table\""\,"\"$sequ\""\,"\"$sequ\""\,kFALSE\) | tee $resetlog | intgrep`
         case $check1 in
            1)   echo " check1=$check1 -> everything ok, callisto has been reset " >> $scriptlog 2>&1
                 printprocesslog "INFO resetted calibration successfully for sequence $sequ"
                 ;;
            0)   echo " check1=$check1 -> no connection to db -> continue..." >> $scriptlog 2>&1 
                 printprocesslog "WARN connection to DB failed"
                 check="no"
                 ;;
            *)   echo " check1=$check1 -> ERROR -> step could not be resetted -> continue " >> $scriptlog 2>&1
                 printprocesslog "ERROR resetcolumn.C failed for fCallisto for sequ $sequ"
                 continue 
                 ;;
         esac
         #linking callisto.rc
         ln -vfs $setuppath/callisto/$callistorcnew $callistorc >> $scriptlog 2>&1
      fi
   fi
done

finish >> $scriptlog 2>&1

