Jpp 21.0.0-rc.1-88-g0130508c4
the software that should make you happy
Loading...
Searching...
No Matches
plot-gradient.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 2
14set_variable WORKDIR ${TMPDIR:-/tmp}/
15set_variable OPTION chi2
16set_variable: PRECISION RECONSTRUCTION_PRECISION 0.1
17set_variable: PALETTE GRAPHICS_PALETTE 57
18set_variable: FORMAT GRAPHICS_FORMAT gif
19set_variable+ BATCH GRAPHICS_BATCH -B
20
21if do_usage $*; then
22 usage "$script <input file> [option]"\
23 "\nThe input file corresponds to the log file of JGradient."\
24 "\nThe option can be \"chi2\" or \"likelihood\"."
25fi
26
27case $# in
28 2) set_variable OPTION $2;&
29 1) set_variable INPUT_FILE $1;;
30 *) fatal "Wrong number of arguments."
31esac
32
33typeset -A FACTOR
34typeset -A LABEL
35
36FACTOR[chi2]=1.0
37FACTOR[likelihood]=-1.0
38
39LABEL[chi2]="#chi^{2}"
40LABEL[likelihood]="likelihood"
41
42if [[ "$FACTOR[$OPTION]" == "" ]]; then
43 fatal "Invalid option $OPTION."
44fi
45
46# gradient descent
47
48grep "\‍(chi2\[.\]\|gradient\‍)" $INPUT_FILE > $WORKDIR/gradient.txt
49
50if (( $? == 0 )); then
51
52 awk -v UFO=$FACTOR[$OPTION] '/chi2\[.\]/ { printf "%5d %9.5f\n", NR, (UFO * $3) }' $WORKDIR/gradient.txt > $WORKDIR/g1.txt
53 awk -v UFO=$FACTOR[$OPTION] '/gradient/ { printf "%5d %9.5f\n", NR, (1.0 * $2) }' $WORKDIR/gradient.txt > $WORKDIR/g2.txt
54
55 JGraph \
56 -f $WORKDIR/g1.txt \
57 -o $WORKDIR/g1.root \
58 -T $TITLE
59
60 awk '\
61 BEGIN { XMIN = +1.0e10; XMAX = -1.0e10; YMIN = +1.0e10; YMAX = -1.0e10 } \
62 END { printf "%9.5f %9.5f %9.5f %9.5f", XMIN, XMAX, YMIN, YMAX } \
63 { \
64 if ($1 < XMIN) { XMIN = $1 }; \
65 if ($1 > XMAX) { XMAX = $1 }; \
66 if ($2 < YMIN) { YMIN = $2 }; \
67 if ($2 > YMAX) { YMAX = $2 }; \
68 }' $WORKDIR/g1.txt | read XMIN XMAX YMIN YMAX
69
70 let "XMIN -= 1.0"
71 let "XMAX += 1.0"
72
73 let "Y = $YMAX - $YMIN"
74 let "YMAX = floor(($YMAX + 0.1 * ($Y)) / $PRECISION + 1.0) * $PRECISION"
75 let "YMIN = floor(($YMIN - 0.1 * ($Y)) / $PRECISION - 0.0) * $PRECISION"
76
77 awk \
78 -v YMIN=$YMIN \
79 -v YMAX=$YMAX \
80 '/gradient/ { printf "%5d %9.5f %5d %9.5f\n", NR, YMIN, NR, YMAX }' $WORKDIR/gradient.txt > $WORKDIR/L1.txt
81
82 JLine \
83 -p $WORKDIR/L1.txt \
84 -o $WORKDIR/L1.root \
85 -@ "width = 1" \
86 -@ "style = 2"
87
88 JPlot1D \
89 -w 1200x600 \
90 -f $WORKDIR/g1.root:\.\* \
91 -f $WORKDIR/L1.root:\.\* \
92 -> "step" \
93 -\^ "$LABEL[$OPTION]" \
94 -x "$XMIN $XMAX" \
95 -y "$YMIN $YMAX" \
96 -N "X 505" \
97 -G Y \
98 -S 0.5 \
99 -T "${${INPUT_FILE:t}:r}" \
100 -o $OPTION.$FORMAT $BATCH
101
102 JGraph \
103 -f $WORKDIR/g2.txt \
104 -o $WORKDIR/g2.root \
105 -T $TITLE
106
107 awk 'BEGIN { YMAX = -1.0e10; YMIN = +1.0e10 } END { printf "%9.5f %9.5f", YMIN, YMAX} { if ($2 < YMIN) { YMIN = $2 }; if ($2 > YMAX) { YMAX = $2 }}' $WORKDIR/g2.txt | read YMIN YMAX
108
109 let "Y = $YMAX - $YMIN"
110 let "YMAX = floor(($YMAX + 0.1 * ($Y)) / $PRECISION + 1.0) * $PRECISION"
111
112 if (( $YMIN > 0.0 )); then
113 let "YMIN = 0.0"
114 fi
115
116 JPlot1D \
117 -w 1200x600 \
118 -f $WORKDIR/g2.root:\.\* \
119 -> "step" \
120 -\^ "|gradient|" \
121 -x "$XMIN $XMAX" \
122 -y "$YMIN $YMAX" \
123 -N "X 505" \
124 -G Y \
125 -S 0.5 \
126 -T "${${INPUT_FILE:t}:r}" \
127 -o gradient.$FORMAT $BATCH
128
129 rm -f $WORKDIR/gradient.txt $WORKDIR/{g1,g2,L1}.{txt,root}
130
131fi
132
133
134# 2D scans
135
136COLS=(`sed -n 's/scan://p' $INPUT_FILE`)
137
138if (( ${#COLS} != 0 )); then
139
140 # minimal chi2
141
142 awk 'BEGIN { ZMIN = 1.0e10 } END { printf "%9.5f", ZMIN } /scan:/,EOF { if ($NF < ZMIN) { ZMIN= $NF } }' $INPUT_FILE | read ZMIN
143
144 #
145 # plot 2D-histogram
146 #
147 # \param 1 first column
148 # \param 2 second column
149 #
150 function plot()
151 {
152 C1=$1
153 C2=$2
154
155 awk \
156 -v C1=$C1 \
157 -v C2=$C2 \
158 -v ZMIN=$ZMIN \
159 '\
160 \
161 function ufo() \
162 { \
163 for (i = 1; i != NF; ++i) { \
164 if (i != C1 && i != C2 && $i != 0.0) { \
165 return 0 \
166 } \
167 } \
168 return 1 \
169 } \
170 \
171 /scan:/,EOF { if (ufo()) { printf "%9.5f %9.5f %9.5f\n", $C1, $C2, $NF - ZMIN } }' $INPUT_FILE > g2.txt
172
173 JGraph2D \
174 -f g2.txt \
175 -o g2.root
176
177 JPlot2D \
178 -f g2.root:\.\* \
179 -O colz \
180 -> "$COLS[$1]" \
181 -< "$COLS[$2]" \
182 -\^ "#Delta#chi^{2}" \
183 -N "X 505" \
184 -N "Y 505" \
185 -p $PALETTE \
186 -T "" \
187 -o $COLS[$1]-$COLS[$2].gif
188
189 rm -f g2.{txt,root}
190 }
191
192 # column pairs
193
194 for (( C1 = 1; $C1 != ${#COLS}; C1 += 1 )); do
195 for (( C2 = 1; $C2 != $C1; C2 += 1 )); do
196 plot $C1 $C2
197 done
198 done
199fi