2 // Author: Francesca Bellini (fbellini@cern.ch)
9 #include "AliPIDResponse.h"
10 #include "AliRsnCutSetDaughterParticle.h"
12 class AliRsnCutPIDNSigma;
15 ClassImp(AliRsnCutSetDaughterParticle)
17 //__________________________________________________________________________________________________
18 AliRsnCutSetDaughterParticle::AliRsnCutSetDaughterParticle() :
19 AliRsnCutSet("AliRsnCutSetDaughterParticle", AliRsnTarget::kDaughter),
21 fAppliedCutSetID(AliRsnCutSetDaughterParticle::kNDaughterCuts),
25 fAODTrkCutFilterBit(0)
28 // Default constructor
31 //__________________________________________________________________________________________________
32 AliRsnCutSetDaughterParticle::AliRsnCutSetDaughterParticle(const char *name, AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutSetID, AliPID::EParticleType pid, Float_t nSigmaFast = -1.0, Int_t AODfilterBit = 0) :
33 AliRsnCutSet(name, AliRsnTarget::kDaughter),
35 fAppliedCutSetID(cutSetID),
38 fCutQuality(new AliRsnCutTrackQuality("CutQuality")),
39 fAODTrkCutFilterBit(AODfilterBit)
44 if ( (nSigmaFast<=0) &&
45 ((cutSetID == AliRsnCutSetDaughterParticle::kFastTPCpidNsigma) || (cutSetID == AliRsnCutSetDaughterParticle::kFastTOFpidNsigma)) ) {
46 AliError("Requested fast n-sigma PID with invalid value for n. Setting n = 1E20");
48 if (cutSetID == AliRsnCutSetDaughterParticle::kFastTPCpidNsigma){
49 fNsigmaTPC = nSigmaFast;
51 if ( (cutSetID == AliRsnCutSetDaughterParticle::kFastTOFpidNsigma) ||
52 (cutSetID == AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010) ) {
53 fNsigmaTOF = nSigmaFast;
60 //__________________________________________________________________________________________________
61 AliRsnCutSetDaughterParticle::AliRsnCutSetDaughterParticle(const AliRsnCutSetDaughterParticle ©) :
64 fAppliedCutSetID(copy.fAppliedCutSetID),
65 fNsigmaTPC(copy.fNsigmaTPC),
66 fNsigmaTOF(copy.fNsigmaTOF),
67 fCutQuality(copy.fCutQuality),
68 fAODTrkCutFilterBit(copy.fAODTrkCutFilterBit)
74 //__________________________________________________________________________________________________
75 AliRsnCutSetDaughterParticle &AliRsnCutSetDaughterParticle::operator=(const AliRsnCutSetDaughterParticle ©)
80 AliRsnCutSet::operator=(copy);
84 fAppliedCutSetID=copy.fAppliedCutSetID;
85 fNsigmaTPC=copy.fNsigmaTPC;
86 fNsigmaTOF=copy.fNsigmaTOF;
87 fAODTrkCutFilterBit=copy.fAODTrkCutFilterBit;
88 fCutQuality=copy.fCutQuality;
92 //----------------------------------------------------------------------------
93 AliRsnCutSetDaughterParticle::~AliRsnCutSetDaughterParticle()
101 //----------------------------------------------------------------------------
102 void AliRsnCutSetDaughterParticle::Init()
105 // init cut sets by setting variable params
107 fCutQuality->SetDefaults2010();
108 fCutQuality->SetPtRange(0.15, 20.0);
109 fCutQuality->SetEtaRange(-0.8, 0.8);
110 fCutQuality->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
111 fCutQuality->SetDCAZmax(2.0);
112 fCutQuality->SetSPDminNClusters(1);
113 fCutQuality->SetITSminNClusters(0);
114 fCutQuality->SetITSmaxChi2(36);
115 fCutQuality->SetTPCminNClusters(70);
116 fCutQuality->SetTPCmaxChi2(4.0);
117 fCutQuality->SetRejectKinkDaughters();
118 fCutQuality->SetAODTestFilterBit(fAODTrkCutFilterBit);
119 //fCutQuality->SetITSmaxChi2(36);
120 //fCutQuality->SetMaxChi2TPCConstrainedGlobal(36);
122 AliRsnCutTOFMatch *iCutTOFMatch = new AliRsnCutTOFMatch("CutTOFMatch");
123 AliRsnCutPIDNSigma *iCutTPCNSigma = new AliRsnCutPIDNSigma("CutTPCNSigma", fPID, AliRsnCutPIDNSigma::kTPC);//, AliRsnCutPIDNSigma::kTPCinnerP );
124 AliRsnCutPIDNSigma *iCutTPCTOFNSigma = new AliRsnCutPIDNSigma("CutTPCTOFNSigma", fPID, AliRsnCutPIDNSigma::kTPC);//, AliRsnCutPIDNSigma::kTPCinnerP );
125 AliRsnCutPIDNSigma *iCutTOFNSigma = new AliRsnCutPIDNSigma("CutTOFNSigma", fPID, AliRsnCutPIDNSigma::kTOF);//, AliRsnCutPIDNSigma::kP );
127 switch (fAppliedCutSetID)
129 case AliRsnCutSetDaughterParticle::kNoCuts :
130 AliInfo("No cuts applied to daughter particle");
133 case AliRsnCutSetDaughterParticle::kQualityStd2010 :
135 SetCutScheme(fCutQuality->GetName());
138 case AliRsnCutSetDaughterParticle::kQualityStd2011:
139 //fCutQuality->SetAODTestFilterBit(10); //1024
141 SetCutScheme(fCutQuality->GetName());
144 case AliRsnCutSetDaughterParticle::kTOFMatch :
146 AddCut(iCutTOFMatch);
147 SetCutScheme( Form("%s&(%s)",fCutQuality->GetName(), iCutTOFMatch->GetName()) );
150 case AliRsnCutSetDaughterParticle::kFastTPCpidNsigma :
151 if (fNsigmaTPC <= 0.0) {
152 AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTPCNSigma->GetName()));
153 SetNsigmaForFastTPCpid(10.0);
155 iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
157 AddCut(iCutTPCNSigma);
158 SetCutScheme( Form("%s&%s",fCutQuality->GetName(), iCutTPCNSigma->GetName()) );
161 case AliRsnCutSetDaughterParticle::kFastTOFpidNsigma :
162 if (fNsigmaTOF <= 0.0) {
163 AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
164 SetNsigmaForFastTOFpid(10.0);
166 iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
167 //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
169 AddCut(iCutTOFNSigma);
170 SetCutScheme( Form("%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName()) );
173 case AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPP2010 :
174 /* Set TPC PID (if no TOF)*/
175 // all below 350 MeV: 5sigma
176 // all between 350 and 500 MeV: 3sigma
177 // pios above 500 MeV: 2sigma
178 // kaons between 500 and 700 MeV: 2sigma
179 // kaons above 700 MeV: rejected
180 iCutTPCNSigma->AddPIDRange(5.0, 0.0, 0.35);
181 iCutTPCNSigma->AddPIDRange(3.0, 0.35, 0.5);
182 if (fPID==AliPID::kPion)
183 iCutTPCNSigma->AddPIDRange(2.0, 0.5, 1E20);
184 if (fPID==AliPID::kKaon)
185 iCutTPCNSigma->AddPIDRange(2.0, 0.5, 0.7);
188 AddCut(iCutTOFMatch);
189 AddCut(iCutTPCNSigma);
192 iCutTPCTOFNSigma->SinglePIDRange(5.0);
193 iCutTOFNSigma->AddPIDRange(3.0, 0.0, 1.5);
194 iCutTOFNSigma->AddPIDRange(2.0, 1.5, 1E20);
196 AddCut(iCutTPCTOFNSigma);
197 AddCut(iCutTOFNSigma);
200 // quality & [ (TOF & TPCTOF) || (!TOFmatch & TPConly) ]
201 SetCutScheme( Form("%s&((%s&%s)|((!%s)&%s))",fCutQuality->GetName(), iCutTPCTOFNSigma->GetName(), iCutTOFNSigma->GetName(), iCutTOFMatch->GetName(), iCutTPCNSigma->GetName()) ) ;
204 case AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010:
205 if (fNsigmaTOF <= 0.0) {
206 AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
207 SetNsigmaForFastTOFpid(10.0);
209 iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
210 //iCutTOFNSigma->AddPIDRange(3.0, 0.35, 1E20);
211 iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
214 AddCut(iCutTOFNSigma);
215 AddCut(iCutTPCTOFNSigma);
216 SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFNSigma->GetName(), iCutTPCTOFNSigma->GetName()) );
219 case AliRsnCutSetDaughterParticle::kTOFTPCmismatchKstarPbPb2010:
220 iCutTPCTOFNSigma->SinglePIDRange(5.0); //5-sigma veto on tpc signal
222 AddCut(iCutTOFMatch);
223 AddCut(iCutTPCTOFNSigma);
224 SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTOFMatch->GetName(), iCutTPCTOFNSigma->GetName()) );