[1350] | 1 | |
---|
| 2 | MACRO SOLID |
---|
| 3 | |
---|
| 4 | * Author: Oliver Link, Oliver.Link@cern.ch |
---|
| 5 | * Description: |
---|
| 6 | * 1. testall.pl generates hbook files in folder hbk |
---|
| 7 | * (e.g: hbk/run_solidname_nevents.hbk) |
---|
| 8 | * 2. The user can specify the range to be analysed [xmin] [xmax] |
---|
| 9 | * and change the number of bins [n] . See USER INPUT below |
---|
| 10 | * 3. solid.kumac is analysing only files respecting the |
---|
| 11 | * naming scheme (1.), ommiting other hbk files in the folder!!! |
---|
| 12 | * See Macro: checksolids |
---|
| 13 | * 4. Plotting data (stored in vectors). |
---|
| 14 | * Macro: plot [psfile] [xmin] [xmax] [ymin] [ymax] |
---|
| 15 | * -> Prepares two postscript files |
---|
| 16 | * - solid-full.ps : full range plotted |
---|
| 17 | * - solid-zoom.ps : reduced range plotted |
---|
| 18 | * ( this may be changed in future, e.g more plots, ranges.. ) |
---|
| 19 | |
---|
| 20 | ****************************************************************** |
---|
| 21 | ****************************************************************** |
---|
| 22 | *************** USER INPUT ************************ |
---|
| 23 | ****************************************************************** |
---|
| 24 | ****************************************************************** |
---|
| 25 | |
---|
| 26 | ** fix the number of bins and analysis range |
---|
| 27 | nbins = 200 |
---|
| 28 | xmin = 1e-14 |
---|
| 29 | xmax = 1e5 |
---|
| 30 | |
---|
| 31 | * goto plot | if you want to go directly to the plot section |
---|
| 32 | | and thus skipping the checksolids macro. |
---|
| 33 | | You have to process the checksolids macro at least once. |
---|
| 34 | |
---|
| 35 | ****************************************************************** |
---|
| 36 | ****************************************************************** |
---|
| 37 | ********************** initialization *************************** |
---|
| 38 | |
---|
| 39 | ** delete old histograms and vectors, init some paw settings |
---|
| 40 | |
---|
| 41 | hi/del 0 | delete all histos |
---|
| 42 | v/del * | delete all vectors |
---|
| 43 | cut 0 - | delete all cuts |
---|
| 44 | |
---|
| 45 | opt logx |
---|
| 46 | |
---|
| 47 | opt nstat |
---|
| 48 | opt ngrid |
---|
| 49 | opt nfit |
---|
| 50 | opt grid |
---|
| 51 | |
---|
| 52 | ****************************************************************** |
---|
| 53 | ****************************************************************** |
---|
| 54 | ********************** create binning **************************** |
---|
| 55 | |
---|
| 56 | ve/cre x([nbins]) r |
---|
| 57 | ve/cre widths([nbins]) r |
---|
| 58 | ve/cre vlogdx([nbins]) r |
---|
| 59 | ve/cre xerr([nbins]) r |
---|
| 60 | ve/cre XHigh([nbins]) r |
---|
| 61 | ve/cre XLow([nbins]) r |
---|
| 62 | |
---|
| 63 | div = [xmax]/[xmin] |
---|
| 64 | |
---|
| 65 | do i=1,[nbins] |
---|
| 66 | xcenter = $rsigma([xmin]*[div]**(([i]-0.5)/[nbins])) |
---|
| 67 | dx = $rsigma([xmin]*[div]**([i]/[nbins])*(1-[div]**(-1/[nbins]))) |
---|
| 68 | xiLow = $rsigma([xmin]*[div]**(([i]-1)/[nbins])) |
---|
| 69 | xiHigh = $rsigma([xmin]*[div]**([i]/[nbins])) |
---|
| 70 | logdx = $rsigma(log10([xiHigh])-log10([xiLow])) |
---|
| 71 | ve/inp x([i]) [xcenter] |
---|
| 72 | ve/inp widths([i]) [dx] |
---|
| 73 | ve/inp vlogdx([i]) [logdx] |
---|
| 74 | ve/inp XLow([i]) [xiLow] |
---|
| 75 | ve/inp XHigh([i]) [xiHigh] |
---|
| 76 | enddo |
---|
| 77 | |
---|
| 78 | vscale widths 0.5 xerr |
---|
| 79 | |
---|
| 80 | |
---|
| 81 | ****************************************************************** |
---|
| 82 | ****************************************************************** |
---|
| 83 | ********************** analyse data ****************************** |
---|
| 84 | |
---|
| 85 | |
---|
| 86 | exec checksolids |
---|
| 87 | |
---|
| 88 | |
---|
| 89 | ****************************************************************** |
---|
| 90 | ****************************************************************** |
---|
| 91 | ********************** plot data ******************************** |
---|
| 92 | |
---|
| 93 | plot: |
---|
| 94 | |
---|
| 95 | * set fonts and precission |
---|
| 96 | |
---|
| 97 | set *fon -132 |
---|
| 98 | set TXFP -132 |
---|
| 99 | * set vsiz 0.45 |
---|
| 100 | set asiz 0.7 |
---|
| 101 | * margins |
---|
| 102 | set ymgl 2.5 |
---|
| 103 | set ymgu 2.0 |
---|
| 104 | set xmgl 3.0 |
---|
| 105 | set xmgr 1.0 |
---|
| 106 | |
---|
| 107 | * usage: plot [psfile] [xmin] [xmax] [ymin] [ymax] |
---|
| 108 | exec plot 'solid-full.ps' [xmin] [xmax] 0 0.15 |
---|
| 109 | exec plot 'solid-zoom.ps' [xmin] 1e-7 0 0.15 |
---|
| 110 | |
---|
| 111 | return |
---|
| 112 | |
---|
| 113 | ****************************************************************** |
---|
| 114 | ****************************************************************** |
---|
| 115 | ********************** macros ************************************ |
---|
| 116 | |
---|
| 117 | |
---|
| 118 | MACRO PLOT [psfile] [xmin] [xmax] [ymin] [ymax] |
---|
| 119 | |
---|
| 120 | * this macro generates the plot x vs. y |
---|
| 121 | * [xmin] [xmax] [ymin] [ymax] is the plot range |
---|
| 122 | * [psfile] name of the postscript file |
---|
| 123 | |
---|
| 124 | nbins = $vdim(x,1) | number of bins |
---|
| 125 | m = $exec('NumberOfSolids') | number of solids |
---|
| 126 | |
---|
| 127 | |
---|
| 128 | * open postscript file |
---|
| 129 | for/file 70 [psfile] |
---|
| 130 | meta 70 -114 |
---|
| 131 | |
---|
| 132 | null [xmin] [xmax] [ymin] [ymax] |
---|
| 133 | atitle 'dist (mm)' 'events/bin (variable size)' |
---|
| 134 | |
---|
| 135 | do j=1,[m] |
---|
| 136 | |
---|
| 137 | icolor = $rsigma(mod([j],7)+1) |
---|
| 138 | isym = $rsigma(mod([j],11)+ 20) |
---|
| 139 | posy = 97 - [j]*3 |
---|
| 140 | |
---|
| 141 | file = $shell('ls hbk/run_*.hbk',[j]) |
---|
| 142 | file = $shell('ls hbk/run_*.hbk',[j]) |
---|
| 143 | ilow = $index([file],_)+1 |
---|
| 144 | string = $substring([file],[ilow],$len([file])) |
---|
| 145 | ichar = $index([string],_)-1 |
---|
| 146 | txt = $substring([file],[ilow],[ichar]) |
---|
| 147 | |
---|
| 148 | set hcol [icolor] |
---|
| 149 | set pmci [icolor] |
---|
| 150 | set plci [icolor] |
---|
| 151 | |
---|
| 152 | g/h/e x y[j] xerr e[j] [nbins] [isym] 0.2 |
---|
| 153 | |
---|
| 154 | exec logsymbol 75 [posy] [txt] [isym] |
---|
| 155 | |
---|
| 156 | |
---|
| 157 | enddo |
---|
| 158 | |
---|
| 159 | * close postscript |
---|
| 160 | close 70 |
---|
| 161 | |
---|
| 162 | Return |
---|
| 163 | |
---|
| 164 | ****************************************************************** |
---|
| 165 | ****************************************************************** |
---|
| 166 | |
---|
| 167 | MACRO CHECKSOLIDS |
---|
| 168 | * loops over all solids (hbook files in folder hbk) |
---|
| 169 | * operates on ntuple 1 in hbook [file] |
---|
| 170 | * calculates the number of events per bin |
---|
| 171 | * and stores the values in a vector y[solidnum] |
---|
| 172 | * [solidnum] is a unique (integer) number to identify the solid |
---|
| 173 | |
---|
| 174 | * create a counter histogram |
---|
| 175 | idc = 12345 |
---|
| 176 | 1d [idc] 'counter' 1 0 1 |
---|
| 177 | |
---|
| 178 | nbins = $vdim(x,1) | number of bins |
---|
| 179 | m = $exec('NumberOfSolids') | number of solids |
---|
| 180 | |
---|
| 181 | do solidnum=1,[m] |
---|
| 182 | |
---|
| 183 | * create vector for data |
---|
| 184 | ve/cre y[solidnum]([nbins]) r |
---|
| 185 | ve/cre e[solidnum]([nbins]) r |
---|
| 186 | |
---|
| 187 | file = $shell('ls hbk/run_*.hbk',[solidnum]) |
---|
| 188 | mess process [file] |
---|
| 189 | |
---|
| 190 | hi/file 1 [file] |
---|
| 191 | |
---|
| 192 | hi/op/reset [idc] |
---|
| 193 | nt/proj [idc] 1.0.5 |
---|
| 194 | norm = $hinfo([idc],'entries') |
---|
| 195 | |
---|
| 196 | do i=1,[nbins] |
---|
| 197 | hi/op/reset [idc] |
---|
| 198 | nt/proj [idc] 1.0.5 XLow([i])<delta<XHigh([i]) |
---|
| 199 | entries = $hinfo([idc],'entries') |
---|
| 200 | |
---|
| 201 | * factor = $rsigma(vlogdx([i])*x([i])*log(10)*[norm]) |
---|
| 202 | * factor = $rsigma(vlogdx([i])*[norm]) |
---|
| 203 | |
---|
| 204 | factor = $rsigma([norm]) |
---|
| 205 | count = $rsigma([entries]/[factor]) |
---|
| 206 | error = $rsigma(sqrt([entries])/[factor]) |
---|
| 207 | |
---|
| 208 | ve/inp y[solidnum]([i]) [count] |
---|
| 209 | ve/inp e[solidnum]([i]) [error] |
---|
| 210 | |
---|
| 211 | enddo |
---|
| 212 | |
---|
| 213 | close 1 |
---|
| 214 | |
---|
| 215 | enddo |
---|
| 216 | |
---|
| 217 | hi/del [idc] | delete counter |
---|
| 218 | |
---|
| 219 | return |
---|
| 220 | |
---|
| 221 | |
---|
| 222 | |
---|
| 223 | ****************************************************************** |
---|
| 224 | ****************************************************************** |
---|
| 225 | |
---|
| 226 | |
---|
| 227 | MACRO LOGSYMBOL 1=100 2=100 [txt] [isym] |
---|
| 228 | * plots a symbol at position 1/2 |
---|
| 229 | * [txt] text to display |
---|
| 230 | * [isym] symbol number |
---|
| 231 | X1 = $GRAFINFO('WNXMIN') |
---|
| 232 | X2 = $GRAFINFO('WNXMAX') |
---|
| 233 | Y1 = $GRAFINFO('WNYMIN') |
---|
| 234 | Y2 = $GRAFINFO('WNYMAX') |
---|
| 235 | DX = [X2]-[X1] |
---|
| 236 | X = [1]/100. |
---|
| 237 | X = [DX]*[X] |
---|
| 238 | X = [X]+[X1] |
---|
| 239 | DY = [Y2]-[Y1] |
---|
| 240 | Y = [2]/100. |
---|
| 241 | Y = [DY]*[Y] |
---|
| 242 | Y = [Y]+[Y1] |
---|
| 243 | |
---|
| 244 | if ( [X].gt.0 ) then |
---|
| 245 | X = $rsigma(10**[X]) |
---|
| 246 | else |
---|
| 247 | X = $rsigma(1./(10**abs([X]))) |
---|
| 248 | endif |
---|
| 249 | |
---|
| 250 | key [X] [Y] [isym] [txt] |
---|
| 251 | Return |
---|
| 252 | |
---|
| 253 | |
---|
| 254 | ****************************************************************** |
---|
| 255 | ****************************************************************** |
---|
| 256 | ******* determine the number of hbook files in hbk *************** |
---|
| 257 | |
---|
| 258 | Macro NUMBEROFSOLIDS |
---|
| 259 | |
---|
| 260 | m = $shell('ls -l hbk/run_*.hbk | wc -l') |
---|
| 261 | |
---|
| 262 | Return [m] |
---|