2 // This cut implements all the checks done to accept a track as a proton or pion
3 // for the pp analysis using 2010 runs.
4 // It is based on standard cuts on track quality and nsigma cuts
5 // with respect to the TPC and TOF signals for the PID.
11 #include "AliPIDResponse.h"
12 #include "AliRsnCutDelta.h"
14 ClassImp(AliRsnCutDelta)
16 //__________________________________________________________________________________________________
17 AliRsnCutDelta::AliRsnCutDelta(const char *name,AliPID::EParticleType pid, Bool_t TPCMethod) :
18 AliRsnCut(name, AliRsnTarget::kDaughter),
23 fTPCMethod(TPCMethod),
24 fNSigmaTPCProton(3.0),
26 fNSigmaTOFProton(3.0),
34 fCutQuality(Form("%sQuality", name))
38 // Initialize the contained cuts and sets defaults
40 Double_t a=0; a=fPtDepDCASigma*0.0026; //This will be used in pt dep dca formula
41 Double_t b=0; b=fPtDepDCASigma*0.05; //This will also be used in pt dep dca formula
44 fCutQuality.SetPtRange(0.15, 1E+20);
45 fCutQuality.SetEtaRange(-fEtaRange, fEtaRange);
46 fCutQuality.SetDCARPtFormula(Form("%f+%f/pt^1.01",a,b)); //("0.0182+0.0350/pt^1.01");
47 fCutQuality.SetDCAZmax(2.0);
48 fCutQuality.SetSPDminNClusters(1);
49 fCutQuality.SetITSminNClusters(0);
50 fCutQuality.SetITSmaxChi2(1E+20);
51 fCutQuality.SetTPCminNClusters(fTPCNCluster);
52 fCutQuality.SetTPCmaxChi2(4.0);
53 fCutQuality.SetRejectKinkDaughters();
54 fCutQuality.SetAODTestFilterBit(5);
57 //__________________________________________________________________________________________________
58 Bool_t AliRsnCutDelta::IsSelected(TObject *obj)
65 if (!TargetOK(obj)) return kFALSE;
68 AliVTrack *track = fDaughter->Ref2Vtrack();
70 if (!fDaughter->GetRef()) AliWarning("NULL ref");
75 if ((track->GetStatus() & AliESDtrack::kTPCin ) == 0) return kFALSE;
76 if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) return kFALSE;
77 if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) return kFALSE;
80 if (!fCutQuality.IsSelected(obj)) return kFALSE;
84 // check initialization of PID object
85 AliPIDResponse *pid = fEvent->GetPIDResponse();
87 AliFatal("NULL PID response");
91 // check if TOF is matched
92 // and computes all values used in the PID cut
93 Bool_t isTOF = MatchTOF(track);
94 Double_t pTPC = track->GetTPCmomentum();
95 Double_t pTOF = track->P();
96 Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track, fPID));
97 Double_t nsTPCProton = TMath::Abs(pid->NumberOfSigmasTPC(track, AliPID::kProton));
98 Double_t nsTPCPion = TMath::Abs(pid->NumberOfSigmasTPC(track, AliPID::kPion));
99 Double_t nsTOFProton = TMath::Abs(pid->NumberOfSigmasTOF(track, AliPID::kProton));
100 Double_t nsTOF = TMath::Abs(pid->NumberOfSigmasTOF(track, fPID));
101 Double_t maxTPC = 1E20;
102 Double_t maxTOF = 1E20;
105 if(fPID == AliPID::kPion) {
107 if(nsTPCPion>fNSigmaTPCPion) return kFALSE;
108 maxTPC = fNSigmaTPCPion;
109 if(nsTPC > maxTPC) return kFALSE;
113 else if (fPID == AliPID::kProton) {
115 if(nsTPCPion<=fNSigmaTPCPion) return kFALSE;
116 if(pTPC>=fTPCMomProton) return kFALSE;
117 if(nsTPCProton>fNSigmaTPCProton) return kFALSE;
118 maxTPC = fNSigmaTPCProton;
119 if(nsTPC > maxTPC) return kFALSE;
126 if(fPID == AliPID::kProton) {
128 if(!isTOF) return kFALSE;
129 if(nsTPCProton>fNSigmaTPCProton) return kFALSE;
130 if(pTOF >= fTOFMomProton) return kFALSE;
131 if(nsTOFProton>fNSigmaTOFProton) return kFALSE;
132 maxTOF = fNSigmaTOFProton;
133 if (nsTOF > maxTOF) return kFALSE;
138 else if (fPID == AliPID::kPion) {
140 if(isTOF && nsTPCProton<=fNSigmaTPCProton && pTOF < fTOFMomProton && nsTOFProton<=fNSigmaTOFProton) return kFALSE;
142 if(nsTPCPion>fNSigmaTPCPion) return kFALSE;
143 maxTPC = fNSigmaTPCPion;
144 if (nsTPC > maxTPC) return kFALSE;
153 Bool_t AliRsnCutDelta::MatchTOF(const AliVTrack *vtrack)
156 // Checks if the track has matched the TOF detector
160 AliWarning("NULL argument: impossible to check status");
164 Bool_t isTOFout = ((vtrack->GetStatus() & AliESDtrack::kTOFout) != 0);
165 Bool_t isTIME = ((vtrack->GetStatus() & AliESDtrack::kTIME) != 0);
167 return (isTOFout && isTIME);