#ifndef __TUsrEventBuilder_h__
#define __TUsrEventBuilder_h__
#include "TObject.h"
#include "TObjArray.h"
#include "TIterator.h"
#include "TEnv.h"
#include "TUsrHit.h"
#include "TUsrHBX.h"
#include "TUsrEvent.h"
enum EMrbSpecialHitIndices { kHitHbxIndex = 2,
kHitIndexWithinBuffer = 3
};
class TUsrEventBuilder : public TObject {
public:
TUsrEventBuilder() {};
TUsrEventBuilder(TUsrEvent * Event, Int_t NofHbx, Int_t FirstHbx = 1, Int_t MaxTimeDiff = 0, Int_t ResetValue = 0, Int_t DataIndex = TUsrHit::kHitEnergy) {
this->SetEvent(Event);
this->SetNofHbx(NofHbx, FirstHbx);
if (MaxTimeDiff == 0) MaxTimeDiff = gEnv->GetValue("TMrbAnalyze.MaxTimeDiff", 10);
this->SetMaxTimeDiff(MaxTimeDiff);
this->SetResetValue(ResetValue);
this->SetDataIndex(DataIndex);
fEventHeads.Clear();
fTimeStampLow = 0;
fTimeStampHigh = 0;
fDataArray = NULL;
fNofChannels = 32;
}
~TUsrEventBuilder() {};
void CollectEventHeads();
inline void SetEvent(TUsrEvent * Event) { fEvent = Event; };
inline void SetNofHbx(Int_t NofHbx, Int_t FirstHbx = 1) { fNofHbx = NofHbx; fFirstHbx = FirstHbx; };
inline void SetMaxTimeDiff(Int_t MaxTimeDiff) { fMaxTimeDiff = MaxTimeDiff; };
inline void SetResetValue(Int_t ResetValue) { fResetValue = ResetValue; };
inline void SetDataIndex(Int_t DataIndex) { fDataIndex = DataIndex; };
inline ULong64_t GetTimeStampLow() { return fTimeStampLow; };
inline ULong64_t GetTimeStampHigh() { return fTimeStampHigh; };
inline void UseArray(TArrayI * DataArray, Int_t NofChannels = 32) { fDataArray = DataArray; fNofChannels = NofChannels; };
inline TObjArray * GetHitList() { return &fHitList; };
Bool_t NextEvent();
protected:
void FillVector(TUsrHit * FirstHit);
protected:
TUsrEvent * fEvent;
Int_t fNofHbx;
Int_t fFirstHbx;
Int_t fMaxTimeDiff;
Int_t fResetValue;
Int_t fDataIndex;
ULong64_t fTimeStampLow;
ULong64_t fTimeStampHigh;
TObjArray fEventHeads;
TIterator * fEventIter;
TObjArray fHitList;
TArrayI * fDataArray;
Int_t fNofChannels;
ClassDef(TUsrEventBuilder, 1)
};
#endif