Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
hydrophone-t0:fit.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2script=${0##*/}
3
4if [ -z $JPP_DIR ]; then
5 echo "Variable JPP_DIR undefined."
6 exit
7fi
8
9source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
10
11zmodload zsh/mathfunc
12
13set_variable: DEBUG ACOUSTICS_DEBUG 2
14set_variable: WORKDIR ACOUSTICS_WORKDIR ./
15set_variable: XMIN HYDROPHONE_XMIN -1.0e-3
16set_variable: XMAX HYDROPHONE_XMAX +1.0e-3
17set_variable: FORMAT GRAPHICS_FORMAT gif
18set_variable+ BATCH GRAPHICS_BATCH -B
19
20if do_usage $*; then
21 usage "$script <detector file> <string identifier> [<detector file>]"
22fi
23
24if (( $# == 0 || $# > 3 )); then
25 fatal "Wrong number of arguments."
26fi
27
28set_variable DETECTOR $argv[1]
29set_variable STRING $argv[2]
30set_array QUANTILES 0.333 0.666
31set_variable FORMULA "[0] * exp(-0.5 * (x-[1])*(x-[1]) / ([2]*[2]))"
32set_variable MODULE `getModule -a $DETECTOR -L "$STRING 0"`
33
34source JAcousticsToolkit.sh
35
36typeset -A TRIPODS
37
38get_tripods $WORKDIR/tripod.txt TRIPODS
39
40XMEAN=(0.0 0.0)
41STDEV=(0.0 0.0)
42TOTAL=0.0
43
44for TRIPOD in ${(k)TRIPODS[*]}; do
45
46 JPrintQuantiles \
47 -f "hydrophone.root:${MODULE}.${TRIPOD}" \
48 -Q "$QUANTILES[*]" \
49 -d 0 | read -A RESULT
50
51 if (( ${#RESULT} == ${#QUANTILES} )); then
52
53 P1=$((0.5*($RESULT[-1] + $RESULT[1]))) # average
54 P2=$((0.5*($RESULT[-1] - $RESULT[1]))) # width
55
56 JFit \
57 -f "hydrophone.root:${MODULE}.${TRIPOD}" \
58 -o ${TMPDIR:-/tmp}/fit.root \
59 -F "$FORMULA" \
60 -@"p0 = GetMaximum * 0.8" \
61 -@"p1 = $P1" \
62 -@"p2 = $P2" \
63 -d 0 >& /dev/null
64
65 JPrintFit -f ${TMPDIR:-/tmp}/fit.root:\.\* -@p1 | read -A P1
66 JPrintFit -f ${TMPDIR:-/tmp}/fit.root:\.\* -@p2 | read -A P2
67
68 VALUE=$((1.0e+6 * $P1[1])) # [us]
69 TOTAL=$(($TOTAL + 1.0))
70
71 if (( $TOTAL == 1.0 )); then
72 XMEAN[1]=$VALUE
73 STDEV[1]=0.0
74 else
75 XMEAN[2]=$(($XMEAN[1] + ($VALUE - $XMEAN[1]) / $TOTAL))
76 STDEV[2]=$(($STDEV[1] + ($VALUE - $XMEAN[1]) * ($VALUE - $XMEAN[2])))
77 XMEAN[1]=$XMEAN[2]
78 STDEV[1]=$STDEV[2]
79 fi
80
81 printf "string %4d tripod %2d %5.0f %3.0f us\n" $STRING $TRIPOD $(($P1[1] * 1.0e6)) $(($P2[1] * 1.0e6))
82 fi
83done
84
85if (( $TOTAL > 1.0 )); then
86 printf "string %4d mean RMS %5.0f %3.0f us\n" $STRING $XMEAN[1] $((sqrt($TOTAL * $STDEV[1] / ($TOTAL * ($TOTAL - 1.0)))))
87fi
88
89typeset -Z 4 STRING
90
91JOpera1D \
92 -f hydrophone.root:$MODULE \
93 -o ${TMPDIR:-/tmp}/H\[${STRING}\].root \
94 -u Add -d 0
95
96JPrintQuantiles \
97 -f ${TMPDIR:-/tmp}/H\[${STRING}\].root:Add \
98 -Q "$QUANTILES[*]" \
99 -d 0 | read -A RESULT
100
101P1=$((0.5*($RESULT[-1] + $RESULT[1]))) # average
102P2=$((0.5*($RESULT[-1] - $RESULT[1]))) # width
103
104JFit \
105 -f ${TMPDIR:-/tmp}/H\[${STRING}\].root:Add \
106 -o ${TMPDIR:-/tmp}/F\[${STRING}\].root \
107 -F "$FORMULA" \
108 -@"p0 = GetMaximum * 0.8" \
109 -@"p1 = $P1" \
110 -@"p2 = $P2" \
111 -d $DEBUG
112
113JPrintFit -f ${TMPDIR:-/tmp}/F\[${STRING}\].root:Add -@p1 | read -A P1
114JPrintFit -f ${TMPDIR:-/tmp}/F\[${STRING}\].root:Add -@p2 | read -A P2
115
116printf "string %4d t0 %6.0f +/- %6.0f us\n" $STRING $(($P1[1] * 1.0e6)) $(($P1[2] * 1.0e6))
117printf "string %4d sigma %6.0f +/- %6.0f us\n" $STRING $(($P2[1] * 1.0e6)) $(($P2[2] * 1.0e6))
118
119if (( ${#} == 3 )); then
120
121 set_variable DETECTOR $argv[3]
122
123 set_array P1 `JPrintFit -f ${TMPDIR:-/tmp}/F\[${STRING}\].root:Add -@p1`
124
125 let "TIME_OFFSET_NS = $P1[1] * 1.0e9"
126
127 printf "Add time offset %12.6d to hydrophone.\n" $TIME_OFFSET_NS
128
129 JEditDetector \
130 -a $DETECTOR \
131 -o $DETECTOR \
132 -M "$MODULE SUB $TIME_OFFSET_NS" \
133 -d $DEBUG
134fi
135
136JPlot1D \
137 -f ${TMPDIR:-/tmp}/F\[${STRING}\].root:Add \
138 -x "$XMIN $XMAX" \
139 -> "#Deltat [s]" \
140 -\^ "number of events [a.u.]" \
141 -N "X 505" \
142 -T "$STRING" \
143 -o hydrophonet0_${STRING}.$FORMAT $BATCH