#ifndef ALITOFRUNPARAMS_H
#define ALITOFRUNPARAMS_H
#include "TObject.h"
class TGraph;
class AliTOFRunParams :
public TObject
{
public:
AliTOFRunParams();
AliTOFRunParams(Int_t nPoints, Int_t nRuns = 1);
virtual ~AliTOFRunParams();
AliTOFRunParams(const AliTOFRunParams &source);
AliTOFRunParams &operator=(const AliTOFRunParams &source);
Int_t GetNPoints() const {return fNPoints;};
UInt_t GetTimestamp(Int_t i) const {return fTimestamp && i < fNPoints ? fTimestamp[i] : 0;};
Float_t GetT0(Int_t i) const {return fT0 && i < fNPoints ? fT0[i] : 0.;};
Float_t GetTOFResolution(Int_t i) const {return fTOFResolution && i < fNPoints ? fTOFResolution[i] : 0.;};
Float_t GetT0Spread(Int_t i) const {return fT0Spread && i < fNPoints ? fT0Spread[i] : 0.;};
Int_t GetNRuns() const {return fNRuns;};
UInt_t GetRunNb(Int_t i) const {return fRunNb && i < fNRuns ? fRunNb[i] : 0;};
UInt_t GetRunFirstPoint(Int_t i) const {return fRunFirstPoint && i < fNRuns ? fRunFirstPoint[i] : 0;};
UInt_t GetRunLastPoint(Int_t i) const {return fRunLastPoint && i < fNRuns ? fRunLastPoint[i] : 0;};
void SetTimestamp(UInt_t *value) {if (fTimestamp) for (Int_t i = 0; i < fNPoints; i++) fTimestamp[i] = value[i];};
void SetT0(Float_t *value) {if (fT0) for (Int_t i = 0; i < fNPoints; i++) fT0[i] = value[i];};
void SetTOFResolution(Float_t *value) {if (fTOFResolution) for (Int_t i = 0; i < fNPoints; i++) fTOFResolution[i] = value[i];};
void SetT0Spread(Float_t *value) {if (fT0Spread) for (Int_t i = 0; i < fNPoints; i++) fT0Spread[i] = value[i];};
void SetRunNb(UInt_t *value) {if (fRunNb) for (Int_t i = 0; i < fNRuns; i++) fRunNb[i] = value[i];};
void SetRunFirstPoint(UInt_t *value) {if (fRunFirstPoint) for (Int_t i = 0; i < fNRuns; i++) fRunFirstPoint[i] = value[i];};
void SetRunLastPoint(UInt_t *value) {if (fRunLastPoint) for (Int_t i = 0; i < fNRuns; i++) fRunLastPoint[i] = value[i];};
void SetUseLHCClockPhase(Bool_t value) {fUseLHCClockPhase = value;};
Float_t EvalT0(UInt_t timestamp);
Float_t EvalTOFResolution(UInt_t timestamp);
Float_t EvalT0Spread(UInt_t timestamp);
Float_t AverageT0(UInt_t runNb) {return Average(fT0, runNb);};
Float_t AverageTOFResolution(UInt_t runNb) {return Average(fTOFResolution, runNb);};
Float_t AverageT0Spread(UInt_t runNb) {return Average(fT0Spread, runNb);};
Bool_t GetUseLHCClockPhase() const {return fUseLHCClockPhase;};
TGraph *DrawGraphT0(Option_t *option = "") {return DrawGraph(fT0, option);};
TGraph *DrawGraphTOFResolution(Option_t *option = "") {return DrawGraph(fTOFResolution, option);};
TGraph *DrawGraphT0Spread(Option_t *option = "") {return DrawGraph(fT0Spread, option);};
TGraph *DrawCorrelationGraphTOFResolutionT0Spread(Option_t *option = "") {return DrawCorrelationGraph(fT0Spread, fTOFResolution, option);};
private:
Float_t Average(Float_t *data, UInt_t runNb);
Float_t Average(Float_t *data, Int_t first, Int_t last);
TGraph *DrawGraph(Float_t *data, Option_t *option = "");
TGraph *DrawCorrelationGraph(Float_t *datax, Float_t *datay, Option_t *option = "");
Int_t fNPoints;
UInt_t *fTimestamp;
Float_t *fT0;
Float_t *fTOFResolution;
Float_t *fT0Spread;
Int_t fNRuns;
UInt_t *fRunNb;
UInt_t *fRunFirstPoint;
UInt_t *fRunLastPoint;
Bool_t fUseLHCClockPhase;
ClassDef(AliTOFRunParams, 3);
};
#endif /* ALITOFRUNPARAMS_H */