ROOT logo
// Author: 2010 Svein Lindal <slindal@fys.uio.no>                        *
//         for The ALICE HLT Project.                                    *

#include "AliHLTEveHLT.h"
#include "AliHLTEvePhos.h"
#include "AliHLTEveEmcal.h"


#include "AliESDEvent.h"
#include "AliEveHLTEventManager.h"
#include "AliEveEventBufferOffline.h"
#include "AliEveHLTEventManagerHomer.h"
#include "TList.h"
#include "AliEveHOMERManager.h"
#include "TEveManager.h"
#include "TTimer.h"
#include "TGLOverlayButton.h"
#include "TGLViewer.h"

ClassImp(AliEveHLTEventManagerHomer)

AliEveHLTEventManagerHomer::AliEveHLTEventManagerHomer() : 
  AliEveHLTEventManager(),
  fEventBuffer(NULL), 
  fNextEventTimer(NULL),
  fInfoButton(NULL)
{
  // see header file for class documentation

  fEventBuffer = new AliEveEventBufferHomer();
  fEventBuffer->StartBufferMonitor();
    
  fNextEventTimer = new TTimer();
  fNextEventTimer->Connect("Timeout()", "AliEveHLTEventManagerHomer", this, "TryNextEvent()" );
   
  fInfoButton = new TGLOverlayButton(dynamic_cast<TGLViewerBase*>(gEve->GetDefaultGLViewer()),  "", 0, 540, 210, 25);
    fInfoButton->SetAlphaValues(0.0, 0.8);
  
  

}

 
AliEveHLTEventManagerHomer::~AliEveHLTEventManagerHomer() {

  //DestroyElements();
  //DestroyDetectorElements();  
  if(fEventBuffer)
    delete fEventBuffer;
  fEventBuffer = NULL;

}

///________________________________________________________________________________
void AliEveHLTEventManagerHomer::ProcessList(TList * blockList) {

  ProcessEvent(blockList);
  UpdateDisplay();

}
void AliEveHLTEventManagerHomer::NextEvent() {
  fNextEventTimer->Start(1000);
}

///________________________________________________________________________________
void AliEveHLTEventManagerHomer::TryNextEvent() {
  //See header file for documentation
    
  if ( fEventBuffer->LockMutex() ) {
    fInfoButton->SetAlphaValues(0.8, 0.8);
    fInfoButton->SetText("Waiting for buffer...");
    gEve->Redraw3D(kFALSE);
    cout << "try again in 1 sec"<<endl;
    return;
  }
  fInfoButton->SetAlphaValues(0.8, 0.8);

  fNextEventTimer->Stop();
    
  cout << "Mutex is freeee!!"<<endl;
  TList * aSyncEvent = fEventBuffer->GetASyncEvent();
  TList * event = static_cast<TList*>(fEventBuffer->NextEvent());
  if(event) {
    cout << "Got the event, reset the display " <<endl;
    fInfoButton->SetText("Reset display..");
    ResetDisplay();
    cout << "Process event"<<endl;
    fInfoButton->SetText("Processing event..");
    ProcessEvent(event);
    if(aSyncEvent) {
      cout  << "Process asynchroneous event" << endl;
      ProcessEvent(aSyncEvent);
    }  else {
      cout << "Could not get async event"<<endl;
    }
    
    cout << "Upate the display"<<endl;
    fInfoButton->SetText("Updating display...");
    UpdateDisplay();
  
  } else {
    cout << "couldn't get the sync event"<<endl;
    fInfoButton->SetAlphaValues(0.8, 0.8);
    fInfoButton->SetText("Waiting for buffer...");
    fEventBuffer->UnLockMutex();
    fEventBuffer->CreateBufferThread();
    fNextEventTimer->Start(3000);
    return;
  }
  
  fInfoButton->SetAlphaValues(0.0, 0.0);
  fInfoButton->SetText("Done..");
  fEventBuffer->UnLockMutex();

}


///____________________________________________________________________________________
void AliEveHLTEventManagerHomer::NavigateFwd() {
  //See header file for documentation
  TList * fEvent = dynamic_cast<TList*>(fEventBuffer->Fwd());
  if(fEvent) {
    ResetDisplay();
    ProcessEvent(fEvent);
    UpdateDisplay();
  } else {
    cout << "couldn't get the fwd event"<<endl;
  }
}


///______________________________________________________________________________________
void AliEveHLTEventManagerHomer::NavigateBack() {
  //See header file for documentation
  TList * fEvent = dynamic_cast<TList*>(fEventBuffer->Back());
  if(fEvent) {
    ResetDisplay();
    ProcessEvent(fEvent);
    UpdateDisplay();
  } else {
    cout << "couldn't get the back event"<<endl;
  }
}

 AliEveHLTEventManagerHomer.cxx:1
 AliEveHLTEventManagerHomer.cxx:2
 AliEveHLTEventManagerHomer.cxx:3
 AliEveHLTEventManagerHomer.cxx:4
 AliEveHLTEventManagerHomer.cxx:5
 AliEveHLTEventManagerHomer.cxx:6
 AliEveHLTEventManagerHomer.cxx:7
 AliEveHLTEventManagerHomer.cxx:8
 AliEveHLTEventManagerHomer.cxx:9
 AliEveHLTEventManagerHomer.cxx:10
 AliEveHLTEventManagerHomer.cxx:11
 AliEveHLTEventManagerHomer.cxx:12
 AliEveHLTEventManagerHomer.cxx:13
 AliEveHLTEventManagerHomer.cxx:14
 AliEveHLTEventManagerHomer.cxx:15
 AliEveHLTEventManagerHomer.cxx:16
 AliEveHLTEventManagerHomer.cxx:17
 AliEveHLTEventManagerHomer.cxx:18
 AliEveHLTEventManagerHomer.cxx:19
 AliEveHLTEventManagerHomer.cxx:20
 AliEveHLTEventManagerHomer.cxx:21
 AliEveHLTEventManagerHomer.cxx:22
 AliEveHLTEventManagerHomer.cxx:23
 AliEveHLTEventManagerHomer.cxx:24
 AliEveHLTEventManagerHomer.cxx:25
 AliEveHLTEventManagerHomer.cxx:26
 AliEveHLTEventManagerHomer.cxx:27
 AliEveHLTEventManagerHomer.cxx:28
 AliEveHLTEventManagerHomer.cxx:29
 AliEveHLTEventManagerHomer.cxx:30
 AliEveHLTEventManagerHomer.cxx:31
 AliEveHLTEventManagerHomer.cxx:32
 AliEveHLTEventManagerHomer.cxx:33
 AliEveHLTEventManagerHomer.cxx:34
 AliEveHLTEventManagerHomer.cxx:35
 AliEveHLTEventManagerHomer.cxx:36
 AliEveHLTEventManagerHomer.cxx:37
 AliEveHLTEventManagerHomer.cxx:38
 AliEveHLTEventManagerHomer.cxx:39
 AliEveHLTEventManagerHomer.cxx:40
 AliEveHLTEventManagerHomer.cxx:41
 AliEveHLTEventManagerHomer.cxx:42
 AliEveHLTEventManagerHomer.cxx:43
 AliEveHLTEventManagerHomer.cxx:44
 AliEveHLTEventManagerHomer.cxx:45
 AliEveHLTEventManagerHomer.cxx:46
 AliEveHLTEventManagerHomer.cxx:47
 AliEveHLTEventManagerHomer.cxx:48
 AliEveHLTEventManagerHomer.cxx:49
 AliEveHLTEventManagerHomer.cxx:50
 AliEveHLTEventManagerHomer.cxx:51
 AliEveHLTEventManagerHomer.cxx:52
 AliEveHLTEventManagerHomer.cxx:53
 AliEveHLTEventManagerHomer.cxx:54
 AliEveHLTEventManagerHomer.cxx:55
 AliEveHLTEventManagerHomer.cxx:56
 AliEveHLTEventManagerHomer.cxx:57
 AliEveHLTEventManagerHomer.cxx:58
 AliEveHLTEventManagerHomer.cxx:59
 AliEveHLTEventManagerHomer.cxx:60
 AliEveHLTEventManagerHomer.cxx:61
 AliEveHLTEventManagerHomer.cxx:62
 AliEveHLTEventManagerHomer.cxx:63
 AliEveHLTEventManagerHomer.cxx:64
 AliEveHLTEventManagerHomer.cxx:65
 AliEveHLTEventManagerHomer.cxx:66
 AliEveHLTEventManagerHomer.cxx:67
 AliEveHLTEventManagerHomer.cxx:68
 AliEveHLTEventManagerHomer.cxx:69
 AliEveHLTEventManagerHomer.cxx:70
 AliEveHLTEventManagerHomer.cxx:71
 AliEveHLTEventManagerHomer.cxx:72
 AliEveHLTEventManagerHomer.cxx:73
 AliEveHLTEventManagerHomer.cxx:74
 AliEveHLTEventManagerHomer.cxx:75
 AliEveHLTEventManagerHomer.cxx:76
 AliEveHLTEventManagerHomer.cxx:77
 AliEveHLTEventManagerHomer.cxx:78
 AliEveHLTEventManagerHomer.cxx:79
 AliEveHLTEventManagerHomer.cxx:80
 AliEveHLTEventManagerHomer.cxx:81
 AliEveHLTEventManagerHomer.cxx:82
 AliEveHLTEventManagerHomer.cxx:83
 AliEveHLTEventManagerHomer.cxx:84
 AliEveHLTEventManagerHomer.cxx:85
 AliEveHLTEventManagerHomer.cxx:86
 AliEveHLTEventManagerHomer.cxx:87
 AliEveHLTEventManagerHomer.cxx:88
 AliEveHLTEventManagerHomer.cxx:89
 AliEveHLTEventManagerHomer.cxx:90
 AliEveHLTEventManagerHomer.cxx:91
 AliEveHLTEventManagerHomer.cxx:92
 AliEveHLTEventManagerHomer.cxx:93
 AliEveHLTEventManagerHomer.cxx:94
 AliEveHLTEventManagerHomer.cxx:95
 AliEveHLTEventManagerHomer.cxx:96
 AliEveHLTEventManagerHomer.cxx:97
 AliEveHLTEventManagerHomer.cxx:98
 AliEveHLTEventManagerHomer.cxx:99
 AliEveHLTEventManagerHomer.cxx:100
 AliEveHLTEventManagerHomer.cxx:101
 AliEveHLTEventManagerHomer.cxx:102
 AliEveHLTEventManagerHomer.cxx:103
 AliEveHLTEventManagerHomer.cxx:104
 AliEveHLTEventManagerHomer.cxx:105
 AliEveHLTEventManagerHomer.cxx:106
 AliEveHLTEventManagerHomer.cxx:107
 AliEveHLTEventManagerHomer.cxx:108
 AliEveHLTEventManagerHomer.cxx:109
 AliEveHLTEventManagerHomer.cxx:110
 AliEveHLTEventManagerHomer.cxx:111
 AliEveHLTEventManagerHomer.cxx:112
 AliEveHLTEventManagerHomer.cxx:113
 AliEveHLTEventManagerHomer.cxx:114
 AliEveHLTEventManagerHomer.cxx:115
 AliEveHLTEventManagerHomer.cxx:116
 AliEveHLTEventManagerHomer.cxx:117
 AliEveHLTEventManagerHomer.cxx:118
 AliEveHLTEventManagerHomer.cxx:119
 AliEveHLTEventManagerHomer.cxx:120
 AliEveHLTEventManagerHomer.cxx:121
 AliEveHLTEventManagerHomer.cxx:122
 AliEveHLTEventManagerHomer.cxx:123
 AliEveHLTEventManagerHomer.cxx:124
 AliEveHLTEventManagerHomer.cxx:125
 AliEveHLTEventManagerHomer.cxx:126
 AliEveHLTEventManagerHomer.cxx:127
 AliEveHLTEventManagerHomer.cxx:128
 AliEveHLTEventManagerHomer.cxx:129
 AliEveHLTEventManagerHomer.cxx:130
 AliEveHLTEventManagerHomer.cxx:131
 AliEveHLTEventManagerHomer.cxx:132
 AliEveHLTEventManagerHomer.cxx:133
 AliEveHLTEventManagerHomer.cxx:134
 AliEveHLTEventManagerHomer.cxx:135
 AliEveHLTEventManagerHomer.cxx:136
 AliEveHLTEventManagerHomer.cxx:137
 AliEveHLTEventManagerHomer.cxx:138
 AliEveHLTEventManagerHomer.cxx:139
 AliEveHLTEventManagerHomer.cxx:140
 AliEveHLTEventManagerHomer.cxx:141
 AliEveHLTEventManagerHomer.cxx:142
 AliEveHLTEventManagerHomer.cxx:143
 AliEveHLTEventManagerHomer.cxx:144