#!/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 05/2006 # # Copyright: MAGIC Software Development, 2000-2006 # # # ======================================================================== # # # ############################################################################## # # This script creates the ganymed.rc files with different parameter sets (the # parameters 1 and 3 are changed in steps). Then the script runs ganymed and # sponde for this different parameter sets. # # variables, that have to be set by the user: # # - path directory, where the files are stored # - mars directory, where your Mars version is stored # - dataset dataset file, which shall be used (filename without path) # the file has to be stored in the dataset directory in the # path # - par*step step width for changing the parameter * # - par*numminus number of steps going to smaller values of the parameter * # - par*num number of steps for changing the parameter * # - spondenum number of sponde rc file (also of the root and log file) # - ganymednum number of ganymed root file # # Please make sure, that you provide the following files: # - $path/setup/ganymed$ganymednum.rc # - $path/setup/sponde$spondenum.rc # - $path/datasets/mcdataset-for-sponde.txt (if you use the script preparemc, # this file is produced automatically) # - $path/datasets/$datasetfilename (you give the datasetfilename below, but # you have to make sure, that it is in the directory $path/datasets # # To re-run ganymed (e.g. with new Software-Version), you have to delete # the ganymed*.root files or set a new ganymednum. # ############################################################################## # to be set by the user path=/home/dorner/crabspectrum mars=/home/dorner/mars.cvs datasetfilename=datasetcrab2005-2.txt spondenum=0 ganymednum=1 # settings for parameter 3 par3step=0.005 par3numminus=10 par3num=13 # settings for parameter 1 par1step=0.005 par1numminus=1 par1num=7 function printsetup() { echo "you set the following parameters: " echo " path: $path " echo " ganymedrc: $ganymedrc" echo " sponderc: $sponderc" echo " dataset: $dataset" echo " mcdataset: $mcdataset" echo " spondenum: $spondenum" echo " ganymednum: $ganymednum" echo " par1: -$par1numminus to $par1num in $par1step steps" echo " par3: -$par3numminus to $par3num in $par3step steps" } #general variables datasetpath=$path/datasets setuppath=$path/setup #resultpath=$path/ganyspec resultpath=$path/ganyspec`echo $datasetfilename | sed -e 's/[.]txt//'` dataset=$datasetpath/$datasetfilename mcdataset=$datasetpath/mcdataset-for-sponde.txt ganymedrc=$setuppath/ganymed$ganymednum.rc sponderc=$setuppath/sponde$spondenum.rc setuplog=$setuppath/setup`date +%F-%H-%M-%S`.log if ! ls $ganymedrc >/dev/null 2>&1 then echo "couldn't find $ganymedrc." echo "please provide the file $ganymedrc and re-run the script" exit fi if ! ls $sponderc >/dev/null 2>&1 then echo "couldn't find $sponderc." echo "do you want to continue anyhow? (ganymed will be done)" echo "please insert y, if you want continue" echo " n, if you want quit" answer=`head -n 1` case $answer in y) echo "continue creating rc files and running ganymed" ;; n) echo "please provide the file $ganymedrc and re-run the script" exit ;; *) echo "your answer is not clear -> exit" exit ;; esac fi #start of the script printsetup printsetup > $setuplog mkdir -pv $resultpath echo "generating the ganymed.rc files with different parameter sets" # generating the ganymed.rc files with different parameter sets par3=`cat $ganymedrc | grep 'Cut1.Param3' | cut -d: -f2` par1=`cat $ganymedrc | grep 'Cut1.Param1' | cut -d: -f2` echo "parameter: 3 $par3 , 1 $par1" start3=`echo $par3 - \( $par3numminus*$par3step \) | bc ` start1=`echo $par1 - \( $par1numminus*$par1step \) | bc ` echo "start: 1: $start1 3: $start3" val1=$start1 val3=$start3 for (( i=0 ; i < $par3num ; i++ )) do for (( j=0 ; j < $par1num ; j++ )) do # echo "i: $i - j: $j ------- par1: $val1 and par3: $val3" dir=$resultpath/set${val1}_${val3} if ! ls $dir >/dev/null 2>&1 then mkdir -pv $dir fi # rcfile=$dir/ganymed_${val1}_${val3}_onoff.rc rcfile=$dir/`basename $ganymedrc` if ! ls $rcfile >/dev/null 2>&1 then cat $ganymedrc | sed -e s/"${par1}"/" ${val1}"/ -e s/"${par3}"/" ${val3}"/ > $rcfile else echo "rcfile $rcfile already exists" fi val1=`echo $val1 + $par1step | bc` done val3=`echo $val3 + $par3step | bc` val1=$start1 done # running ganymed and sponde for different parameter sets # function running ganymed and sponde for a set of cuts function dospec() { cd $mars name=$set/ganymed`printf %08d $ganymednum` ganymedfile=$name.root if ! ls $ganymedfile >/dev/null 2>&1 then cd $mars # rc=`ls $set/ganymed_*onoff.rc` ganymedlog=$name.log echo "starting ganymed for set $set ..." if ! condor_run ./ganymed -b -f --n=$ganymednum --log=$ganymedlog --out=$set --config=$set/`basename $ganymedrc` $dataset >/dev/null then echo "condor is not working " return fi else echo "ganymed for set $set already done => continue with sponde" fi if ! ls $sponderc >/dev/null 2>&1 then echo "ERROR: spondercfile $sponderc is missing" return fi spondefile=$set/sponde$spondenum-g$ganymednum.root spondelog=$set/sponde$spondenum-g$ganymednum.log if ! ls $spondefile >/dev/null 2>&1 then echo "starting sponde for set $set ..." if ! condor_run ./sponde -b -f --log=$spondelog --config=$sponderc -f $ganymedfile $mcdataset $spondefile >/dev/null then echo "condor is not working " return fi echo "finished sponde for set $set ..." else echo "sponde $spondenum for set $set already done => please remove sponde files or give new spondenum" fi } sets=`find $resultpath -type d` for set in ${sets[@]} do # echo "set: "$set if [ "$set" == "$resultpath" ] then continue fi dospec & sleep 3 done