source: trunk/MagicSoft/Mars/mhist/MHAlphaEnergyTime.cc@ 1788

Last change on this file since 1788 was 1415, checked in by wittek, 22 years ago
*** empty log message ***
File size: 8.2 KB
Line 
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): Thomas Bretz 1/2002 <mailto:tbretz@astro.uni-wuerzburg.de>
19! Author(s): Wolfgang Wittek 1/2002 <mailto:wittek@mppmu.mpg.de>
20!
21! Copyright: MAGIC Software Development, 2000-2002
22!
23!
24\* ======================================================================== */
25
26//////////////////////////////////////////////////////////////////////////////
27// //
28// MHAlphaEnergyTime //
29// //
30// 3D-histogram in alpha, E-est and time //
31// //
32//////////////////////////////////////////////////////////////////////////////
33
34#include "MHAlphaEnergyTime.h"
35
36#include <TCanvas.h>
37
38#include <math.h>
39
40#include "MHillasSrc.h"
41#include "MEnergyEst.h"
42#include "MTime.h"
43
44#include "MBinning.h"
45#include "MParList.h"
46
47#include "MLog.h"
48#include "MLogManip.h"
49
50ClassImp(MHAlphaEnergyTime);
51
52
53// --------------------------------------------------------------------------
54//
55// Default Constructor. It sets name and title of the histogram.
56//
57MHAlphaEnergyTime::MHAlphaEnergyTime(const char *name, const char *title)
58 : fHist()
59{
60 //
61 // set the name and title of this object
62 //
63 fName = name ? name : "MHAlphaEnergyTime";
64 fTitle = title ? title : "3-D histogram in alpha, energy and time";
65
66 fHist.SetDirectory(NULL);
67
68 fHist.SetTitle("3D-plot of alpha, E-est, time");
69 fHist.SetXTitle("\\alpha [\\circ]");
70 fHist.SetYTitle("E-est [GeV] ");
71 fHist.SetZTitle("time [s]");
72}
73
74// --------------------------------------------------------------------------
75//
76// Set binnings and prepare filling of the histogram
77//
78Bool_t MHAlphaEnergyTime::SetupFill(const MParList *plist)
79{
80 fEnergy = (MEnergyEst*)plist->FindObject("MEnergyEst");
81 if (!fEnergy)
82 {
83 *fLog << err << dbginf << "MHAlphaEnergyTime : MEnergyEst not found... aborting." << endl;
84 return kFALSE;
85 }
86
87 fTime = (MTime*)plist->FindObject("MTime");
88 if (!fTime)
89 {
90 *fLog << err << dbginf << "MHAlphaEnergyTime : MTime not found... aborting." << endl;
91 return kFALSE;
92 }
93
94 MBinning* binsenergy = (MBinning*)plist->FindObject("BinningE");
95 MBinning* binsalphaflux = (MBinning*)plist->FindObject("BinningAlphaFlux");
96 MBinning* binstime = (MBinning*)plist->FindObject("BinningTime");
97 if (!binsenergy || !binsalphaflux || !binstime)
98 {
99 *fLog << err << dbginf << "MHAlphaEnergyTime : At least one MBinning not found... aborting." << endl;
100 return kFALSE;
101 }
102
103 SetBinning(&fHist, binsalphaflux, binsenergy, binstime);
104
105 fHist.Sumw2();
106
107 return kTRUE;
108}
109
110// --------------------------------------------------------------------------
111//
112// Fill the histogram
113//
114Bool_t MHAlphaEnergyTime::Fill(const MParContainer *par)
115{
116 MHillasSrc &hil = *(MHillasSrc*)par;
117
118 fHist.Fill(fabs(hil.GetAlpha()), fEnergy->GetEnergy(), 0.0001*fTime->GetTimeLo());
119 return kTRUE;
120}
121
122// --------------------------------------------------------------------------
123//
124// Draw the histogram
125//
126void MHAlphaEnergyTime::Draw(Option_t *opt)
127{
128 if (!gPad)
129 MakeDefCanvas("AlphaEnergyTime", fTitle);
130
131 gPad->Divide(2,2);
132
133 TH1 *h;
134
135 gPad->cd(1);
136 h = fHist.Project3D("ex");
137
138 h->SetTitle("Distribution of \\alpha [\\circ]");
139 h->SetXTitle("\\alpha [\\circ]");
140 h->SetYTitle("Counts");
141
142 h->Draw(opt);
143 h->SetBit(kCanDelete);
144
145 gPad->cd(2);
146 h = fHist.Project3D("ey");
147
148 h->SetTitle("Distribution of E-est [GeV]");
149 h->SetXTitle("E-est [GeV] ");
150 h->SetYTitle("Counts");
151
152 h->Draw(opt);
153 h->SetBit(kCanDelete);
154 gPad->SetLogx();
155
156 gPad->cd(3);
157 h = fHist.Project3D("ez");
158
159 h->SetTitle("Distribution of time [s]");
160 h->SetXTitle("time [s]");
161 h->SetYTitle("Counts");
162
163 h->Draw(opt);
164 h->SetBit(kCanDelete);
165
166 gPad->cd(4);
167 fHist.Draw(opt);
168
169 gPad->Modified();
170 gPad->Update();
171
172}
173
174// --------------------------------------------------------------------------
175//
176// Draw copies of the histogram
177//
178TObject *MHAlphaEnergyTime::DrawClone(Option_t *opt) const
179{
180 TCanvas &c = *MakeDefCanvas("AlphaEnergyTime", fTitle);
181
182 c.Divide(2, 2);
183
184 gROOT->SetSelectedPad(NULL);
185
186 TH1 *h;
187
188 c.cd(1);
189 h = ((TH3D*)(&fHist))->Project3D("ex");
190
191 h->SetTitle("Distribution of \\alpha [\\circ]");
192 h->SetXTitle("\\alpha [\\circ]");
193 h->SetYTitle("Counts");
194
195 h->Draw(opt);
196 h->SetBit(kCanDelete);
197
198 c.cd(2);
199 h = ((TH3D*)(&fHist))->Project3D("ey");
200
201 h->SetTitle("Distribution of E-est [GeV]");
202 h->SetXTitle("E-est [GeV] ");
203 h->SetYTitle("Counts");
204
205 h->Draw(opt);
206 h->SetBit(kCanDelete);
207 gPad->SetLogx();
208
209 c.cd(3);
210 h = ((TH3D*)(&fHist))->Project3D("ez");
211
212 h->SetTitle("Distribution of time [s]");
213 h->SetXTitle("time [s]");
214 h->SetYTitle("Counts");
215
216 h->Draw(opt);
217 h->SetBit(kCanDelete);
218
219 c.cd(4);
220 ((TH3D&)fHist).DrawCopy(opt);
221
222 c.Modified();
223 c.Update();
224
225 return &c;
226}
227
228
229// --------------------------------------------------------------------------
230//
231// Integrate fHist (Alpha,E-est,Time) over the Time to get
232// fAlphaEest(Alpha,E-est)
233//
234TH2D *MHAlphaEnergyTime::IntegrateTime(const char *title, Bool_t draw)
235{
236 Int_t nzbins = fHist.GetNbinsZ();
237 TAxis &axez = *fHist.GetZaxis();
238 axez.SetRange(1,nzbins);
239
240 TH2D &fAlphaEest = *(TH2D *)fHist.Project3D("exy");
241
242 fAlphaEest.SetTitle(title);
243 fAlphaEest.SetXTitle("E-est [GeV] ");
244 fAlphaEest.SetYTitle("\\alpha [ \\circ]");
245
246 if (draw == kTRUE)
247 {
248 TCanvas &c = *MakeDefCanvas(title, title);
249
250 gROOT->SetSelectedPad(NULL);
251
252 fAlphaEest.DrawCopy();
253 gPad->SetLogx();
254
255 c.Modified();
256 c.Update();
257 }
258
259 return &fAlphaEest;
260}
261
262// --------------------------------------------------------------------------
263//
264// Integrate fHist (Alpha,E-est,Time) over E-est to get
265// fAlphaTime(Alpha,Time)
266//
267TH2D *MHAlphaEnergyTime::IntegrateEest(const char *title, Bool_t draw)
268{
269 Int_t nybins = fHist.GetNbinsY();
270 TAxis &axey = *fHist.GetYaxis();
271 axey.SetRange(1,nybins);
272
273 TH2D &fAlphaTime = *(TH2D *)fHist.Project3D("exz");
274
275 fAlphaTime.SetTitle(title);
276 fAlphaTime.SetXTitle("Time [s]");
277 fAlphaTime.SetYTitle("\\alpha [ \\circ]");
278
279 if (draw == kTRUE)
280 {
281 TCanvas &c = *MakeDefCanvas(title, title);
282
283 gROOT->SetSelectedPad(NULL);
284
285 fAlphaTime.DrawCopy();
286
287 c.Modified();
288 c.Update();
289 }
290
291 return &fAlphaTime;
292}
293
294// --------------------------------------------------------------------------
295//
296// Integrate fHist (Alpha,E-est,Time) over Eest and Time to get
297// fAlpha(Alpha)
298//
299TH1D *MHAlphaEnergyTime::IntegrateEestTime(const char *title, Bool_t draw)
300{
301 Int_t nybins = fHist.GetNbinsY();
302 TAxis &axey = *fHist.GetYaxis();
303 axey.SetRange(1,nybins);
304
305 Int_t nzbins = fHist.GetNbinsZ();
306 TAxis &axez = *fHist.GetZaxis();
307 axez.SetRange(1,nzbins);
308
309 TH1D &fAlpha = *(TH1D *)fHist.Project3D("ex");
310
311 fAlpha.SetTitle(title);
312 fAlpha.SetXTitle("\\alpha [ \\circ]");
313 fAlpha.SetYTitle("Counts");
314
315 if (draw == kTRUE)
316 {
317 TCanvas &c = *MakeDefCanvas(title, title);
318
319 gROOT->SetSelectedPad(NULL);
320
321 fAlpha.DrawCopy();
322
323 c.Modified();
324 c.Update();
325 }
326
327 return &fAlpha;
328}
329
330
331
332
333
334
335
Note: See TracBrowser for help on using the repository browser.