1 | /* ======================================================================== *\
|
---|
2 | !
|
---|
3 | ! *
|
---|
4 | ! * This file is part of MARS, the MAGIC Analysis and Reconstruction
|
---|
5 | ! * Software. It is distributed to you in the hope that it can be a useful
|
---|
6 | ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
|
---|
7 | ! * It is distributed WITHOUT ANY WARRANTY.
|
---|
8 | ! *
|
---|
9 | ! * Permission to use, copy, modify and distribute this software and its
|
---|
10 | ! * documentation for any purpose is hereby granted without fee,
|
---|
11 | ! * provided that the above copyright notice appear in all copies and
|
---|
12 | ! * that both that copyright notice and this permission notice appear
|
---|
13 | ! * in supporting documentation. It is provided "as is" without express
|
---|
14 | ! * or implied warranty.
|
---|
15 | ! *
|
---|
16 | !
|
---|
17 | !
|
---|
18 | ! Author(s): Wolfgang Wittek 4/2002 <mailto:wittek@mppmu.mpg.de>
|
---|
19 | !
|
---|
20 | ! Copyright: MAGIC Software Development, 2000-2002
|
---|
21 | !
|
---|
22 | !
|
---|
23 | \* ======================================================================== */
|
---|
24 | //////////////////////////////////////////////////////////////////////////////
|
---|
25 | // //
|
---|
26 | // This macro calculates photon fluxes as a function of //
|
---|
27 | // - energy and time //
|
---|
28 | // - energy and Theta //
|
---|
29 | // //
|
---|
30 | // It is assumed that the data have been taken in the wobble mode. //
|
---|
31 | // This means that there is only one set of data, from which both //
|
---|
32 | // 'on' and 'off' data are constructed. //
|
---|
33 | // //
|
---|
34 | // Necessary input from MC : //
|
---|
35 | // - migration matrix (E_est, E_true) as a functioin of Theta //
|
---|
36 | // - effective collection areas as a function of energy and Theta //
|
---|
37 | // //
|
---|
38 | // //
|
---|
39 | // The input from MC has to refer to the wobble mode too. //
|
---|
40 | // //
|
---|
41 | // The macro includes : //
|
---|
42 | // - the calculation of Hillas parameters //
|
---|
43 | // - the calculation of the effective on time //
|
---|
44 | // - the unfolding of the distributions in the estimated energy E_est //
|
---|
45 | // //
|
---|
46 | // For testing purposes (as long as no real data, no energy estimator, //
|
---|
47 | // no migration matrices and no effective collection areas are available) //
|
---|
48 | // - event times are generated (according to a Poissonian with dead time)//
|
---|
49 | // - a dummy energy estimator is provided //
|
---|
50 | // - migration matrices are generated //
|
---|
51 | // - dummy effective collection areas are used //
|
---|
52 | // //
|
---|
53 | //////////////////////////////////////////////////////////////////////////////
|
---|
54 | void flux()
|
---|
55 | {
|
---|
56 | //--------------------------------------------------------------
|
---|
57 | // empty lists of parameter containers and tasks
|
---|
58 | //
|
---|
59 | MParList parlist;
|
---|
60 | MTaskList tasklist;
|
---|
61 |
|
---|
62 | //--------------------------------------------------------------
|
---|
63 | // Geometry information of the MAGIC camera
|
---|
64 | //
|
---|
65 | MGeomCamMagic geomcam;
|
---|
66 |
|
---|
67 | //--------------------------------------------------------------
|
---|
68 | // Define the two source positions
|
---|
69 | //
|
---|
70 | MSrcPosCam source("Source");
|
---|
71 | MSrcPosCam antisrc("AntiSource");
|
---|
72 | source.SetXY(0, 0);
|
---|
73 | antisrc.SetXY(+240, 0);
|
---|
74 |
|
---|
75 | //--------------------------------------------------------------
|
---|
76 | // Setup the binning for the histograms
|
---|
77 | //
|
---|
78 |
|
---|
79 | //...............................................................
|
---|
80 | // These are NOT the binnings for the flux determination
|
---|
81 |
|
---|
82 | MBinning binswidth("BinningWidth");
|
---|
83 | binswidth.SetEdges(100, 0, 0.5); // 100 bins from 0 to 0.5 deg
|
---|
84 |
|
---|
85 | MBinning binslength("BinningLength");
|
---|
86 | binslength.SetEdges(100, 0, 1); // 100 bins from 0 to 1 deg
|
---|
87 |
|
---|
88 | MBinning binscamera("BinningCamera");
|
---|
89 | binscamera.SetEdges(90, -2.25, 2.25); // 90 bins from -2.25 to 2.25 deg
|
---|
90 |
|
---|
91 | MBinning binsdist("BinningDist");
|
---|
92 | binsdist.SetEdges(90, 0, 2.25); // 90 bins from 0 to 2.25 deg
|
---|
93 |
|
---|
94 | MBinning binsalpha("BinningAlpha");
|
---|
95 | binsalpha.SetEdges(100, -100, 100);
|
---|
96 |
|
---|
97 | MBinning binsasym("BinningAsym");
|
---|
98 | binsasym.SetEdges(100, -0.5, 0.5); // 100 bins from -0.5 to 0.5 deg
|
---|
99 |
|
---|
100 | MBinning binsasymn("BinningAsymn");
|
---|
101 | binsasymn.SetEdges(100, -0.005, 0.005); // 100 bins from -0.005 to 0.005 deg
|
---|
102 |
|
---|
103 | MBinning binsm3long("BinningM3Long");
|
---|
104 | binsm3long.SetEdges(100, -0.5, 0.5); // 100 bins from -0.5 to 0.5 deg
|
---|
105 |
|
---|
106 | MBinning binsm3trans("BinningM3Trans");
|
---|
107 | binsm3trans.SetEdges(100, -0.5, 0.5); // 100 bins from -0.5 to 0.5 deg
|
---|
108 |
|
---|
109 | //...............................................................
|
---|
110 | // These ARE the binnings for the flux determination
|
---|
111 |
|
---|
112 | MBinning binsalphaflux("BinningAlphaFlux");
|
---|
113 | binsalphaflux.SetEdges(100, 0, 100);
|
---|
114 |
|
---|
115 | MBinning binse("BinningE");
|
---|
116 | binse.SetEdgesLog(10, 10, 1e3);
|
---|
117 |
|
---|
118 | MBinning binstheta("BinningTheta");
|
---|
119 | binstheta.SetEdges(7, -2.5, 32.5);
|
---|
120 |
|
---|
121 | MBinning binstime("BinningTime");
|
---|
122 | binstime.SetEdges(5, 0, 100);
|
---|
123 |
|
---|
124 | MBinning binsdifftime("BinningTimeDiff");
|
---|
125 | binsdifftime.SetEdges(50, 0, 0.1);
|
---|
126 |
|
---|
127 |
|
---|
128 | //--------------------------------------------------------------
|
---|
129 | // Fill list of parameter containers
|
---|
130 | //
|
---|
131 |
|
---|
132 | parlist.AddToList(&tasklist);
|
---|
133 | parlist.AddToList(&geomcam);
|
---|
134 |
|
---|
135 | parlist.AddToList(&source);
|
---|
136 | parlist.AddToList(&antisrc);
|
---|
137 |
|
---|
138 | parlist.AddToList(&binswidth);
|
---|
139 | parlist.AddToList(&binslength);
|
---|
140 | parlist.AddToList(&binscamera);
|
---|
141 |
|
---|
142 | parlist.AddToList(&binsdist);
|
---|
143 |
|
---|
144 | parlist.AddToList(&binsalpha);
|
---|
145 |
|
---|
146 | parlist.AddToList(&binsasym);
|
---|
147 | parlist.AddToList(&binsasymn);
|
---|
148 | parlist.AddToList(&binsm3long);
|
---|
149 | parlist.AddToList(&binsm3trans);
|
---|
150 |
|
---|
151 | parlist.AddToList(&binsalphaflux);
|
---|
152 | parlist.AddToList(&binse);
|
---|
153 | parlist.AddToList(&binstheta);
|
---|
154 | parlist.AddToList(&binstime);
|
---|
155 | parlist.AddToList(&binsdifftime);
|
---|
156 |
|
---|
157 | //--------------------------------------------------------------
|
---|
158 | // Setup the tasks
|
---|
159 | //
|
---|
160 |
|
---|
161 | //.....................................
|
---|
162 | // input file
|
---|
163 | //
|
---|
164 | // next statement commented out
|
---|
165 | // MReadMarsFile reader("Events", "~/data/Gamma*.root");
|
---|
166 |
|
---|
167 | MReadMarsFile reader("Events");
|
---|
168 |
|
---|
169 | //reader.AddFile("/hd31/rkb/Camera/mpi/Gamma*.root");
|
---|
170 | //reader.AddFile("/hd31/rkb/Camera/mpi/prot_N_*.root");
|
---|
171 | //reader.AddFile("/hd31/rkb/Camera/mpi/prot_NS_*.root");
|
---|
172 | //reader.AddFile("protondata/gamma_10_n*.root");
|
---|
173 | reader.AddFile("protondata/gamma_10_cn*.root");
|
---|
174 |
|
---|
175 | reader.EnableBranch("MMcEvt.fTheta");
|
---|
176 |
|
---|
177 | //.....................................
|
---|
178 | // filters
|
---|
179 | MFTriggerLvl1 lvl1;
|
---|
180 |
|
---|
181 | //.....................................
|
---|
182 | // generation of event time
|
---|
183 | MMcTimeGenerate rand;
|
---|
184 |
|
---|
185 | //.....................................
|
---|
186 | MMcPedestalCopy pcopy;
|
---|
187 | MMcPedestalNSBAdd pnsb;
|
---|
188 | MCerPhotCalc ncalc;
|
---|
189 | MImgCleanStd clean;
|
---|
190 | MBlindPixelCalc blind;
|
---|
191 |
|
---|
192 | //.....................................
|
---|
193 | // source independent image parameters
|
---|
194 | MHillasCalc hcalc;
|
---|
195 | MHillasExt hext;
|
---|
196 | parlist.AddToList(&hext);
|
---|
197 |
|
---|
198 | //.....................................
|
---|
199 | // source dependent image parameters
|
---|
200 | MHillasSrcCalc hsrc1("Source", "HillasSrc");
|
---|
201 | MHillasSrcCalc hsrc2("AntiSource", "HillasAntiSrc");
|
---|
202 |
|
---|
203 | //.....................................
|
---|
204 | // energy estimation
|
---|
205 | MEnergyEstimate estim;
|
---|
206 |
|
---|
207 | //.....................................
|
---|
208 | // migration matrix (MC)
|
---|
209 | MFillH eestetrue("MHMcEnergyMigration", "HillasSrc");
|
---|
210 | eestetrue.SetTitle("Task to determine the migration matrix for the energy");
|
---|
211 |
|
---|
212 | //.....................................
|
---|
213 | // plots of source independent parameters (length, width, delta, size, center)
|
---|
214 | MFillH hfill1h("MHHillas", "MHillas");
|
---|
215 | hfill1h.SetTitle("Task to plot the source independent image parameters");
|
---|
216 | hfill1h.SetFilter(&lvl1);
|
---|
217 |
|
---|
218 | MFillH hfill1x("MHHillasExt", "MHillas");
|
---|
219 | hfill1x.SetTitle("Task to plot the extended image parameters");
|
---|
220 | hfill1x.SetFilter(&lvl1);
|
---|
221 |
|
---|
222 | //.....................................
|
---|
223 | // plots of source dependent parameters (alpha, dist)
|
---|
224 | MFillH hfill2s("HSource [MHHillasSrc]", "HillasSrc");
|
---|
225 | hfill2s.SetTitle("Task to plot the source dependent image parameters (Source)");
|
---|
226 | hfill2s.SetFilter(&lvl1);
|
---|
227 | MFillH hfill2a("HAntiSource [MHHillasSrc]", "HillasAntiSrc");
|
---|
228 | hfill2a.SetTitle("Task to plot the source dependent image parameters (AntiSource)");
|
---|
229 | hfill2a.SetFilter(&lvl1);
|
---|
230 |
|
---|
231 | //.....................................
|
---|
232 | // star map
|
---|
233 | MFillH hfill1m("MHStarMap", "MHillas");
|
---|
234 | hfill1m.SetTitle("Task to plot the Star map");
|
---|
235 |
|
---|
236 | //.....................................
|
---|
237 | const Float_t alpha0 = 15; // [deg]
|
---|
238 | MFAlpha fsrc ("HillasSrc", '>', alpha0);
|
---|
239 | fsrc.SetTitle("Task to check alphaSrc > alpha0");
|
---|
240 |
|
---|
241 | MFAlpha fasrc("HillasAntiSrc", '>', alpha0);
|
---|
242 | fasrc.SetTitle("Task to check alphaAntiSrc > alpha0");
|
---|
243 |
|
---|
244 | //.....................................
|
---|
245 | // 1-D profile plots (<Theta>, time)
|
---|
246 | // (<Theta>, Theta)
|
---|
247 | MFillH fillthetabartime ("ThetabarTime [MHThetabarTime]", "MMcEvt");
|
---|
248 | fillthetabartime.SetTitle("Task to plot <Theta> vs time");
|
---|
249 | // fillthetabartime.SetFilter(&lvl1);
|
---|
250 |
|
---|
251 | MFillH fillthetabartheta("ThetabarTheta [MHThetabarTheta]", "MMcEvt");
|
---|
252 | fillthetabartheta.SetTitle("Task to plot <Theta> vs theta");
|
---|
253 | // fillthetabartheta.SetFilter(&lvl1);
|
---|
254 |
|
---|
255 | //.....................................
|
---|
256 | // 2-D plots (Delta(time), time)
|
---|
257 | // (Delta(time), Theta)
|
---|
258 | MFillH filldtimetime ("EffOnTime [MHTimeDiffTime]", "MMcEvt");
|
---|
259 | filldtimetime.SetTitle("Task to plot Delta(time) vs time");
|
---|
260 | // filldtime.SetFilter(&lvl1);
|
---|
261 |
|
---|
262 | MFillH filldtimetheta("EffOnTheta [MHTimeDiffTheta]", "MMcEvt");
|
---|
263 | filldtimetheta.SetTitle("Task to plot Delta(time) vs theta");
|
---|
264 | // fillontheta.SetFilter(&lvl1);
|
---|
265 |
|
---|
266 | //.....................................
|
---|
267 | // 3-D plots (alpha, E_est, time)
|
---|
268 | MFillH fillsptime ("SrcTime [MHAlphaEnergyTime]", "HillasSrc");
|
---|
269 | fillsptime.SetTitle("Task for 3D plots (alpha, E_est, time) (Source)");
|
---|
270 | fillsptime.SetFilter(&fasrc);
|
---|
271 |
|
---|
272 | MFillH fillasptime ("ASrcTime [MHAlphaEnergyTime]", "HillasAntiSrc");
|
---|
273 | fillasptime.SetTitle("Task for 3D plots (alpha, E_est, time) (AntiSource)");
|
---|
274 | fillasptime.SetFilter(&fsrc);
|
---|
275 |
|
---|
276 | //.....................................
|
---|
277 | // 3-D plots (alpha, E_est, Theta)
|
---|
278 | MFillH fillsptheta ("SrcTheta [MHAlphaEnergyTheta]", "HillasSrc");
|
---|
279 | fillsptheta.SetTitle("Task for 3D plots (alpha, E_est, Theta) (Source)");
|
---|
280 | fillsptheta.SetFilter(&fasrc);
|
---|
281 |
|
---|
282 | MFillH fillasptheta("ASrcTheta [MHAlphaEnergyTheta]", "HillasAntiSrc");
|
---|
283 | fillasptheta.SetTitle("Task for 3D plots (alpha, E_est, Theta) (AntiSource)");
|
---|
284 | fillasptheta.SetFilter(&fsrc);
|
---|
285 |
|
---|
286 | //.....................................
|
---|
287 | // MFillH fethetaall("AllTheta [MHEnergyTheta]", "MMcEvt");
|
---|
288 | // MFillH fethetasel("SelTheta [MHEnergyTheta]", "MMcEvt");
|
---|
289 | // fethetasel.SetFilter(&lvl1);
|
---|
290 |
|
---|
291 | // MFillH fetimeall ("AllTime [MHEnergyTime]", "MMcEvt");
|
---|
292 | // MFillH fetimesel ("SelTime [MHEnergyTime]", "MMcEvt");
|
---|
293 | // fetimesel.SetFilter(&lvl1);
|
---|
294 |
|
---|
295 |
|
---|
296 | //---------------------------------------------------------------------
|
---|
297 | // Setup the task list
|
---|
298 | //
|
---|
299 | tasklist.AddToList(&reader);
|
---|
300 |
|
---|
301 | tasklist.AddToList(&lvl1);
|
---|
302 | tasklist.AddToList(&rand);
|
---|
303 |
|
---|
304 | tasklist.AddToList(&pcopy);
|
---|
305 | tasklist.AddToList(&pnsb);
|
---|
306 | tasklist.AddToList(&ncalc);
|
---|
307 | tasklist.AddToList(&clean);
|
---|
308 | tasklist.AddToList(&blind);
|
---|
309 |
|
---|
310 | tasklist.AddToList(&hcalc);
|
---|
311 |
|
---|
312 | tasklist.AddToList(&hsrc1);
|
---|
313 | tasklist.AddToList(&hsrc2);
|
---|
314 | tasklist.AddToList(&estim);
|
---|
315 | tasklist.AddToList(&eestetrue);
|
---|
316 |
|
---|
317 | tasklist.AddToList(&hfill1h);
|
---|
318 | tasklist.AddToList(&hfill1x);
|
---|
319 |
|
---|
320 | tasklist.AddToList(&hfill1m);
|
---|
321 | tasklist.AddToList(&hfill2s);
|
---|
322 | tasklist.AddToList(&hfill2a);
|
---|
323 |
|
---|
324 | tasklist.AddToList(&fillthetabartime);
|
---|
325 | tasklist.AddToList(&fillthetabartheta);
|
---|
326 |
|
---|
327 | tasklist.AddToList(&filldtimetime);
|
---|
328 | tasklist.AddToList(&filldtimetheta);
|
---|
329 |
|
---|
330 |
|
---|
331 |
|
---|
332 | // tasklist.AddToList(&fethetaall);
|
---|
333 | // tasklist.AddToList(&fethetasel);
|
---|
334 | // tasklist.AddToList(&fetimeall);
|
---|
335 | // tasklist.AddToList(&fetimesel);
|
---|
336 |
|
---|
337 | tasklist.AddToList(&fsrc);
|
---|
338 | tasklist.AddToList(&fasrc);
|
---|
339 |
|
---|
340 | tasklist.AddToList(&fillsptime);
|
---|
341 | tasklist.AddToList(&fillasptime);
|
---|
342 |
|
---|
343 | tasklist.AddToList(&fillsptheta);
|
---|
344 | tasklist.AddToList(&fillasptheta);
|
---|
345 |
|
---|
346 |
|
---|
347 | //----------------------------------------------------------------------
|
---|
348 | // Event loop
|
---|
349 | //
|
---|
350 | MEvtLoop magic;
|
---|
351 | magic.SetParList(&parlist);
|
---|
352 |
|
---|
353 | //
|
---|
354 | // loop over all events
|
---|
355 | //
|
---|
356 | if (!magic.Eventloop())
|
---|
357 | return;
|
---|
358 | //----------------------------------------------------------------------
|
---|
359 |
|
---|
360 |
|
---|
361 | tasklist.PrintStatistics(10);
|
---|
362 |
|
---|
363 |
|
---|
364 | MHHillas *mhhillas = (MHHillas*)parlist.FindObject("MHHillas");
|
---|
365 | mhhillas->SetTitle("Source indep. image parameters");
|
---|
366 | mhhillas->DrawClone();
|
---|
367 |
|
---|
368 |
|
---|
369 |
|
---|
370 | MHHillasExt *mhhillasext = (MHHillasExt*)parlist.FindObject("MHHillasExt");
|
---|
371 | mhhillasext->SetTitle("Extended image parameters");
|
---|
372 | mhhillasext->DrawClone();
|
---|
373 |
|
---|
374 |
|
---|
375 | MHHillasSrc *hsource = (MHHillasSrc*)parlist.FindObject("HSource");
|
---|
376 | hsource->SetTitle("Source dependent image parameters (Source)");
|
---|
377 | hsource->DrawClone();
|
---|
378 |
|
---|
379 | MHHillasSrc *hantisource = (MHHillasSrc*)parlist.FindObject("HAntiSource");
|
---|
380 | hantisource->SetTitle("Source dependent image parameters (AntiSource)");
|
---|
381 | hantisource->DrawClone();
|
---|
382 |
|
---|
383 |
|
---|
384 | /*
|
---|
385 | parlist.FindObject("MHStarMap")->DrawClone();
|
---|
386 | */
|
---|
387 |
|
---|
388 | //----------------------------------------------------------------------
|
---|
389 | // average Theta versus time
|
---|
390 | // and versus Theta
|
---|
391 | // This is needed for selecting later the right collection area
|
---|
392 | // (at the right Theta) for each bin in time or Theta
|
---|
393 | //
|
---|
394 | MHThetabarTime *bartime = (MHThetabarTime*)parlist.FindObject("ThetabarTime");
|
---|
395 | MHThetabarTheta *bartheta = (MHThetabarTheta*)parlist.FindObject("ThetabarTheta");
|
---|
396 |
|
---|
397 | /*
|
---|
398 | bartime->DrawClone();
|
---|
399 | bartheta->DrawClone();
|
---|
400 | */
|
---|
401 |
|
---|
402 | //----------------------------------------------------------------------
|
---|
403 | // Effective on time
|
---|
404 |
|
---|
405 | //....................................
|
---|
406 | // get plots of time differences for different intervals in time
|
---|
407 | // and plots of time differences for different intervals in Theta
|
---|
408 |
|
---|
409 | MHTimeDiffTime *dtimetime = (MHTimeDiffTime*)parlist.FindObject("EffOnTime");
|
---|
410 | MHTimeDiffTheta *dtimetheta = (MHTimeDiffTheta*)parlist.FindObject("EffOnTheta");
|
---|
411 |
|
---|
412 | /*
|
---|
413 | dtimetime->DrawClone();
|
---|
414 | dtimetheta->DrawClone();
|
---|
415 | */
|
---|
416 |
|
---|
417 |
|
---|
418 | //....................................
|
---|
419 | // calculate effective on time for different intervals in Time
|
---|
420 | // and for different intervals in Theta
|
---|
421 |
|
---|
422 | MHEffOnTime effontime ("Time", "[s]");
|
---|
423 | MHEffOnTime effontheta("Theta", "[\\circ]");
|
---|
424 |
|
---|
425 | effontime.SetupFill(&parlist);
|
---|
426 | effontheta.SetupFill(&parlist);
|
---|
427 |
|
---|
428 |
|
---|
429 | // Draw == 0 don't draw the individual distributions of time differences
|
---|
430 | // != 0 draw them
|
---|
431 | Bool_t draw=kFALSE;
|
---|
432 | effontime.Calc (dtimetime->GetHist(), draw);
|
---|
433 | effontheta.Calc(dtimetheta->GetHist(),draw);
|
---|
434 |
|
---|
435 |
|
---|
436 | // plot effective on time versus Time
|
---|
437 | // and versus Theta
|
---|
438 | /*
|
---|
439 | effontime.DrawClone();
|
---|
440 | effontheta.DrawClone();
|
---|
441 | */
|
---|
442 |
|
---|
443 |
|
---|
444 | //======================================================================
|
---|
445 | //
|
---|
446 | // A : fully differential plots (Alpha, E-est, Var)
|
---|
447 | //
|
---|
448 | //----------------------------------------------------------------------
|
---|
449 | // 3D-plots of alpha, E_est and time
|
---|
450 | // and of alpha, E_est and Theta
|
---|
451 | // with alpha calculated relative to the source position
|
---|
452 | // and relative to the anti-source position
|
---|
453 |
|
---|
454 | MHAlphaEnergyTime *evtsptime = (MHAlphaEnergyTime*)parlist.FindObject("SrcTime");
|
---|
455 | MHAlphaEnergyTime *evtasptime = (MHAlphaEnergyTime*)parlist.FindObject("ASrcTime");
|
---|
456 | MHAlphaEnergyTheta *evtsptheta = (MHAlphaEnergyTheta*)parlist.FindObject("SrcTheta");
|
---|
457 | MHAlphaEnergyTheta *evtasptheta = (MHAlphaEnergyTheta*)parlist.FindObject("ASrcTheta");
|
---|
458 |
|
---|
459 |
|
---|
460 | /*
|
---|
461 | evtsptime->SetTitle("Source : 3D-plot Al-En-time, alpha\_{asp} .gt. alpha\_0");
|
---|
462 | evtsptime->DrawClone();
|
---|
463 | evtasptime->SetTitle("AntiSource : 3D-plot Al-En-time, alpha\_{sp} .gt. alpha\_0");
|
---|
464 | evtasptime->DrawClone();
|
---|
465 |
|
---|
466 | evtsptheta->SetTitle("Source : 3D-plot Al-En-Theta, alpha\_{asp} .gt. alpha\_0");
|
---|
467 | evtsptheta->DrawClone();
|
---|
468 | evtasptheta->SetTitle("AntiSource : 3D-plot Al-En-Theta, alpha\_{sp} .gt. alpha\_0");
|
---|
469 | evtasptheta->DrawClone();
|
---|
470 | */
|
---|
471 |
|
---|
472 | //----------------------------------------------------------------------
|
---|
473 | // Difference between source and antisource (= 'gamma' sample)
|
---|
474 | // for 3D-plots of alpha, E_est and time
|
---|
475 | // and of alpha, E_est and Theta
|
---|
476 | // 3rd and 4th argument are name and title of the resulting histogram
|
---|
477 |
|
---|
478 | MHGamma gamma;
|
---|
479 |
|
---|
480 | TH3D *hsubtime = gamma.Subtract( evtsptime->GetHist(),
|
---|
481 | evtasptime->GetHist(),
|
---|
482 | "Al-En-time", "3D-plot of Alpha,E-est,time", draw);
|
---|
483 |
|
---|
484 | TH3D *hsubtheta = gamma.Subtract( evtsptheta->GetHist(),
|
---|
485 | evtasptheta->GetHist(),
|
---|
486 | "Al-En-time", "3D-plot of Alpha,E-est,Theta", draw);
|
---|
487 |
|
---|
488 |
|
---|
489 | //----------------------------------------------------------------------
|
---|
490 | // get number of 'gammas' in the alpha range (lo, up) as a function of
|
---|
491 | // E_est and time
|
---|
492 | // or E_est and Theta
|
---|
493 |
|
---|
494 | Axis_t lo = 0; // [deg]
|
---|
495 | Axis_t up = 10; // [deg]
|
---|
496 | const TH2D &evttime = *(gamma.GetAlphaProjection(hsubtime,
|
---|
497 | lo, up, draw));
|
---|
498 |
|
---|
499 | const TH2D &evttheta = *(gamma.GetAlphaProjection(hsubtheta,
|
---|
500 | lo, up, draw));
|
---|
501 |
|
---|
502 |
|
---|
503 | //----------------------------------------------------------------------
|
---|
504 | // plot migration matrix: E-true E-est Theta
|
---|
505 |
|
---|
506 |
|
---|
507 | /*
|
---|
508 | MHMcEnergyMigration *migrationmatrix =
|
---|
509 | (MHMcEnergyMigration*)parlist.FindObject("MHMcEnergyMigration");
|
---|
510 | migrationmatrix->SetTitle("Migration matrix");;
|
---|
511 | migrationmatrix->DrawClone();
|
---|
512 | */
|
---|
513 |
|
---|
514 |
|
---|
515 | //----------------------------------------------------------------------
|
---|
516 | // determine gamma flux from distributions of E-est :
|
---|
517 | // - do unfolding to get the distributions in E-unfold
|
---|
518 | // - divide by bin width in energy
|
---|
519 | // effective ontime and
|
---|
520 | // effective collection area
|
---|
521 | // to get the absolute gamma flux
|
---|
522 |
|
---|
523 | //.............................................
|
---|
524 | // get flux spectrum for different bins in Time
|
---|
525 | //
|
---|
526 | // use dummy histogram *aeff which eventually will contain
|
---|
527 | // the effective collection area as a function of Etrue and Theta
|
---|
528 | TH2D aeff;
|
---|
529 |
|
---|
530 | // arguments of MHFlux constructor are :
|
---|
531 | // - 2D histogram containing the no.of gammas as a function of
|
---|
532 | // E-est and Var
|
---|
533 | // - name of variable Var ("Time" or "Theta")
|
---|
534 | // - units of variable Var ( "[s]" or "[\\circ]")
|
---|
535 |
|
---|
536 | // Draw == kTRUE draw the no.of photons vs. E-est
|
---|
537 | // for the individual bins of the variable Var
|
---|
538 | draw=kTRUE;
|
---|
539 | MHFlux fluxtime(evttime, draw, "Time", "[s]");
|
---|
540 | fluxtime.Unfold(draw);
|
---|
541 | fluxtime.CalcFlux(effontime.GetHist(), bartime.GetHist(),
|
---|
542 | &aeff, draw);
|
---|
543 |
|
---|
544 | fluxtime.DrawClone();
|
---|
545 |
|
---|
546 |
|
---|
547 |
|
---|
548 | //..............................................
|
---|
549 | // get flux spectrum for different bins in Theta
|
---|
550 | MHFlux fluxtheta(evttheta, draw, "Theta", "[\\circ]");
|
---|
551 | fluxtheta.Unfold(draw);
|
---|
552 | fluxtheta.CalcFlux(effontheta.GetHist(), bartheta.GetHist(),
|
---|
553 | &aeff, draw);
|
---|
554 |
|
---|
555 | fluxtheta.DrawClone();
|
---|
556 |
|
---|
557 |
|
---|
558 | return;
|
---|
559 | //----------------------------------------------------------------------
|
---|
560 |
|
---|
561 |
|
---|
562 | //======================================================================
|
---|
563 | //
|
---|
564 | // B : plots integrated over E-est
|
---|
565 | //
|
---|
566 | //----------------------------------------------------------------------
|
---|
567 | // integrate 3D-plot of (alpha, E_est and Time) over E-est
|
---|
568 | // to get 2D-plot of (alpha, Time)
|
---|
569 |
|
---|
570 | Draw = kFALSE;
|
---|
571 | TH2D *evttimesp = evtsptime.IntegrateEest ("AlphaSP vs. Time", Draw);
|
---|
572 | TH2D *evttimeasp = evtasptime.IntegrateEest("AlphaASP vs. Time",Draw);
|
---|
573 |
|
---|
574 |
|
---|
575 | //======================================================================
|
---|
576 | //
|
---|
577 | // C : plots integrated over Time
|
---|
578 | //
|
---|
579 | //----------------------------------------------------------------------
|
---|
580 | // integrate 3D-plot of (alpha, E_est and Time) over the Time
|
---|
581 | // to get 2D-plot of (alpha, E_est)
|
---|
582 |
|
---|
583 | Draw = kFALSE;
|
---|
584 | TH2D *evteestsp = evtsptime.IntegrateTime ("AlphaSP vs. E-est", Draw);
|
---|
585 | TH2D *evteestasp = evtasptime.IntegrateTime("AlphaASP vs. E-est",Draw);
|
---|
586 |
|
---|
587 |
|
---|
588 |
|
---|
589 | //======================================================================
|
---|
590 | //
|
---|
591 | // D : plots integrated over E-est and Time
|
---|
592 | //
|
---|
593 |
|
---|
594 | //----------------------------------------------------------------------
|
---|
595 | // integrate 3D-plot of (alpha, E_est and Time) over E-est and Time
|
---|
596 | // to get 1D-plot of (alpha)
|
---|
597 |
|
---|
598 | Draw = kFALSE;
|
---|
599 | TH1D *evtalphasp = evtsptime.IntegrateEestTime ("AlphaSP", Draw);
|
---|
600 | TH1D *evtalphaasp = evtasptime.IntegrateEestTime("AlphaASP",Draw);
|
---|
601 |
|
---|
602 | //----------------------------------------------------------------------
|
---|
603 | // list of tasks for processing
|
---|
604 |
|
---|
605 | cout << " " << endl;
|
---|
606 | cout << "List of tasks for processing :" << endl;
|
---|
607 | cout << "==============================" << endl;
|
---|
608 | cout << " " << endl;
|
---|
609 |
|
---|
610 | // was folgt geht nicht :
|
---|
611 |
|
---|
612 | // Error: Function Next() is not defined in current scope FILE:macros/flux.C LINE:636
|
---|
613 |
|
---|
614 | //while ( (task=(MTask*)Next()) )
|
---|
615 | //{
|
---|
616 | // cout << tasklist.GetName() << " : " << tasklist.GetTitle() << endl;
|
---|
617 | //}
|
---|
618 |
|
---|
619 | return;
|
---|
620 |
|
---|
621 | //======================================================================
|
---|
622 | }
|
---|
623 | //===========================================================================
|
---|
624 |
|
---|
625 |
|
---|