]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/AliRsnCutDaughterD0.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnCutDaughterD0.h
1 #ifndef ALIRSNCUTDAUGHTERD0_H
2 #define ALIRSNCUTDAUGHTERD0_H
3
4 //
5 // Cuts for selecting good pion candidates for D0 analysis
6 // with the data samples from pp/PbPb/pPb runs in 2010/2011/2012/2013.
7 // Applies track quality selection plus PID selection,
8 // with different tolerance ranges depending on the momentum.
9 //
10
11 #include "AliVTrack.h"
12 #include "AliPID.h"
13 #include "AliPIDResponse.h"
14 #include "AliRsnCut.h"
15 #include "AliRsnCutTrackQuality.h"
16
17 class AliRsnCutDaughterD0 : public AliRsnCut {
18
19  public:
20
21   AliRsnCutDaughterD0(const char *name = "", AliPID::EParticleType pid = AliPID::kPion);
22   virtual ~AliRsnCutDaughterD0() { }
23
24   void           SetNoPID(Bool_t yn = kTRUE)                  {fNoPID = yn;}
25   //void           SetIsCheckOnMother(Bool_t yn = kTRUE)        {fIsCheckOnMother = yn;}
26   void           SetPtDependentPIDCut(Bool_t yn = kTRUE)      {fPtDepPIDCut = yn;}
27   void           SetPID(AliPID::EParticleType type)           {fPID = type;}
28    
29   void           SetTPCPionPIDCut(Double_t value)             {fPionTPCPIDCut = value;}
30   void           SetTPCKaonPIDCut(Double_t value)             {fKaonTPCPIDCut = value;}
31    
32   void           SetTOFPionPIDCut(Double_t value)             {fPionTOFPIDCut = value;}
33   void           SetTOFKaonPIDCut(Double_t value)             {fKaonTOFPIDCut = value;}
34    
35   AliRsnCutTrackQuality *CutQuality()                       {return &fCutQuality;}
36   Bool_t                 MatchTOF(const AliVTrack *vtrack);
37   Bool_t                 MatchTPC(const AliVTrack *vtrack);
38   virtual Bool_t         IsSelected(TObject *obj);
39    
40  private:
41   AliRsnCutDaughterD0(const AliRsnCutDaughterD0 &copy); // Not implemented
42   AliRsnCutDaughterD0 &operator=(const AliRsnCutDaughterD0 &copy); // Not implemented
43   Bool_t                fNoPID;            // flag to switch off PID check
44   //Bool_t                fIsCheckOnMother;  // flag to switch off tracks check
45   AliPID::EParticleType fPID;              // PID for track
46   AliRsnCutTrackQuality fCutQuality;       // track quality cut 
47
48  protected:
49   Double_t         fPionTPCPIDCut;                // TPC nsigmas for pions
50   Double_t         fKaonTPCPIDCut;                // TPC nsigmas for kaons
51   Double_t         fPionTOFPIDCut;                // TOF nsigmas for pions
52   Double_t         fKaonTOFPIDCut;                // TOF nsigmas for kaons
53   Bool_t           fPtDepPIDCut;                  // flag for setting a pt dependent or independent PID cut
54
55   ClassDef(AliRsnCutDaughterD0, 3)          // cut definitions for D0
56     };
57
58 //__________________________________________________________________________________________________
59 inline Bool_t AliRsnCutDaughterD0::MatchTOF(const AliVTrack *vtrack)
60 {
61   //
62   // Checks if the track has matched the TOF detector
63   //
64
65   if (!vtrack) {
66     AliWarning("NULL argument: impossible to check status");
67     return kFALSE;
68   }
69   AliPIDResponse *fPidResponse = fEvent->GetPIDResponse();
70   if (!fPidResponse) {
71     AliFatal("NULL PID response");
72     return kFALSE;
73   }
74   
75   AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kTOF,vtrack);
76   if (status != AliPIDResponse::kDetPidOk) return kFALSE; 
77   Float_t probMis = fPidResponse->GetTOFMismatchProbability(vtrack);
78   if (probMis > 0.01) return kFALSE;
79   if ((vtrack->GetStatus()&AliESDtrack::kTOFpid )==0 && vtrack->GetStatus()&AliESDtrack::kITSrefit )   return kFALSE;
80   return kTRUE;
81   
82
83   //if (!(vtrack->GetStatus() & AliESDtrack::kTOFout)) return kFALSE;
84   //if (!(vtrack->GetStatus() & AliESDtrack::kTIME  )) return kFALSE;
85
86   return kTRUE;
87 }
88
89 //___________________________________________________________________________________________________
90 inline Bool_t AliRsnCutDaughterD0::MatchTPC(const AliVTrack *vtrack) 
91 {
92   // Check if the track is good for TPC PID
93   
94   
95   if (!vtrack) {
96     AliWarning("NULL argument: impossible to check status");
97     return kFALSE;
98   }
99   AliPIDResponse *fPidResponse = fEvent->GetPIDResponse();
100   if (!fPidResponse) {
101     AliFatal("NULL PID response");
102     return kFALSE;
103   }
104   
105   AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kTPC,vtrack);
106   if (status != AliPIDResponse::kDetPidOk) return kFALSE;
107   /* UInt_t nclsTPCPID = vtrack->GetTPCsignalN(); */
108   /* if(nclsTPCPID<0) return kFALSE; */
109   return kTRUE;
110 }
111
112 #endif