Jpp  17.2.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 #
66 function getChi2()
67 {
68  let "SUM = 0.0"
69 
70  for X Y in ${(kv)DATA}; do
71 
72  let "F = `gauss $X $MEAN $SIGMA $SIGNAL $BACKGROUND`"
73  let "DY = ($F - $Y) * ($F - $Y)"
74 
75  if (( $Y > 0 )); then
76  let "DY /= $Y"
77  else
78  let "DY = $F"
79  fi
80 
81  let "SUM += $DY"
82 
83  done
84 
85  eval $1=$SUM
86 }
87 
88 
89 # True values.
90 
91 let "TRUE_MEAN = 0.0"
92 let "TRUE_SIGMA = 1.0"
93 let "TRUE_SIGNAL = 1000.0"
94 let "TRUE_BACKGROUND = 10.0"
95 
96 
97 #
98 # Print parameters.
99 #
100 function typeout()
101 {
102  for KEY in MEAN SIGMA SIGNAL BACKGROUND; do
103 
104  set_variable P1 $KEY
105  set_variable P2 TRUE_$KEY
106 
107  printf "%-12s %12.3f (fit) %12.3f (true)\n" $KEY ${(P)P1} ${(P)P2}
108  done
109 }
110 
111 
112 if (( 1 )); then
113 
114  DATA=(
115  -3.00000 16.00000
116  -2.50000 22.00000
117  -2.00000 70.00000
118  -1.50000 152.00000
119  -1.00000 261.00000
120  -0.50000 337.00000
121  0.00000 378.00000
122  0.50000 360.00000
123  1.00000 253.00000
124  1.50000 129.00000
125  2.00000 72.00000
126  2.50000 22.00000
127  3.00000 11.00000)
128 
129  # Fit parameters.
130 
131  PARAMETERS=()
132 
133  PARAMETERS['let "MEAN += %"']=1.0e-2
134  PARAMETERS['let "SIGMA += %"']=1.0e-2
135  PARAMETERS['let "SIGNAL += %"']=5.0e-0
136  PARAMETERS['let "BACKGROUND += %"']=5.0e-1
137 
138  # Start values.
139 
140  let "MEAN = 0.5"
141  let "SIGMA = 0.5"
142  let "SIGNAL = 700.0"
143  let "BACKGROUND = 0.0"
144 
145  gradient 0 Y1
146 
147  printf "chi2/NDF %12.5f (fit) (gradient)\n" $(($Y1 / (${#DATA} - ${#PARAMETERS})))
148 
149  simplex Y1
150 
151  printf "chi2/NDF %12.5f (fit) (simplex) \n" $(($Y1 / (${#DATA} - ${#PARAMETERS})))
152 
153  typeout
154 
155  let "MEAN = $TRUE_MEAN"
156  let "SIGMA = $TRUE_SIGMA"
157  let "SIGNAL = $TRUE_SIGNAL"
158  let "BACKGROUND = $TRUE_BACKGROUND"
159 
160  getChi2 Y2
161 
162  printf "chi2/NDF %12.5f (fit) %12.5f (true)\n" $(($Y1 / (${#DATA} - ${#PARAMETERS}))) $(($Y2 / ${#DATA}))
163 fi
164 
165 
166 if (( $NUMBER_OF_TESTS > 0 )); then
167 
168  let "CHI2_FIT = 0.0"
169  let "CHI2_TRUE = 0.0"
170 
171  for (( m = 0; $m != $NUMBER_OF_TESTS; ++m )); do
172 
173  generate
174 
175  # Fit parameters.
176 
177  PARAMETERS=()
178 
179  PARAMETERS['let "MEAN += %"']=1.0e-2
180  PARAMETERS['let "SIGMA += %"']=1.0e-2
181  PARAMETERS['let "SIGNAL += %"']=5.0e-0
182  PARAMETERS['let "BACKGROUND += %"']=5.0e-1
183 
184  # Start values.
185 
186  let "MEAN = 0.5"
187  let "SIGMA = 0.5"
188  let "SIGNAL = 700.0"
189  let "BACKGROUND = 0.0"
190 
191  gradient 0 Y1
192 
193  let "MEAN = $TRUE_MEAN"
194  let "SIGMA = $TRUE_SIGMA"
195  let "SIGNAL = $TRUE_SIGNAL"
196  let "BACKGROUND = $TRUE_BACKGROUND"
197 
198  getChi2 Y2
199 
200  printf "chi2/NDF %3d %12.5f (fit) %12.5f (true)\n" $m $(($Y1 / (${#DATA} - ${#PARAMETERS}))) $(($Y2 / ${#DATA}))
201 
202  let "CHI2_FIT += $Y1 / (${#DATA} + ${#PARAMETERS})"
203  let "CHI2_TRUE += $Y2 / ${#DATA}"
204  done
205 
206  printf "<> %12.5f (fit) %12.5f (true)\n" $(($CHI2_FIT / $NUMBER_OF_TESTS)) $(($CHI2_TRUE / $NUMBER_OF_TESTS))
207 fi
208 
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 echo
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
Definition: JAcoustics.sh:21
* usage
then P1
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:776
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 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:46
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
script
Definition: JAcoustics.sh:2
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