1 #include "TEveManager.h"
3 #include "TEveProjectionManager.h"
4 #include "TEveBrowser.h"
6 #include "TEveViewer.h"
7 #include "TEveEventManager.h"
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 "AliHLTEveAny.h"
21 #include "AliEveHLTEventManager.h"
22 #include "AliEveHOMERManager.h"
23 #include "AliEveEventBuffer.h"
30 ClassImp(AliEveHLTEventManager);
32 AliEveHLTEventManager::AliEveHLTEventManager() :
33 TEveElementList("Event Manager"),
38 fRPhiEventScene(NULL),
39 fRhoZEventScene(NULL),
54 fEventLoopStarted(kFALSE),
55 fCenterProjectionsAtPrimaryVertex(kFALSE),
61 // see header file for class documentation
63 // refer to README to build package
65 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
67 fTimer = new TTimer();
68 fTimer->Connect("Timeout()", "AliEveHLTEventManager", this, "NextEvent()" );
72 AliEveHLTEventManager::~AliEveHLTEventManager() {
75 //DestroyDetectorElements();
80 void AliEveHLTEventManager::DestroyDetectorElements(){
81 //See header file for documentation
130 ///_______________________________________________________________________________________
131 void AliEveHLTEventManager::ConnectEventBuffer() {
132 GetEventBuffer()->ConnectToSource();
136 ///___________________________________________________________________________________________
137 void AliEveHLTEventManager::StartBufferMonitor() {
138 AliEveEventBuffer * buffer = GetEventBuffer();
139 buffer->StartBufferMonitor();
142 //______________________________________________________________________________________________
143 Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) {
145 //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)
147 gEve->DisableRedraw();
149 // -- Set EventID in Window Title
150 TString winTitle("Eve Main Window");
151 SetRunNumber(event->GetRunNumber());
152 SetEventId(GetEventBuffer()->GetEventId());
153 winTitle += Form("-- Run Number: %d", GetRunNumber());
154 winTitle += Form("-- Event ID : 0x%016lX ", GetEventId() );
155 GetEveManager()->GetBrowser()->SetWindowName(winTitle);
159 cout << "reset()"<<endl;
161 cout << "process()"<<endl;
163 fHLTElement = new AliHLTEveHLT();
164 fHLTElement->SetEventManager(this);
165 gEve->AddElement(fHLTElement);
167 fHLTElement->ProcessEsdEvent(event);
169 if(!fPhosElement) CreatePhosElement();
170 fPhosElement->ProcessEvent(event);
172 if(!fEmcalElement) CreateEmcalElement();
173 fEmcalElement->ProcessEvent(event);
175 gEve->Redraw3D(0, 1);
176 gEve->EnableRedraw();
184 //______________________________________________________________________________________________
185 Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) {
187 //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)
190 cout << "Block list is NULL pointer, return " << endl;
195 AliHLTHOMERBlockDesc * block = NULL;
196 TIter next(blockList);
197 while ((block = (AliHLTHOMERBlockDesc*)next())) {
198 cout <<"Process Block"<<endl;
206 ///___________________________________________________________________________________________
208 void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) {
209 //See header file for documentation
212 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
213 printf( "Detector : %s\n", block->GetDetector().Data() );
214 printf( "Datatype : %s\n", block->GetDataType().Data() );
215 if (block->IsTObject() )
216 printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
217 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
223 if ( ! block->GetDetector().CompareTo("PHOS") ) {
224 if(!fPhosElement) CreatePhosElement();
225 fPhosElement->ProcessBlock(block);
228 else if ( ! block->GetDetector().CompareTo("EMCA") ) {
229 if(!fEmcalElement) CreateEmcalElement();
230 fEmcalElement->ProcessBlock(block);
233 else if ( ! block->GetDetector().CompareTo("TPC") ) {
234 if(!fTPCElement) CreateTPCElement();
235 fTPCElement->ProcessBlock(block);
238 else if ( ! block->GetDetector().CompareTo("HLT") ) {
239 if(!fHLTElement) CreateHLTElement();
241 if(!block->GetDataType().CompareTo("ALIESDV0")) {
242 AliESDEvent * event = dynamic_cast<AliESDEvent *>(block->GetTObject());
247 fHLTElement->ProcessBlock(block);
251 else if ( ! block->GetDetector().CompareTo("ITS") ) {
252 if(!fITSElement) CreateITSElement();
253 fITSElement->ProcessBlock(block);
256 else if ( ! block->GetDetector().CompareTo("ISDD") ) {
257 if(!fISDDElement) CreateISDDElement();
258 fISDDElement->ProcessBlock(block);
261 else if ( ! block->GetDetector().CompareTo("ISPD") ) {
262 if(!fISPDElement) CreateISPDElement();
263 fISPDElement->ProcessBlock(block);
266 else if ( ! block->GetDetector().CompareTo("ISSD") ) {
267 if(!fISSDElement) CreateISSDElement();
268 fISSDElement->ProcessBlock(block);
271 else if ( ! block->GetDetector().CompareTo("TRD") ) {
272 if(!fTRDElement) CreateTRDElement();
273 fTRDElement->ProcessBlock(block);
276 else if ( ! block->GetDetector().CompareTo("MUON") ) {
280 fAnyElement = new AliHLTEveAny();
281 fAnyElement->SetEventManager(this);
283 fAnyElement->ProcessBlock(block);
290 if ( ! block->GetDetector().CompareTo("MUON") ) {
292 fMuonElement = new AliHLTEveMuon();
293 fMuonElement->SetEventManager(this);
294 gEve->AddElement(fMuonElement);
296 fMuonElement->ProcessBlock(block);
302 void AliEveHLTEventManager::ResetDisplay () {
303 //See header file for documentation
306 fPhosElement->ResetElements();
309 fEmcalElement->ResetElements();
312 fTPCElement->ResetElements();
315 fHLTElement->ResetElements();
318 fITSElement->ResetElements();
321 fISPDElement->ResetElements();
324 fISDDElement->ResetElements();
327 fISSDElement->ResetElements();
330 fTRDElement->ResetElements();
333 fAnyElement->ResetElements();
336 fMuonElement->ResetElements();
341 void AliEveHLTEventManager::PrintScreens() {
342 // //See header file for documentation
344 fEveManager->GetDefaultGLViewer()->SavePicture(Form("%d_0x%016lX_3D.gif", fRunNumber, GetEventId()));
345 fRhoZViewer->GetGLViewer()->SavePicture(Form("%d_0x%016lX_RhoZ.gif", fRunNumber, GetEventId()));
346 fRPhiViewer->GetGLViewer()->SavePicture(Form("%d_0x%016lX_RPhi.gif", fRunNumber, GetEventId()));
351 void AliEveHLTEventManager::StartLoop() {
352 //See header file for documentation
353 //fTimer->SetCommand("NextEvent()", "AliEveHLTEventManager", this);
355 SetEventLoopStarted(kTRUE);
356 fTimer->Start(15000);
359 void AliEveHLTEventManager::StopLoop() {
360 //See header file for documentation
362 SetEventLoopStarted(kFALSE);
366 // void AliEveHLTEventManager::NavigateBack() {
368 // if (fHomerManager->NavigateEventBufferBack()) {
372 // TList * blockList = fHomerManager->GetBlockList();
374 // ProcessEvent(blockList);
376 // cout << "BALLE Error blocklist NULL pointer even though it's navigateable"<<endl;
382 // void AliEveHLTEventManager::NavigateFwd() {
384 // if (fHomerManager->NavigateEventBufferFwd()) {
385 // cout << "No event available" << endl;
389 // cout << "Getting block list" << endl;
390 // TList * blockList = fHomerManager->GetBlockList();
392 // ProcessEvent(blockList);
394 // cout << "blockList is NULL pointer"<<endl;
400 void AliEveHLTEventManager::UpdateDisplay() {
401 //See header file for documentation
402 if(fPhosElement) fPhosElement->UpdateElements();
403 if(fEmcalElement) fEmcalElement->UpdateElements();
404 if(fTPCElement) fTPCElement->UpdateElements();
405 if(fHLTElement) fHLTElement->UpdateElements();
406 if(fITSElement) fITSElement->UpdateElements();
407 if(fISSDElement) fISSDElement->UpdateElements();
408 if(fISDDElement) fISDDElement->UpdateElements();
409 if(fISPDElement) fISPDElement->UpdateElements();
410 if(fTRDElement) fTRDElement->UpdateElements();
411 if(fAnyElement) fAnyElement->UpdateElements();
412 if(fMuonElement) fMuonElement->UpdateElements();
415 //==============================================================================
416 // -- Import global scene into projection scenes
417 //==============================================================================
419 Double_t x[3] = { 0, 0, 0 };
421 TEveElement* top = GetEveManager()->GetCurrentEvent();
423 if (fRPhiManager && top) {
424 fRPhiEventScene->DestroyElements();
425 if (fCenterProjectionsAtPrimaryVertex)
426 fRPhiManager->SetCenter(x[0], x[1], x[2]);
427 fRPhiManager->ImportElements(top, fRPhiEventScene);
430 if (fRhoZManager && top) {
431 fRhoZEventScene->DestroyElements();
432 if (fCenterProjectionsAtPrimaryVertex)
433 fRhoZManager->SetCenter(x[0], x[1], x[2]);
434 fRhoZManager->ImportElements(top, fRhoZEventScene);
439 GetEveManager()->Redraw3D(0,1); // (0, 1)
440 GetEveManager()->EnableRedraw();
444 void AliEveHLTEventManager::SaveEveryThing() {
448 GetEventBuffer()->WriteToFile(GetRunNumber());
449 //Save everything to file
450 //fEventBuffer->SaveBlockList();
451 //fEventBuffer->SaveAsyncBlockList();
458 void AliEveHLTEventManager::CreatePhosElement() {
459 fPhosElement = new AliHLTEvePhos();
460 fPhosElement->SetEventManager(this);
461 gEve->AddElement(fPhosElement);
464 void AliEveHLTEventManager::CreateEmcalElement() {
465 fEmcalElement = new AliHLTEveEmcal();
466 fEmcalElement->SetEventManager(this);
467 gEve->AddElement(fEmcalElement);
469 void AliEveHLTEventManager::CreateTPCElement() {
470 fTPCElement = new AliHLTEveTPC();
471 fTPCElement->SetEventManager(this);
472 gEve->AddElement(fTPCElement);
474 void AliEveHLTEventManager::CreateITSElement() {
475 fITSElement = new AliHLTEveITS();
476 fITSElement->SetEventManager(this);
477 gEve->AddElement(fITSElement);
479 void AliEveHLTEventManager::CreateISPDElement() {
480 fISPDElement = new AliHLTEveISPD();
481 fISPDElement->SetEventManager(this);
482 gEve->AddElement(fISPDElement);
484 void AliEveHLTEventManager::CreateISDDElement() {
485 fISDDElement = new AliHLTEveISDD();
486 fISDDElement->SetEventManager(this);
487 gEve->AddElement(fISSDElement);
489 void AliEveHLTEventManager::CreateISSDElement() {
490 fISSDElement = new AliHLTEveISSD();
491 fISSDElement->SetEventManager(this);
492 gEve->AddElement(fISSDElement);
494 void AliEveHLTEventManager::CreateTRDElement() {
495 fTRDElement = new AliHLTEveTRD();
496 fTRDElement->SetEventManager(this);
497 gEve->AddElement(fTRDElement);
499 void AliEveHLTEventManager::CreateHLTElement() {
500 fHLTElement = new AliHLTEveHLT();
501 fHLTElement->SetEventManager(this);
502 gEve->AddElement(fHLTElement);