ROOT logo
#include <iostream>

#include "TObjArray.h"
#include "TTimer.h"
#include "TThread.h"
#include "TMutex.h"
#include "AliEveEventBuffer.h"


//Not needed, only for debug
#include "AliESDEvent.h"

using namespace std;

ClassImp(AliEveEventBuffer)

///_______________________________________________________________________
AliEveEventBuffer::AliEveEventBuffer() :
  fBufferSize(10),
  fPreBuffer(4),
  fEventBuffer(NULL),
  fCurrentEvent(NULL),
  fBIndex(),
  fTimer(NULL),
  fEventId(),
  fBufferMonStarted(kFALSE),
  fThread(NULL),
  fMutex(NULL)
 {
  // see header file for class documentation
  fEventBuffer = new TObjArray(fBufferSize, 0);
  fEventBuffer->SetOwner(kFALSE);
  
  for(int id = 0; id < kSize; id++) {
    fBIndex[id] = -1;
  }
  
  fTimer = new TTimer();
  fTimer->Connect("Timeout()", "AliEveEventBuffer", this, "CreateBufferThread()");

  fEventId = new ULong64_t[fBufferSize];
  for(Int_t id = 0; id < fBufferSize; id++ ) {
    fEventId[id] = -2;
  }

  fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
  fMutex = new TMutex();
  

}



///_______________________________________________________________________
AliEveEventBuffer::~AliEveEventBuffer() {
  // see header file for class documentation
  
  if ( fEventBuffer ) {
    fEventBuffer->Clear();
    delete fEventBuffer;
  }
  fEventBuffer = NULL;

  if(fCurrentEvent)
    delete fCurrentEvent;
  fCurrentEvent = NULL;

}

///___________________________________________________________________________
void AliEveEventBuffer::CreateBufferThread() {
    // see header file for class documentation
  
  cout << "Threadexists: " << fThread->Exists() << endl;
  if( fMutex->TryLock() ) {
    cout << "Buffer is busy, no thread created"<< endl;
    return;
  } else {
    if ( (CalculateDifference(fBIndex[kTop],fBIndex[kLast]) < fPreBuffer) ) {
      cout << "StartBufferThread()"<<endl;
      fThread->Run();
      cout << "Started BufferThread"<<endl;
    } else { 
      cout << "Buffer is full already"<<endl;
      fMutex->UnLock();
    }
  }
}

///___________________________________________________________________________
void * AliEveEventBuffer::BufferThread(void * buffer) {
  // see header file for class documentation
  cout <<"BufferThread : " <<endl;
  if(buffer) {
      reinterpret_cast<AliEveEventBuffer*>(buffer)->MonitorBuffer();
  } else {
    cout << "no buffer"<<endl;
  }
  return (void*)0;
}

///_____________________________________________________________________________
void AliEveEventBuffer::MonitorBuffer() {
  // see header file for class documentation
  cout << "Monitorbuffer() ";
  FetchEvent();
  fMutex->UnLock();

  cout << "done " << endl;
}


///_______________________________________________________________________________
TObject * AliEveEventBuffer::NextEvent() {
  //See header file for documentation
  cout << "NextEvent()"<<endl;
  TObject * nextEvent = GetNextUnSeen();
  return nextEvent;
}

///______________________________________________________________________________
TObject * AliEveEventBuffer::Back() {
  // see header file for class documentation
  cout << "go back"<<endl;
  PrintIndeces();
  Int_t prevId = CalculatePrevious(fBIndex[kCurrent]);
  if(prevId == fBIndex[kTop]) {
    cout << "returning NULL" << endl;
    return NULL;
  } else {
    fBIndex[kCurrent] = prevId;
    PrintIndeces();
    cout <<"returning: "<< fBIndex[kCurrent] << " " << fEventBuffer->At(fBIndex[kCurrent]);
    return fEventBuffer->At(fBIndex[kCurrent]);
  }
}



///______________________________________________________________________________
TObject * AliEveEventBuffer::Fwd() {
  // see header file for class documentation
  PrintIndeces();
  if (fBIndex[kCurrent] == fBIndex[kLast]) {
    cout<<  "returning NULL"<<endl;
    return NULL;
  }
  
  fBIndex[kCurrent] = CalculateNext(fBIndex[kCurrent]);
  TObject * event = fEventBuffer->At(fBIndex[kCurrent]);
  return event;
}



///________________________________________________________________________________
TObject * AliEveEventBuffer::GetNextUnSeen() {
  //See header file for documentation
  cout << "GetNextUnSeen"<<endl;
  PrintIndeces();
  if(CalculateDifference(fBIndex[kTop], fBIndex[kLast])) {
    fBIndex[kLast] = CalculateNext(fBIndex[kLast]);
    fBIndex[kCurrent] = fBIndex[kLast];
    PrintIndeces();
    return fEventBuffer->At(fBIndex[kCurrent]);      
  } else {
    cout << "No new event available, only events in buffer available!"<<endl;
    return NULL;
  } 
}
///_________________________________________________________________________________
void AliEveEventBuffer::PrintIndeces() {
  // see header file for class documentation
  for(Int_t i = 0; i < kSize; i++) {
    cout << i << ": " << fBIndex[i] << endl;
  }
}
///_________________________________________________________________________________
void AliEveEventBuffer::PrintBuffer() {
  // see header file for class documentation
  for(Int_t i = 0; i < 10; i++) {
    AliESDEvent * event = dynamic_cast<AliESDEvent*>(fEventBuffer->At(i));
    if(event) {
      cout << i << ": " <<event << " " << event->GetEventNumberInFile() << endl;;
    }
  }
}

///____________________________________________________________________________________
void AliEveEventBuffer::FetchEvent() {
  // see header file for class documentation
  cout << "FetchEvent " << endl;
  TObject * event = GetEventFromSource();
  ULong64_t eventId = GetEventIdFromSource();
  if(event) {
    AddToBuffer(event);
    fEventId[fBIndex[kTop]] = eventId;  
  }
  
  PrintIndeces();
  cout << "FetchedEvent " << endl;
  
}

///_________________________________________________________________________________
void AliEveEventBuffer::AddToBuffer(TObject * event) {
  // see header file for class documentation
  cout << "Add to buffer"<<endl;
  if(!event) return;

  fBIndex[kTop] = CalculateNext(fBIndex[kTop]);
  //Delete the event already there (ok to delete as object, not aliesdevent, TList?)
  //TObject * object = fEventBuffer->At(fBIndex[kTop]);
  fEventBuffer->RemoveAt(fBIndex[kTop]);
  //if (object) delete object;
  fEventBuffer->AddAt(event, fBIndex[kTop]);

}

///_____________________________________________________________________________________
Int_t AliEveEventBuffer::CalculateNext(Int_t current) const {
  //See header file for documentation
  current++;
  if(current == fBufferSize) current = 0;
  return current;
}


///_____________________________________________________________________________________
Int_t AliEveEventBuffer::CalculatePrevious(Int_t current) const {
  //See header file for documentation
  cout << "CalculatePrev:  " << current; 
  current--;
  if(current == -1) current += fBufferSize;
  cout << "... " << current << endl;
  return current;
}

///__________________________________________________________________________________
Int_t AliEveEventBuffer::CalculateDifference(Int_t top, Int_t low) const {
  //See header file for documentation
  if (top > low) {
    //    cout << "top > low"<<endl;
    return (top - low);
  } else if (top < low) {
    // cout << "low < top"<<endl;
    return (fBufferSize - low + top);
  } else {
    //cout << "calculated to 0"<<endl;
    return 0;
  }
}

///___________________________________________________________________________________
void AliEveEventBuffer::StartBufferMonitor() {
  //cout << "NOT !!! starting buffer mon"<<endl;
  cout << "starting buffer mon"<<endl;
  if(!GetBufferMonStarted()) {
    CreateBufferThread();
    SetBufferMonStarted(kTRUE);
    fTimer->Start(15000);
  } else {
    cout << "Stopping buffer monitor"<<endl;
    fTimer->Stop();
    SetBufferMonStarted(kFALSE);
  }
}
///___________________________________________________________________________________
void AliEveEventBuffer::StopBufferMonitor() {
  // see header file for class documentation
  cout << "Stopping buffer mon"<<endl;
  SetBufferMonStarted(kFALSE);
  fTimer->Stop();
}


// //_________________________________________________________________________________
// Int_t AliEveEventBuffer::NavigateEventBufferBack() { 
//   // see header file for class documentation

//   // -- reached the end of the buffer
//   if ( fNavigateBufferIdx == fBufferLowIdx )
//     return -1;

//   Int_t newIdx = fNavigateBufferIdx - 1;
//   if ( newIdx == -1 )
//     newIdx = BUFFERSIZE-1;

//   fCurrentBufferIdx = fNavigateBufferIdx = newIdx;

//   return newIdx;
// }

// //_______________________________________________________________
// Int_t AliEveEventBuffer::NavigateEventBufferFwd() {
//   // see header file for class documentation

//   // -- reached the top of the buffer
//   if ( fNavigateBufferIdx == fBufferTopIdx )
//     return -1;

//   Int_t newIdx = fNavigateBufferIdx + 1;
//   if ( newIdx == BUFFERSIZE )
//     newIdx = 0;
  
//   fCurrentBufferIdx = fNavigateBufferIdx = newIdx;

//   return newIdx;
// }

// void AliEveEventBuffer::MonitorBuffer() {
//   //See header file for documentation
//   if( GetNAvailableEvents() < 10) {
//     StopBufferChecker();
//     StartLoop();
//   }
// }

// void AliEveEventBuffer::StartLoop() {
//   //See header file for documentation
//   fTimer->Start(2000);
// }
// void AliEveEventBuffer::StopLoop() {
//   //See header file for documentation
//   fTimer->Stop();
// }

// void AliEveEventBuffer::StartBufferChecker() {
//   //See header file for documentation
//   fBufferTimer->Start(2000);
// }
// void AliEveEventBuffer::StopBufferChecker() {
//   //See header file for documentation
//   fBufferTimer->Stop();
// }

// AliESDEvent * GetNextEvent() {
  
//   tree->GetEntry(fEvent++);

//   AliESDEvent * event = new AliESDEvent();
//   event->ReadFromTree(fTree);
//   if (event) {
//     return event;
//   } else {
//     cout << "error getting event" << endl;
//     return NULL;
//   }
// }
 AliEveEventBuffer.cxx:1
 AliEveEventBuffer.cxx:2
 AliEveEventBuffer.cxx:3
 AliEveEventBuffer.cxx:4
 AliEveEventBuffer.cxx:5
 AliEveEventBuffer.cxx:6
 AliEveEventBuffer.cxx:7
 AliEveEventBuffer.cxx:8
 AliEveEventBuffer.cxx:9
 AliEveEventBuffer.cxx:10
 AliEveEventBuffer.cxx:11
 AliEveEventBuffer.cxx:12
 AliEveEventBuffer.cxx:13
 AliEveEventBuffer.cxx:14
 AliEveEventBuffer.cxx:15
 AliEveEventBuffer.cxx:16
 AliEveEventBuffer.cxx:17
 AliEveEventBuffer.cxx:18
 AliEveEventBuffer.cxx:19
 AliEveEventBuffer.cxx:20
 AliEveEventBuffer.cxx:21
 AliEveEventBuffer.cxx:22
 AliEveEventBuffer.cxx:23
 AliEveEventBuffer.cxx:24
 AliEveEventBuffer.cxx:25
 AliEveEventBuffer.cxx:26
 AliEveEventBuffer.cxx:27
 AliEveEventBuffer.cxx:28
 AliEveEventBuffer.cxx:29
 AliEveEventBuffer.cxx:30
 AliEveEventBuffer.cxx:31
 AliEveEventBuffer.cxx:32
 AliEveEventBuffer.cxx:33
 AliEveEventBuffer.cxx:34
 AliEveEventBuffer.cxx:35
 AliEveEventBuffer.cxx:36
 AliEveEventBuffer.cxx:37
 AliEveEventBuffer.cxx:38
 AliEveEventBuffer.cxx:39
 AliEveEventBuffer.cxx:40
 AliEveEventBuffer.cxx:41
 AliEveEventBuffer.cxx:42
 AliEveEventBuffer.cxx:43
 AliEveEventBuffer.cxx:44
 AliEveEventBuffer.cxx:45
 AliEveEventBuffer.cxx:46
 AliEveEventBuffer.cxx:47
 AliEveEventBuffer.cxx:48
 AliEveEventBuffer.cxx:49
 AliEveEventBuffer.cxx:50
 AliEveEventBuffer.cxx:51
 AliEveEventBuffer.cxx:52
 AliEveEventBuffer.cxx:53
 AliEveEventBuffer.cxx:54
 AliEveEventBuffer.cxx:55
 AliEveEventBuffer.cxx:56
 AliEveEventBuffer.cxx:57
 AliEveEventBuffer.cxx:58
 AliEveEventBuffer.cxx:59
 AliEveEventBuffer.cxx:60
 AliEveEventBuffer.cxx:61
 AliEveEventBuffer.cxx:62
 AliEveEventBuffer.cxx:63
 AliEveEventBuffer.cxx:64
 AliEveEventBuffer.cxx:65
 AliEveEventBuffer.cxx:66
 AliEveEventBuffer.cxx:67
 AliEveEventBuffer.cxx:68
 AliEveEventBuffer.cxx:69
 AliEveEventBuffer.cxx:70
 AliEveEventBuffer.cxx:71
 AliEveEventBuffer.cxx:72
 AliEveEventBuffer.cxx:73
 AliEveEventBuffer.cxx:74
 AliEveEventBuffer.cxx:75
 AliEveEventBuffer.cxx:76
 AliEveEventBuffer.cxx:77
 AliEveEventBuffer.cxx:78
 AliEveEventBuffer.cxx:79
 AliEveEventBuffer.cxx:80
 AliEveEventBuffer.cxx:81
 AliEveEventBuffer.cxx:82
 AliEveEventBuffer.cxx:83
 AliEveEventBuffer.cxx:84
 AliEveEventBuffer.cxx:85
 AliEveEventBuffer.cxx:86
 AliEveEventBuffer.cxx:87
 AliEveEventBuffer.cxx:88
 AliEveEventBuffer.cxx:89
 AliEveEventBuffer.cxx:90
 AliEveEventBuffer.cxx:91
 AliEveEventBuffer.cxx:92
 AliEveEventBuffer.cxx:93
 AliEveEventBuffer.cxx:94
 AliEveEventBuffer.cxx:95
 AliEveEventBuffer.cxx:96
 AliEveEventBuffer.cxx:97
 AliEveEventBuffer.cxx:98
 AliEveEventBuffer.cxx:99
 AliEveEventBuffer.cxx:100
 AliEveEventBuffer.cxx:101
 AliEveEventBuffer.cxx:102
 AliEveEventBuffer.cxx:103
 AliEveEventBuffer.cxx:104
 AliEveEventBuffer.cxx:105
 AliEveEventBuffer.cxx:106
 AliEveEventBuffer.cxx:107
 AliEveEventBuffer.cxx:108
 AliEveEventBuffer.cxx:109
 AliEveEventBuffer.cxx:110
 AliEveEventBuffer.cxx:111
 AliEveEventBuffer.cxx:112
 AliEveEventBuffer.cxx:113
 AliEveEventBuffer.cxx:114
 AliEveEventBuffer.cxx:115
 AliEveEventBuffer.cxx:116
 AliEveEventBuffer.cxx:117
 AliEveEventBuffer.cxx:118
 AliEveEventBuffer.cxx:119
 AliEveEventBuffer.cxx:120
 AliEveEventBuffer.cxx:121
 AliEveEventBuffer.cxx:122
 AliEveEventBuffer.cxx:123
 AliEveEventBuffer.cxx:124
 AliEveEventBuffer.cxx:125
 AliEveEventBuffer.cxx:126
 AliEveEventBuffer.cxx:127
 AliEveEventBuffer.cxx:128
 AliEveEventBuffer.cxx:129
 AliEveEventBuffer.cxx:130
 AliEveEventBuffer.cxx:131
 AliEveEventBuffer.cxx:132
 AliEveEventBuffer.cxx:133
 AliEveEventBuffer.cxx:134
 AliEveEventBuffer.cxx:135
 AliEveEventBuffer.cxx:136
 AliEveEventBuffer.cxx:137
 AliEveEventBuffer.cxx:138
 AliEveEventBuffer.cxx:139
 AliEveEventBuffer.cxx:140
 AliEveEventBuffer.cxx:141
 AliEveEventBuffer.cxx:142
 AliEveEventBuffer.cxx:143
 AliEveEventBuffer.cxx:144
 AliEveEventBuffer.cxx:145
 AliEveEventBuffer.cxx:146
 AliEveEventBuffer.cxx:147
 AliEveEventBuffer.cxx:148
 AliEveEventBuffer.cxx:149
 AliEveEventBuffer.cxx:150
 AliEveEventBuffer.cxx:151
 AliEveEventBuffer.cxx:152
 AliEveEventBuffer.cxx:153
 AliEveEventBuffer.cxx:154
 AliEveEventBuffer.cxx:155
 AliEveEventBuffer.cxx:156
 AliEveEventBuffer.cxx:157
 AliEveEventBuffer.cxx:158
 AliEveEventBuffer.cxx:159
 AliEveEventBuffer.cxx:160
 AliEveEventBuffer.cxx:161
 AliEveEventBuffer.cxx:162
 AliEveEventBuffer.cxx:163
 AliEveEventBuffer.cxx:164
 AliEveEventBuffer.cxx:165
 AliEveEventBuffer.cxx:166
 AliEveEventBuffer.cxx:167
 AliEveEventBuffer.cxx:168
 AliEveEventBuffer.cxx:169
 AliEveEventBuffer.cxx:170
 AliEveEventBuffer.cxx:171
 AliEveEventBuffer.cxx:172
 AliEveEventBuffer.cxx:173
 AliEveEventBuffer.cxx:174
 AliEveEventBuffer.cxx:175
 AliEveEventBuffer.cxx:176
 AliEveEventBuffer.cxx:177
 AliEveEventBuffer.cxx:178
 AliEveEventBuffer.cxx:179
 AliEveEventBuffer.cxx:180
 AliEveEventBuffer.cxx:181
 AliEveEventBuffer.cxx:182
 AliEveEventBuffer.cxx:183
 AliEveEventBuffer.cxx:184
 AliEveEventBuffer.cxx:185
 AliEveEventBuffer.cxx:186
 AliEveEventBuffer.cxx:187
 AliEveEventBuffer.cxx:188
 AliEveEventBuffer.cxx:189
 AliEveEventBuffer.cxx:190
 AliEveEventBuffer.cxx:191
 AliEveEventBuffer.cxx:192
 AliEveEventBuffer.cxx:193
 AliEveEventBuffer.cxx:194
 AliEveEventBuffer.cxx:195
 AliEveEventBuffer.cxx:196
 AliEveEventBuffer.cxx:197
 AliEveEventBuffer.cxx:198
 AliEveEventBuffer.cxx:199
 AliEveEventBuffer.cxx:200
 AliEveEventBuffer.cxx:201
 AliEveEventBuffer.cxx:202
 AliEveEventBuffer.cxx:203
 AliEveEventBuffer.cxx:204
 AliEveEventBuffer.cxx:205
 AliEveEventBuffer.cxx:206
 AliEveEventBuffer.cxx:207
 AliEveEventBuffer.cxx:208
 AliEveEventBuffer.cxx:209
 AliEveEventBuffer.cxx:210
 AliEveEventBuffer.cxx:211
 AliEveEventBuffer.cxx:212
 AliEveEventBuffer.cxx:213
 AliEveEventBuffer.cxx:214
 AliEveEventBuffer.cxx:215
 AliEveEventBuffer.cxx:216
 AliEveEventBuffer.cxx:217
 AliEveEventBuffer.cxx:218
 AliEveEventBuffer.cxx:219
 AliEveEventBuffer.cxx:220
 AliEveEventBuffer.cxx:221
 AliEveEventBuffer.cxx:222
 AliEveEventBuffer.cxx:223
 AliEveEventBuffer.cxx:224
 AliEveEventBuffer.cxx:225
 AliEveEventBuffer.cxx:226
 AliEveEventBuffer.cxx:227
 AliEveEventBuffer.cxx:228
 AliEveEventBuffer.cxx:229
 AliEveEventBuffer.cxx:230
 AliEveEventBuffer.cxx:231
 AliEveEventBuffer.cxx:232
 AliEveEventBuffer.cxx:233
 AliEveEventBuffer.cxx:234
 AliEveEventBuffer.cxx:235
 AliEveEventBuffer.cxx:236
 AliEveEventBuffer.cxx:237
 AliEveEventBuffer.cxx:238
 AliEveEventBuffer.cxx:239
 AliEveEventBuffer.cxx:240
 AliEveEventBuffer.cxx:241
 AliEveEventBuffer.cxx:242
 AliEveEventBuffer.cxx:243
 AliEveEventBuffer.cxx:244
 AliEveEventBuffer.cxx:245
 AliEveEventBuffer.cxx:246
 AliEveEventBuffer.cxx:247
 AliEveEventBuffer.cxx:248
 AliEveEventBuffer.cxx:249
 AliEveEventBuffer.cxx:250
 AliEveEventBuffer.cxx:251
 AliEveEventBuffer.cxx:252
 AliEveEventBuffer.cxx:253
 AliEveEventBuffer.cxx:254
 AliEveEventBuffer.cxx:255
 AliEveEventBuffer.cxx:256
 AliEveEventBuffer.cxx:257
 AliEveEventBuffer.cxx:258
 AliEveEventBuffer.cxx:259
 AliEveEventBuffer.cxx:260
 AliEveEventBuffer.cxx:261
 AliEveEventBuffer.cxx:262
 AliEveEventBuffer.cxx:263
 AliEveEventBuffer.cxx:264
 AliEveEventBuffer.cxx:265
 AliEveEventBuffer.cxx:266
 AliEveEventBuffer.cxx:267
 AliEveEventBuffer.cxx:268
 AliEveEventBuffer.cxx:269
 AliEveEventBuffer.cxx:270
 AliEveEventBuffer.cxx:271
 AliEveEventBuffer.cxx:272
 AliEveEventBuffer.cxx:273
 AliEveEventBuffer.cxx:274
 AliEveEventBuffer.cxx:275
 AliEveEventBuffer.cxx:276
 AliEveEventBuffer.cxx:277
 AliEveEventBuffer.cxx:278
 AliEveEventBuffer.cxx:279
 AliEveEventBuffer.cxx:280
 AliEveEventBuffer.cxx:281
 AliEveEventBuffer.cxx:282
 AliEveEventBuffer.cxx:283
 AliEveEventBuffer.cxx:284
 AliEveEventBuffer.cxx:285
 AliEveEventBuffer.cxx:286
 AliEveEventBuffer.cxx:287
 AliEveEventBuffer.cxx:288
 AliEveEventBuffer.cxx:289
 AliEveEventBuffer.cxx:290
 AliEveEventBuffer.cxx:291
 AliEveEventBuffer.cxx:292
 AliEveEventBuffer.cxx:293
 AliEveEventBuffer.cxx:294
 AliEveEventBuffer.cxx:295
 AliEveEventBuffer.cxx:296
 AliEveEventBuffer.cxx:297
 AliEveEventBuffer.cxx:298
 AliEveEventBuffer.cxx:299
 AliEveEventBuffer.cxx:300
 AliEveEventBuffer.cxx:301
 AliEveEventBuffer.cxx:302
 AliEveEventBuffer.cxx:303
 AliEveEventBuffer.cxx:304
 AliEveEventBuffer.cxx:305
 AliEveEventBuffer.cxx:306
 AliEveEventBuffer.cxx:307
 AliEveEventBuffer.cxx:308
 AliEveEventBuffer.cxx:309
 AliEveEventBuffer.cxx:310
 AliEveEventBuffer.cxx:311
 AliEveEventBuffer.cxx:312
 AliEveEventBuffer.cxx:313
 AliEveEventBuffer.cxx:314
 AliEveEventBuffer.cxx:315
 AliEveEventBuffer.cxx:316
 AliEveEventBuffer.cxx:317
 AliEveEventBuffer.cxx:318
 AliEveEventBuffer.cxx:319
 AliEveEventBuffer.cxx:320
 AliEveEventBuffer.cxx:321
 AliEveEventBuffer.cxx:322
 AliEveEventBuffer.cxx:323
 AliEveEventBuffer.cxx:324
 AliEveEventBuffer.cxx:325
 AliEveEventBuffer.cxx:326
 AliEveEventBuffer.cxx:327
 AliEveEventBuffer.cxx:328
 AliEveEventBuffer.cxx:329
 AliEveEventBuffer.cxx:330
 AliEveEventBuffer.cxx:331
 AliEveEventBuffer.cxx:332
 AliEveEventBuffer.cxx:333
 AliEveEventBuffer.cxx:334
 AliEveEventBuffer.cxx:335
 AliEveEventBuffer.cxx:336
 AliEveEventBuffer.cxx:337
 AliEveEventBuffer.cxx:338
 AliEveEventBuffer.cxx:339
 AliEveEventBuffer.cxx:340
 AliEveEventBuffer.cxx:341
 AliEveEventBuffer.cxx:342
 AliEveEventBuffer.cxx:343
 AliEveEventBuffer.cxx:344
 AliEveEventBuffer.cxx:345
 AliEveEventBuffer.cxx:346
 AliEveEventBuffer.cxx:347
 AliEveEventBuffer.cxx:348
 AliEveEventBuffer.cxx:349