ROOT logo
//-*- Mode: C++ -*-
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007              *
// Author: 2010 Svein Lindal <slindal@fys.uio.no>                        *
//         for The ALICE HLT Project.                                    *

#if __GNUC__>= 3
   using namespace std;
#endif

#include "AliEveEventBufferHomer.h"
#include "AliEveHOMERManager.h"

#include "TList.h"
#include "TFile.h"

#include <iostream>

ClassImp(AliEveEventBufferHomer);

///_______________________________________________________________________
AliEveEventBufferHomer::AliEveEventBufferHomer() :
  fHomer(NULL),
  fEventNo(0),
  fAsyncList(NULL)
{
  // see header file for class documentation
  fHomer = new AliEveHOMERManager();
  Initialize();

}


///____________________________________________________________________
AliEveEventBufferHomer::~AliEveEventBufferHomer() {
  
  if(fHomer)
    delete fHomer;
  fHomer = NULL;

}


///____________________________________________________________
ULong64_t AliEveEventBufferHomer::GetEventIdFromSource() {
  ///see header file for documentation
  return fHomer->GetEventID();
}

///______________________________________________________________________
TObject * AliEveEventBufferHomer::GetEventFromSource() {
  //see header file for documentation
  if(fHomer) {
    cout << "calling nexthomerevent"<<endl;
    TList * blockList = fHomer->NextHOMEREvent();
    cout  << "getting async block list"<<endl;
    TList * aList = fHomer->GetAsyncBlockList();
    fAsyncList = aList;
    if(blockList)  return dynamic_cast<TObject*>(blockList);
    else return NULL;
  } 

  cout << "AliEveEventBufferHomer::GetEventFromSource() : fHomer is null pointer!!"<<endl;
  return NULL;
}

///___________________________________________________________________________
void AliEveEventBufferHomer::AddToBuffer(TObject * event) {
  //Add object to buffer

  cout << "AliEveEventBufferHomer::Add to buffer"<<endl;
  if(!event) {
    cout << "event is NULL pointer, return" << endl;
    return;
  }


  TList * listIn = dynamic_cast<TList*>(event);
  if(!listIn || !(listIn->GetSize() > 0)) {
    cout  << "AliEveEventBufferHomer::AddToBuffer(): List Is empty, not added to buffer!"<<endl;
    return;
  }
  
  fBIndex[kTop] = CalculateNext(fBIndex[kTop]);
  TList * list = dynamic_cast<TList*>(fEventBuffer->At(fBIndex[kTop]));
  if(list) {
    list->Delete();
    list->AddAll(dynamic_cast<TList*>(event));
  }
}



///______________________________________________________________________
void AliEveEventBufferHomer::Initialize() {
  //Add TList pointers to the buffer array

  //Create TLists in all of buffer
  for(Int_t i = 0; i < fBufferSize; i++) {
    TList * list = new TList();
    list->SetOwner(kTRUE);
    fEventBuffer->AddAt(list, i);
  }

  //Create the async list
  fAsyncList = new TList();
  fAsyncList->SetOwner(kTRUE);

  Int_t iResult = fHomer->Initialize();
  if(iResult) {
    cout << "Error Initializing HOMER!!!"<<endl;
    return;
  }


  fHomer->SetRetryCount(1,15);
  fHomer->SetBlockOwner(kFALSE);
  //fHomer->StartEveSourceListLoop();
}


///______________________________________________________________________
void AliEveEventBufferHomer::ConnectToSource () {
  //Connect to Source
  fHomer->SetRetryCount(200, 15);
  fHomer->ReConnectHOMER();
}

///_____________________________________________________________________
void AliEveEventBufferHomer::WriteToFile(Int_t runnumber){

  TFile * file = TFile::Open(Form("Run_%d_0x%016llu_ESD.root", runnumber, GetEventId()), "RECREATE"); 
  fEventBuffer->At(fBIndex[kCurrent])->Write("blockList", TObject::kSingleKey);
  file->Close();
  
  if(fAsyncList) {
    TFile * afile = TFile::Open(Form("Run_%d_0x%016llu_Async.root",  runnumber, GetEventId()), "RECREATE"); 
    fAsyncList->Write("blockList", TObject::kSingleKey);
    //aFile-
    afile->Close();
  }
}	     
 AliEveEventBufferHomer.cxx:1
 AliEveEventBufferHomer.cxx:2
 AliEveEventBufferHomer.cxx:3
 AliEveEventBufferHomer.cxx:4
 AliEveEventBufferHomer.cxx:5
 AliEveEventBufferHomer.cxx:6
 AliEveEventBufferHomer.cxx:7
 AliEveEventBufferHomer.cxx:8
 AliEveEventBufferHomer.cxx:9
 AliEveEventBufferHomer.cxx:10
 AliEveEventBufferHomer.cxx:11
 AliEveEventBufferHomer.cxx:12
 AliEveEventBufferHomer.cxx:13
 AliEveEventBufferHomer.cxx:14
 AliEveEventBufferHomer.cxx:15
 AliEveEventBufferHomer.cxx:16
 AliEveEventBufferHomer.cxx:17
 AliEveEventBufferHomer.cxx:18
 AliEveEventBufferHomer.cxx:19
 AliEveEventBufferHomer.cxx:20
 AliEveEventBufferHomer.cxx:21
 AliEveEventBufferHomer.cxx:22
 AliEveEventBufferHomer.cxx:23
 AliEveEventBufferHomer.cxx:24
 AliEveEventBufferHomer.cxx:25
 AliEveEventBufferHomer.cxx:26
 AliEveEventBufferHomer.cxx:27
 AliEveEventBufferHomer.cxx:28
 AliEveEventBufferHomer.cxx:29
 AliEveEventBufferHomer.cxx:30
 AliEveEventBufferHomer.cxx:31
 AliEveEventBufferHomer.cxx:32
 AliEveEventBufferHomer.cxx:33
 AliEveEventBufferHomer.cxx:34
 AliEveEventBufferHomer.cxx:35
 AliEveEventBufferHomer.cxx:36
 AliEveEventBufferHomer.cxx:37
 AliEveEventBufferHomer.cxx:38
 AliEveEventBufferHomer.cxx:39
 AliEveEventBufferHomer.cxx:40
 AliEveEventBufferHomer.cxx:41
 AliEveEventBufferHomer.cxx:42
 AliEveEventBufferHomer.cxx:43
 AliEveEventBufferHomer.cxx:44
 AliEveEventBufferHomer.cxx:45
 AliEveEventBufferHomer.cxx:46
 AliEveEventBufferHomer.cxx:47
 AliEveEventBufferHomer.cxx:48
 AliEveEventBufferHomer.cxx:49
 AliEveEventBufferHomer.cxx:50
 AliEveEventBufferHomer.cxx:51
 AliEveEventBufferHomer.cxx:52
 AliEveEventBufferHomer.cxx:53
 AliEveEventBufferHomer.cxx:54
 AliEveEventBufferHomer.cxx:55
 AliEveEventBufferHomer.cxx:56
 AliEveEventBufferHomer.cxx:57
 AliEveEventBufferHomer.cxx:58
 AliEveEventBufferHomer.cxx:59
 AliEveEventBufferHomer.cxx:60
 AliEveEventBufferHomer.cxx:61
 AliEveEventBufferHomer.cxx:62
 AliEveEventBufferHomer.cxx:63
 AliEveEventBufferHomer.cxx:64
 AliEveEventBufferHomer.cxx:65
 AliEveEventBufferHomer.cxx:66
 AliEveEventBufferHomer.cxx:67
 AliEveEventBufferHomer.cxx:68
 AliEveEventBufferHomer.cxx:69
 AliEveEventBufferHomer.cxx:70
 AliEveEventBufferHomer.cxx:71
 AliEveEventBufferHomer.cxx:72
 AliEveEventBufferHomer.cxx:73
 AliEveEventBufferHomer.cxx:74
 AliEveEventBufferHomer.cxx:75
 AliEveEventBufferHomer.cxx:76
 AliEveEventBufferHomer.cxx:77
 AliEveEventBufferHomer.cxx:78
 AliEveEventBufferHomer.cxx:79
 AliEveEventBufferHomer.cxx:80
 AliEveEventBufferHomer.cxx:81
 AliEveEventBufferHomer.cxx:82
 AliEveEventBufferHomer.cxx:83
 AliEveEventBufferHomer.cxx:84
 AliEveEventBufferHomer.cxx:85
 AliEveEventBufferHomer.cxx:86
 AliEveEventBufferHomer.cxx:87
 AliEveEventBufferHomer.cxx:88
 AliEveEventBufferHomer.cxx:89
 AliEveEventBufferHomer.cxx:90
 AliEveEventBufferHomer.cxx:91
 AliEveEventBufferHomer.cxx:92
 AliEveEventBufferHomer.cxx:93
 AliEveEventBufferHomer.cxx:94
 AliEveEventBufferHomer.cxx:95
 AliEveEventBufferHomer.cxx:96
 AliEveEventBufferHomer.cxx:97
 AliEveEventBufferHomer.cxx:98
 AliEveEventBufferHomer.cxx:99
 AliEveEventBufferHomer.cxx:100
 AliEveEventBufferHomer.cxx:101
 AliEveEventBufferHomer.cxx:102
 AliEveEventBufferHomer.cxx:103
 AliEveEventBufferHomer.cxx:104
 AliEveEventBufferHomer.cxx:105
 AliEveEventBufferHomer.cxx:106
 AliEveEventBufferHomer.cxx:107
 AliEveEventBufferHomer.cxx:108
 AliEveEventBufferHomer.cxx:109
 AliEveEventBufferHomer.cxx:110
 AliEveEventBufferHomer.cxx:111
 AliEveEventBufferHomer.cxx:112
 AliEveEventBufferHomer.cxx:113
 AliEveEventBufferHomer.cxx:114
 AliEveEventBufferHomer.cxx:115
 AliEveEventBufferHomer.cxx:116
 AliEveEventBufferHomer.cxx:117
 AliEveEventBufferHomer.cxx:118
 AliEveEventBufferHomer.cxx:119
 AliEveEventBufferHomer.cxx:120
 AliEveEventBufferHomer.cxx:121
 AliEveEventBufferHomer.cxx:122
 AliEveEventBufferHomer.cxx:123
 AliEveEventBufferHomer.cxx:124
 AliEveEventBufferHomer.cxx:125
 AliEveEventBufferHomer.cxx:126
 AliEveEventBufferHomer.cxx:127
 AliEveEventBufferHomer.cxx:128
 AliEveEventBufferHomer.cxx:129
 AliEveEventBufferHomer.cxx:130
 AliEveEventBufferHomer.cxx:131
 AliEveEventBufferHomer.cxx:132
 AliEveEventBufferHomer.cxx:133
 AliEveEventBufferHomer.cxx:134
 AliEveEventBufferHomer.cxx:135
 AliEveEventBufferHomer.cxx:136
 AliEveEventBufferHomer.cxx:137
 AliEveEventBufferHomer.cxx:138
 AliEveEventBufferHomer.cxx:139
 AliEveEventBufferHomer.cxx:140
 AliEveEventBufferHomer.cxx:141
 AliEveEventBufferHomer.cxx:142