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
345 //Int_t width = 4000;
346 //Int_t height = 2000;
348 fEveManager->GetDefaultGLViewer()->SavePictureScale(Form("run_%d_0x%016lX_3D.gif", fRunNumber, GetEventId()), scale);
349 fRhoZViewer->GetGLViewer()->SavePictureScale(Form("run_%d_0x%016lX_RhoZ.gif", fRunNumber, GetEventId()), scale);
350 fRPhiViewer->GetGLViewer()->SavePictureScale(Form("run_%d_0x%016lX_RPhi.gif", fRunNumber, GetEventId()), scale);
355 void AliEveHLTEventManager::StartLoop() {
356 //See header file for documentation
357 //fTimer->SetCommand("NextEvent()", "AliEveHLTEventManager", this);
359 SetEventLoopStarted(kTRUE);
360 fTimer->Start(45000);
363 void AliEveHLTEventManager::StopLoop() {
364 //See header file for documentation
366 SetEventLoopStarted(kFALSE);
370 // void AliEveHLTEventManager::NavigateBack() {
372 // if (fHomerManager->NavigateEventBufferBack()) {
376 // TList * blockList = fHomerManager->GetBlockList();
378 // ProcessEvent(blockList);
380 // cout << "BALLE Error blocklist NULL pointer even though it's navigateable"<<endl;
386 // void AliEveHLTEventManager::NavigateFwd() {
388 // if (fHomerManager->NavigateEventBufferFwd()) {
389 // cout << "No event available" << endl;
393 // cout << "Getting block list" << endl;
394 // TList * blockList = fHomerManager->GetBlockList();
396 // ProcessEvent(blockList);
398 // cout << "blockList is NULL pointer"<<endl;
404 void AliEveHLTEventManager::UpdateDisplay() {
405 //See header file for documentation
406 if(fPhosElement) fPhosElement->UpdateElements();
407 if(fEmcalElement) fEmcalElement->UpdateElements();
408 if(fTPCElement) fTPCElement->UpdateElements();
409 if(fHLTElement) fHLTElement->UpdateElements();
410 if(fITSElement) fITSElement->UpdateElements();
411 if(fISSDElement) fISSDElement->UpdateElements();
412 if(fISDDElement) fISDDElement->UpdateElements();
413 if(fISPDElement) fISPDElement->UpdateElements();
414 if(fTRDElement) fTRDElement->UpdateElements();
415 if(fAnyElement) fAnyElement->UpdateElements();
416 if(fMuonElement) fMuonElement->UpdateElements();
419 //==============================================================================
420 // -- Import global scene into projection scenes
421 //==============================================================================
423 Double_t x[3] = { 0, 0, 0 };
425 TEveElement* top = GetEveManager()->GetCurrentEvent();
427 if (fRPhiManager && top) {
428 fRPhiEventScene->DestroyElements();
429 if (fCenterProjectionsAtPrimaryVertex)
430 fRPhiManager->SetCenter(x[0], x[1], x[2]);
431 fRPhiManager->ImportElements(top, fRPhiEventScene);
434 if (fRhoZManager && top) {
435 fRhoZEventScene->DestroyElements();
436 if (fCenterProjectionsAtPrimaryVertex)
437 fRhoZManager->SetCenter(x[0], x[1], x[2]);
438 fRhoZManager->ImportElements(top, fRhoZEventScene);
443 GetEveManager()->Redraw3D(0,1); // (0, 1)
444 GetEveManager()->EnableRedraw();
448 void AliEveHLTEventManager::SaveEveryThing() {
452 GetEventBuffer()->WriteToFile(GetRunNumber());
453 //Save everything to file
454 //fEventBuffer->SaveBlockList();
455 //fEventBuffer->SaveAsyncBlockList();
462 void AliEveHLTEventManager::CreatePhosElement() {
463 fPhosElement = new AliHLTEvePhos();
464 fPhosElement->SetEventManager(this);
465 gEve->AddElement(fPhosElement);
468 void AliEveHLTEventManager::CreateEmcalElement() {
469 fEmcalElement = new AliHLTEveEmcal();
470 fEmcalElement->SetEventManager(this);
471 gEve->AddElement(fEmcalElement);
473 void AliEveHLTEventManager::CreateTPCElement() {
474 fTPCElement = new AliHLTEveTPC();
475 fTPCElement->SetEventManager(this);
476 gEve->AddElement(fTPCElement);
478 void AliEveHLTEventManager::CreateITSElement() {
479 fITSElement = new AliHLTEveITS();
480 fITSElement->SetEventManager(this);
481 gEve->AddElement(fITSElement);
483 void AliEveHLTEventManager::CreateISPDElement() {
484 fISPDElement = new AliHLTEveISPD();
485 fISPDElement->SetEventManager(this);
486 gEve->AddElement(fISPDElement);
488 void AliEveHLTEventManager::CreateISDDElement() {
489 fISDDElement = new AliHLTEveISDD();
490 fISDDElement->SetEventManager(this);
491 gEve->AddElement(fISSDElement);
493 void AliEveHLTEventManager::CreateISSDElement() {
494 fISSDElement = new AliHLTEveISSD();
495 fISSDElement->SetEventManager(this);
496 gEve->AddElement(fISSDElement);
498 void AliEveHLTEventManager::CreateTRDElement() {
499 fTRDElement = new AliHLTEveTRD();
500 fTRDElement->SetEventManager(this);
501 gEve->AddElement(fTRDElement);
503 void AliEveHLTEventManager::CreateHLTElement() {
504 fHLTElement = new AliHLTEveHLT();
505 fHLTElement->SetEventManager(this);
506 gEve->AddElement(fHLTElement);