Jpp  19.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
examples/scripts/gradient.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 script=${0##*/}
3 
4 source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
5 source $JPP_BIN/gradient.sh
6 
7 set_variable: DEBUG SCRIPTS_DEBUG 3
8 
9 if do_usage $*; then
10  usage "$script [number of tests]"
11 fi
12 
13 if (( $# == 1 )); then
14  set_variable NUMBER_OF_TESTS $1
15 else
16  set_variable NUMBER_OF_TESTS 0
17 fi
18 
19 #
20 # User function.
21 #
22 # \param 1 x
23 # \param 2 mean
24 # \param 3 sigma
25 # \param 4 signal
26 # \param 5 background
27 #
28 function gauss()
29 {
30  let "PI = acos(-1.0)"
31  let "u = ($1 - $2) / $3"
32 
33  echo $(( $4 * exp(-0.5*u*u) / (sqrt(2.0*$PI) * $3) + $5 ))
34 }
35 
36 
37 #
38 # User data.
39 #
40 typeset -A DATA # (x,y) values
41 
42 
43 #
44 # Generate random data according true parameters.
45 #
46 function generate
47 {
48  DATA=()
49 
50  for (( X = -5.0; $X <= +5.0; X += 0.5 )); do
51 
52  let "Y = `gauss $X $TRUE_MEAN $TRUE_SIGMA $TRUE_SIGNAL $TRUE_BACKGROUND`"
53 
54  DATA[$X]=`$JPP_DIR/examples/JMath/getPoisson -e $Y`
55  done
56 }
57 
58 
59 #
60 # Get chi2.
61 #
62 # The function is evaluated using parameters MEAN, SIGMA, SIGNAL and BACKGROUND.
63 #
64 # \param 1 variable containing chi2 value on return
65 # \param 2 option
66 #
67 function getChi2()
68 {
69  let "SUM = 0.0"
70 
71  for X Y in ${(kv)DATA}; do
72 
73  let "F = `gauss $X $MEAN $SIGMA $SIGNAL $BACKGROUND`"
74  let "DY = ($F - $Y) * ($F - $Y)"
75 
76  if (( $Y > 0 )); then
77  let "DY /= $Y"
78  else
79  let "DY = $F"
80  fi
81 
82  let "SUM += $DY"
83 
84  done
85 
86  eval $1=$SUM
87 }
88 
89 
90 # True values.
91 
92 let "TRUE_MEAN = 0.0"
93 let "TRUE_SIGMA = 1.0"
94 let "TRUE_SIGNAL = 1000.0"
95 let "TRUE_BACKGROUND = 10.0"
96 
97 
98 #
99 # Print parameters.
100 #
101 function typeout()
102 {
103  for KEY in MEAN SIGMA SIGNAL BACKGROUND; do
104 
105  set_variable P1 $KEY
106  set_variable P2 TRUE_$KEY
107 
108  printf "%-12s %12.3f (fit) %12.3f (true)\n" $KEY ${(P)P1} ${(P)P2}
109  done
110 }
111 
112 
113 if (( $NUMBER_OF_TESTS == 0 )); then
114 
115  DATA=(
116  -3.00000 16.00000
117  -2.50000 22.00000
118  -2.00000 70.00000
119  -1.50000 152.00000
120  -1.00000 261.00000
121  -0.50000 337.00000
122  0.00000 378.00000
123  0.50000 360.00000
124  1.00000 253.00000
125  1.50000 129.00000
126  2.00000 72.00000
127  2.50000 22.00000
128  3.00000 11.00000)
129 
130  # Fit parameters.
131 
132  PARAMETERS=()
133 
134  PARAMETERS['let "MEAN += %"']=1.0e-2
135  PARAMETERS['let "SIGMA += %"']=1.0e-2
136  PARAMETERS['let "SIGNAL += %"']=5.0e-0
137  PARAMETERS['let "BACKGROUND += %"']=5.0e-1
138 
139  # Start values.
140 
141  let "MEAN = 0.5"
142  let "SIGMA = 0.5"
143  let "SIGNAL = 700.0"
144  let "BACKGROUND = 0.0"
145 
146  gradient 0 Y1
147 
148  printf "chi2/NDF %12.5f (fit) (gradient)\n" $(($Y1 / (${#DATA} - ${#PARAMETERS})))
149 
150  simplex Y1
151 
152  printf "chi2/NDF %12.5f (fit) (simplex) \n" $(($Y1 / (${#DATA} - ${#PARAMETERS})))
153 
154  typeout
155 
156  let "MEAN = $TRUE_MEAN"
157  let "SIGMA = $TRUE_SIGMA"
158  let "SIGNAL = $TRUE_SIGNAL"
159  let "BACKGROUND = $TRUE_BACKGROUND"
160 
161  getChi2 Y2
162 
163  printf "chi2/NDF %12.5f (fit) %12.5f (true)\n" $(($Y1 / (${#DATA} - ${#PARAMETERS}))) $(($Y2 / ${#DATA}))
164 
165 else
166 
167  set_variable: DEBUG SCRIPTS_DEBUG 1
168 
169  let "CHI2_FIT = 0.0"
170  let "CHI2_TRUE = 0.0"
171 
172  for (( m = 0; $m != $NUMBER_OF_TESTS; ++m )); do
173 
174  generate
175 
176  # Fit parameters.
177 
178  PARAMETERS=()
179 
180  PARAMETERS['let "MEAN += %"']=1.0e-2
181  PARAMETERS['let "SIGMA += %"']=1.0e-2
182  PARAMETERS['let "SIGNAL += %"']=5.0e-0
183  PARAMETERS['let "BACKGROUND += %"']=5.0e-1
184 
185  # Start values.
186 
187  let "MEAN = 0.5"
188  let "SIGMA = 0.5"
189  let "SIGNAL = 700.0"
190  let "BACKGROUND = 0.0"
191 
192  gradient 0 Y1
193 
194  let "MEAN = $TRUE_MEAN"
195  let "SIGMA = $TRUE_SIGMA"
196  let "SIGNAL = $TRUE_SIGNAL"
197  let "BACKGROUND = $TRUE_BACKGROUND"
198 
199  getChi2 Y2
200 
201  printf "chi2/NDF %3d %12.5f (fit) %12.5f (true)\n" $m $(($Y1 / (${#DATA} - ${#PARAMETERS}))) $(($Y2 / ${#DATA}))
202 
203  let "CHI2_FIT += $Y1 / (${#DATA} - ${#PARAMETERS})"
204  let "CHI2_TRUE += $Y2 / ${#DATA}"
205  done
206 
207  printf "<> %12.5f (fit) %12.5f (true)\n" $(($CHI2_FIT / $NUMBER_OF_TESTS)) $(($CHI2_TRUE / $NUMBER_OF_TESTS))
208 fi
209 
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
typeset A DATA function generate
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR set_variable DEBUG set_variable TMAX_NS set_variable OPTION none DATA
then
Definition: datalogs.sh:34
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR set_variable DIR $JPP_DIR examples JPhysics set_variable DEBUG set_variable darkcount_Hz set_variable rateL0_Hz set_array rateL1_Hz if do_usage *then usage $script[working directory] fi function typeout()
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR &dev null set_variable
* usage
then P1
then fatal The output file must have the wildcard in the e g root fi 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
Definition: JCanberra.sh:48
then set_variable NUMBER_OF_TESTS else set_variable NUMBER_OF_TESTS fi function gauss()
no fit printf nominal n $STRING awk v X
possible values
double u[N+1]
Definition: JPolint.hh:865
then echo
Definition: JQAQC.sh:92
double getChi2(const double P)
Get chi2 corresponding to given probability.
Definition: JFitToolkit.hh:56
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable STRING $argv[2] set_array QUANTILES set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable MODULE `getModule -a $DETECTOR -L "$STRING 0"` source JAcousticsToolkit.sh typeset -A TRIPODS get_tripods $WORKDIR/tripod.txt TRIPODS XMEAN
esac $JPP_BIN JLogger sh $LOGGER until pgrep JGetMessage</dev/null > dev null
then $DIR JPlotNPE PDG P
Definition: JPlotNPE-PDG.sh:62
esac done
Definition: JAddHDE.sh:21
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62