Jpp  15.0.3
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
acoustics-fit.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 script=${0##*/}
3 
4 # --------------------------------------------------------------------------------------------
5 #
6 # Steering script for tuning of (x,y,z) positions of the strings and tripods as well as
7 # the (z) positions of the modules.
8 #
9 # --------------------------------------------------------------------------------------------
10 
11 if [ -z $JPP_DIR ]; then
12  echo "Variable JPP_DIR undefined."
13  exit
14 fi
15 
16 source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
17 
18 set_variable: DEBUG ACOUSTICS_DEBUG 2
19 set_variable: WORKDIR ACOUSTICS_WORKDIR ./
20 set_variable: STRINGS ACOUSTICS_STRINGS
21 set_variable: TRIPODS ACOUSTICS_TRIPODS
22 set_variable+ HYDROPHONE ACOUSTICS_HYDROPHONE -H $WORKDIR/hydrophone.txt
23 set_variable: FIT ACOUSTICS_FIT 2
24 
25 if do_usage $*; then
26  usage "$script <detector file> <tripod file> <stage> (input file)+"\
27  "\nInput files correspond to the output of JAcousticsEventBuilder[.sh]."\
28  "\nFirst stage is 1 (or A) and last stage is 3."
29 fi
30 
31 if (( $# < 4 )); then
32  fatal "Wrong number of arguments."
33 fi
34 
35 # global variables
36 
38 set_variable TRIPOD_FILE $argv[2]
39 set_variable STAGE $argv[3]
40 set_array INPUT_FILES $argv[4,-1]
41 
42 eval `JPrintDetector -a $DETECTOR -O IDENTIFIER`
43 eval `JPrintDetector -a $DETECTOR -O SUMMARY`
44 eval `JPrintDetector -a $DETECTOR -O CAN`
45 
46 source JAcoustics.sh $DETECTOR_ID
47 
48 # copy (part of) configuration
49 
50 typeset -A CONFIGURATION
51 
52 for key in Tmax_s; do
53  CONFIGURATION[$key]=`egrep $key acoustics_fit_parameters.txt`
54 done
55 
56 typeset -A TRIPODS
57 
58 get_tripods $TRIPOD_FILE TRIPODS
59 
60 if [[ -n "ACOUSTICS_STRINGS" ]] then
61 
62  ACOUSTICS_STRINGS=(`echo $ACOUSTICS_STRINGS`)
63 
64  STRINGS=(${STRINGS:|ACOUSTICS_STRINGS})
65 fi
66 
67 if [[ -n "ACOUSTICS_TRIPODS" ]] then
68 
69  for ID in `echo $ACOUSTICS_TRIPODS`; do
70  unset "TRIPODS[${ID}]"
71  done
72 fi
73 
74 
76 mkdir -p $TMPDIR
77 set_variable OUTPUT_FILE $TMPDIR/katoomba.root
78 
79 typeset -a CHI2 # chi2(old,new)
80 
81 CHI2=(1.0e10 1.0e10)
82 
83 
84 # --------------------------------------------------------------------------------------------
85 # Get center-of-gravity of tripods.
86 #
87 # \return x y z
88 # --------------------------------------------------------------------------------------------
89 function getCenter()
90 {
91  let X_CENTER=0.0
92  let Y_CENTER=0.0
93  let Z_CENTER=0.0
94 
95  for value in "${(@v)TRIPODS}"; do
96 
97  echo $value | read X Y Z
98 
99  let X_CENTER="$X_CENTER + $X"
100  let Y_CENTER="$Y_CENTER + $Y"
101  let Z_CENTER="$Z_CENTER + $Z"
102  done
103 
104  let X_CENTER="$X_CENTER / ${#TRIPODS}"
105  let Y_CENTER="$Y_CENTER / ${#TRIPODS}"
106  let Z_CENTER="$Z_CENTER / ${#TRIPODS}"
107 
108  printf "%12.3f %12.3f %12.3f" $X_CENTER $Y_CENTER $Z_CENTER
109 }
110 
111 
112 # --------------------------------------------------------------------------------------------
113 # Make global fits.
114 #
115 # \return chi2
116 # --------------------------------------------------------------------------------------------
117 function getChi2()
118 {
119  rm -f $OUTPUT_FILE
120 
121  JKatoomba \
122  -a $DETECTOR \
123  -f "$INPUT_FILES[*]" \
124  -o $OUTPUT_FILE \
125  -T $TRIPOD_FILE \
126  -V $WORKDIR/sound_velocity.txt \
127  -M $WORKDIR/mechanics.txt \
128  -@ $WORKDIR/acoustics_fit_parameters.txt \
129  -! $WORKDIR/disable.txt \ $HYDROPHONE \
130  -F $FIT \
131  -u \
132  -d 0 >& /dev/null
133 
134  JPrintResult -f ${OUTPUT_FILE}:chi2 -F GetMean
135 }
136 
137 
138 # --------------------------------------------------------------------------------------------
139 # Fit given coordinate of string position.
140 #
141 # \param 1 string identifier
142 # \param 2 coordinate (X|Y|Z)
143 # \param 3 step
144 # --------------------------------------------------------------------------------------------
145 function fitPositionOfString()
146 {
147  typeset -A BUFFER
148 
149  BUFFER=(X 0.0 Y 0.0 Z 0.0)
150 
151  BUFFER[$2]=$3
152 
153  CHI2[1]=`getChi2`
154 
155  if [[ "$2" == "Z" ]]; then
156  OPTION=-s # optical modules only
157  else
158  OPTION=-S # all modules
159  fi
160 
161  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
162 
163  JEditDetector -a $DETECTOR $OPTION "$1 add $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
164 
165  CHI2[2]=`getChi2`
166 
167  if (( $CHI2[2] >= $CHI2[1] )); then
168 
169  JEditDetector -a $DETECTOR $OPTION "$1 sub $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
170 
171  break
172  fi
173 
174  CHI2[1]=$CHI2[2]
175  done
176 
177  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
178 
179  JEditDetector -a $DETECTOR $OPTION "$1 sub $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
180 
181  CHI2[2]=`getChi2`
182 
183  if (( $CHI2[2] >= $CHI2[1] )); then
184 
185  JEditDetector -a $DETECTOR $OPTION "$1 add $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
186 
187  break
188  fi
189 
190  CHI2[1]=$CHI2[2]
191  done
192 
193  printf "string %04d %s %6d %7.3f\n" $1 $2 $N $CHI2[1]
194 }
195 
196 
197 # --------------------------------------------------------------------------------------------
198 # Fit stretching of string.
199 #
200 # \param 1 string identifier
201 # \param 2 multiplication factor
202 # --------------------------------------------------------------------------------------------
203 function fitStretchingOfString()
204 {
205  CHI2[1]=`getChi2`
206 
207  let Z="$CAN_ZMAX_M * $2"
208 
209  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
210 
211  JEditDetector -a $DETECTOR -s "$1 mul $2" -s "$1 sub 0.0 0.0 $Z" -o $DETECTOR -d 0 >& /dev/null
212 
213  CHI2[2]=`getChi2`
214 
215  if (( $CHI2[2] >= $CHI2[1] )); then
216 
217  JEditDetector -a $DETECTOR -s "$1 add 0.0 0.0 $Z" -s "$1 div $2" -o $DETECTOR -d 0 >& /dev/null
218 
219  break
220  fi
221 
222  CHI2[1]=$CHI2[2]
223  done
224 
225  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
226 
227  JEditDetector -a $DETECTOR -s "$1 add 0.0 0.0 $Z" -s "$1 div $2" -o $DETECTOR -d 0 >& /dev/null
228 
229  CHI2[2]=`getChi2`
230 
231  if (( $CHI2[2] >= $CHI2[1] )); then
232 
233  JEditDetector -a $DETECTOR -s "$1 mul $2" -s "$1 sub 0.0 0.0 $Z" -o $DETECTOR -d 0 >& /dev/null
234 
235  break
236  fi
237 
238  CHI2[1]=$CHI2[2]
239  done
240 
241  printf "string %04d M %6d %7.3f\n" $1 $N $CHI2[1]
242 }
243 
244 
245 # --------------------------------------------------------------------------------------------
246 # Fit given coordinate of tripod position.
247 #
248 # \param 1 tripod identifier
249 # \param 2 coordinate (X|Y|Z)
250 # \param 3 step
251 # --------------------------------------------------------------------------------------------
252 function fitPositionOfTripod()
253 {
254  typeset -A BUFFER
255 
256  BUFFER=(X 0.0 Y 0.0 Z 0.0)
257 
258  BUFFER[$2]=$3
259 
260  CHI2[1]=`getChi2`
261 
262  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
263 
264  JEditTripod -f $TRIPOD_FILE -T "$1 add $BUFFER[*]" -r -d 0 >& /dev/null
265 
266  CHI2[2]=`getChi2`
267 
268  if (( $CHI2[2] >= $CHI2[1] )); then
269 
270  JEditTripod -f $TRIPOD_FILE -T "$1 sub $BUFFER[*]" -r -d 0 >& /dev/null
271 
272  break
273  fi
274 
275  CHI2[1]=$CHI2[2]
276  done
277 
278  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
279 
280  JEditTripod -f $TRIPOD_FILE -T "$1 sub $BUFFER[*]" -r -d 0 >& /dev/null
281 
282  CHI2[2]=`getChi2`
283 
284  if (( $CHI2[2] >= $CHI2[1] )); then
285 
286  JEditTripod -f $TRIPOD_FILE -T "$1 add $BUFFER[*]" -r -d 0 >& /dev/null
287 
288  break
289  fi
290 
291  CHI2[1]=$CHI2[2]
292  done
293 
294  printf "tripod %2d %s %6d %7.3f\n" $1 $2 $N $CHI2[1]
295 }
296 
297 
298 # --------------------------------------------------------------------------------------------
299 # Fit module z-position.
300 #
301 # \param 1 string identifier
302 # \param 2 floor
303 # \param 3 step
304 # --------------------------------------------------------------------------------------------
305 function fitPositionOfModule()
306 {
307  typeset -A BUFFER
308 
309  BUFFER=(X 0.0 Y 0.0 Z $3)
310 
311  set_variable NUMBER_OF_STEPS 10 # limit number of steps
312  set_variable MODULE `getModule -a $DETECTOR -L "$1 $2"`
313 
314  CHI2[1]=`getChi2`
315 
316  for (( i=0 ; $i != $NUMBER_OF_STEPS && $N != $NUMBER_OF_ITERATIONS; ++i, ++N )); do
317 
318  JEditDetector -a $DETECTOR -M "$MODULE add $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
319 
320  CHI2[2]=`getChi2`
321 
322  if (( $CHI2[2] >= $CHI2[1] )); then
323 
324  JEditDetector -a $DETECTOR -M "$MODULE sub $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
325 
326  break
327  fi
328 
329  CHI2[1]=$CHI2[2]
330  done
331 
332  for (( i=0 ; $i != $NUMBER_OF_STEPS && $N != $NUMBER_OF_ITERATIONS; ++i, ++N )); do
333 
334  JEditDetector -a $DETECTOR -M "$MODULE sub $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
335 
336  CHI2[2]=`getChi2`
337 
338  if (( $CHI2[2] >= $CHI2[1] )); then
339 
340  JEditDetector -a $DETECTOR -M "$MODULE add $BUFFER[*]" -o $DETECTOR -d 0 >& /dev/null
341 
342  break
343  fi
344 
345  CHI2[1]=$CHI2[2]
346  done
347 
348  printf "module %04d.%02d %6d %7.3f\n" $1 $2 $N $CHI2[1]
349 }
350 
351 
352 # --------------------------------------------------------------------------------------------
353 # Fit given coordinate of hydrophone position.
354 #
355 # \param 1 string identifier
356 # \param 2 coordinate (X|Y|Z)
357 # \param 3 step
358 # --------------------------------------------------------------------------------------------
359 function fitPositionOfHydrophone()
360 {
361  typeset -A BUFFER
362 
363  BUFFER=(X 0.0 Y 0.0 Z 0.0)
364 
365  BUFFER[$2]=$3
366 
367  set_variable MODULE `getModule -a $DETECTOR -L "$1 0"`
368 
369  CHI2[1]=`getChi2`
370 
371  if [[ "$2" == "Z" ]]; then
372  ADD="-M $MODULE add $BUFFER[*]" # base module only
373  SUB="-M $MODULE sub $BUFFER[*]" # base module only
374  else
375  ADD="-S $1 add $BUFFER[*]" # all modules
376  SUB="-S $1 sub $BUFFER[*]" # all modules
377  fi
378 
379  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
380 
381  JEditDetector -a $DETECTOR $ADD -o $DETECTOR -d 0 >& /dev/null
382 
383  CHI2[2]=`getChi2`
384 
385  if (( $CHI2[2] >= $CHI2[1] )); then
386 
387  JEditDetector -a $DETECTOR $SUB -o $DETECTOR -d 0 >& /dev/null
388 
389  break
390  fi
391 
392  CHI2[1]=$CHI2[2]
393  done
394 
395  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
396 
397  JEditDetector -a $DETECTOR $SUB -o $DETECTOR -d 0 >& /dev/null
398 
399  CHI2[2]=`getChi2`
400 
401  if (( $CHI2[2] >= $CHI2[1] )); then
402 
403  JEditDetector -a $DETECTOR $ADD -o $DETECTOR -d 0 >& /dev/null
404 
405  break
406  fi
407 
408  CHI2[1]=$CHI2[2]
409  done
410 
411  printf "hydrophone %04d %s %6d %7.3f\n" $1 $2 $N $CHI2[1]
412 }
413 
414 
415 # --------------------------------------------------------------------------------------------
416 # Fit rotation of hydrophone.
417 #
418 # \param 1 string identifier
419 # \param 2 rotation angle [rad]
420 # --------------------------------------------------------------------------------------------
421 function fitRotationOfHydrophone()
422 {
423  typeset -A BUFFER
424 
425  let ROT="$2"
426 
427  CHI2[1]=`getChi2`
428 
429  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
430 
431  JEditHydrophone -f $WORKDIR/hydrophone.txt -S "$1 rot $ROT" -r -d 0 >& /dev/null
432 
433  CHI2[2]=`getChi2`
434 
435  if (( $CHI2[2] >= $CHI2[1] )); then
436 
437  let ROT="-1.0 * $ROT"
438 
439  JEditHydrophone -f $WORKDIR/hydrophone.txt -S "$1 rot $ROT" -r -d 0 >& /dev/null
440 
441  break
442  fi
443 
444  CHI2[1]=$CHI2[2]
445  done
446 
447  for (( ; $N != $NUMBER_OF_ITERATIONS; ++N )); do
448 
449  JEditHydrophone -f $WORKDIR/hydrophone.txt -S "$1 rot $ROT" -r -d 0 >& /dev/null
450 
451  CHI2[2]=`getChi2`
452 
453  if (( $CHI2[2] >= $CHI2[1] )); then
454 
455  let ROT="-1.0 * $ROT"
456 
457  JEditHydrophone -f $WORKDIR/hydrophone.txt -S "$1 rot $ROT" -r -d 0 >& /dev/null
458 
459  break
460  fi
461 
462  CHI2[1]=$CHI2[2]
463  done
464 
465  printf "hydrophone %04d R %6d %7.3f\n" $1 $N $CHI2[1]
466 }
467 
468 
469 #
470 # Main function.
471 #
472 
473 echo "Processing stage $STAGE"
474 
475 CHI2=(1.0e10 1.0e10)
476 
478 
479 getCenter | read X_CENTER Y_CENTER Z_CENTER
480 
481 case $STAGE in
482 
483  A) # ------------------------------------------------------------------------------------
484 
485  set_variable NUMBER_OF_ITERATIONS 1000
486  set_variable EPSILON 5.0E-4
487 
488  cat>acoustics_fit_parameters.txt<<EOF # fix tilt angles of strings
489 $CONFIGURATION[*]
490 Nmin = 3;
491 sigma_s = 250.0e-6;
492 stdev = 10.0;
495 EOF
496 
497  for DX_M in 0.5 0.2; do # fit (x,y,z) positions of strings and tripods
499  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
500 
501  CHI2[3]=$CHI2[1]
502 
503  for STRING in $STRINGS[*]; do
504  fitPositionOfString $STRING X $DX_M
505  fitPositionOfString $STRING Y $DX_M
506  fitPositionOfString $STRING Z $DX_M
507  done
508 
509  for TRIPOD in ${(k)TRIPODS}; do
510  fitPositionOfTripod $TRIPOD X $DX_M
511  fitPositionOfTripod $TRIPOD Y $DX_M
512  fitPositionOfTripod $TRIPOD Z $DX_M
513  done
514 
515  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
516  break
517  fi
518  done
519 
520  getCenter | read X Y Z
521 
522  let X="$X - $X_CENTER"
523  let Y="$Y - $Y_CENTER"
524  let Z="$Z - $Z_CENTER"
525 
526  JEditTripod -f $TRIPOD_FILE -T "-1 sub $X $Y $Z" -r -d 0 >& /dev/null
527  JEditDetector -a $DETECTOR -S "-1 sub $X $Y $Z" -o $DETECTOR -d 0 >& /dev/null
528 
529  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
530 
531  if (( $N >= $NUMBER_OF_ITERATIONS )); then
532  printf "warning: reached maximum number of iterations %d - converenge %7.3f\n" $N $(($CHI2[3] - $CHI2[1]))
533  fi
534  done
535 
536  set_variable NUMBER_OF_ITERATIONS 2000
537  set_variable EPSILON 5.0E-4
538 
539  for DX_M in 0.1; do # fit (z) positions of modules
540 
541  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
542 
543  CHI2[3]=$CHI2[1]
544 
545  for STRING in $STRINGS[*]; do
546  for (( FLOOR = 1; $FLOOR <= 18; FLOOR += 1 )); do
547  fitPositionOfModule $STRING $FLOOR $DX_M
548  done
549  done
550 
551  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
552  break
553  fi
554  done
555 
556  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
557 
558  if (( $N >= $NUMBER_OF_ITERATIONS )); then
559  printf "warning: reached maximum number of iterations %d - converenge %7.3f\n" $N $(($CHI2[3] - $CHI2[1]))
560  fi
561  done
562  ;;
564  1) # ------------------------------------------------------------------------------------
565 
566  set_variable NUMBER_OF_ITERATIONS 1000
567  set_variable EPSILON 5.0E-4
568 
569  cat>acoustics_fit_parameters.txt<<EOF
570 $CONFIGURATION[*]
571 Nmin = 3;
572 sigma_s = 100.0e-6;
573 stdev = 10.0;
574 mestimator = 0;
575 fixStrings = 0;
576 EOF
577 
578  for STRING in $STRINGS[*]; do # fit stretching and (z) position of given string
579 
580  set_variable DETECTOR_TMP ${TMPDIR:-/tmp}/detector_A.datx
581 
582  JEditDetector -a $DETECTOR -o $DETECTOR_TMP -r $STRING
583  JEditDetector -a $DETECTOR -o $DETECTOR -k $STRING
584 
585  for MUL in 0.005 0.001; do
586 
587  DX_M=0.2
588 
589  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
590 
591  CHI2[3]=$CHI2[1]
592 
593  fitPositionOfString $STRING Z $DX_M
594  fitStretchingOfString $STRING $MUL
595 
596  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
597  break
598  fi
599  done
600 
601  if (( $N >= $NUMBER_OF_ITERATIONS )); then
602  printf "warning: reached maximum number of iterations %d - converenge %7.3f\n" $N $(($CHI2[3] - $CHI2[1]))
603  fi
604  done
605 
606  JMergeDetector -a $DETECTOR -a $DETECTOR_TMP -o $DETECTOR
607 
608  rm -f $DETECTOR_TMP
609 
610  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
611 
612  done
613  ;;
614 
615  2) # ------------------------------------------------------------------------------------
616 
617  set_variable NUMBER_OF_ITERATIONS 1000
618  set_variable EPSILON 5.0E-4
619 
620  cat>acoustics_fit_parameters.txt<<EOF
621 $CONFIGURATION[*]
622 Nmin = 3;
623 sigma_s = 100.0e-6;
624 stdev = 10.0;
625 mestimator = 0;
626 fixStrings = 0;
627 EOF
628 
629  for DX_M in 0.2; do # fit (x,y,z) positions of strings and tripods
630 
631  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
632 
633  CHI2[3]=$CHI2[1]
634 
635  for STRING in $STRINGS[*]; do
636  fitPositionOfString $STRING X $DX_M
637  fitPositionOfString $STRING Y $DX_M
638  fitPositionOfString $STRING Z $DX_M
639  done
640 
641  for TRIPOD in ${(k)TRIPODS}; do
642  fitPositionOfTripod $TRIPOD X $DX_M
643  fitPositionOfTripod $TRIPOD Y $DX_M
644  fitPositionOfTripod $TRIPOD Z $DX_M
645  done
646 
647  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
648  break
649  fi
650  done
651 
652  getCenter | read X Y Z
653 
654  let X="$X - $X_CENTER"
655  let Y="$Y - $Y_CENTER"
656  let Z="$Z - $Z_CENTER"
657 
658  JEditTripod -f $TRIPOD_FILE -T "-1 sub $X $Y $Z" -r -d 0 >& /dev/null
659  JEditDetector -a $DETECTOR -S "-1 sub $X $Y $Z" -o $DETECTOR -d 0 >& /dev/null
660 
661  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
662 
663  if (( $N >= $NUMBER_OF_ITERATIONS )); then
664  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
665  fi
666  done
667 
668  set_variable NUMBER_OF_ITERATIONS 2000
669  set_variable EPSILON 5.0E-4
670 
671  for DX_M in 0.10; do # fit (z) positions of modules and (x,y) positions of strings
672 
673  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
674 
675  CHI2[3]=$CHI2[1]
676 
677  for STRING in $STRINGS[*]; do
678 
679  for (( FLOOR = 1; $FLOOR <= 18; FLOOR += 1 )); do
680  fitPositionOfModule $STRING $FLOOR $DX_M
681  done
682 
683  fitPositionOfString $STRING X $DX_M
684  fitPositionOfString $STRING Y $DX_M
685  done
686 
687  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
688  break
689  fi
690  done
691 
692  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
693 
694  if (( $N >= $NUMBER_OF_ITERATIONS )); then
695  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
696  fi
697  done
698  ;;
699 
700  3) # ------------------------------------------------------------------------------------
701 
702  set_variable NUMBER_OF_ITERATIONS 1000
703  set_variable EPSILON 5.0E-4
704 
705  cat>acoustics_fit_parameters.txt<<EOF
706 $CONFIGURATION[*]
707 Nmin = 3;
708 sigma_s = 50.0e-6;
709 stdev = 10.0;
710 mestimator = 0;
711 fixStrings = 0;
712 EOF
713 
714  for DX_M in 0.10 0.05; do # fit (x,y,z) positions of strings and tripods
715 
716  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
717 
718  CHI2[3]=$CHI2[1]
719 
720  for STRING in $STRINGS[*]; do
721  fitPositionOfString $STRING X $DX_M
722  fitPositionOfString $STRING Y $DX_M
723  fitPositionOfString $STRING Z $DX_M
724  done
725 
726  for TRIPOD in ${(k)TRIPODS}; do
727  fitPositionOfTripod $TRIPOD X $DX_M
728  fitPositionOfTripod $TRIPOD Y $DX_M
729  fitPositionOfTripod $TRIPOD Z $DX_M
730  done
731 
732  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
733  break
734  fi
735  done
736 
737  getCenter | read X Y Z
738 
739  let X="$X - $X_CENTER"
740  let Y="$Y - $Y_CENTER"
741  let Z="$Z - $Z_CENTER"
742 
743  JEditTripod -f $TRIPOD_FILE -T "-1 sub $X $Y $Z" -r -d 0 >& /dev/null
744  JEditDetector -a $DETECTOR -S "-1 sub $X $Y $Z" -o $DETECTOR -d 0 >& /dev/null
745 
746  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
747 
748  if (( $N >= $NUMBER_OF_ITERATIONS )); then
749  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
750  fi
751  done
752 
753  set_variable NUMBER_OF_ITERATIONS 2000
754  set_variable EPSILON 5.0E-4
755 
756  for DX_M in 0.05; do # fit (z) positions of modules and (x,y) positions of strings
757 
758  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
759 
760  CHI2[3]=$CHI2[1]
761 
762  for STRING in $STRINGS[*]; do
763 
764  for (( FLOOR = 1; $FLOOR <= 18; FLOOR += 1 )); do
765  fitPositionOfModule $STRING $FLOOR $DX_M
766  done
767 
768  fitPositionOfString $STRING X $DX_M
769  fitPositionOfString $STRING Y $DX_M
770  done
771 
772  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
773  break
774  fi
775  done
776 
777  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
778 
779  if (( $N >= $NUMBER_OF_ITERATIONS )); then
780  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
781  fi
782  done
783  ;;
784 
785  D) # ------------------------------------------------------------------------------------
786 
787  set_variable HYDROPHONE -H $WORKDIR/hydrophone.txt
788  set_variable NUMBER_OF_ITERATIONS 2000
789  set_variable EPSILON 5.0E-4
790 
791  cat>acoustics_fit_parameters.txt<<EOF
792 $CONFIGURATION[*]
793 Nmin = 3;
794 sigma_s = 50.0e-6;
795 stdev = 10.0;
796 mestimator = 0;
797 fixStrings = 0;
798 EOF
799 
800  for A_RAD DX_M in 0.05 0.10; do # fit orientation and z-position of hydrophones
801 
802  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
803 
804  CHI2[3]=$CHI2[1]
805 
806  for STRING in $STRINGS[*]; do
807  fitRotationOfHydrophone $STRING $A_RAD
808  fitPositionOfHydrophone $STRING Z $DX_M
809  done
810 
811  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
812  break
813  fi
814  done
815 
816  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
817 
818  if (( $N >= $NUMBER_OF_ITERATIONS )); then
819  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
820  fi
821  done
822 
823  for DX_M in 0.05; do # fit position of strings and tripods
824 
825  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
826 
827  CHI2[3]=$CHI2[1]
828 
829  for STRING in $STRINGS[*]; do
830  fitPositionOfString $STRING X $DX_M
831  fitPositionOfString $STRING Y $DX_M
832  fitPositionOfString $STRING Z $DX_M
833  fitPositionOfHydrophone $STRING Z $DX_M
834  done
835 
836  for TRIPOD in ${(k)TRIPODS}; do
837  fitPositionOfTripod $TRIPOD X $DX_M
838  fitPositionOfTripod $TRIPOD Y $DX_M
839  fitPositionOfTripod $TRIPOD Z $DX_M
840  done
841 
842  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
843  break
844  fi
845  done
846 
847  getCenter | read X Y Z
848 
849  let X="$X - $X_CENTER"
850  let Y="$Y - $Y_CENTER"
851  let Z="$Z - $Z_CENTER"
852 
853  JEditTripod -f $TRIPOD_FILE -T "-1 sub $X $Y $Z" -r -d 0 >& /dev/null
854  JEditDetector -a $DETECTOR -S "-1 sub $X $Y $Z" -o $DETECTOR -d 0 >& /dev/null
855 
856  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
857 
858  if (( $N >= $NUMBER_OF_ITERATIONS )); then
859  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
860  fi
861  done
862 
863  set_variable NUMBER_OF_ITERATIONS 1000
864  set_variable EPSILON 5.0E-4
865 
866  for DX_M in 0.05; do # fit (z) positions of modules and (x,y) positions of strings
867 
868  for (( N=0; $N < $NUMBER_OF_ITERATIONS; ++N )); do
869 
870  CHI2[3]=$CHI2[1]
871 
872  for STRING in $STRINGS[*]; do
873 
874  for (( FLOOR = 1; $FLOOR <= 18; FLOOR += 1 )); do
875  fitPositionOfModule $STRING $FLOOR $DX_M
876  done
877 
878  fitPositionOfString $STRING X $DX_M
879  fitPositionOfString $STRING Y $DX_M
880  done
881 
882  if (( $CHI2[3] - $CHI2[1] < $EPSILON )); then
883  break
884  fi
885  done
886 
887  JConvertDetectorFormat -a $DETECTOR -o $DETECTOR -r -d 0 >& /dev/null
888 
889  if (( $N >= $NUMBER_OF_ITERATIONS )); then
890  warning "reached maximum number of iterations $N - converenge $(($CHI2[3] - $CHI2[1]))"
891  fi
892  done
893  ;;
894 
895  *) # ------------------------------------------------------------------------------------
896 
897  fatal "invalid stage $STAGE (possible stages: 1, 2, 3, A, D)"
898  ;;
899 esac
900 
901 mkdir -p $WORKDIR/$STAGE
902 
904 cp $TRIPOD_FILE $WORKDIR/$STAGE
905 
906 timer_stop
907 timer_print
908 
909 rm -f acoustics_fit_parameters.txt
910 
911 source JAcoustics.sh $DETECTOR_ID
912 
913 rm -rf $TMPDIR
914 
then usage $script< detector file >< detectorfile > nIf the range of floors is the first detector file is aligned to the second before the comparison nIn only modules within the given range of floors are used fi case set_variable RANGE $argv[3]
then usage $script< detector >< run >< outputfile > fi case set_variable OPTION
Definition: JTuna.sh:26
then fatal No hydrophone data file $HYDROPHONE_TXT fi sort gr k
do $JPP JMEstimator M
Definition: JMEstimator.sh:37
fixStrings
std::istream & read(std::istream &in, JTestSummary &summary, const char delimiter= ' ')
Read test summary.
clean eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY set_variable STRING
then JLigier sh continue fi cat
Definition: JDAQDriver.sh:51
then warning reached maximum number of iterations $N converenge(($CHI2[3]-$CHI2[1]))" fi done set_variable NUMBER_OF_ITERATIONS 2000 set_variable EPSILON 5.0E-4 for DX_M in 0.10
stdev
o $QUALITY_ROOT d $DEBUG!JPlot1D f
Definition: JDataQuality.sh:66
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
mestimator
static const double H
Planck constant [eV s].
exit
Definition: JPizza.sh:36
data_type r[M+1]
Definition: JPolint.hh:742
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 usage E
Definition: JMuonPostfit.sh:35
then echo
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[*]
Definition: JCanberra.sh:64
const int n
Definition: JPolint.hh:660
then timer_start(JRandomTimesliceWriter-a ${DETECTOR}-o ${PIPE}-n ${NUMBER_OF_SLICES}-P ${PMT_FILE}-d ${DEBUG}-S ${SEED}-B"$BACKGROUND_HZ"-N"$RECYCLING"--!&&for((i=0;$i!=10;++i));do;echo 'EOF' > $PIPE;usleep 100000;done &&rm-f $PIPE)&JTimesliceReprocessor-a $
do for((RUN=${RANGE%%-*};$RUN<=${RANGE##*-};RUN+=1))
*fatal invalid stage $STAGE(possible stages:1, 2, 3, A, D)"
do CONFIGURATION[$key]
then fatal Invalid string $STRING
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable
Definition: JAcoustics.sh:20
do set_variable OUTPUT_DIRECTORY $WORKDIR T
then usage $script< detector specific acoustics-fit script >< option > nAuxiliary script to make scan of pre stretching of detector strings(see JEditDetector)." "\nPossible options
then printf warning
&set_variable TRIPOD
then break fi done getCenter read X Y Z let X
set_variable NUMBER_OF_ITERATIONS set_variable EPSILON cat acoustics_fit_parameters txt<< EOF $CONFIGURATION[*]Nmin=3;sigma_s=100.0e-6;stdev=10.0;mestimator=0;fixStrings=0;EOF for STRING in $STRINGS[*];do#fit stretching and(z) position of given string set_variable DETECTOR_TMP ${TMPDIR:-/tmp}/detector_A.datx JEditDetector-a $DETECTOR-o $DETECTOR_TMP-r $STRING JEditDetector-a $DETECTOR-o $DETECTOR-k $STRING for MUL in 0.005 0.001;do DX_M=0.2 for((N=0;$N< $NUMBER_OF_ITERATIONS;++N));do CHI2[3]=$CHI2[1] fitPositionOfString $STRING Z $DX_M fitStretchingOfString $STRING $MUL if(($CHI2[3]-$CHI2[1]< $EPSILON));then break fi done if(($N >=$NUMBER_OF_ITERATIONS));then printf"warning: reached maximum number of iterations %d - converenge %7.3f\n"$N $(($CHI2[3]-$CHI2[1])) fi done JMergeDetector-a $DETECTOR-a $DETECTOR_TMP-o $DETECTOR rm-f $DETECTOR_TMP JConvertDetectorFormat-a $DETECTOR-o $DETECTOR-r-d 0 > &dev null done
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR if do_usage *then usage $script[(input file)+] fi set_variable DEBUG set_variable WORKDIR TMPDIR
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable DEBUG set_variable WORKDIR
Definition: JLegolas.sh:20
then awk F
* usage
then JConvertDetectorFormat a $DETECTOR[1] o
sigma_s
do sput $STRING $FLOOR sget MODULE INPUT_FILES
Definition: JCanberra.sh:73
do set_variable SIGMA_NS set_variable OUTLIERS set_variable OUTPUT_FILE matrix[${ALPHA_DEG}\deg\] root $JPP JMatrixNZ a $DETECTOR f $INPUT_FILE o $OUTPUT_FILE S
Definition: JMatrixNZ.sh:58
&set_variable OUTPUT_FILE
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Definition: JMuonPath.sh:47
then JCalibrateToT a
Definition: JTuneHV.sh:116
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 usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
then display $WORKDIR
Definition: plot-Domino.sh:128
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable DEBUG set_variable WORKDIR $JPP_DATA set_variable MAKE_PDF set_variable MERGE_PDF set_variable MAKE_CDF set_variable CLEAN set_variable BACKGROUND set_variable WGET set_variable RMAX_M set_variable absorptionLengthFactor set_variable scatteringLengthFactor BUFFER
Definition: JMakePDF.sh:36
do((XR=$XL+$DX)) LABEL
then fatal No tripod file $TRIPOD fi source JAcoustics sh CHECK_EXIT_CODE typeset A TRIPODS get_tripods $TRIPOD TRIPODS let X_CENTER
Definition: JFootprint.sh:44
then cp
do set_variable MODULE getModule a $WORKDIR detector_a datx L $STRING JEditDetector a $WORKDIR detector_a datx M $MODULE setz o $WORKDIR detector_a datx JEditDetector a $WORKDIR detector_b datx M $MODULE setz o $WORKDIR detector_b datx done echo Output stored at $WORKDIR detector_a datx and $WORKDIR tripod_a txt JDrawDetector2D a $WORKDIR detector_a datx a $WORKDIR detector_b datx L BL o detector $FORMAT $BATCH JDrawDetector2D T $WORKDIR tripod_a txt T $WORKDIR tripod_b txt L BL o tripod $FORMAT $BATCH JCompareDetector a $WORKDIR detector_a datx b $WORKDIR detector_b datx o $WORKDIR abc root &dev null for KEY in X Y Z
set_variable DETECTOR
double u[N+1]
Definition: JPolint.hh:739
do unset TRIPODS[${ID}] done fi set_variable TMPDIR $WORKDIR mkdir p $TMPDIR set_variable OUTPUT_FILE $TMPDIR katoomba root typeset a CHI2 CHI2
then fatal Not enough tripods
double getChi2(const double P)
Get chi2 corresponding to given probability.
Definition: JFitToolkit.hh:56
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 source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Definition: JCanberra.sh:42
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
script
Definition: JAcoustics.sh:2
do echo Generating $dir eval D
Definition: JDrawLED.sh:53
*fatal Wrong option $OPTION
then fatal Invalid tripod $TRIPOD
esac $JPP_BIN JLogger sh $LOGGER until pgrep JGetMessage</dev/null > dev null
const JModule & getModule(const JDetector &detector, const JModuleLocation &location)
find module with a given string and floor number
do if[[!-f $ACOUSTICS_WORKDIR/${KEY}.txt]]
Definition: JAcoustics.sh:39
then usage $script< detector file >< tripodfile >< stage > input file nInput files correspond to the output of JAcousticsEventBuilder[.sh] nFirst stage eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY eval JPrintDetector a $DETECTOR O CAN source JAcoustics sh $DETECTOR_ID typeset A CONFIGURATION for key in Tmax_s
do alias $i