#ifndef ALITOFCALIBHISTO_H
#define ALITOFCALIBHISTO_H
#include "TObject.h"
#include "TString.h"
class TH1D;
class TFile;
class AliESDtrack;
class AliTOFcalibHisto :
public TObject
{
public:
enum ECorrection_t {
kDDLBCcorr,
kAmphenolCableCorr,
kFlatCableCorr,
kInterfaceCardCorr,
kDDLdelayCorr,
kHPTDCdelayCorr,
kFEAchDelayCorr,
kFEAdelayCorr,
kTRMdelayCorr,
kICdelayCorr,
kStripDelayCorr,
kIndexDelayCorr,
kTimeSlewingCorr,
kNcorrections
};
enum ECalibConst_t {
kLHCperiod,
kAmphenolCableDelay,
kFlatCableDelay,
kInterfaceCardDelay,
kNcalibConsts
};
enum ECalibMap_t {
kIndex,
kDDL,
kTRM,
kChain,
kTDC,
kChannel,
kSector,
kPlate,
kStrip,
kSectorStrip,
kPadZ,
kPadX,
kPad,
kInterfaceCardIndex,
kDDLBCshift,
kFlatCableLength,
kInterfaceCardLength,
kAmphenolCableLength,
kNcalibMaps
};
enum ECalibPar_t {
kDDLdelayPar,
kHPTDCdelayPar,
kLeftFEAchDelayPar,
kRightFEAchDelayPar,
kFEAdelayPar,
kICdelayPar,
kTRMdelayPar,
kStripDelayPar,
kIndexDelayPar,
kTimeSlewingPar,
kNcalibPars
};
enum ECalibStat_t {
kStripStat,
kNcalibStats
};
AliTOFcalibHisto();
virtual ~AliTOFcalibHisto();
static const Char_t *GetCalibHistoFileName() {return fgCalibHistoFileName.Data();};
static const Char_t *GetCalibParFileName() {return fgCalibParFileName.Data();};
static const Char_t *GetCalibStatFileName() {return fgCalibStatFileName.Data();};
static void SetCalibHistoFileName(const Char_t *value) {fgCalibHistoFileName = value;};
static void SetCalibParFileName(const Char_t *value) {fgCalibParFileName = value;};
static void SetCalibStatFileName(const Char_t *value) {fgCalibStatFileName = value;};
static void SetCableCorrectionFlag(Int_t i, Bool_t flag) {if (i < kNcorrections) fgCableCorrectionFlag[i] = flag;};
static void SetFullCorrectionFlag(Int_t i, Bool_t flag) {if (i < kNcorrections) fgFullCorrectionFlag[i] = flag;};
static Int_t GetIndexEO(Int_t ddl, Int_t trm, Int_t chain, Int_t tdc, Int_t channel) {return (channel + 8 * tdc + 120 * chain + 240 * trm + 2400 * ddl);};
void LoadCalibHisto();
void LoadCalibPar();
void LoadCalibStat();
void WriteCalibHisto();
void WriteCalibStat();
Double_t GetCalibConst(Int_t histo) {return GetHisto(fCalibConst[histo], 0);};
Double_t GetCalibMap(Int_t histo, Int_t index) {return GetHisto(fCalibMap[histo], index);};
Double_t GetCalibPar(Int_t histo, Int_t index) {return GetHisto(fCalibPar[histo], index);};
Bool_t GetCalibStat(Int_t histo, Int_t index) {return GetHisto(fCalibStat[histo], index) != 0. ? kTRUE : kFALSE;};
Double_t GetCorrection(Int_t corr, Int_t index, Double_t tot = 0.);
Double_t GetNominalCorrection(Int_t index);
void ApplyNominalCorrection(AliESDtrack *track);
Double_t GetCableCorrection(Int_t index);
Double_t GetFullCorrection(Int_t index, Double_t tot = 0.);
Bool_t GetStatus(Int_t index);
private:
static TFile *fgCalibHistoFile;
static TFile *fgCalibParFile;
static TFile *fgCalibStatFile;
static TString fgCalibHistoFileName;
static TString fgCalibParFileName;
static TString fgCalibStatFileName;
static const TString fgkCalibConstName[kNcalibConsts];
static const TString fgkCalibMapName[kNcalibMaps];
static const TString fgkCalibParName[kNcalibPars];
static const TString fgkCalibStatName[kNcalibStats];
static const Double_t fgkLHCperiod;
static const Double_t fgkAmphenolCableDelay;
static const Double_t fgkFlatCableDelay;
static const Double_t fgkInterfaceCardDelay;
static const Int_t fgkNchannels;
static const Int_t fgkNchannelsEO;
static const Int_t fgkDDLBCshift[72];
static const Double_t fgkFlatCableLength[91];
static const Double_t fgkInterfaceCardLength[48];
static Bool_t fgCableCorrectionFlag[kNcorrections];
static Bool_t fgFullCorrectionFlag[kNcorrections];
static const Int_t fgkStripStat[18][91];
TH1D *fCalibConst[kNcalibConsts];
TH1D *fCalibMap[kNcalibMaps];
TH1D *fCalibPar[kNcalibPars];
TH1D *fCalibStat[kNcalibStats];
void LoadHisto(TFile * const file, TH1D **histo, const Char_t *name);
void CreateHisto(TH1D **histo, const Char_t *name, Int_t size);
void WriteHisto(TFile *file, TH1D *histo);
void SetHisto(TH1D *histo, Int_t index, Double_t value);
Double_t GetHisto(TH1D *histo, Int_t index);
AliTOFcalibHisto(const AliTOFcalibHisto &source) : TObject(source) {};
AliTOFcalibHisto &operator=(const AliTOFcalibHisto &) {return *this;};
ClassDef(AliTOFcalibHisto, 1);
};
#endif /* ALITOFCALIBHISTO_H */