ROOT logo
#ifndef ALITRDCHECKPID_H
#define ALITRDCHECKPID_H

//////////////////////////////////////////////////////
//
// PID performance checker of the TRD
//
// Author : Alex Wilk <wilka@uni-muenster.de>
//          Alex Bercuci <A.Bercuci@gsi.de>
//          Markus Fasel <M.Fasel@gsi.de>
//
///////////////////////////////////////////////////////

#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:
  // Plots registered for this task
  enum{
    kEfficiency        =  0     // e Efficiency plot
    ,kdEdx             =  1     // dE/dx spectra
    ,kdEdxSlice        =  2     // dE/dx spectra
    ,kPH               =  3     // pulse height spectra
    ,kNClus            =  4     //  number of clusters per track
    ,kMomentum         =  5     // momentum distribution
    ,kMomentumBin      =  6     // momentum distribution
    ,kNTracklets       =  7     // Number of tracklets per track
    ,kEfficiencyMu     =  8     // mu Efficiency plot
    ,kEfficiencyPi     =  9     // pi Efficiency plot
    ,kEfficiencyKa     =  10    // K Efficiency plot
    ,kEfficiencyPr     =  11    // pr Efficiency plot
    ,kV0               =  12    // V0 performance
    ,kdQdl             =  13  // Plot total charge used for the 1D-Likelihood calculation
    ,kNPlots           =  14    // Number of plots for this tasks
 };
  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]; };
  //TObjArray *GetHistos() { return fContainer; };
  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&);               // not implemented
  AliTRDcheckPID& operator=(const AliTRDcheckPID&);    // not implemented

  Int_t  CalcPDG(AliTRDtrackV1* track = 0x0);
  Bool_t CheckTrackQuality(const AliTRDtrackV1* track = 0x0) const;
  void   LocalInit();

  static Char_t const *fgMethod[3];        // PID method name
  AliTRDpidUtil       *fUtil;              // utility class for PID calculations
  TObjArray           *fGraph;             //! array of graphs filled in PostProcess
  TObjArray           *fPID;               //! array of PID info/track for calibration
  TObjArray           *fV0s;               //! array of V0 info
  TObjArray           *fEfficiency[AliPID::kSPECIES];      //! array of histograms with efficiency
  TAxis               *fMomentumAxis;      // helper mementum binning
  Int_t                fMinNTracklets;     // minimum number of required Tracklets (for systematic studies)
  Int_t                fMaxNTracklets;     // maximum number of required Tracklets (for systematic studies) 
  ClassDef(AliTRDcheckPID, 3); // TRD PID checker
};

//________________________________________________________________________
inline void AliTRDcheckPID::SetMomentumBinning(Int_t nBins, Double_t *bins){
  //
  // Set the Momentum Bins
  //
  if(fMomentumAxis) delete fMomentumAxis;
  fMomentumAxis = new TAxis(nBins, bins);
}

//________________________________________________________________________
inline Int_t AliTRDcheckPID::FindBin(Int_t species, Double_t momentum){
  //
  // Find the Bin in the 2D Histogram
  //
  return species * fMomentumAxis->GetNbins() + (fMomentumAxis->FindBin(momentum) -1);
}

//________________________________________________________________________
inline Bool_t AliTRDcheckPID::IsInRange(Double_t momentum){
  //
  // Check Whether momentum is in the defined Range
  //
  return (momentum >= fMomentumAxis->GetXmin() && momentum <= fMomentumAxis->GetXmax());
}

#endif
 AliTRDcheckPID.h:1
 AliTRDcheckPID.h:2
 AliTRDcheckPID.h:3
 AliTRDcheckPID.h:4
 AliTRDcheckPID.h:5
 AliTRDcheckPID.h:6
 AliTRDcheckPID.h:7
 AliTRDcheckPID.h:8
 AliTRDcheckPID.h:9
 AliTRDcheckPID.h:10
 AliTRDcheckPID.h:11
 AliTRDcheckPID.h:12
 AliTRDcheckPID.h:13
 AliTRDcheckPID.h:14
 AliTRDcheckPID.h:15
 AliTRDcheckPID.h:16
 AliTRDcheckPID.h:17
 AliTRDcheckPID.h:18
 AliTRDcheckPID.h:19
 AliTRDcheckPID.h:20
 AliTRDcheckPID.h:21
 AliTRDcheckPID.h:22
 AliTRDcheckPID.h:23
 AliTRDcheckPID.h:24
 AliTRDcheckPID.h:25
 AliTRDcheckPID.h:26
 AliTRDcheckPID.h:27
 AliTRDcheckPID.h:28
 AliTRDcheckPID.h:29
 AliTRDcheckPID.h:30
 AliTRDcheckPID.h:31
 AliTRDcheckPID.h:32
 AliTRDcheckPID.h:33
 AliTRDcheckPID.h:34
 AliTRDcheckPID.h:35
 AliTRDcheckPID.h:36
 AliTRDcheckPID.h:37
 AliTRDcheckPID.h:38
 AliTRDcheckPID.h:39
 AliTRDcheckPID.h:40
 AliTRDcheckPID.h:41
 AliTRDcheckPID.h:42
 AliTRDcheckPID.h:43
 AliTRDcheckPID.h:44
 AliTRDcheckPID.h:45
 AliTRDcheckPID.h:46
 AliTRDcheckPID.h:47
 AliTRDcheckPID.h:48
 AliTRDcheckPID.h:49
 AliTRDcheckPID.h:50
 AliTRDcheckPID.h:51
 AliTRDcheckPID.h:52
 AliTRDcheckPID.h:53
 AliTRDcheckPID.h:54
 AliTRDcheckPID.h:55
 AliTRDcheckPID.h:56
 AliTRDcheckPID.h:57
 AliTRDcheckPID.h:58
 AliTRDcheckPID.h:59
 AliTRDcheckPID.h:60
 AliTRDcheckPID.h:61
 AliTRDcheckPID.h:62
 AliTRDcheckPID.h:63
 AliTRDcheckPID.h:64
 AliTRDcheckPID.h:65
 AliTRDcheckPID.h:66
 AliTRDcheckPID.h:67
 AliTRDcheckPID.h:68
 AliTRDcheckPID.h:69
 AliTRDcheckPID.h:70
 AliTRDcheckPID.h:71
 AliTRDcheckPID.h:72
 AliTRDcheckPID.h:73
 AliTRDcheckPID.h:74
 AliTRDcheckPID.h:75
 AliTRDcheckPID.h:76
 AliTRDcheckPID.h:77
 AliTRDcheckPID.h:78
 AliTRDcheckPID.h:79
 AliTRDcheckPID.h:80
 AliTRDcheckPID.h:81
 AliTRDcheckPID.h:82
 AliTRDcheckPID.h:83
 AliTRDcheckPID.h:84
 AliTRDcheckPID.h:85
 AliTRDcheckPID.h:86
 AliTRDcheckPID.h:87
 AliTRDcheckPID.h:88
 AliTRDcheckPID.h:89
 AliTRDcheckPID.h:90
 AliTRDcheckPID.h:91
 AliTRDcheckPID.h:92
 AliTRDcheckPID.h:93
 AliTRDcheckPID.h:94
 AliTRDcheckPID.h:95
 AliTRDcheckPID.h:96
 AliTRDcheckPID.h:97
 AliTRDcheckPID.h:98
 AliTRDcheckPID.h:99
 AliTRDcheckPID.h:100
 AliTRDcheckPID.h:101
 AliTRDcheckPID.h:102
 AliTRDcheckPID.h:103
 AliTRDcheckPID.h:104
 AliTRDcheckPID.h:105
 AliTRDcheckPID.h:106
 AliTRDcheckPID.h:107
 AliTRDcheckPID.h:108
 AliTRDcheckPID.h:109
 AliTRDcheckPID.h:110
 AliTRDcheckPID.h:111
 AliTRDcheckPID.h:112
 AliTRDcheckPID.h:113
 AliTRDcheckPID.h:114
 AliTRDcheckPID.h:115
 AliTRDcheckPID.h:116
 AliTRDcheckPID.h:117
 AliTRDcheckPID.h:118
 AliTRDcheckPID.h:119
 AliTRDcheckPID.h:120
 AliTRDcheckPID.h:121
 AliTRDcheckPID.h:122
 AliTRDcheckPID.h:123
 AliTRDcheckPID.h:124
 AliTRDcheckPID.h:125
 AliTRDcheckPID.h:126
 AliTRDcheckPID.h:127