Jpp  16.0.0
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 >< 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
*set_variable DETECTOR_ID $argv[1] set_array RUNS $argv[2,-2]
Definition: JDataQuality.sh:24
std::istream & read(std::istream &in, JTestSummary &summary, const char delimiter= ' ')
Read test summary.
then usage E
Definition: JMuonPostfit.sh:35
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:758
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 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:676
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
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
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 &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:755
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