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 "AliHLTEveMultCorr.h"
20 #include "AliHLTEveAny.h"
22 #include "AliEveHLTEventManager.h"
23 #include "AliEveHOMERManager.h"
24 #include "AliEveEventBuffer.h"
30 ClassImp(AliEveHLTEventManager);
32 AliEveHLTEventManager::AliEveHLTEventManager() :
33 TEveElementList("Event Manager"),
38 fRPhiEventScene(NULL),
39 fRhoZEventScene(NULL),
53 fMultCorrElement(NULL),
55 fEventLoopStarted(kFALSE),
56 fCenterProjectionsAtPrimaryVertex(kFALSE),
62 // see header file for class documentation
64 // refer to README to build package
66 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
68 fTimer = new TTimer();
69 fTimer->Connect("Timeout()", "AliEveHLTEventManager", this, "NextEvent()" );
73 AliEveHLTEventManager::~AliEveHLTEventManager() {
76 //DestroyDetectorElements();
81 void AliEveHLTEventManager::DestroyDetectorElements(){
82 //See header file for documentation
125 delete fMultCorrElement;
126 fMultCorrElement = NULL;
135 ///_______________________________________________________________________________________
136 void AliEveHLTEventManager::ConnectEventBuffer() {
137 GetEventBuffer()->ConnectToSource();
141 ///___________________________________________________________________________________________
142 void AliEveHLTEventManager::StartBufferMonitor() {
143 AliEveEventBuffer * buffer = GetEventBuffer();
144 buffer->StartBufferMonitor();
147 //______________________________________________________________________________________________
148 Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) {
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)
152 gEve->DisableRedraw();
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);
164 fHLTElement = new AliHLTEveHLT();
165 fHLTElement->SetEventManager(this);
166 gEve->AddElement(fHLTElement);
168 fHLTElement->ProcessEsdEvent(event);
170 if(!fPhosElement) CreatePhosElement();
171 fPhosElement->ProcessEvent(event);
173 if(!fEmcalElement) CreateEmcalElement();
174 fEmcalElement->ProcessEvent(event);
176 gEve->FullRedraw3D(0, 1);
177 gEve->EnableRedraw();
185 //______________________________________________________________________________________________
186 Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) {
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)
191 cout << "Block list is NULL pointer, return " << endl;
195 gEve->DisableRedraw();
197 AliHLTHOMERBlockDesc * block = NULL;
198 TIter next(blockList);
199 while ((block = (AliHLTHOMERBlockDesc*)next())) {
200 cout <<"Process Block"<<endl;
208 ///___________________________________________________________________________________________
210 void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) {
211 //See header file for documentation
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");
225 if ( ! block->GetDetector().CompareTo("PHOS") ) {
226 if(!fPhosElement) CreatePhosElement();
227 fPhosElement->ProcessBlock(block);
230 else if ( ! block->GetDetector().CompareTo("EMCA") ) {
231 if(!fEmcalElement) CreateEmcalElement();
232 fEmcalElement->ProcessBlock(block);
235 else if ( ! block->GetDetector().CompareTo("TPC") ) {
236 if(!fTPCElement) CreateTPCElement();
237 fTPCElement->ProcessBlock(block);
240 else if ( ! block->GetDetector().CompareTo("HLT") ) {
241 if(!fHLTElement) CreateHLTElement();
243 if(!block->GetDataType().CompareTo("ALIESDV0")) {
244 AliESDEvent * event = dynamic_cast<AliESDEvent *>(block->GetTObject());
249 } else if(!(block->GetDataType().CompareTo("ROOTTOBJ"))) {
251 if(!fMultCorrElement) CreateMultCorrElement();
252 fMultCorrElement->ProcessBlock(block);
255 fHLTElement->ProcessBlock(block);
259 else if ( ! block->GetDetector().CompareTo("ITS") ) {
260 if(!fITSElement) CreateITSElement();
261 fITSElement->ProcessBlock(block);
264 else if ( ! block->GetDetector().CompareTo("ISDD") ) {
265 if(!fISDDElement) CreateISDDElement();
266 fISDDElement->ProcessBlock(block);
269 else if ( ! block->GetDetector().CompareTo("ISPD") ) {
270 if(!fISPDElement) CreateISPDElement();
271 fISPDElement->ProcessBlock(block);
274 else if ( ! block->GetDetector().CompareTo("ISSD") ) {
275 if(!fISSDElement) CreateISSDElement();
276 fISSDElement->ProcessBlock(block);
279 else if ( ! block->GetDetector().CompareTo("TRD") ) {
280 if(!fTRDElement) CreateTRDElement();
281 fTRDElement->ProcessBlock(block);
284 else if ( ! block->GetDetector().CompareTo("MUON") ) {
286 if(!block->GetDataType().CompareTo("ROOTHIST")) {
288 fMuonElement = new AliHLTEveMuon();
289 fMuonElement->SetEventManager(this);
290 gEve->AddElement(fMuonElement);
292 fMuonElement->ProcessBlock(block);
297 fAnyElement = new AliHLTEveAny();
298 fAnyElement->SetEventManager(this);
300 fAnyElement->ProcessBlock(block);
307 if ( ! block->GetDetector().CompareTo("MUON") ) {
309 fMuonElement = new AliHLTEveMuon();
310 fMuonElement->SetEventManager(this);
311 gEve->AddElement(fMuonElement);
313 fMuonElement->ProcessBlock(block);
319 void AliEveHLTEventManager::ResetDisplay () {
320 //See header file for documentation
323 fPhosElement->ResetElements();
326 fEmcalElement->ResetElements();
329 fTPCElement->ResetElements();
332 fHLTElement->ResetElements();
335 fITSElement->ResetElements();
338 fISPDElement->ResetElements();
341 fISDDElement->ResetElements();
344 fISSDElement->ResetElements();
347 fTRDElement->ResetElements();
350 fAnyElement->ResetElements();
353 fMuonElement->ResetElements();
358 void AliEveHLTEventManager::PrintScreens() {
359 // //See header file for documentation
362 //Int_t width = 4000;
363 //Int_t height = 2000;
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);
372 void AliEveHLTEventManager::StartLoop() {
373 //See header file for documentation
374 //fTimer->SetCommand("NextEvent()", "AliEveHLTEventManager", this);
376 SetEventLoopStarted(kTRUE);
377 fTimer->Start(45000);
380 void AliEveHLTEventManager::StopLoop() {
381 //See header file for documentation
383 SetEventLoopStarted(kFALSE);
387 // void AliEveHLTEventManager::NavigateBack() {
389 // if (fHomerManager->NavigateEventBufferBack()) {
393 // TList * blockList = fHomerManager->GetBlockList();
395 // ProcessEvent(blockList);
397 // cout << "BALLE Error blocklist NULL pointer even though it's navigateable"<<endl;
403 // void AliEveHLTEventManager::NavigateFwd() {
405 // if (fHomerManager->NavigateEventBufferFwd()) {
406 // cout << "No event available" << endl;
410 // cout << "Getting block list" << endl;
411 // TList * blockList = fHomerManager->GetBlockList();
413 // ProcessEvent(blockList);
415 // cout << "blockList is NULL pointer"<<endl;
421 void 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();
438 //==============================================================================
439 // -- Import global scene into projection scenes
440 //==============================================================================
442 Double_t x[3] = { 0, 0, 0 };
444 TEveElement* top = GetEveManager()->GetCurrentEvent();
446 if (fRPhiManager && top) {
447 fRPhiEventScene->DestroyElements();
448 if (fCenterProjectionsAtPrimaryVertex)
449 fRPhiManager->SetCenter(x[0], x[1], x[2]);
450 fRPhiManager->ImportElements(top, fRPhiEventScene);
453 if (fRhoZManager && top) {
454 fRhoZEventScene->DestroyElements();
455 if (fCenterProjectionsAtPrimaryVertex)
456 fRhoZManager->SetCenter(x[0], x[1], x[2]);
457 fRhoZManager->ImportElements(top, fRhoZEventScene);
462 GetEveManager()->Redraw3D(0,1); // (0, 1)
463 GetEveManager()->EnableRedraw();
467 void AliEveHLTEventManager::SaveEveryThing() {
471 //Save block lists to file
472 GetEventBuffer()->WriteToFile(GetRunNumber());
477 void AliEveHLTEventManager::CreatePhosElement() {
478 fPhosElement = new AliHLTEvePhos();
479 fPhosElement->SetEventManager(this);
480 gEve->AddElement(fPhosElement);
483 void AliEveHLTEventManager::CreateMultCorrElement() {
484 fMultCorrElement = new AliHLTEveMultCorr("MultCorr");
485 fMultCorrElement->SetEventManager(this);
486 gEve->AddElement(fMultCorrElement);
489 void AliEveHLTEventManager::CreateEmcalElement() {
490 fEmcalElement = new AliHLTEveEmcal();
491 fEmcalElement->SetEventManager(this);
492 gEve->AddElement(fEmcalElement);
494 void AliEveHLTEventManager::CreateTPCElement() {
495 fTPCElement = new AliHLTEveTPC();
496 fTPCElement->SetEventManager(this);
497 gEve->AddElement(fTPCElement);
499 void AliEveHLTEventManager::CreateITSElement() {
500 fITSElement = new AliHLTEveITS();
501 fITSElement->SetEventManager(this);
502 gEve->AddElement(fITSElement);
504 void AliEveHLTEventManager::CreateISPDElement() {
505 fISPDElement = new AliHLTEveISPD();
506 fISPDElement->SetEventManager(this);
507 gEve->AddElement(fISPDElement);
509 void AliEveHLTEventManager::CreateISDDElement() {
510 fISDDElement = new AliHLTEveISDD();
511 fISDDElement->SetEventManager(this);
512 gEve->AddElement(fISSDElement);
514 void AliEveHLTEventManager::CreateISSDElement() {
515 fISSDElement = new AliHLTEveISSD();
516 fISSDElement->SetEventManager(this);
517 gEve->AddElement(fISSDElement);
519 void AliEveHLTEventManager::CreateTRDElement() {
520 fTRDElement = new AliHLTEveTRD();
521 fTRDElement->SetEventManager(this);
522 gEve->AddElement(fTRDElement);
524 void AliEveHLTEventManager::CreateHLTElement() {
525 fHLTElement = new AliHLTEveHLT();
526 fHLTElement->SetEventManager(this);
527 gEve->AddElement(fHLTElement);