#ifndef ALITPCCALIBRAWBASE_H
#define ALITPCCALIBRAWBASE_H
#include <TNamed.h>
class AliAltroMapping;
class AliAltroRawStream;
class AliRawReader;
class AliTPCAltroMapping;
class AliTPCRawStreamV3;
class AliTPCROC;
class TTreeSRedirector;
class TCollection;
struct eventHeaderStruct;
class AliTPCCalibRawBase : public TNamed {
public:
AliTPCCalibRawBase();
AliTPCCalibRawBase(const AliTPCCalibRawBase &calib);
AliTPCCalibRawBase& operator = (const AliTPCCalibRawBase &source);
virtual ~AliTPCCalibRawBase();
Bool_t ProcessEvent(AliTPCRawStreamV3 * const rawStreamV3);
Bool_t ProcessEvent(AliRawReader * const rawReader);
Bool_t ProcessEvent(eventHeaderStruct * const event);
virtual Int_t Update(const Int_t , const Int_t , const Int_t ,
const Int_t , const Float_t ) { return 0; }
virtual void UpdateDDL() {return;}
virtual void ProcessBunch(const Int_t , const Int_t , const Int_t ,
const Int_t , const UInt_t , const UShort_t* ) {return; }
virtual void Analyse(){ return; }
virtual Long64_t Merge(TCollection * ) {return 0;}
void MergeBase(const AliTPCCalibRawBase *calib);
void SetRangeTime (Int_t firstTimeBin, Int_t lastTimeBin) { fFirstTimeBin=firstTimeBin; fLastTimeBin=lastTimeBin; }
void SetAltroMapping(AliTPCAltroMapping **mapp) { fMapping = mapp; }
void SetUseL1Phase(Bool_t useL1Phase=kTRUE) {fUseL1Phase=useL1Phase;}
void SetTimeStampEvent(UInt_t timestamp){ fTimeStamp = timestamp; }
void SetRunNumber(UInt_t eventnumber){ fRunNumber = eventnumber; }
Int_t GetFirstTimeBin() const { return fFirstTimeBin; }
Int_t GetLastTimeBin() const { return fLastTimeBin; }
Int_t GetNevents() const { return fNevents; }
Double_t GetL1Phase() const {return fAltroL1Phase;}
Double_t GetL1PhaseTB() const {return fAltroL1PhaseTB;}
Bool_t GetUseL1Phase()const {return fUseL1Phase;}
UInt_t GetRunNumber() const {return fRunNumber;}
UInt_t GetFirstTimeStamp() const {return fFirstTimeStamp;}
UInt_t GetLastTimeStamp() const {return fLastTimeStamp;}
UInt_t GetTimeStamp() const {return fTimeStamp;}
UInt_t GetEventType() const {return fEventType;}
AliTPCAltroMapping **GetAltroMapping() { return fMapping; }
const AliAltroRawStream *GetAltroRawStream() const {return fAltroRawStream;}
const AliTPCROC *GetTPCROC() const {return fROC;}
void IncrementNevents(){++fNevents;}
virtual void DumpToFile(const Char_t *filename, const Char_t *dir="", Bool_t append=kFALSE);
TTreeSRedirector *GetDebugStreamer();
void SetStreamLevel(Int_t streamLevel){fStreamLevel=streamLevel;}
void SetDebugLevel(Int_t level) {fDebugLevel = level;}
Int_t GetStreamLevel() const {return fStreamLevel;}
Int_t GetDebugLevel() const {return fDebugLevel;}
protected:
Int_t fFirstTimeBin;
Int_t fLastTimeBin;
Int_t fNevents;
Int_t fDebugLevel;
Int_t fStreamLevel;
UInt_t fRunNumber;
UInt_t fFirstTimeStamp;
UInt_t fLastTimeStamp;
UInt_t fTimeStamp;
UInt_t fEventType;
Double_t fAltroL1Phase;
Float_t fAltroL1PhaseTB;
Int_t fCurrRCUId;
Int_t fPrevRCUId;
Int_t fCurrDDLNum;
Int_t fPrevDDLNum;
Bool_t fUseL1Phase;
TTreeSRedirector *fDebugStreamer;
AliAltroRawStream *fAltroRawStream;
AliTPCAltroMapping **fMapping;
AliTPCROC *fROC;
virtual void EndEvent() {++fNevents; return; }
virtual void ResetEvent(){ return; }
ClassDef(AliTPCCalibRawBase,3)
};
#endif