#ifndef __TMrbDGFEventBuffer_h__
#define __TMrbDGFEventBuffer_h__
#include "TNamed.h"
#include "TSystem.h"
#include "TH1.h"
#include "TF1.h"
#include "TString.h"
#include "TArrayI.h"
#include "TObjArray.h"
class TMrbDGFEventBuffer : public TNamed, public TArrayI {
public:
enum EMrbDGFBufferHeader { kBufNofWords = 0,
kModNumber,
kFormat,
kRunStartTime
};
enum { kBufHeaderLength = 6 };
enum EMrbDGFEventHeader { kHitPattern = 0,
kEventTime
};
enum { kEventHeaderLength = 3 };
enum EMrbDGFChanHeader { kChanNofWords = 0,
kFastTrigger,
kEnergy,
kConstFractTriggerTime
};
enum { kChanHeaderLength = 9 };
enum { kTotalHeaderLength = kBufHeaderLength
+ kEventHeaderLength
+ kChanHeaderLength
};
public:
TMrbDGFEventBuffer( const Char_t * BufferName = "dgfEbuf",
TObject * Module = NULL,
Int_t Index = -1, Int_t Event0 = -1);
~TMrbDGFEventBuffer() {};
void Print(Option_t * Option) const { TObject::Print(Option); }
void Print(ostream & OutStrm, Int_t EventNumber = -1, const Char_t * ModuleInfo = NULL);
inline void Print(Int_t EventNumber = -1) { this->Print(cout, EventNumber); };
Bool_t WriteToFile(const Char_t * FileName, const Char_t * ModuleInfo);
void Reset();
inline Int_t GetNofWords() { return(fNofWords); };
inline Int_t GetNofEvents() { return(fNofEvents); };
inline Int_t GetGlobalIndex() { return(fGlobIndex); };
inline void SetGlobalIndex(Int_t Index) { fGlobIndex = Index; };
inline Int_t GetGlobalEventNo() { return(fGlobEventNo); };
inline void SetGlobalEventNo(Int_t EventNo) { fGlobEventNo = EventNo; };
Int_t GetNofChannels(Int_t EventNumber);
UInt_t GetHitPattern(Int_t EventNumber);
Int_t GetChannel(Int_t EventNumber, Int_t Channel, TArrayI & Data);
Int_t GetNofWords(Int_t EventNumber, Int_t Channel);
inline UInt_t * GetDAddr() { return((UInt_t *) &fArray); };
inline void SetTraceError(Stat_t Error) { fTraceError = Error; };
inline Stat_t GetTraceError() { return(fTraceError); };
inline void SetModule(TObject * Module) { fModule = Module; };
TH1F * FillHistogram(Int_t EventNumber, Int_t Channel, Bool_t DrawIt = kTRUE);
Double_t CalcTau(Int_t EventNumber, Int_t Channel, Int_t GlobalEventNo,
Double_t A0, Double_t A1, Double_t A2,
Int_t From = 0, Int_t To = 0,
Bool_t Verbose = kTRUE, Bool_t DrawIt = kTRUE);
Double_t GetTau(Int_t EventNumber, Int_t Channel);
inline TH1F * Histogram() { return(fHistogram); };
inline TF1 * Fit() { return(fTauFit); };
Bool_t SaveTraces(const Char_t * TraceFile = NULL,
Int_t EventNumber = -1, Int_t Channel = -1);
const Char_t * BufferTime2Ascii(TString & TimeString, UShort_t * TimeArray) const;
void MakeIndex();
protected:
TObject * fModule;
Int_t fNofWords;
Int_t fNofEvents;
Stat_t fTraceError;
TObjArray fEventIndex;
TH1F * fHistogram;
TF1 * fTauFit;
Int_t fGlobIndex;
Int_t fGlobEventNo;
ClassDef(TMrbDGFEventBuffer, 1)
};
#endif