]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/Tools/AliHelperPID.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / Tools / AliHelperPID.h
1 #ifndef ALIHELPERPID_H
2 #define ALIHELPERPID_H
3
4 class AliAODEvent;
5 class AliVEvent;
6 class TH1F;
7 class TH2F;
8 class TList;
9 class AliVTrack;
10 class AliVParticle;
11 class AliStack;
12 class TParticle;
13 class AliPIDResponse;  
14 class AliPIDCombined;  
15
16 #include "TNamed.h"
17
18 namespace AliHelperPIDNameSpace {
19   
20   enum PIDType_t
21   {
22     kNSigmaTPC = 0,
23     kNSigmaTOF,
24     kNSigmaTPCTOF,  // squared sum
25     kBayes
26   };
27   
28   const Int_t kNSigmaPIDType=kNSigmaTPCTOF;//number of Nsigma PID types
29   
30   enum AliHelperDetectorType_t
31   {
32     kITS = 0,
33     kTPC,
34     kTOF,
35     kNDetectors
36   };
37   
38   
39   enum AliHelperParticleSpecies_t
40   {
41     kSpPion = 0,
42     kSpKaon,
43     kSpProton,
44     kNSpecies,
45     kSpUndefined=999
46   }; // Particle species used in plotting
47   
48   
49   enum AliHelperCharge_t
50   {
51     kChPos = 0,
52     kChNeg,
53     kNCharge
54   };
55 }
56
57 using namespace AliHelperPIDNameSpace;
58
59 class AliHelperPID : public TNamed
60 {
61  public:
62   
63   AliHelperPID();
64   virtual  ~AliHelperPID() {}
65   
66   //MC or data
67   Bool_t GetisMC(){return   fisMC;}
68   void SetisMC(Bool_t mc){fisMC=mc;}
69   //PID Type
70   void SetPIDType(PIDType_t PIDType) { fPIDType = PIDType; }
71   PIDType_t GetPIDType() {return fPIDType; }
72   //NSigma cut
73   void SetNSigmaCut(Double_t nsigma) { fNSigmaPID = nsigma; }
74   Double_t GetNSigmaCut() {return fNSigmaPID; }
75   //TOF PID
76   void SetfRequestTOFPID(Bool_t tof){fRequestTOFPID=tof;}//fRequestTOFPID
77   Bool_t GetfRequestTOFPID(){return   fRequestTOFPID;}//fRequestTOFPID
78   void SetfRemoveTracksT0Fill(Bool_t tof){fRemoveTracksT0Fill=tof;}//fRemoveTracksT0Fill
79   Bool_t GetfRemoveTracksT0Fill(){return   fRemoveTracksT0Fill;}//fRemoveTracksT0Fill
80   //Exclusive NSIgma
81   void SetfUseExclusiveNSigma(Bool_t nsigEx){fUseExclusiveNSigma=nsigEx;}//fUseExclusiveNSigma
82   Bool_t GetfUseExclusiveNSigma(){return   fUseExclusiveNSigma;}//fUseExclusiveNSigma
83   //lower pt fot TOF PID
84   Double_t GetPtTOFPID(){return   fPtTOFPID;}
85   void SetfPtTOFPID(Double_t pttof){fPtTOFPID=pttof;}
86   //set PID Combined
87   void SetPIDCombined(AliPIDCombined *obj){fPIDCombined=obj;}
88   //void SetPIDCombined(AliPIDCombined *obj){Printf("void AliHelperPID::SetPIDCombined(AliPIDCombined *obj) not implemented");}  //FIXME Left for backward compatibility, not the PIDCombined onject is created in the constructor as done in /ANALYSIS/AliAnalysisTaskPIDCombined.cxx (Jul 15th 2014)
89   AliPIDCombined *GetPIDCombined(){return fPIDCombined;}
90   //set cut on beyesian probability
91   void SetBayesCut(Double_t cut){fBayesCut=cut;}
92   Double_t GetBayesCut(){return fBayesCut;}
93   
94   //getters of the other data members
95   TList * GetOutputList() {return fOutputList;}//get the TList with histos
96   Double_t* GetNSigmas(AliHelperParticleSpecies_t species) {return fnsigmas[species];}//get nsigma[ipart][idet], calculated in CalculateNSigmas(trk)
97   Bool_t* GetfHasDoubleCounting() {return fHasDoubleCounting;}//get fHasDoubleCounting[ipart], calculated in GetDoubleCounting(trk)
98   //getter of histo "name" from fOutput
99   TH2F* GetHistogram2D(const char * name);//return histogram "name" from fOutputList
100   
101   //PID functions
102   // User should call ONLY the function GetParticleSpecies and set the PID strategy in the steering macro!
103   Int_t GetParticleSpecies(AliVTrack * trk, Bool_t FIllQAHistos);//calculate the PID according to the slected method.
104   Int_t GetParticleSpecies(AliVParticle * part);
105
106   Int_t GetIDBayes(AliVTrack * trk, Bool_t FIllQAHistos);//calculate the PID according to bayesian PID
107   UInt_t CalcPIDCombined(const AliVTrack *track,const AliPIDResponse *PIDResponse, Int_t detMask, Double_t* prob) const;
108   void CalculateNSigmas(AliVTrack * trk, Bool_t FIllQAHistos);//Calcuate nsigma[ipart][idet], fill NSigma histos
109   Int_t FindMinNSigma(AliVTrack * trk, Bool_t FIllQAHistos);//retun the minimum Nsigma
110   Bool_t* GetDoubleCounting(AliVTrack * trk, Bool_t FIllQAHistos);//if a particle has double counting set fHasDoubleCounting[ipart]=kTRUE (only for the second or third identity)
111   Bool_t* GetAllCompatibleIdentitiesNSigma(AliVTrack * trk, Bool_t FIllQAHistos);//All the identities are true
112   Int_t GetMCParticleSpecie(AliVEvent* event, AliVTrack * trk, Bool_t FIllQAHistos);//calculate the PID according to MC truth
113   void CheckTOF(AliVTrack * trk);//check the TOF matching and set fHasTOFPID
114   Double_t TOFBetaCalc(AliVTrack *track) const;
115   Double_t GetMass(AliHelperParticleSpecies_t id) const;
116   Long64_t Merge(TCollection* list);
117   
118  private:
119   
120   Bool_t fisMC;
121   PIDType_t fPIDType; // PID type
122   Double_t fNSigmaPID; // number of sigma for PID cut
123   Double_t fBayesCut; // Cut on Bayesian probability
124   AliPIDResponse   *fPIDResponse;     //! PID response object
125   AliPIDCombined   *fPIDCombined;     // PIDCombined
126   TList     *fOutputList;  // List Histo's
127   Double_t fnsigmas[kNSpecies][kNSigmaPIDType+1]; //nsigma values
128   Bool_t fHasDoubleCounting[kNSpecies];//array with compatible identities
129   Bool_t fRequestTOFPID;//if true returns kSpUndefined if the TOF signal is missing
130   Bool_t fRemoveTracksT0Fill;//if true remove tracks for which only StartTime from To-Fill is available (worst resolution)
131   Bool_t fUseExclusiveNSigma;//if true returns the identity only if no double counting
132   Double_t fPtTOFPID; //lower pt bound for the TOF pid
133   Bool_t fHasTOFPID;
134   
135   AliHelperPID(const AliHelperPID&);
136   AliHelperPID& operator=(const AliHelperPID&);
137   
138   ClassDef(AliHelperPID, 8);
139   
140 };
141 #endif
142
143