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"
31 ClassImp(AliEveHLTEventManager);
33 AliEveHLTEventManager::AliEveHLTEventManager() :
34 TEveElementList("Event Manager"),
39 fRPhiEventScene(NULL),
40 fRhoZEventScene(NULL),
54 fMultCorrElement(NULL),
56 fEventLoopStarted(kFALSE),
57 fCenterProjectionsAtPrimaryVertex(kFALSE),
63 // see header file for class documentation
65 // refer to README to build package
67 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
69 fTimer = new TTimer();
70 fTimer->Connect("Timeout()", "AliEveHLTEventManager", this, "NextEvent()" );
74 AliEveHLTEventManager::~AliEveHLTEventManager() {
77 //DestroyDetectorElements();
82 void AliEveHLTEventManager::DestroyDetectorElements(){
83 //See header file for documentation
126 delete fMultCorrElement;
127 fMultCorrElement = NULL;
136 ///_______________________________________________________________________________________
137 void AliEveHLTEventManager::ConnectEventBuffer() {
138 GetEventBuffer()->ConnectToSource();
142 ///___________________________________________________________________________________________
143 void AliEveHLTEventManager::StartBufferMonitor() {
144 AliEveEventBuffer * buffer = GetEventBuffer();
145 buffer->StartBufferMonitor();
148 //______________________________________________________________________________________________
149 Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) {
151 //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)
153 gEve->DisableRedraw();
155 event->GetStdContent();
156 // -- Set EventID in Window Title
157 TString winTitle("Eve Main Window");
158 SetRunNumber(event->GetRunNumber());
159 SetEventId(GetEventBuffer()->GetEventId());
160 winTitle += Form("-- Run Number: %d", GetRunNumber());
161 winTitle += Form("-- Event ID : 0x%016lX ", GetEventId() );
162 GetEveManager()->GetBrowser()->SetWindowName(winTitle);
166 cout << "reset()"<<endl;
168 cout << "process()"<<endl;
170 fHLTElement = new AliHLTEveHLT();
171 fHLTElement->SetEventManager(this);
172 gEve->AddElement(fHLTElement);
174 fHLTElement->ProcessEsdEvent(event);
176 if(!fPhosElement) CreatePhosElement();
177 fPhosElement->ProcessEvent(event);
179 if(!fEmcalElement) CreateEmcalElement();
180 fEmcalElement->ProcessEvent(event);
182 gEve->Redraw3D(0, 1);
183 gEve->EnableRedraw();
191 //______________________________________________________________________________________________
192 Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) {
194 //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)
197 cout << "Block list is NULL pointer, return " << endl;
202 AliHLTHOMERBlockDesc * block = NULL;
203 TIter next(blockList);
204 while ((block = (AliHLTHOMERBlockDesc*)next())) {
205 cout <<"Process Block"<<endl;
213 ///___________________________________________________________________________________________
215 void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) {
216 //See header file for documentation
219 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
220 printf( "Detector : %s\n", block->GetDetector().Data() );
221 printf( "Datatype : %s\n", block->GetDataType().Data() );
222 if (block->IsTObject() )
223 printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
224 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
230 if ( ! block->GetDetector().CompareTo("PHOS") ) {
231 if(!fPhosElement) CreatePhosElement();
232 fPhosElement->ProcessBlock(block);
235 else if ( ! block->GetDetector().CompareTo("EMCA") ) {
236 if(!fEmcalElement) CreateEmcalElement();
237 fEmcalElement->ProcessBlock(block);
240 else if ( ! block->GetDetector().CompareTo("TPC") ) {
241 if(!fTPCElement) CreateTPCElement();
242 fTPCElement->ProcessBlock(block);
245 else if ( ! block->GetDetector().CompareTo("HLT") ) {
246 if(!fHLTElement) CreateHLTElement();
248 if(!block->GetDataType().CompareTo("ALIESDV0")) {
249 AliESDEvent * event = dynamic_cast<AliESDEvent *>(block->GetTObject());
254 } else if(!(block->GetDataType().CompareTo("ROOTTOBJ"))) {
256 if(!fMultCorrElement) CreateMultCorrElement();
257 fMultCorrElement->ProcessBlock(block);
260 fHLTElement->ProcessBlock(block);
264 else if ( ! block->GetDetector().CompareTo("ITS") ) {
265 if(!fITSElement) CreateITSElement();
266 fITSElement->ProcessBlock(block);
269 else if ( ! block->GetDetector().CompareTo("ISDD") ) {
270 if(!fISDDElement) CreateISDDElement();
271 fISDDElement->ProcessBlock(block);
274 else if ( ! block->GetDetector().CompareTo("ISPD") ) {
275 if(!fISPDElement) CreateISPDElement();
276 fISPDElement->ProcessBlock(block);
279 else if ( ! block->GetDetector().CompareTo("ISSD") ) {
280 if(!fISSDElement) CreateISSDElement();
281 fISSDElement->ProcessBlock(block);
284 else if ( ! block->GetDetector().CompareTo("TRD") ) {
285 if(!fTRDElement) CreateTRDElement();
286 fTRDElement->ProcessBlock(block);
289 else if ( ! block->GetDetector().CompareTo("MUON") ) {
293 fAnyElement = new AliHLTEveAny();
294 fAnyElement->SetEventManager(this);
296 fAnyElement->ProcessBlock(block);
303 if ( ! block->GetDetector().CompareTo("MUON") ) {
305 fMuonElement = new AliHLTEveMuon();
306 fMuonElement->SetEventManager(this);
307 gEve->AddElement(fMuonElement);
309 fMuonElement->ProcessBlock(block);
315 void AliEveHLTEventManager::ResetDisplay () {
316 //See header file for documentation
319 fPhosElement->ResetElements();
322 fEmcalElement->ResetElements();
325 fTPCElement->ResetElements();
328 fHLTElement->ResetElements();
331 fITSElement->ResetElements();
334 fISPDElement->ResetElements();
337 fISDDElement->ResetElements();
340 fISSDElement->ResetElements();
343 fTRDElement->ResetElements();
346 fAnyElement->ResetElements();
349 fMuonElement->ResetElements();
354 void AliEveHLTEventManager::PrintScreens() {
355 // //See header file for documentation
358 //Int_t width = 4000;
359 //Int_t height = 2000;
361 fEveManager->GetDefaultGLViewer()->SavePictureScale(Form("run_%d_0x%016lX_3D.gif", fRunNumber, GetEventId()), scale);
362 fRhoZViewer->GetGLViewer()->SavePictureScale(Form("run_%d_0x%016lX_RhoZ.gif", fRunNumber, GetEventId()), scale);
363 fRPhiViewer->GetGLViewer()->SavePictureScale(Form("run_%d_0x%016lX_RPhi.gif", fRunNumber, GetEventId()), scale);
368 void AliEveHLTEventManager::StartLoop() {
369 //See header file for documentation
370 //fTimer->SetCommand("NextEvent()", "AliEveHLTEventManager", this);
372 SetEventLoopStarted(kTRUE);
373 fTimer->Start(45000);
376 void AliEveHLTEventManager::StopLoop() {
377 //See header file for documentation
379 SetEventLoopStarted(kFALSE);
383 // void AliEveHLTEventManager::NavigateBack() {
385 // if (fHomerManager->NavigateEventBufferBack()) {
389 // TList * blockList = fHomerManager->GetBlockList();
391 // ProcessEvent(blockList);
393 // cout << "BALLE Error blocklist NULL pointer even though it's navigateable"<<endl;
399 // void AliEveHLTEventManager::NavigateFwd() {
401 // if (fHomerManager->NavigateEventBufferFwd()) {
402 // cout << "No event available" << endl;
406 // cout << "Getting block list" << endl;
407 // TList * blockList = fHomerManager->GetBlockList();
409 // ProcessEvent(blockList);
411 // cout << "blockList is NULL pointer"<<endl;
417 void AliEveHLTEventManager::UpdateDisplay() {
418 //See header file for documentation
419 if(fPhosElement) fPhosElement->UpdateElements();
420 if(fEmcalElement) fEmcalElement->UpdateElements();
421 if(fTPCElement) fTPCElement->UpdateElements();
422 if(fHLTElement) fHLTElement->UpdateElements();
423 if(fITSElement) fITSElement->UpdateElements();
424 if(fISSDElement) fISSDElement->UpdateElements();
425 if(fISDDElement) fISDDElement->UpdateElements();
426 if(fISPDElement) fISPDElement->UpdateElements();
427 if(fTRDElement) fTRDElement->UpdateElements();
428 if(fAnyElement) fAnyElement->UpdateElements();
429 if(fMuonElement) fMuonElement->UpdateElements();
432 //==============================================================================
433 // -- Import global scene into projection scenes
434 //==============================================================================
436 Double_t x[3] = { 0, 0, 0 };
438 TEveElement* top = GetEveManager()->GetCurrentEvent();
440 if (fRPhiManager && top) {
441 fRPhiEventScene->DestroyElements();
442 if (fCenterProjectionsAtPrimaryVertex)
443 fRPhiManager->SetCenter(x[0], x[1], x[2]);
444 fRPhiManager->ImportElements(top, fRPhiEventScene);
447 if (fRhoZManager && top) {
448 fRhoZEventScene->DestroyElements();
449 if (fCenterProjectionsAtPrimaryVertex)
450 fRhoZManager->SetCenter(x[0], x[1], x[2]);
451 fRhoZManager->ImportElements(top, fRhoZEventScene);
456 GetEveManager()->Redraw3D(0,1); // (0, 1)
457 GetEveManager()->EnableRedraw();
461 void AliEveHLTEventManager::SaveEveryThing() {
465 GetEventBuffer()->WriteToFile(GetRunNumber());
466 //Save everything to file
467 //fEventBuffer->SaveBlockList();
468 //fEventBuffer->SaveAsyncBlockList();
475 void AliEveHLTEventManager::CreatePhosElement() {
476 fPhosElement = new AliHLTEvePhos();
477 fPhosElement->SetEventManager(this);
478 gEve->AddElement(fPhosElement);
481 void AliEveHLTEventManager::CreateMultCorrElement() {
482 fMultCorrElement = new AliHLTEveMultCorr("MultCorr");
483 fMultCorrElement->SetEventManager(this);
484 gEve->AddElement(fMultCorrElement);
487 void AliEveHLTEventManager::CreateEmcalElement() {
488 fEmcalElement = new AliHLTEveEmcal();
489 fEmcalElement->SetEventManager(this);
490 gEve->AddElement(fEmcalElement);
492 void AliEveHLTEventManager::CreateTPCElement() {
493 fTPCElement = new AliHLTEveTPC();
494 fTPCElement->SetEventManager(this);
495 gEve->AddElement(fTPCElement);
497 void AliEveHLTEventManager::CreateITSElement() {
498 fITSElement = new AliHLTEveITS();
499 fITSElement->SetEventManager(this);
500 gEve->AddElement(fITSElement);
502 void AliEveHLTEventManager::CreateISPDElement() {
503 fISPDElement = new AliHLTEveISPD();
504 fISPDElement->SetEventManager(this);
505 gEve->AddElement(fISPDElement);
507 void AliEveHLTEventManager::CreateISDDElement() {
508 fISDDElement = new AliHLTEveISDD();
509 fISDDElement->SetEventManager(this);
510 gEve->AddElement(fISSDElement);
512 void AliEveHLTEventManager::CreateISSDElement() {
513 fISSDElement = new AliHLTEveISSD();
514 fISSDElement->SetEventManager(this);
515 gEve->AddElement(fISSDElement);
517 void AliEveHLTEventManager::CreateTRDElement() {
518 fTRDElement = new AliHLTEveTRD();
519 fTRDElement->SetEventManager(this);
520 gEve->AddElement(fTRDElement);
522 void AliEveHLTEventManager::CreateHLTElement() {
523 fHLTElement = new AliHLTEveHLT();
524 fHLTElement->SetEventManager(this);
525 gEve->AddElement(fHLTElement);