#ifndef ALITRDCHECKPID_H
#define ALITRDCHECKPID_H
#ifndef ROOT_TAxis
#include "TAxis.h"
#endif
#ifndef ALITRDRECOTASK_H
#include "AliTRDrecoTask.h"
#endif
#ifndef ALIPID_H
#include "AliPID.h"
#endif
class AliTRDpidUtil;
class AliTRDcheckPID : public AliTRDrecoTask
{
public:
enum{
kEfficiency = 0
,kdEdx = 1
,kdEdxSlice = 2
,kPH = 3
,kNClus = 4
,kMomentum = 5
,kMomentumBin = 6
,kNTracklets = 7
,kEfficiencyMu = 8
,kEfficiencyPi = 9
,kEfficiencyKa = 10
,kEfficiencyPr = 11
,kV0 = 12
,kdQdl = 13
,kNPlots = 14
};
AliTRDcheckPID();
AliTRDcheckPID(char* name);
virtual ~AliTRDcheckPID();
virtual void UserCreateOutputObjects();
virtual Bool_t GetRefFigure(Int_t ifig);
virtual void UserExec(Option_t *opt);
virtual Bool_t PostProcess();
void MakeSummary();
TH1 *PlotLQ(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotNN(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotESD(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotdQdl(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotdEdx(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotdEdxSlice(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotPH(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotNClus(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotNTracklets(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotMom(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotMomBin(const AliTRDtrackV1 *track = 0x0);
TH1 *PlotV0(const AliTRDtrackV1 *track = 0x0);
void SetRequireMinNTracklets(Int_t mintracklets) { fMinNTracklets = mintracklets; }
void SetRequireMaxNTracklets(Int_t maxtracklets) { fMaxNTracklets = maxtracklets; }
TObjArray *GetGraphs() const { return fGraph; };
static Char_t const* MethodName(Int_t id) { return fgMethod[id]; };
virtual TObjArray *Histos();
void EvaluateEfficiency(const TObjArray* const histoContainer, TObjArray *results, Int_t species, Float_t electronEfficiency);
inline void SetMomentumBinning(Int_t nBins, Double_t *bins);
inline Int_t FindBin(Int_t species, Double_t momentum);
inline Bool_t IsInRange(Double_t momentum);
private:
AliTRDcheckPID(const AliTRDcheckPID&);
AliTRDcheckPID& operator=(const AliTRDcheckPID&);
Int_t CalcPDG(AliTRDtrackV1* track = 0x0);
Bool_t CheckTrackQuality(const AliTRDtrackV1* track = 0x0) const;
void LocalInit();
static Char_t const *fgMethod[3];
AliTRDpidUtil *fUtil;
TObjArray *fGraph;
TObjArray *fPID;
TObjArray *fV0s;
TObjArray *fEfficiency[AliPID::kSPECIES];
TAxis *fMomentumAxis;
Int_t fMinNTracklets;
Int_t fMaxNTracklets;
ClassDef(AliTRDcheckPID, 3);
};
inline void AliTRDcheckPID::SetMomentumBinning(Int_t nBins, Double_t *bins){
if(fMomentumAxis) delete fMomentumAxis;
fMomentumAxis = new TAxis(nBins, bins);
}
inline Int_t AliTRDcheckPID::FindBin(Int_t species, Double_t momentum){
return species * fMomentumAxis->GetNbins() + (fMomentumAxis->FindBin(momentum) -1);
}
inline Bool_t AliTRDcheckPID::IsInRange(Double_t momentum){
return (momentum >= fMomentumAxis->GetXmin() && momentum <= fMomentumAxis->GetXmax());
}
#endif