1 #include "TEveManager.h"
3 #include "TEveProjectionManager.h"
4 #include "TEveBrowser.h"
6 #include "TEveViewer.h"
7 #include "TEveEventManager.h"
9 //#include "AliHLTTriggerDecision.h"
10 #include "AliHLTEvePhos.h"
11 #include "AliHLTEveEmcal.h"
12 #include "AliHLTEveTPC.h"
13 #include "AliHLTEveHLT.h"
14 #include "AliHLTEveITS.h"
15 #include "AliHLTEveISPD.h"
16 #include "AliHLTEveISSD.h"
17 #include "AliHLTEveISDD.h"
18 #include "AliHLTEveTRD.h"
19 #include "AliHLTEveMuon.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),
55 fEventLoopStarted(kFALSE),
56 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
129 ///_______________________________________________________________________________________
130 void AliEveHLTEventManager::ConnectEventBuffer() {
131 GetEventBuffer()->ConnectToSource();
135 ///___________________________________________________________________________________________
136 void AliEveHLTEventManager::StartBufferMonitor() {
137 AliEveEventBuffer * buffer = GetEventBuffer();
139 TThread * fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) buffer);
142 cout << "Buffer does not exist " << endl;
145 //______________________________________________________________________________________________
146 Int_t AliEveHLTEventManager::ProcessEvent(AliESDEvent * event) {
148 //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)
150 cout << "reset()"<<endl;
154 cout << "process()"<<endl;
156 fHLTElement = new AliHLTEveHLT();
157 fHLTElement->SetEventManager(this);
158 gEve->AddElement(fHLTElement);
160 fHLTElement->ProcessEsdEvent(event);
162 if(!fPhosElement) CreatePhosElement();
163 fPhosElement->ProcessEvent(event);
165 if(!fEmcalElement) CreateEmcalElement();
166 fEmcalElement->ProcessEvent(event);
168 cout << "update()"<<endl;
177 //______________________________________________________________________________________________
178 Int_t AliEveHLTEventManager::ProcessEvent(TList * blockList) {
180 //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)
183 cout << "Block list is NULL pointer, return " << endl;
187 cout << "reset ()"<<endl;
189 cout << "done reset()"<<endl;
190 AliHLTHOMERBlockDesc * block = NULL;
191 TIter next(blockList);
192 while ((block = (AliHLTHOMERBlockDesc*)next())) {
193 cout <<"Process Block"<<endl;
197 cout << "update() "<<endl;
204 void AliEveHLTEventManager::ProcessBlock(AliHLTHOMERBlockDesc * block) {
205 //See header file for documentation
208 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
209 printf( "Detector : %s\n", block->GetDetector().Data() );
210 printf( "Datatype : %s\n", block->GetDataType().Data() );
211 if (block->IsTObject() )
212 printf( "Is TObject of class: %s\n", block->GetClassName().Data() );
213 printf( "------------------- xxxxxxxxxxxxxxx ----------------------\n");
219 if ( ! block->GetDetector().CompareTo("PHOS") ) {
220 if(!fPhosElement) CreatePhosElement();
221 fPhosElement->ProcessBlock(block);
224 else if ( ! block->GetDetector().CompareTo("EMCA") ) {
225 if(!fEmcalElement) CreateEmcalElement();
226 fEmcalElement->ProcessBlock(block);
229 else if ( ! block->GetDetector().CompareTo("TPC") ) {
230 if(!fTPCElement) CreateTPCElement();
231 fTPCElement->ProcessBlock(block);
234 else if ( ! block->GetDetector().CompareTo("HLT") ) {
235 if(!fHLTElement) CreateHLTElement();
236 fHLTElement->ProcessBlock(block);
239 else if ( ! block->GetDetector().CompareTo("ITS") ) {
240 if(!fITSElement) CreateITSElement();
241 fITSElement->ProcessBlock(block);
244 else if ( ! block->GetDetector().CompareTo("ISDD") ) {
245 if(!fISDDElement) CreateISDDElement();
246 fISDDElement->ProcessBlock(block);
249 else if ( ! block->GetDetector().CompareTo("ISPD") ) {
250 if(!fISPDElement) CreateISPDElement();
251 fISPDElement->ProcessBlock(block);
254 else if ( ! block->GetDetector().CompareTo("ISSD") ) {
255 if(!fISSDElement) CreateISSDElement();
256 fISSDElement->ProcessBlock(block);
259 else if ( ! block->GetDetector().CompareTo("TRD") ) {
260 if(!fTRDElement) CreateTRDElement();
261 fTRDElement->ProcessBlock(block);
264 else if ( ! block->GetDetector().CompareTo("MUON") ) {
268 fAnyElement = new AliHLTEveAny();
269 fAnyElement->SetEventManager(this);
271 fAnyElement->ProcessBlock(block);
278 if ( ! block->GetDetector().CompareTo("MUON") ) {
280 fMuonElement = new AliHLTEveMuon();
281 fMuonElement->SetEventManager(this);
282 gEve->AddElement(fMuonElement);
284 fMuonElement->ProcessBlock(block);
290 void AliEveHLTEventManager::ResetDisplay () {
291 //See header file for documentation
294 fPhosElement->ResetElements();
297 fEmcalElement->ResetElements();
300 fTPCElement->ResetElements();
303 fHLTElement->ResetElements();
306 fITSElement->ResetElements();
309 fISPDElement->ResetElements();
312 fISDDElement->ResetElements();
315 fISSDElement->ResetElements();
318 fTRDElement->ResetElements();
321 fAnyElement->ResetElements();
324 fMuonElement->ResetElements();
329 void AliEveHLTEventManager::PrintScreens() {
330 // //See header file for documentation
332 // fEveManager->GetDefaultGLViewer()->SavePicture(Form("%d_0x%lu_3D.gif", fRunNumber, GetEventID(fCurrentEventIdx)));
333 // fRhoZViewer->GetGLViewer()->SavePicture(Form("%d_0x%lu_RhoZ.gif", fRunNumber, GetEventID(fCurrentEventIdx)));
334 // fRPhiViewer->GetGLViewer()->SavePicture(Form("%d_0x%lu_RPhi.gif", fRunNumber, GetEventID(fCurrentEventIdx)));
339 void AliEveHLTEventManager::StartLoop() {
340 //See header file for documentation
341 //fTimer->SetCommand("NextEvent()", "AliEveHLTEventManager", this);
342 SetEventLoopStarted(kTRUE);
343 fTimer->Start(10000);
346 void AliEveHLTEventManager::StopLoop() {
347 //See header file for documentation
349 SetEventLoopStarted(kFALSE);
353 // void AliEveHLTEventManager::NavigateBack() {
355 // if (fHomerManager->NavigateEventBufferBack()) {
359 // TList * blockList = fHomerManager->GetBlockList();
361 // ProcessEvent(blockList);
363 // cout << "BALLE Error blocklist NULL pointer even though it's navigateable"<<endl;
369 // void AliEveHLTEventManager::NavigateFwd() {
371 // if (fHomerManager->NavigateEventBufferFwd()) {
372 // cout << "No event available" << endl;
376 // cout << "Getting block list" << endl;
377 // TList * blockList = fHomerManager->GetBlockList();
379 // ProcessEvent(blockList);
381 // cout << "blockList is NULL pointer"<<endl;
387 void AliEveHLTEventManager::UpdateDisplay() {
388 //See header file for documentation
389 if(fPhosElement) fPhosElement->UpdateElements();
390 if(fEmcalElement) fEmcalElement->UpdateElements();
391 if(fTPCElement) fTPCElement->UpdateElements();
392 if(fHLTElement) fHLTElement->UpdateElements();
393 if(fITSElement) fITSElement->UpdateElements();
394 if(fISSDElement) fISSDElement->UpdateElements();
395 if(fISDDElement) fISDDElement->UpdateElements();
396 if(fISPDElement) fISPDElement->UpdateElements();
397 if(fTRDElement) fTRDElement->UpdateElements();
398 if(fAnyElement) fAnyElement->UpdateElements();
399 if(fMuonElement) fMuonElement->UpdateElements();
402 // -- Set EventID in Window Title
403 TString winTitle("Eve Main Window");
404 winTitle += Form("-- Run Number: %d", fRunNumber);
405 //winTitle += Form("-- Event ID : 0x%lu ", GetEventID(fCurrentEventIdx) );
406 GetEveManager()->GetBrowser()->SetWindowName(winTitle);
408 //==============================================================================
409 // -- Import global scene into projection scenes
410 //==============================================================================
412 Double_t x[3] = { 0, 0, 0 };
414 TEveElement* top = GetEveManager()->GetCurrentEvent();
416 if (fRPhiManager && top) {
417 fRPhiEventScene->DestroyElements();
418 if (fCenterProjectionsAtPrimaryVertex)
419 fRPhiManager->SetCenter(x[0], x[1], x[2]);
420 fRPhiManager->ImportElements(top, fRPhiEventScene);
423 if (fRhoZManager && top) {
424 fRhoZEventScene->DestroyElements();
425 if (fCenterProjectionsAtPrimaryVertex)
426 fRhoZManager->SetCenter(x[0], x[1], x[2]);
427 fRhoZManager->ImportElements(top, fRhoZEventScene);
432 GetEveManager()->Redraw3D(0,1); // (0, 1)
433 GetEveManager()->EnableRedraw();
437 void AliEveHLTEventManager::SaveEveryThing() {
439 GetEventBuffer()->WriteToFile();
440 //Save everything to file
441 //fEventBuffer->SaveBlockList();
442 //fEventBuffer->SaveAsyncBlockList();
449 void AliEveHLTEventManager::CreatePhosElement() {
450 fPhosElement = new AliHLTEvePhos();
451 fPhosElement->SetEventManager(this);
452 gEve->AddElement(fPhosElement);
455 void AliEveHLTEventManager::CreateEmcalElement() {
456 fEmcalElement = new AliHLTEveEmcal();
457 fEmcalElement->SetEventManager(this);
458 gEve->AddElement(fEmcalElement);
460 void AliEveHLTEventManager::CreateTPCElement() {
461 fTPCElement = new AliHLTEveTPC();
462 fTPCElement->SetEventManager(this);
463 gEve->AddElement(fTPCElement);
465 void AliEveHLTEventManager::CreateITSElement() {
466 fITSElement = new AliHLTEveITS();
467 fITSElement->SetEventManager(this);
468 gEve->AddElement(fITSElement);
470 void AliEveHLTEventManager::CreateISPDElement() {
471 fISPDElement = new AliHLTEveISPD();
472 fISPDElement->SetEventManager(this);
473 gEve->AddElement(fISPDElement);
475 void AliEveHLTEventManager::CreateISDDElement() {
476 fISDDElement = new AliHLTEveISDD();
477 fISDDElement->SetEventManager(this);
478 gEve->AddElement(fISSDElement);
480 void AliEveHLTEventManager::CreateISSDElement() {
481 fISSDElement = new AliHLTEveISSD();
482 fISSDElement->SetEventManager(this);
483 gEve->AddElement(fISSDElement);
485 void AliEveHLTEventManager::CreateTRDElement() {
486 fTRDElement = new AliHLTEveTRD();
487 fTRDElement->SetEventManager(this);
488 gEve->AddElement(fTRDElement);
490 void AliEveHLTEventManager::CreateHLTElement() {
491 fHLTElement = new AliHLTEveHLT();
492 fHLTElement->SetEventManager(this);
493 gEve->AddElement(fHLTElement);