2 // All cuts for single pions
3 // based on track quality and particle identification
5 // Author: fbellini@cern.ch
12 #include "AliPIDResponse.h"
13 #include "AliRsnCutKaon.h"
15 ClassImp(AliRsnCutKaon)
17 const char *AliRsnCutKaon::fgkCutName[AliRsnCutKaon::kNkaonCuts]= {
21 "kFastTPCpid_1point5sigma",
25 "kFastTOFpid_1point5sigma",
28 "kTPCTOFpid_DefaultKstarPP2010"
31 //__________________________________________________________________________________________________
32 AliRsnCutKaon::AliRsnCutKaon(const char *name, AliRsnCutKaon::ERsnKaonCut cutID, AliPID::EParticleType pid) :
33 AliRsnCut(name, AliRsnTarget::kDaughter),
36 fCutQuality(Form("%sQuality", name)),
43 // Initialize track quality cuts to 2010 defaults
45 fCutQuality.SetPtRange(0.15, 1E+20);
46 fCutQuality.SetEtaRange(-0.8, 0.8);
47 fCutQuality.SetDCARPtFormula("0.0182+0.0350/pt^1.01");
48 fCutQuality.SetDCAZmax(2.0);
49 fCutQuality.SetSPDminNClusters(1);
50 fCutQuality.SetITSminNClusters(0);
51 fCutQuality.SetITSmaxChi2(1E+20);
52 fCutQuality.SetTPCminNClusters(70);
53 fCutQuality.SetTPCmaxChi2(4.0);
54 fCutQuality.SetRejectKinkDaughters();
55 fCutQuality.SetAODTestFilterBit(5);
56 AliInfo(Form("Applied cut on kaon candidate: %s", AliRsnCutKaon::fgkCutName[fAppliedCutID]));
59 //__________________________________________________________________________________________________
60 Bool_t AliRsnCutKaon::MatchTOF(const AliVTrack *vtrack)
63 // Checks if the track has matched the TOF detector
66 AliWarning("NULL argument: impossible to check status");
69 if (!(vtrack->GetStatus() & AliESDtrack::kTOFout)) return kFALSE;
70 if (!(vtrack->GetStatus() & AliESDtrack::kTIME)) return kFALSE;
75 //__________________________________________________________________________________________________
76 Bool_t AliRsnCutKaon::IsSelected(TObject *obj)
82 if (!TargetOK(obj)) return kFALSE;
85 AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
86 if (!track) return kFALSE;
88 Bool_t isSelected=kFALSE;
89 switch (fAppliedCutID)
91 case AliRsnCutKaon::kQualityStd2010:
92 isSelected=IsSelectedByQualityStd2010(obj, 1, 1, 1);
95 case AliRsnCutKaon::kTOFMatchStd2010:
96 isSelected=IsSelectedByTOFMatchStd2010(obj);
99 case AliRsnCutKaon::kFastTPCpidNsigma:
100 isSelected=IsSelectedByFastTPCpidNsigma(obj,fNsigmaCutTPC);
103 case AliRsnCutKaon::kFastTPCpid1point5sigma:
104 isSelected=IsSelectedByFastTPCpid1point5sigma(obj);
107 case AliRsnCutKaon::kFastTPCpid2sigma:
108 isSelected=IsSelectedByFastTPCpid2sigma(obj);
111 case AliRsnCutKaon::kFastTPCpid3sigma:
112 isSelected=IsSelectedByFastTPCpid3sigma(obj);
115 case AliRsnCutKaon::kFastTOFpidNsigma:
116 isSelected=IsSelectedByFastTOFpidNsigma(obj,fNsigmaCutTOF);
119 case AliRsnCutKaon::kFastTOFpid1point5sigma:
120 isSelected=IsSelectedByFastTOFpid1point5sigma(obj);
123 case AliRsnCutKaon::kFastTOFpid2sigma:
124 isSelected=IsSelectedByFastTOFpid2sigma(obj);
127 case AliRsnCutKaon::kFastTOFpid3sigma:
128 isSelected=IsSelectedByFastTOFpid3sigma(obj);
131 case AliRsnCutKaon::kTPCTOFpidDefaultKstarPP2010:
132 isSelected=IsSelectedByTPCTOFpidDefaultKstarPP2010(obj);
142 //-----------------------------------------------------------
143 Bool_t AliRsnCutKaon::IsSelectedByQualityStd2010(TObject *obj, Bool_t requireTPCin=kTRUE, Bool_t requireTPCrefit=kTRUE, Bool_t requireITSrefit=kTRUE)
145 //Checks if track passes the standard quality cuts
146 //defined for analysis in 2010 pp and PbPb data
149 AliError("Invalid track object passed to function. Please check!");
153 fAppliedCutID= AliRsnCutKaon::kQualityStd2010;
154 AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
155 if (!track) return kFALSE;
157 //optionally check refit flags (to be used for Phi and kStar analysis)
158 if (requireTPCin && ((track->GetStatus() & AliESDtrack::kTPCin) == 0) ) return kFALSE;
159 if (requireTPCrefit && ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) ) return kFALSE;
160 if (requireITSrefit && ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) ) return kFALSE;
163 if (!fCutQuality.IsSelected(obj)) return kFALSE;
167 //-----------------------------------------------------------
168 Bool_t AliRsnCutKaon::IsSelectedByTOFMatchStd2010(TObject *obj)
171 fbellini@cern.ch, 05.dec.2011
172 definition of TOF match: quality cuts 2010 + kTOFout + kTIME
173 (optionally) L > 350. cm cut can be added
176 AliError("Invalid track object passed to function. Please check!");
180 fAppliedCutID=AliRsnCutKaon::kTOFMatchStd2010;
182 if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
185 AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
186 if (!track) return kFALSE;
187 return MatchTOF(track);
190 //-----------------------------------------------------------
191 Bool_t AliRsnCutKaon::IsSelectedByFastTPCpidNsigma(TObject *obj,Float_t nSigmaCut=10.)
194 fbellini@cern.ch, 05.dec.2011 Double_t pTPC = track->GetTPCmomentum();
195 definition of fast TPC pid N-sigma: quality cuts 2010 + sigma cut on dE/dx without p dependence
198 AliError("Invalid track object passed to function. Please check!");
201 fAppliedCutID=AliRsnCutKaon::kFastTPCpidNsigma;
203 // check initialization of PID object
204 AliPIDResponse *pid = fEvent->GetPIDResponse();
206 AliFatal("NULL PID response");
210 if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
213 AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
214 if (!track) return kFALSE;
216 Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track,fPID));
217 return (nsTPC <= nSigmaCut);
219 //-----------------------------------------------------------
220 Bool_t AliRsnCutKaon::IsSelectedByFastTOFpidNsigma(TObject *obj,Float_t nSigmaCut=10.)
223 fbellini@cern.ch, 05.dec.2011
224 definition of fast TOF pid N-sigma: quality cuts 2010 + sigma cut on t-t_0-t_exp without p dependence
227 AliError("Invalid track object passed to function. Please check!");
231 fAppliedCutID=AliRsnCutKaon::kFastTOFpidNsigma;
233 // check initialization of PID object
234 AliPIDResponse *pid = fEvent->GetPIDResponse();
236 AliFatal("NULL PID response");
240 if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
243 AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
244 if (!track) return kFALSE;
245 Bool_t isTOF = MatchTOF(track);
246 Double_t nsTOF = isTOF ? TMath::Abs(pid->NumberOfSigmasTOF(track, fPID)) : 1E20;
248 return (nsTOF <= nSigmaCut);
251 //-----------------------------------------------------------
252 Bool_t AliRsnCutKaon::IsSelectedByTPCTOFpidDefaultKstarPP2010(TObject *obj)
255 fbellini@cern.ch, 05.dec.2011
256 definition of TPC-TOF pid for pp phi and Kstar analysis on 2010 data:
257 quality cuts 2010 + sigma cut on dE/dx with pTPC dependence + sigma cut on t-t_0-t_exp with p dependence
261 AliError("Invalid track object passed to function. Please check!");
264 fAppliedCutID=AliRsnCutKaon::kTPCTOFpidDefaultKstarPP2010;
266 // check initialization of PID object
267 AliPIDResponse *pid = fEvent->GetPIDResponse();
269 AliFatal("NULL PID response");
273 if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE)) //require ITS+TPCrefit and TPCin
276 AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
277 if (!track) return kFALSE;
279 Bool_t isTOF = MatchTOF(track);
280 Double_t pTPC = track->GetTPCmomentum();
281 Double_t p = track->P();
282 Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track, fPID));
283 Double_t nsTOF = isTOF ? TMath::Abs(pid->NumberOfSigmasTOF(track, fPID)) : 1E20;
284 Double_t maxTPC = 1E20;
285 Double_t maxTOF = 1E20;
288 // TPC: 5sigma cut for all
289 if (nsTPC > 5.0) return kFALSE;
290 // TOF: 3sigma below 1.5 GeV, 2sigma above
291 if (p < 1.5) maxTOF = 3.0; else maxTOF = 2.0;
292 return (nsTOF <= maxTOF);
295 // all below 350 MeV: 5sigma
296 // all between 350 and 500 MeV: 3sigma
297 // pios above 500 MeV: 2sigma
298 // kaons between 500 and 700 MeV: 2sigma
299 // kaons above 700 MeV: rejected
302 else if (pTPC > 0.35 && pTPC <= 0.5)
305 if (pTPC <= 0.7) maxTPC = 2.0;
309 return (nsTPC <= maxTPC);