#!/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/2010 <mailto:daniela.dorner@unige.ch>
#
#   Copyright: MAGIC Software Development, 2000-2010
#
#
# ========================================================================
#
# script used to insert MC to the DB TestFACTSetup
#   also inserts sequence information
# 


#
# setup
# to be filled by the user:
#

# to really insert information set insert="yes"
insert="yes"
insert=


# give array of ceres keys
# remark: in case you insert new ceres keys: 
#  make sure that the information on the setup (i.e. table CeresSetup) 
#  has been inserted before
cereskeys=( 7 ) 
cereskeys=( 1 2 3 4 5 6 7 8 9 10 11 12 ) 
cereskeys=( 8 9 10 11 12 ) 


# give run number range which you want to process with the new setup
#   if one of these values is empty a new run is inserted with the setup given below
# 423-960 corresponds to the range of runs used for the sensitivity curve
#  gammas:  files 1300-1999 i.e. runs 423-630
#  muons:   files 2400-2999 i.e. runs 753-930
#  protons: files 2000-2399 i.e. runs 633-750
#  protons: files 3000-3099 i.e. runs 933-960
#  protons: new runs 1040-1070
runmin=423
runmax=960
runmin=1040
runmax=1070
runmin=
runmax=


#
# setup for a new run
#

# number of events per file
numevents=35000  # Protons CSCAT=20
#numevents=2000 # Gamma CSCAT=20

# number of files per run
#numfile=1 #
numfile=50 # Protons CSCAT=20
#numfile=10 # Gamma CSCAT=20

numreuse=1
numreuse=20

# particle type
#particle=1 # gamma
particle=14 # proton
#particle=6 # muon
#particle=3 # electron
#particle=402 # helium
#particle=5626 # iron


# zenith range
zdmin=30
zdmax=30
# azimuth range
azmin=180
azmax=180

# energy (in GeV)
emin=20  # 20
emax=200000  # 200000
#emin=100 # Gamma
#emax=50000 # Gamma
#slope=-2.7 # for gammas, depends on source spectrum, or for test
slope=-2.78 # for protons and muons and irons

# impact
impactmax=80000 # for protons (and irons ?)
#impactmax=42500 # for gammas
#impactmax=20000 # for muons

# view cone
viewconemax=5.0 # for protons and irons
#viewconemax=4.5 # for muons 
#viewconemax=0 # for gammas

# starting altitude
startalt=0 # for gammas and protons and irons
#startalt=280 # for muons

# mirror diameter
mirrordia=1800
mirrordia=900

# wavelength range
wavelengthmin=290
wavelengthmax=900

# observatory key
obskey=1 # LP

#
# script - do not edit below
#
source `dirname $0`/sourcefile


function sendquery2()
{
   if [ "$insert" = "yes" ]
   then 
      sendquery >/dev/null
   else 
      echo "Q: "$query
   fi
}

# atmospheric model (at the moment only 11 to be used)
#   will be moved to user settings later
atm=11

# switches for insert
newrun=
newceres=

# get ceres setup name
query="SELECT fCeresSetupName FROM CeresSetup WHERE fCeresSetupKEY in ("`echo ${cereskeys[@]} | sed -e 's/\ /,/g'`")"
echo $query
ceresnames=( `sendquery` )
if [ ${#ceresnames[@]} -lt ${#cereskeys[@]} ]
then
   echo "Please insert first the information on all new ceres setups (keys: "${cereskeys[@]}") into the database."
   echo "EXIT."
   exit
fi

if [ "$runmin" == "" ] || [ "$runmax" == "" ]
then 
   newrun="yes"
   # get next run number
   query="SELECT Max(fRunNumber)+1 FROM CorsikaStatus"
   prun=`sendquery`
   crun=`echo " $prun + 1 " | bc -l`
   drun=`echo " $prun + 2 " | bc -l`
   runs=( $drun )
   
   # get particle type name
   query="SELECT fParticleTypeName FROM ParticleType WHERE fParticleTypeKEY="$particle
   pname=`sendquery`
   
   # get observatory name
   query="SELECT fObservatoryName FROM Observatory WHERE fObservatoryKEY="$obskey
   obsname=`sendquery`
   
   echo "Do you really want to insert the following run(s)?"
   echo "  D-Run:             "$drun" ("$numfile" file(s))"
   echo "  P-Run:             "$prun
   echo "  C-Run:             "$crun
   echo "  Particle:          "$particle" ("$pname")"
   echo "  Number of events:  "$numevents
   echo "  Energy:            "$emin" GeV - "$emax" GeV "
   echo "  Slope:             "$slope
   echo "  Maximum Impact:    "$impactmax" cm "
   echo "  Maximum View Cone: "$viewconemax" deg "
   echo "  Starting Altitude: "$startalt
   echo "  Mirror Diameter:   "$mirrordia" cm "
   echo "  Zenith Distance:   "$zdmin" deg - "$zdmax" deg "
   echo "  Azimuth:           "$azmin" deg - "$azmax" deg "
   echo "  Wavelength:        "$wavelengthmin" nm - "$wavelengthmax" nm "
   echo "  Observatory:       "$obskey" ("$obsname")"
else
   newceres="yes"
   echo "Do you really want to insert the following cereskey(s)?"
   echo "  run number range:  "$runmin" - "$runmax
   query="SELECT fRunNumber FROM CorsikaInfo WHERE fRunNumber BETWEEN "$runmin" AND "$runmax" GROUP BY fRunNumber"
   runs=( `sendquery` )
   echo "    i.e. the following runs: "${runs[@]}
fi
echo "  Ceres Setups:      "${cereskeys[@]}" ("${ceresnames[@]}") "
echo ""
if [ "$insert" = "yes" ]
then
   echo "You are NOT executing the script in dummy mode => the runs will be inserted. "
else
   echo "You are executing the script in dummy mode => nothing will be inserted. "
fi

echo "Please insert y, if you want to continue"
echo "              n, if you want to exit the script"

answer=`head -n 1`
#answer=y
echo "Your answer: "$answer

case $answer in
   y) ;;
   n) echo "EXIT"
      exit
      ;;
   *) echo "Your answer is not clear -> EXIT"
      exit
      ;;
esac



if [ "$newrun" = "yes" ]
then 
   echo "inserting new run "$drun" and according C-run, P-run and sequence information..."
   #
   # corsika information
   #
   for (( i=1 ; i<=$numfile ; i++ ))
   do
      seed1=`echo " $drun * 1000 + $i " | bc -l`
      seed2=`echo " $drun * 1000 + $i + 1 " | bc -l`
      seed3=`echo " $drun * 1000 + $i + 2 " | bc -l`

      query="INSERT CorsikaStatus SET fRunNumber="$drun", fFileNumber="$i", fPriority="$drun
      sendquery2 
      query="INSERT CorsikaInfo SET fRunNumber="$drun", fFileNumber="$i
      query=$query", fAtmosphericModelKEY="$atm", fParticleTypeKEY="$particle
      query=$query", fCorsikaSeed1="$seed1", fCorsikaSeed2="$seed2", fCorsikaSeed3="$seed3
      query=$query", fZenithDistanceMin="$zdmin", fZenithDistanceMax="$zdmax
      query=$query", fAzimuthMin="$azmin", fAzimuthMax="$azmax", fNumEvents="$numevents
      query=$query", fEnergyMin="$emin", fEnergyMax="$emax", fEnergySlope="$slope
      query=$query", fImpactMax="$impactmax", fViewConeMax="$viewconemax
      query=$query", fStartingAltitude="$startalt", fMirrorDiameter="$mirrordia
      query=$query", fObservatoryKEY="$obskey", fNumReUseShowers="$numreuse
      query=$query", fWavelengthMin="$wavelengthmin", fWavelengthMax="$wavelengthmax
      sendquery2 
   done

   query="INSERT CorsikaStatus SET fRunNumber="$prun", fFileNumber=1, fStartTime='1970-01-01 00:00:00', fStopTime='1970-01-01 00:00:00', fAvailable='1970-01-01 00:00:00', fPriority="$prun
   sendquery2 
   query="INSERT CorsikaStatus SET fRunNumber="$crun", fFileNumber=1, fStartTime='1970-01-01 00:00:00', fStopTime='1970-01-01 00:00:00', fAvailable='1970-01-01 00:00:00', fPriority="$crun
   sendquery2 

   # sequence file
   #   does not need ceres key as well
   query="INSERT SequenceFileStatus SET fSequenceNumber="$drun", fPriority="$drun
   sendquery2 
fi

#
# further tables: CeresInfo, CeresStatus, Callisto, Calibration, Star, StarStatus, SequenceInfo
#
for run in ${runs[@]}
do 
   drun=$run
   crun=`echo " $drun - 1 " | bc -l`
   prun=`echo " $drun - 2 " | bc -l`
   
   for cereskey in ${cereskeys[@]}
   do
      query="SELECT fFileNumber FROM CorsikaInfo WHERE fRunNumber="$drun
      files=`sendquery`
      for file in ${files[@]}
      do
         query="INSERT CeresInfo SET fSequenceNumber="$drun", fRunNumber="$drun", fFileNumber="$file", fCeresSetupKEY="$cereskey", fRunTypeKEY=2"
         sendquery2 
      done

      query="INSERT CeresInfo SET fSequenceNumber="$drun", fRunNumber="$prun", fFileNumber=1, fCeresSetupKEY="$cereskey", fRunTypeKEY=3"
      sendquery2 
      query="INSERT CeresInfo SET fSequenceNumber="$drun", fRunNumber="$crun", fFileNumber=1, fCeresSetupKEY="$cereskey", fRunTypeKEY=4"
      sendquery2 
      query="INSERT CeresStatus SET fRunNumber="$drun", fCeresSetupKEY="$cereskey", fPriority="$drun
      sendquery2 
      query="INSERT CeresStatus SET fRunNumber="$prun", fCeresSetupKEY="$cereskey", fPriority="$prun
      sendquery2 
      query="INSERT CeresStatus SET fRunNumber="$crun", fCeresSetupKEY="$cereskey", fPriority="$crun
      sendquery2 
      query="INSERT Star SET fSequenceNumber="$drun", fCeresSetupKEY="$cereskey
      sendquery2 
      query="INSERT StarStatus SET fSequenceNumber="$drun", fCeresSetupKEY="$cereskey", fPriority="$drun
      sendquery2 
      query="INSERT CallistoStatus SET fSequenceNumber="$drun", fCeresSetupKEY="$cereskey", fPriority="$drun
      sendquery2 
      query="INSERT Calibration SET fSequenceNumber="$drun", fCeresSetupKEY="$cereskey
      sendquery2 
      query="INSERT SequenceInfo SET fSequenceNumber="$drun", fCeresSetupKEY="$cereskey
      sendquery2 
   done
done

echo "To make sure that the inserted runs are processed also on callisto/star level, please run the following script: "`dirname $0`"/writemcsequencefile"


