source: trunk/MagicSoft/Mars/mhist/MHEvent.cc@ 2484

Last change on this file since 2484 was 2482, checked in by tbretz, 22 years ago
*** empty log message ***
File size: 6.3 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, 11/2003 <mailto:tbretz@astro.uni-wuerzburg.de>
19!
20! Copyright: MAGIC Software Development, 2000-2003
21!
22!
23\* ======================================================================== */
24
25//////////////////////////////////////////////////////////////////////////////
26//
27// MHEvent
28//
29// Display a single event in a canvas with as many informations as
30// possible, such as event number, run number, ...
31//
32// WARNING: This class is not yet ready!
33//
34// Input Containers:
35// MGeomCam
36// [MTaskList]
37// [MImgCleanStd]
38// [MRawEvtData]
39// [MRawRunHeader]
40// [MRawEvtHeader]
41//
42// Output Containers:
43// -/-
44//
45//////////////////////////////////////////////////////////////////////////////
46#include "MHEvent.h"
47
48#include <TStyle.h>
49#include <TCanvas.h>
50
51#include "MLog.h"
52#include "MLogManip.h"
53
54#include "MMcEvt.hxx"
55
56#include "MHCamera.h"
57#include "MParList.h"
58#include "MTaskList.h"
59#include "MPedestalCam.h"
60#include "MPedestalPix.h"
61#include "MParList.h"
62#include "MCerPhotEvt.h"
63#include "MRawEvtHeader.h"
64#include "MRawRunHeader.h"
65#include "MRawEvtData.h"
66
67ClassImp(MHEvent);
68
69using namespace std;
70
71// --------------------------------------------------------------------------
72//
73MHEvent::MHEvent(EventType_t type) : fHist(NULL), fType(type)
74{
75 fName = "MHEvent";
76 fTitle = "Single Event display task";
77
78 fClone = new MRawEvtData("MHEventData");
79}
80
81// --------------------------------------------------------------------------
82//
83MHEvent::~MHEvent()
84{
85 if (fHist)
86 delete fHist;
87
88 delete fClone;
89}
90
91Bool_t MHEvent::SetupFill(const MParList *plist)
92{
93 MTaskList *tlist = (MTaskList*)plist->FindObject("MTaskList");
94
95 fImgCleanStd = tlist ? (MImgCleanStd*)tlist->FindObject("MImgCleanStd") : NULL;
96 fMcEvt = (MMcEvt*)plist->FindObject("MMcEvt");
97
98 fRawEvtData = (MRawEvtData*)plist->FindObject("MRawEvtData");
99 if (!fRawEvtData)
100 *fLog << warn << "MRawEvtData not found..." << endl;
101
102 fRawRunHeader = (MRawRunHeader*)plist->FindObject("MRawRunHeader");
103 if (!fRawRunHeader)
104 *fLog << warn << dbginf << "MRawRunHeader not found..." << endl;
105
106 fRawEvtHeader = (MRawEvtHeader*)plist->FindObject("MRawEvtHeader");
107 if (!fRawEvtHeader)
108 *fLog << warn << dbginf << "MRawEvtHeader not found..." << endl;
109
110 MGeomCam *cam = (MGeomCam*)plist->FindObject("MGeomCam");
111 if (!cam)
112 {
113 *fLog << err << GetDescriptor() << ": No MGeomCam found... aborting." << endl;
114 return kFALSE;
115 }
116
117 if (fHist)
118 delete (fHist);
119
120 fHist = new MHCamera(*cam);
121 fHist->AddNotify(*fClone);
122
123 switch (fType)
124 {
125 case kEvtSignal:
126 fHist->SetName("Signal");
127 fHist->SetYTitle("S [au]");
128 break;
129 case kEvtPedestal:
130 fHist->SetName("Pedestal");
131 fHist->SetYTitle("P [au]");
132 break;
133 case kEvtPedestalRMS:
134 fHist->SetName("Pedestal RMS");
135 fHist->SetYTitle("\\sigma_{P} [au]");
136 break;
137 case kEvtRelativeSignal:
138 fHist->SetName("Signal/PedRMS");
139 fHist->SetYTitle("S/P_{rms}");
140 break;
141 case kEvtCleaningLevels:
142 fHist->SetName("CleanLevels");
143 fHist->SetYTitle("L");
144 if (!fImgCleanStd)
145 return kFALSE;
146 break;
147 }
148
149 return kTRUE;
150}
151
152Bool_t MHEvent::Fill(const MParContainer *par, const Stat_t weight)
153{
154 if (fHist->IsFreezed())
155 return kTRUE;
156
157 if (!par)
158 return kFALSE;
159
160 if (fRawEvtData)
161 fRawEvtData->Copy(*fClone);
162
163 switch (fType)
164 {
165 case kEvtSignal:
166 case kEvtPedestal:
167 fHist->SetCamContent(*(MCamEvent*)par, 0);
168 break;
169 case kEvtPedestalRMS:
170 fHist->SetCamContent(*(MCamEvent*)par, 0);
171 break;
172 case kEvtRelativeSignal:
173 case kEvtCleaningLevels:
174 fHist->SetCamContent(*(MCamEvent*)par, 0);
175 break;
176 }
177
178 TString s;
179 if (fRawEvtHeader)
180 {
181 s += "Event #";
182 s += fRawEvtHeader->GetDAQEvtNumber();
183 }
184 if (fRawEvtHeader && fRawRunHeader)
185 s += " of ";
186
187 if (fRawRunHeader)
188 {
189 s += "Run #";
190 s += fRawRunHeader->GetNumEvents();
191 }
192
193 if (fMcEvt)
194 {
195 TString txt;// = "#splitline{";
196
197 switch (fMcEvt->GetPartId())
198 {
199 case kGAMMA:
200 txt += "Gamma: ";
201 break;
202 case kPROTON:
203 txt += "Proton: ";
204 break;
205 case kHELIUM:
206 txt += "Helium: ";
207 break;
208 default:
209 s += "Particle Id#";
210 s += fMcEvt->GetPartId();
211 s += ": ";
212 }
213
214 s.Insert(0, txt);
215
216 //s += "}{";
217 s += " E=";
218 if (fMcEvt->GetEnergy()>1000)
219 txt += Form("%.1fTeV", fMcEvt->GetEnergy()/1000);
220 else
221 txt += Form("%dGeV", fMcEvt->GetEnergy()+.5);
222 s += " r=";
223 s += (int)(fMcEvt->GetImpact()/100+.5);
224 s += "m ZA=";
225 s += (int)(fMcEvt->GetTheta()*180/TMath::Pi()+.5);
226 s += "° ";
227 s += fMcEvt->GetPhotElfromShower();
228 s += "PhEl";
229 //s += "}";
230 }
231
232 gPad=NULL;
233 fHist->SetTitle(s);
234
235 return kTRUE;
236}
237
238void MHEvent::Draw(Option_t *)
239{
240 if (!fHist)
241 {
242 *fLog << warn << "MHEvent::Draw - fHist==NULL not initialized." << endl;
243 return;
244 }
245
246 TVirtualPad *pad = gPad ? gPad : MakeDefCanvas(this);
247 pad->SetBorderMode(0);
248
249 pad->Divide(1,1);
250
251 pad->cd(1);
252 gPad->SetBorderMode(0);
253 gPad->Divide(1,1);
254 gPad->cd(1);
255 gPad->SetBorderMode(0);
256 fHist->Draw();
257}
Note: See TracBrowser for help on using the repository browser.