]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - EVE/EveHLT/AliEveHLTEventManager.cxx
LoadRecPointsFromESD arg to const
[u/mrichter/AliRoot.git] / EVE / EveHLT / AliEveHLTEventManager.cxx
... / ...
CommitLineData
1#include "TEveManager.h"
2#include "TEveScene.h"
3#include "TEveProjectionManager.h"
4#include "TEveBrowser.h"
5#include "TGLViewer.h"
6#include "TEveViewer.h"
7#include "TEveEventManager.h"
8
9#include "AliHLTEvePhos.h"
10#include "AliHLTEveEmcal.h"
11#include "AliHLTEveTPC.h"
12#include "AliHLTEveHLT.h"
13#include "AliHLTEveITS.h"
14#include "AliHLTEveISPD.h"
15#include "AliHLTEveISSD.h"
16#include "AliHLTEveISDD.h"
17#include "AliHLTEveTRD.h"
18#include "AliHLTEveMuon.h"
19#include "AliHLTEveMultCorr.h"
20#include "AliHLTEveAny.h"
21
22#include "AliEveHLTEventManager.h"
23#include "AliEveHOMERManager.h"
24#include "AliEveEventBuffer.h"
25
26#include "TList.h"
27#include "TTimer.h"
28#include "TThread.h"
29
30ClassImp(AliEveHLTEventManager);
31
32AliEveHLTEventManager::AliEveHLTEventManager() :
33 TEveElementList("Event Manager"),
34 fGeoManager(NULL),
35 fEveManager(NULL),
36 fRPhiManager(NULL),
37 fRhoZManager(NULL),
38 fRPhiEventScene(NULL),
39 fRhoZEventScene(NULL),
40 fRhoZViewer(NULL),
41 fRPhiViewer(NULL),
42 fTimer(NULL),
43 fPhosElement(NULL),
44 fEmcalElement(NULL),
45 fTPCElement(NULL),
46 fHLTElement(NULL),
47 fITSElement(NULL),
48 fISPDElement(NULL),
49 fISSDElement(NULL),
50 fISDDElement(NULL),
51 fTRDElement(NULL),
52 fMuonElement(NULL),
53 fMultCorrElement(NULL),
54 fAnyElement(NULL),
55 fEventLoopStarted(kFALSE),
56 fCenterProjectionsAtPrimaryVertex(kFALSE),
57 fShowBarrel(kTRUE),
58 fShowMuon(kFALSE),
59 fRunNumber(666),
60 fEventId(-1)
61{
62 // see header file for class documentation
63 // or
64 // refer to README to build package
65 // or
66 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
67
68 fTimer = new TTimer();
69 fTimer->Connect("Timeout()", "AliEveHLTEventManager", this, "NextEvent()" );
70
71}
72
73AliEveHLTEventManager::~AliEveHLTEventManager() {
74
75 //DestroyElements();
76 //DestroyDetectorElements();
77
78}
79
80
81void AliEveHLTEventManager::DestroyDetectorElements(){
82 //See header file for documentation
83
84 if (fPhosElement)
85 delete fPhosElement;
86 fPhosElement = NULL;
87
88 if(fEmcalElement)
89 delete fEmcalElement;
90 fEmcalElement = NULL;
91
92 if(fTPCElement)
93 delete fTPCElement;
94 fTPCElement = NULL;
95
96 if(fHLTElement)
97 delete fHLTElement;
98 fHLTElement = NULL;
99
100 if(fITSElement)
101 delete fITSElement;
102 fITSElement = NULL;
103
104 if(fISSDElement)
105 delete fISSDElement;
106 fISSDElement = NULL;
107
108 if(fISDDElement)
109 delete fISDDElement;
110 fISDDElement = NULL;
111
112 if(fISPDElement)
113 delete fISPDElement;
114 fISPDElement = NULL;
115
116 if(fTRDElement)
117 delete fTRDElement;
118 fTRDElement = NULL;
119
120 if(fMuonElement)
121 delete fMuonElement;
122 fMuonElement = NULL;
123
124 if(fMultCorrElement)
125 delete fMultCorrElement;
126 fMultCorrElement = NULL;
127
128 if(fAnyElement)
129 delete fAnyElement;
130 fAnyElement = NULL;
131
132
133}
134
135///_______________________________________________________________________________________
136void AliEveHLTEventManager::ConnectEventBuffer() {
137 GetEventBuffer()->ConnectToSource();
138}
139
140
141///___________________________________________________________________________________________
142void AliEveHLTEventManager::StartBufferMonitor() {
143 AliEveEventBuffer * buffer = GetEventBuffer();
144 buffer->StartBufferMonitor();
145}
146
147//______________________________________________________________________________________________
148Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) {
149
150 //We have a new event, reset display items (need to check if there really is anything interesting in event before resetting. ie not just histos)
151
152 gEve->DisableRedraw();
153
154 event->GetStdContent();
155 // -- Set EventID in Window Title
156 TString winTitle("Eve Main Window");
157 SetRunNumber(event->GetRunNumber());
158 SetEventId(GetEventBuffer()->GetEventId());
159 winTitle += Form("-- Run Number: %d", GetRunNumber());
160 winTitle += Form("-- Event ID : 0x%016llu", GetEventId() );
161 GetEveManager()->GetBrowser()->SetWindowName(winTitle);
162
163 if(!fHLTElement) {
164 fHLTElement = new AliHLTEveHLT();
165 fHLTElement->SetEventManager(this);
166 gEve->AddElement(fHLTElement);
167 }
168 fHLTElement->ProcessEsdEvent(event);
169
170 if(!fPhosElement) CreatePhosElement();
171 fPhosElement->ProcessEvent(event);
172
173 if(!fEmcalElement) CreateEmcalElement();
174 fEmcalElement->ProcessEvent(event);
175
176 gEve->FullRedraw3D(0, 1);
177 gEve->EnableRedraw();
178
179 return 0;
180
181}
182
183
184
185//______________________________________________________________________________________________
186Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) {
187
188 //We have a new event, reset display items (need to check if there really is anything interesting in event before resetting. ie not just histos)
189
190 if(!blockList) {
191 cout << "Block list is NULL pointer, return " << endl;
192 return -1;
193 }
194
195 gEve->DisableRedraw();
196
197 AliHLTHOMERBlockDesc * block = NULL;
198 TIter next(blockList);
199 while ((block = (AliHLTHOMERBlockDesc*)next())) {
200 cout <<"Process Block"<<endl;
201 ProcessBlock(block);
202 }
203
204
205 return 0;
206
207}
208///___________________________________________________________________________________________
209
210void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) {
211 //See header file for documentation
212
213#if 1//DEBUG
214 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
215 printf( "Detector : %s\n", block->GetDetector().Data() );
216 printf( "Datatype : %s\n", block->GetDataType().Data() );
217 if (block->IsTObject() )
218 printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
219 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
220#endif
221
222
223 if(fShowBarrel) {
224
225 if ( ! block->GetDetector().CompareTo("PHOS") ) {
226 if(!fPhosElement) CreatePhosElement();
227 fPhosElement->ProcessBlock(block);
228 }
229
230 else if ( ! block->GetDetector().CompareTo("EMCA") ) {
231 if(!fEmcalElement) CreateEmcalElement();
232 fEmcalElement->ProcessBlock(block);
233 }
234
235 else if ( ! block->GetDetector().CompareTo("TPC") ) {
236 if(!fTPCElement) CreateTPCElement();
237 fTPCElement->ProcessBlock(block);
238 }
239
240 else if ( ! block->GetDetector().CompareTo("HLT") ) {
241 if(!fHLTElement) CreateHLTElement();
242
243 if(!block->GetDataType().CompareTo("ALIESDV0")) {
244 AliESDEvent * event = dynamic_cast<AliESDEvent *>(block->GetTObject());
245 if(event) {
246 ProcessEvent(event);
247 }
248
249 } else if(!(block->GetDataType().CompareTo("ROOTTOBJ"))) {
250
251 if(!fMultCorrElement) CreateMultCorrElement();
252 fMultCorrElement->ProcessBlock(block);
253
254 } else {
255 fHLTElement->ProcessBlock(block);
256 }
257 }
258
259 else if ( ! block->GetDetector().CompareTo("ITS") ) {
260 if(!fITSElement) CreateITSElement();
261 fITSElement->ProcessBlock(block);
262 }
263
264 else if ( ! block->GetDetector().CompareTo("ISDD") ) {
265 if(!fISDDElement) CreateISDDElement();
266 fISDDElement->ProcessBlock(block);
267 }
268
269 else if ( ! block->GetDetector().CompareTo("ISPD") ) {
270 if(!fISPDElement) CreateISPDElement();
271 fISPDElement->ProcessBlock(block);
272 }
273
274 else if ( ! block->GetDetector().CompareTo("ISSD") ) {
275 if(!fISSDElement) CreateISSDElement();
276 fISSDElement->ProcessBlock(block);
277 }
278
279 else if ( ! block->GetDetector().CompareTo("TRD") ) {
280 if(!fTRDElement) CreateTRDElement();
281 fTRDElement->ProcessBlock(block);
282 }
283
284 else if ( ! block->GetDetector().CompareTo("MUON") ) {
285 //Do Nothing
286 if(!block->GetDataType().CompareTo("ROOTHIST")) {
287 if(!fMuonElement) {
288 fMuonElement = new AliHLTEveMuon();
289 fMuonElement->SetEventManager(this);
290 gEve->AddElement(fMuonElement);
291 }
292 fMuonElement->ProcessBlock(block);
293 }
294
295 } else {
296 if(!fAnyElement) {
297 fAnyElement = new AliHLTEveAny();
298 fAnyElement->SetEventManager(this);
299 }
300 fAnyElement->ProcessBlock(block);
301 }
302
303 }
304
305
306 if(fShowMuon) {
307 if ( ! block->GetDetector().CompareTo("MUON") ) {
308 if(!fMuonElement) {
309 fMuonElement = new AliHLTEveMuon();
310 fMuonElement->SetEventManager(this);
311 gEve->AddElement(fMuonElement);
312 }
313 fMuonElement->ProcessBlock(block);
314 }
315 }
316
317}
318
319void AliEveHLTEventManager::ResetDisplay () {
320 //See header file for documentation
321
322 if(fPhosElement)
323 fPhosElement->ResetElements();
324
325 if(fEmcalElement)
326 fEmcalElement->ResetElements();
327
328 if(fTPCElement)
329 fTPCElement->ResetElements();
330
331 if(fHLTElement)
332 fHLTElement->ResetElements();
333
334 if(fITSElement)
335 fITSElement->ResetElements();
336
337 if(fISPDElement)
338 fISPDElement->ResetElements();
339
340 if(fISDDElement)
341 fISDDElement->ResetElements();
342
343 if(fISSDElement)
344 fISSDElement->ResetElements();
345
346 if (fTRDElement)
347 fTRDElement->ResetElements();
348
349 if(fAnyElement)
350 fAnyElement->ResetElements();
351
352 if(fMuonElement)
353 fMuonElement->ResetElements();
354
355}
356
357
358void AliEveHLTEventManager::PrintScreens() {
359// //See header file for documentation
360
361 Float_t scale = 4.f;
362 //Int_t width = 4000;
363 //Int_t height = 2000;
364
365 fEveManager->GetDefaultGLViewer()->SavePictureScale(Form("run_%d_0x%016llu_3D.gif", fRunNumber, GetEventId()), scale);
366 fRhoZViewer->GetGLViewer()->SavePictureScale(Form("run_%d_0x%016llu_RhoZ.gif", fRunNumber, GetEventId()), scale);
367 fRPhiViewer->GetGLViewer()->SavePictureScale(Form("run_%d_0x%016llu_RPhi.gif", fRunNumber, GetEventId()), scale);
368 return;
369}
370
371
372void AliEveHLTEventManager::StartLoop() {
373 //See header file for documentation
374 //fTimer->SetCommand("NextEvent()", "AliEveHLTEventManager", this);
375 NextEvent();
376 SetEventLoopStarted(kTRUE);
377 fTimer->Start(45000);
378}
379
380void AliEveHLTEventManager::StopLoop() {
381 //See header file for documentation
382 fTimer->Stop();
383 SetEventLoopStarted(kFALSE);
384}
385
386
387// void AliEveHLTEventManager::NavigateBack() {
388
389// if (fHomerManager->NavigateEventBufferBack()) {
390// //return -1;
391// } else {
392
393// TList * blockList = fHomerManager->GetBlockList();
394// if(blockList) {
395// ProcessEvent(blockList);
396// } else {
397// cout << "BALLE Error blocklist NULL pointer even though it's navigateable"<<endl;
398// }
399// }
400
401// }
402
403// void AliEveHLTEventManager::NavigateFwd() {
404
405// if (fHomerManager->NavigateEventBufferFwd()) {
406// cout << "No event available" << endl;
407// return;
408// //return -1;
409// } else {
410// cout << "Getting block list" << endl;
411// TList * blockList = fHomerManager->GetBlockList();
412// if (blockList){
413// ProcessEvent(blockList);
414// } else {
415// cout << "blockList is NULL pointer"<<endl;
416// }
417// }
418
419// }
420
421void AliEveHLTEventManager::UpdateDisplay() {
422 //See header file for documentation
423 cout << "AliHLTEventManager::UpdateDisplay(); " <<endl;
424 if(fPhosElement) fPhosElement->UpdateElements();
425 if(fEmcalElement) fEmcalElement->UpdateElements();
426 if(fTPCElement) fTPCElement->UpdateElements();
427 if(fHLTElement) fHLTElement->UpdateElements();
428 if(fITSElement) fITSElement->UpdateElements();
429 if(fISSDElement) fISSDElement->UpdateElements();
430 if(fISDDElement) fISDDElement->UpdateElements();
431 if(fISPDElement) fISPDElement->UpdateElements();
432 if(fTRDElement) fTRDElement->UpdateElements();
433 if(fAnyElement) fAnyElement->UpdateElements();
434 if(fMuonElement) fMuonElement->UpdateElements();
435 if(fMultCorrElement) fMultCorrElement->UpdateElements();
436
437
438 //==============================================================================
439 // -- Import global scene into projection scenes
440 //==============================================================================
441
442 Double_t x[3] = { 0, 0, 0 };
443
444 TEveElement* top = GetEveManager()->GetCurrentEvent();
445
446 if (fRPhiManager && top) {
447 fRPhiEventScene->DestroyElements();
448 if (fCenterProjectionsAtPrimaryVertex)
449 fRPhiManager->SetCenter(x[0], x[1], x[2]);
450 fRPhiManager->ImportElements(top, fRPhiEventScene);
451 }
452
453 if (fRhoZManager && top) {
454 fRhoZEventScene->DestroyElements();
455 if (fCenterProjectionsAtPrimaryVertex)
456 fRhoZManager->SetCenter(x[0], x[1], x[2]);
457 fRhoZManager->ImportElements(top, fRhoZEventScene);
458 }
459
460
461 //Redraw the display
462 GetEveManager()->Redraw3D(0,1); // (0, 1)
463 GetEveManager()->EnableRedraw();
464
465}
466
467void AliEveHLTEventManager::SaveEveryThing() {
468
469 //Print the screens
470 PrintScreens();
471 //Save block lists to file
472 GetEventBuffer()->WriteToFile(GetRunNumber());
473}
474
475
476
477void AliEveHLTEventManager::CreatePhosElement() {
478 fPhosElement = new AliHLTEvePhos();
479 fPhosElement->SetEventManager(this);
480 gEve->AddElement(fPhosElement);
481}
482
483void AliEveHLTEventManager::CreateMultCorrElement() {
484 fMultCorrElement = new AliHLTEveMultCorr("MultCorr");
485 fMultCorrElement->SetEventManager(this);
486 gEve->AddElement(fMultCorrElement);
487}
488
489void AliEveHLTEventManager::CreateEmcalElement() {
490 fEmcalElement = new AliHLTEveEmcal();
491 fEmcalElement->SetEventManager(this);
492 gEve->AddElement(fEmcalElement);
493}
494void AliEveHLTEventManager::CreateTPCElement() {
495 fTPCElement = new AliHLTEveTPC();
496 fTPCElement->SetEventManager(this);
497 gEve->AddElement(fTPCElement);
498}
499void AliEveHLTEventManager::CreateITSElement() {
500 fITSElement = new AliHLTEveITS();
501 fITSElement->SetEventManager(this);
502 gEve->AddElement(fITSElement);
503}
504void AliEveHLTEventManager::CreateISPDElement() {
505 fISPDElement = new AliHLTEveISPD();
506 fISPDElement->SetEventManager(this);
507 gEve->AddElement(fISPDElement);
508}
509void AliEveHLTEventManager::CreateISDDElement() {
510 fISDDElement = new AliHLTEveISDD();
511 fISDDElement->SetEventManager(this);
512 gEve->AddElement(fISSDElement);
513}
514void AliEveHLTEventManager::CreateISSDElement() {
515 fISSDElement = new AliHLTEveISSD();
516 fISSDElement->SetEventManager(this);
517 gEve->AddElement(fISSDElement);
518}
519void AliEveHLTEventManager::CreateTRDElement() {
520 fTRDElement = new AliHLTEveTRD();
521 fTRDElement->SetEventManager(this);
522 gEve->AddElement(fTRDElement);
523}
524void AliEveHLTEventManager::CreateHLTElement() {
525 fHLTElement = new AliHLTEveHLT();
526 fHLTElement->SetEventManager(this);
527 gEve->AddElement(fHLTElement);
528}
529
530