4 # ----------------------------------------------------------------------------------------------------- 
    6 # Toolkit for the determination of the fixed parameters in the system, a.k.a. "pre-calibration". 
    7 # The list of parameters includes (x,y,z) positions of strings and tripods, stretching of strings, 
    8 # z-positions of the optical modules, orientations of the strings and possibly z-positions of anchors. 
   10 # The value of a given parameter is optimised by minimising the average chi2/NDF 
   11 # of a series of global fits applied to a predefined set of acoustic events. 
   12 # For each parameter, there exists a designated function. 
   14 # There are also steering functions to consistently determine the optimal values for a set of parameters. 
   15 # In these, the current accuracy of the parameter values is taken into account. 
   16 # These are therefore referred to as "stages". 
   17 # The pre-calibration thus consists of a sequence of stages. 
   18 # For each detector, a complete pre-calibration procedure is implemented in a designated script. 
   20 # Mandatory input variables: 
   22 # DETECTOR              # detector file 
   23 # INPUT_FILES           # list of input files (output of JAcousticsEventBuilder[.sh]) 
   25 # Optional input variables: 
   27 # HYDROPHONE            # if defined, use hydrophones in global fit; else do not use hydrophones 
   31 # STRINGS corresponds to list of strings to be fitted; this can be changed with function fixStrings. 
   32 # TRIPODS corresponds to list of tripods to be fitted; this can be changed with function fixTripods. 
   34 # TRANSMITTERS corresponds to list of strings which have an emitter on the anchor (maybe empty). 
   35 # For these strings, the orientations and the z-positions of the anchors will separately be fitted. 
   36 # This list will also be changed with function fixStrings. 
   37 # ----------------------------------------------------------------------------------------------------- 
   39 source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/
null 
   40 source $JPP_BIN/gradient.sh
 
   44 set_variable:  JOBS       ACOUSTICS_JOBS       0        # number of parallel threads
 
   47     usage "Toolkit for pre-calibrations of detectors."\
 
   48           "\nThis script should be sourced by the steering script for a specific detector."\
 
   49           "\nConsult the script '$0' for more details." 
   53     echo "This script should be sourced by the steering script for a specific detector." 
   57 if [[ `ps -
o stat= -p $$` == *
"+" ]]; 
then 
   58     echo "This script cannot interactively be used." 
   62 source JAcousticsToolkit.sh
 
   65 typeset -
a     CHI2                  # 
chi2 values; index [1] corresponds to best value
 
   67 let 
"NUMBER_OF_ITERATIONS = 100"     # maximal number of iterations
 
   68 let 
"EPSILON              = 5.0E-4"  # maximal 
distance to minimum of 
chi2 
   69 let 
"RADIUS_M             = 1.0"     # maximal horizontal 
distance between 
T-bar and emitter/hydrophone
 
   70 let 
"PRECISION            = 10"      # number of decimals of 
chi2 evaluation
 
   73 # ----------------------------------------------------------------------------------------------------- 
   76 # Install input files in working directory and create temporary directory TMPDIR. 
   78 # ----------------------------------------------------------------------------------------------------- 
   81     eval `JPrintDetector -
a $DETECTOR -O IDENTIFIER`
 
   85     JAcoustics.sh  $DETECTOR_ID
 
   87     get_tripods  tripod.txt  TRIPODS
 
   89     TRANSMITTERS=(`get_strings_with_transmitter 
transmitter.txt`)
 
   91     if [[ 
"${HYDROPHONE+YES}" == 
"YES" ]]; 
then 
   92         HYDROPHONES=(`get_strings_with_hydrophone hydrophone.txt`)
 
   99     if [[ ! -
f pmt.datx ]]; 
then 
  106 # ----------------------------------------------------------------------------------------------------- 
  107 # Backup files in given directory. 
  110 # ----------------------------------------------------------------------------------------------------- 
  113     debug "Backup intermediate results to $1" 
  123 # ----------------------------------------------------------------------------------------------------- 
  124 # Remove temporary directory and restore input files in working directory. 
  126 # ----------------------------------------------------------------------------------------------------- 
  131     rm -rf $TMPDIR >& /dev/
null 
  133     rm -
f  {acoustics_fit_parameters,acoustics_trigger_parameters}.txt
 
  135     JAcoustics.sh  $DETECTOR_ID
 
  139 # ----------------------------------------------------------------------------------------------------- 
  142 # \param  1-N     identifiers 
  143 # ----------------------------------------------------------------------------------------------------- 
  144 function fixStrings()
 
  150     if (( ${#BUFFER} > 0 )); 
then 
  152         TRANSMITTERS=(${TRANSMITTERS:|BUFFER})
 
  153         HYDROPHONES=(${HYDROPHONES:|BUFFER})
 
  158 # -----------------------------------------------------------------------------------------------------
 
  161 # \param  1-
N     identifiers
 
  162 # -----------------------------------------------------------------------------------------------------
 
  163 function fixTripods()
 
  169     if (( ${#BUFFER} > 0 )); 
then 
  170         for ID in $BUFFER[*]; 
do 
  171             unset 
"TRIPODS[${ID}]" 
  177 # ----------------------------------------------------------------------------------------------------- 
  178 # Evaluate current chi2. 
  180 # \param  1       variable containing chi2 value on return 
  182 # ----------------------------------------------------------------------------------------------------- 
  185     if   (( $JOBS == 0 )); 
then 
  187         rm -
f $TMPDIR/katoomba.root >& /dev/
null 
  191             -
f "$INPUT_FILES[*]"                          \
 
  192             -
o $TMPDIR/katoomba.root                      \
 
  195             -
V sound_velocity.txt                         \
 
  197             -@ $TMPDIR/acoustics_fit_parameters.txt       \
 
  200             -
d 0                                          >& $TMPDIR/job.log
 
  202         if (( $? != 0 )); 
then 
  203             fatal 
"non-zero exit code, see $TMPDIR/job.log" 
  206         set_variable  RESULT  $($JPP_DIR/examples/JAcoustics/JPrintChi2 -
f $TMPDIR/katoomba.root -p $PRECISION)
 
  210         if   (( $2 == 0 )); 
then 
  212             #  step wise improvement of the chi2 
  216                    -
f "$INPUT_FILES[*]"                       \
 
  219                    -
V sound_velocity.txt                      \
 
  221                    -@ $TMPDIR/acoustics_fit_parameters.txt    \
 
  225                    -
d 0 3>&1 1>&4 } | 
read RESULT } 4>&1      >& $TMPDIR/job.log
 
  229             #  evaluation of the chi2 before the determination of the gradient of the chi2 
  231             rm -
f $TMPDIR/fremantle.jpp >& /dev/
null 
  235                    -
f "$INPUT_FILES[*]"                       \
 
  236                    -
o $TMPDIR/fremantle.jpp                   \
 
  239                    -
V sound_velocity.txt                      \
 
  241                    -@ $TMPDIR/acoustics_fit_parameters.txt    \
 
  245                    -
d 0 3>&1 1>&4 } | 
read RESULT } 4>&1      >& $TMPDIR/job.log
 
  249             #  evaluation of the derivative of the chi2 to each fit parameter 
  253                    -
f $TMPDIR/fremantle.jpp                   \
 
  256                    -
V sound_velocity.txt                      \
 
  258                    -@ $TMPDIR/acoustics_fit_parameters.txt    \
 
  261                    -
d 0 3>&1 1>&4 } | 
read RESULT } 4>&1      >& $TMPDIR/job.log
 
  265             fatal 
"invalid option <$2>" 
  268         if (( $? != 0 )); 
then 
  269             fatal 
"non-zero exit code, see $TMPDIR/job.log" 
  275     if (( $? != 0 )); 
then 
  276         fatal 
"non-zero exit code let, value <${RESULT}>." 
  283 # ----------------------------------------------------------------------------------------------------- 
  285 # This stage can be used to determine the (x,y,z) positions of tripods using strings that are fixed. 
  287 # \param  1       fit option 
  288 # \param  2       M-estimator 
  289 # \param  3       resolution [s] 
  290 # \param  4       standard deviations 
  291 # \param  5       step size  [m] 
  292 # \param  6       maximum number of extra steps 
  293 # ----------------------------------------------------------------------------------------------------- 
  296     cat>$TMPDIR/acoustics_fit_parameters.txt<<EOF
 
  297 `
egrep Tmax_s acoustics_fit_parameters.txt`
 
  305     if (( ${#STRINGS} > 0 )); 
then 
  306         JEditDetector  -
a $DETECTOR  -
o $TMPDIR/detector_0.datx  -
k "$STRINGS[*]" -q -
d 0 >& /dev/
null 
  312     for ID in ${(
k)TRIPODS}; 
do 
  313         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addx %" -d 0 >& /dev/null']=$5
 
  314         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addy %" -d 0 >& /dev/null']=$5
 
  315         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addz %" -d 0 >& /dev/null']=$5
 
  320     printf 
"detector                         %6d %8.4f\n" $N $Y
 
  322     if (( ${#STRINGS} > 0 )); 
then 
  328 # ----------------------------------------------------------------------------------------------------- 
  330 # This stage can be used to determine the positions of the strings and tripods. 
  332 # \param  1       fit option 
  333 # \param  2       M-estimator 
  334 # \param  3       resolution [s] 
  335 # \param  4       standard deviations 
  336 # \param  5       step size strings [m] 
  337 # \param  6       step size tripods [m] 
  338 # \param  7       maximum number of extra steps 
  339 # ----------------------------------------------------------------------------------------------------- 
  342     cat>$TMPDIR/acoustics_fit_parameters.txt<<EOF
 
  343 `
egrep Tmax_s acoustics_fit_parameters.txt`
 
  354         PARAMETERS[
'JMoveDetector -a $DETECTOR -S "$STRING addx %" -d 0 >& /dev/null']=$5
 
  355         PARAMETERS[
'JMoveDetector -a $DETECTOR -S "$STRING addy %" -d 0 >& /dev/null']=$5
 
  356         PARAMETERS[
'JMoveDetector -a $DETECTOR -s "$STRING addz %" -d 0 >& /dev/null']=$5
 
  359     for ID in ${(
k)TRIPODS}; 
do 
  360         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addx %" -d 0 >& /dev/null']=$6
 
  361         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addy %" -d 0 >& /dev/null']=$6
 
  362         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addz %" -d 0 >& /dev/null']=$6
 
  365     for STRING in ${HYDROPHONES:|TRANSMITTERS}; 
do 
  366         PARAMETERS[
'JEditHydrophone -f hydrophone.txt -S "$STRING rot %" -o hydrophone.txt -q -d 0 >& /dev/null; JEditTransmitter -f transmitter.txt -S "$STRING rot %" -o transmitter.txt -q -d 0 >& /dev/null']=$(($5 / $RADIUS_M))
 
  373         PARAMETERS[
'JMoveDetector -a $DETECTOR -M "$MODULE addz %" -d 0 >& /dev/null']=$5
 
  374         PARAMETERS[
'JEditHydrophone -f hydrophone.txt -S "$STRING rot %" -o hydrophone.txt -q -d 0 >& /dev/null; JEditTransmitter -f transmitter.txt -S "$STRING rot %" -o transmitter.txt -q -d 0 >& /dev/null']=$(($5 / $RADIUS_M))
 
  379     printf 
"detector                         %6d %8.4f\n" $N $Y
 
  383 # ----------------------------------------------------------------------------------------------------- 
  385 # This stage can be used to determine the stretching and z-positions of individual strings. 
  387 # \param  1       fit option 
  388 # \param  2       M-estimator 
  389 # \param  3       resolution [s] 
  390 # \param  4       standard deviations 
  391 # \param  5       step size stretching [unit] 
  392 # \param  6       step size z-position [m] 
  393 # \param  7       maximum number of extra steps 
  394 # ----------------------------------------------------------------------------------------------------- 
  397     cat>$TMPDIR/acoustics_fit_parameters.txt<<EOF
 
  398 `
egrep Tmax_s acoustics_fit_parameters.txt`
 
  408         JEditDetector  -
a $DETECTOR  -
o $TMPDIR/detector_1.datx  -
r "$STRING" -q -
d 0 >& /dev/
null 
  413         PARAMETERS[
'JMoveDetector -a $DETECTOR -s "$STRING mul %"  -d 0 >& /dev/null; JMoveDetector -a $DETECTOR -s "$STRING subz \$\(\(% * $CAN_ZMAX_M\)\)"  -d 0 >& /dev/null']=$5
 
  414         PARAMETERS[
'JMoveDetector -a $DETECTOR -s "$STRING addz %" -d 0 >& /dev/null']=$6
 
  418         printf 
"string     %04d                  %6d %8.4f\n" $STRING $N $Y
 
  425 # ----------------------------------------------------------------------------------------------------- 
  427 # This stage can be used to determine the z-positions of the modules. 
  429 # \param  1       fit option 
  430 # \param  2       M-estimator 
  431 # \param  3       resolution [s] 
  432 # \param  4       standard deviations 
  433 # \param  5       step size  [m] 
  434 # \param  6       maximum number of extra steps 
  435 # ----------------------------------------------------------------------------------------------------- 
  438     cat>$TMPDIR/acoustics_fit_parameters.txt<<EOF
 
  439 `
egrep Tmax_s acoustics_fit_parameters.txt`
 
  451         for (( FLOOR = 1; $FLOOR <= 18; FLOOR += 1 )); 
do 
  455             PARAMETERS[
'JMoveDetector -a $DETECTOR -M "$MODULE addz %" -d 0 >& /dev/null']=$5
 
  461     printf 
"detector                         %6d %8.4f\n" $N $Y
 
  465 # ----------------------------------------------------------------------------------------------------- 
  467 # This stage can be used to determine the z-positions of the anchors 
  469 # \param  1       fit option 
  470 # \param  2       M-estimator 
  471 # \param  3       resolution [s] 
  472 # \param  4       standard deviations 
  473 # \param  5       step size  [m] 
  474 # \param  6       maximum number of extra steps 
  475 # ----------------------------------------------------------------------------------------------------- 
  478     cat>$TMPDIR/acoustics_fit_parameters.txt<<EOF
 
  479 `
egrep Tmax_s acoustics_fit_parameters.txt`
 
  493         PARAMETERS[
'JMoveDetector -a $DETECTOR -M "$MODULE addz %" -d 0 >& /dev/null']=$5
 
  498     printf 
"detector                         %6d %8.4f\n" $N $Y
 
  502 # ----------------------------------------------------------------------------------------------------- 
  504 # This stage can be used to determine the rotations of the strings and z-positions of the anchors 
  505 # including the response of hydrophones. 
  506 # It includes a determination of the positions of the strings and tripods. 
  508 # \param  1       fit option 
  509 # \param  2       M-estimator 
  510 # \param  3       resolution [s] 
  511 # \param  4       standard deviations 
  512 # \param  5       step size strings [m] 
  513 # \param  6       step size tripods [m] 
  514 # \param  7       maximum number of extra steps 
  515 # ----------------------------------------------------------------------------------------------------- 
  518     cat>$TMPDIR/acoustics_fit_parameters.txt<<EOF
 
  519 `
egrep Tmax_s acoustics_fit_parameters.txt`
 
  535         PARAMETERS[
'JMoveDetector -a $DETECTOR -S "$STRING addx %" -d 0 >& /dev/null']=$5
 
  536         PARAMETERS[
'JMoveDetector -a $DETECTOR -S "$STRING addy %" -d 0 >& /dev/null']=$5
 
  537         PARAMETERS[
'JMoveDetector -a $DETECTOR -s "$STRING addz %" -d 0 >& /dev/null']=$5
 
  538         PARAMETERS[
'JMoveDetector -a $DETECTOR -M "$MODULE addz %" -d 0 >& /dev/null']=$5
 
  540         PARAMETERS[
'JEditHydrophone -f hydrophone.txt -S "$STRING rot %" -o hydrophone.txt -q -d 0 >& /dev/null; JEditTransmitter -f transmitter.txt -S "$STRING rot %" -o transmitter.txt -q -d 0 >& /dev/null']=$(($5 / $RADIUS_M))
 
  543     for ID in ${(
k)TRIPODS}; 
do 
  544         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addx %" -d 0 >& /dev/null']=$6
 
  545         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addy %" -d 0 >& /dev/null']=$6
 
  546         PARAMETERS[
'JMoveTripod -f tripod.txt -T "$ID addz %" -d 0 >& /dev/null']=$6
 
  551     printf 
"detector                         %6d %8.4f\n" $N $Y
 
then fatal No hydrophone data file $HYDROPHONE_TXT fi sort gr k
 
std::istream & read(std::istream &in, JTestSummary &summary, const char delimiter= ' ')
Read test summary. 
 
then usage $script[< detector identifier >< run range >]< QA/QCfile > nExample script to produce data quality plots nWhen a detector identifier and run range are data are downloaded from the database nand subsequently stored in the given QA QC file
 
clean eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY set_variable STRING
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance. 
 
then JLigier sh continue fi cat
 
o $QUALITY_ROOT d $DEBUG!CHECK_EXIT_CODE JPlot1D f
 
then usage $script(input file)+< QA/QC file >" "\nAuxiliary script to produce the following QA/QC data then fatal Wrong number of arguments fi set_array INPUT_FILES $argv[1,-2] set_variable QAQC_FILE $argv[-1] mkdir p $WORKDIR set_variable ACOUSTICS_DEBUG
 
usr share Modules init zsh export TMPDIR
 
static const double H
Planck constant [eV s]. 
 
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
 
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
 
then fatal Wrong number of arguments fi JConvertDetectorFormat a o
 
do JCanberra a $DETECTOR f $INPUT_FILE o $WORKDIR canberra[${EMITTER}\] root T $WORKDIR tripod txt V $WORKDIR sound_velocity txt M $WORKDIR mechanics txt H $WORKDIR hydrophone txt E $EMITTER $DISABLE d $DEBUG!done kill_child_processes_at_exit attach getModule a $DETECTOR typeset Z STRING typeset Z FLOOR for STRING in $STRINGS[*]
 
then fatal Missing detector file $DETECTOR fi eval JPrintDetector a $DETECTOR O IDENTIFIER for KEY in tripod hydrophone transmitter
 
then fatal Invalid string $STRING
 
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable
 
case $OPTION in clean clean
 
do set_variable OUTPUT_DIRECTORY $WORKDIR T
 
skip elif((BINFRAC< 1.0))
 
set_array INPUT_FILES argv[2,$((START_INDEX_STRING-1))] set_array STRINGS
 
then $DIR JKatoomba a $DETECTOR o $WORKDIR katoomba root T $TRIPOD n sigma_s
 
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
 
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
 
then set_variable MODULE getModule a $DETECTOR L $STRING $FLOOR JEditDetector a $DETECTOR M $MODULE add $X o $DETECTOR else echo No update of detector $DETECTOR
 
static const JPBS_t HYDROPHONE(4, 5)
PBS of hydrophone 
 
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
 
then echo Creating output directory
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
static JNullStream null
Null I/O stream. 
 
double getChi2(const double P)
Get chi2 corresponding to given probability. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
 
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
 
const JModule & getModule(const JDetector &detector, const JModuleLocation &location)
find module with a given string and floor number 
 
#define DEBUG(A)
Message macros.