3 /* This file is property of and copyright by the ALICE HLT Project *
4 * ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice
8 /** @file AliEveEventBuffer.h
11 @brief Event buffer for HOMER
15 #ifndef ALIEVEEVENTBUFFER_H
16 #define ALIEVEEVENTBUFFER_H
29 class AliEveEventBuffer : public TObject{
33 /** default constructor */
37 virtual ~AliEveEventBuffer();
39 void SetBufferSize(Int_t bs) { fBufferSize = bs;}
41 TObject * NextEvent();
45 void StartBufferMonitor();
46 void StopBufferMonitor();
47 //Needed for Homer buffer
48 virtual void ConnectToSource() = 0;
49 //Check if more events are needed in buffer
52 static void * BufferThread(void * buffer);
53 virtual void WriteToFile(Int_t runnumber) = 0;
55 void CreateBufferThread();
57 ULong64_t GetEventId() const { return fEventId[fBIndex[kCurrent]]; }
58 void SetEventId(ULong64_t eventId) { fEventId[fBIndex[kCurrent]] = eventId;}
60 Int_t LockMutex() { return fMutex->TryLock();}
61 Int_t UnLockMutex() { return fMutex->UnLock();}
74 Int_t fBufferSize;//Size of event buffer
75 Int_t fPreBuffer;//How many events should be prefetched
76 TObjArray * fEventBuffer; //TClonesArray containing the stored events
77 TObject * fCurrentEvent; //Pointer to current event
78 Int_t fBIndex[kSize]; //Event buffer indexes
83 virtual void AddToBuffer(TObject * event);
84 virtual TObject * GetEventFromSource() = 0;
85 virtual ULong64_t GetEventIdFromSource() { return 0;}
91 //Calculate buffer index stuff
92 Int_t CalculateDifference(Int_t top, Int_t low) const;
93 Int_t CalculatePrevious(Int_t current) const;
94 Int_t CalculateNext(Int_t current) const;
97 void SetBufferMonStarted(Bool_t started) {fBufferMonStarted = started;}
98 Bool_t GetBufferMonStarted () const { return fBufferMonStarted;}
102 /** copy constructor prohibited */
103 AliEveEventBuffer(const AliEveEventBuffer&);
105 /** assignment operator prohibited */
106 AliEveEventBuffer& operator=(const AliEveEventBuffer&);
110 TObject * GetNextUnSeen();
115 TTimer * fTimer;//Timer to loop over buffer monitor
118 ULong64_t * fEventId;//Event id
120 Bool_t fBufferMonStarted;//Has buffer monitor loop started?
122 TThread * fThread; //Thread pointer
123 TMutex * fMutex;//Mutex
125 ClassDef(AliEveEventBuffer, 0); // Manage connections to HLT data-sources.