#ifndef ALITRDCALIBRATION_H
#define ALITRDCALIBRATION_H
#include "AliTRDrecoTask.h"
class TList;
class TObject;
class TH1F;
class TProfile2D;
class TGraph;
class TH2I;
class TH2D;
class TTree;
class TObjArray;
class AliTRDtrackV1;
class AliTRDCalibraFillHisto;
class AliTRDCalibraVector;
class AliTRDCalibraMode;
class AliTRDcluster;
class AliTRDtrackInfo;
class AliTRDcalibration : public AliTRDrecoTask
{
public:
enum{
kNbTrack = 0
,kNbTracklet = 1
,kNbTimeBin = 2
,kNbClusters = 3
,kPHSum = 4
,kCHSum = 5
,kPH2D = 6
,kCH2D = 7
,kPRF2D = 8
,kPH2DVector = 9
,kCH2DVector = 10
,kPRF2DVector = 11
,kLinearFitter = 12
,kGainFactor = 13
,kVdriftT0Factor = 14
,kVdriftLorentzAngleFactor = 15
,kPRFFactor = 16
};
AliTRDcalibration();
AliTRDcalibration(char* name);
virtual ~AliTRDcalibration();
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *);
virtual Bool_t GetRefFigure(Int_t ifig);
virtual Bool_t PostProcess();
Bool_t FillGraphIndex(const TObjArray *vectora, TGraph *graph) const;
Bool_t AddStatsPerDetector(const TH2I *ch);
Bool_t AddStatsPerDetector(const TProfile2D *ph, Int_t i);
Bool_t SetNrphiFromTObject(const char *name, Int_t i, AliTRDCalibraMode *calibMode) const;
Bool_t SetNzFromTObject(const char *name, Int_t i, AliTRDCalibraMode *calibMode) const;
Int_t GetNumberOfGroupsPRF(const char* nametitle) const;
TH2I *GetSumCH() const { return fCHSum; };
TH2D *GetSumDet() const { return fDetSum;};
AliTRDCalibraVector *GetSumDetVector() const { return fDetSumVector;};
TObjArray *GetArrayCalib() const { return fArrayCalib; };
void SetHisto2d(Bool_t histo2d) {fHisto2d=histo2d;};
void SetVector2d(Bool_t vector2d) {fVector2d=vector2d;};
void SetVdriftLinear(Bool_t vdriftLinear) {fVdriftLinear = vdriftLinear;};
void SetNbTimeBins(Int_t nbTimeBins) {fNbTimeBins=nbTimeBins;};
void SetLow(Int_t low) {flow=low;};
void SetHigh(Int_t high) {fhigh=high;};
void SetNz(Short_t nz, Int_t i) {fNz[i]=nz;};
void SetNrphi(Short_t nrphi, Int_t i) {fNrphi[i]=nrphi;};
void SetFillZero(Bool_t fillZero) {ffillZero = fillZero;};
void SetNormalizeNbOfCluster(Bool_t normalizeNbOfCluster) {fnormalizeNbOfCluster = normalizeNbOfCluster;};
void SetMaxCluster(Float_t maxcluster) {fmaxCluster = maxcluster; };
void SetOfflineTracks() {fOfflineTracks=kTRUE; fStandaloneTracks=kFALSE; };
void SetStandaloneTracks() {fStandaloneTracks=kTRUE; fOfflineTracks=kFALSE; };
void SetCompressPerDetector(Bool_t compressPerDetector=kTRUE) {fCompressPerDetector=compressPerDetector; };
private:
AliTRDtrackInfo *fTrackInfo;
AliTRDtrackV1 *ftrdTrack;
AliTRDcluster *fcl;
AliTRDCalibraFillHisto *fTRDCalibraFillHisto;
TH1F *fNbTRDTrack;
TH1F *fNbTRDTrackOffline;
TH1F *fNbTRDTrackStandalone;
TH1F *fNbTRDTracklet;
TH1F *fNbTRDTrackletOffline;
TH1F *fNbTRDTrackletStandalone;
TH1F *fNbTimeBin;
TH1F *fNbTimeBinOffline;
TH1F *fNbTimeBinStandalone;
TH1F *fNbClusters;
TH1F *fNbClustersOffline;
TH1F *fNbClustersStandalone;
TProfile2D *fPHSM;
TH2I *fCHSM;
TProfile2D *fPHSum;
TH2I *fCHSum;
TH2D *fDetSum;
AliTRDCalibraVector *fDetSumVector;
Bool_t fHisto2d;
Bool_t fVector2d;
Bool_t fVdriftLinear;
Int_t flow;
Int_t fhigh;
Int_t fNbTimeBins;
Bool_t ffillZero;
Short_t fNz[3];
Short_t fNrphi[3];
Bool_t fnormalizeNbOfCluster;
Float_t fmaxCluster;
Bool_t fOfflineTracks;
Bool_t fStandaloneTracks;
Bool_t fCompressPerDetector;
TObjArray *fGraph;
TObjArray *fArrayCalib;
Bool_t fPostProcess;
AliTRDcalibration(const AliTRDcalibration&);
AliTRDcalibration& operator=(const AliTRDcalibration&);
ClassDef(AliTRDcalibration, 1)
};
#endif