]>
Commit | Line | Data |
---|---|---|
a07ad8e0 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
27de2dfb | 16 | /* $Id$ */ |
17 | ||
a07ad8e0 | 18 | ///////////////////////////////////////////////////////////// |
19 | // | |
992ba7d8 | 20 | // Class for cuts on AOD reconstructed Lc->V0+X |
21 | // | |
22 | // Modified by A.De Caro - decaro@sa.infn.it | |
a07ad8e0 | 23 | // |
24 | ///////////////////////////////////////////////////////////// | |
25 | ||
26 | #include <TDatabasePDG.h> | |
27 | #include <Riostream.h> | |
28 | ||
29 | #include "AliRDHFCutsLctoV0.h" | |
30 | #include "AliAODRecoCascadeHF.h" | |
31 | #include "AliAODTrack.h" | |
32 | #include "AliESDtrack.h" | |
e7af8919 | 33 | #include "AliESDVertex.h" |
34 | #include "AliAODVertex.h" | |
a07ad8e0 | 35 | #include "AliAODv0.h" |
36 | #include "AliESDv0.h" | |
37 | ||
c64cb1f6 | 38 | using std::cout; |
39 | using std::endl; | |
40 | ||
a07ad8e0 | 41 | ClassImp(AliRDHFCutsLctoV0) |
42 | ||
43 | //-------------------------------------------------------------------------- | |
34595b3c | 44 | AliRDHFCutsLctoV0::AliRDHFCutsLctoV0(const char* name, Short_t /*v0channel*/) : |
992ba7d8 | 45 | AliRDHFCuts(name), |
e7af8919 | 46 | fPidSelectionFlag(0), |
47 | fPidHFV0pos(0), | |
48 | fPidHFV0neg(0), | |
34595b3c | 49 | fV0daughtersCuts(0), |
50 | fV0Type(0) | |
a07ad8e0 | 51 | { |
52 | // | |
53 | // Default Constructor | |
54 | // | |
992ba7d8 | 55 | |
34595b3c | 56 | const Int_t nvars=10; |
a07ad8e0 | 57 | SetNVars(nvars); |
34595b3c | 58 | TString varNames[nvars]={"inv. mass if K0S [GeV/c2]", |
992ba7d8 | 59 | "inv. mass if Lambda [GeV/c2]", |
60 | "inv. mass V0 if K0S [GeV/c2]", | |
61 | "inv. mass V0 if Lambda [GeV/c2]", | |
a07ad8e0 | 62 | "pT min bachelor track [GeV/c]", |
63 | "pT min V0-positive track [GeV/c]", | |
64 | "pT min V0-negative track [GeV/c]", | |
992ba7d8 | 65 | "dca cascade cut [cm]", |
34595b3c | 66 | "dca V0 cut [cm]", |
67 | "V0 type" | |
68 | }; | |
a07ad8e0 | 69 | |
34595b3c | 70 | Bool_t isUpperCut[nvars]={kTRUE, |
71 | kTRUE, | |
72 | kTRUE, | |
a07ad8e0 | 73 | kTRUE, |
74 | kFALSE, | |
75 | kFALSE, | |
76 | kFALSE, | |
77 | kTRUE, | |
34595b3c | 78 | kTRUE, |
79 | kTRUE | |
80 | }; | |
a07ad8e0 | 81 | SetVarNames(nvars,varNames,isUpperCut); |
34595b3c | 82 | Bool_t forOpt[nvars]={kFALSE, |
a07ad8e0 | 83 | kFALSE, |
992ba7d8 | 84 | kTRUE, |
85 | kTRUE, | |
86 | kTRUE, | |
87 | kTRUE, | |
88 | kTRUE, | |
89 | kTRUE, | |
34595b3c | 90 | kTRUE, |
91 | kTRUE | |
92 | }; | |
93 | SetVarsForOpt(nvars,forOpt); // It was 5: why only 5? And which ones? | |
992ba7d8 | 94 | |
a07ad8e0 | 95 | Float_t limits[2]={0,999999999.}; |
96 | SetPtBins(2,limits); | |
992ba7d8 | 97 | |
98 | /* | |
99 | switch (v0channel) { | |
100 | case 0: | |
101 | fV0channel = 0x0001; | |
102 | break; | |
103 | case 1: | |
104 | fV0channel = 0x0002; | |
105 | break; | |
106 | case 2: | |
107 | fV0channel = 0x0004; | |
108 | break; | |
109 | } | |
110 | */ | |
111 | ||
a07ad8e0 | 112 | } |
113 | //-------------------------------------------------------------------------- | |
114 | AliRDHFCutsLctoV0::AliRDHFCutsLctoV0(const AliRDHFCutsLctoV0 &source) : | |
992ba7d8 | 115 | AliRDHFCuts(source), |
e7af8919 | 116 | fPidSelectionFlag(0), |
117 | fPidHFV0pos(0), | |
118 | fPidHFV0neg(0), | |
34595b3c | 119 | fV0daughtersCuts(0), |
120 | fV0Type(0) | |
121 | /* | |
e7af8919 | 122 | fV0channel(source.fV0channel)*/ |
a07ad8e0 | 123 | { |
124 | // | |
125 | // Copy constructor | |
126 | // | |
127 | ||
e7af8919 | 128 | if (source.fPidHFV0pos) fPidHFV0pos = new AliAODPidHF(*(source.fPidHFV0pos)); |
129 | else fPidHFV0pos = new AliAODPidHF(); | |
130 | if (source.fPidHFV0neg) fPidHFV0neg = new AliAODPidHF(*(source.fPidHFV0neg)); | |
131 | else fPidHFV0neg = new AliAODPidHF(); | |
132 | ||
133 | if (source.fV0daughtersCuts) fV0daughtersCuts = new AliESDtrackCuts(*(source.fV0daughtersCuts)); | |
134 | else fV0daughtersCuts = new AliESDtrackCuts(); | |
135 | ||
a07ad8e0 | 136 | } |
137 | //-------------------------------------------------------------------------- | |
138 | AliRDHFCutsLctoV0 &AliRDHFCutsLctoV0::operator=(const AliRDHFCutsLctoV0 &source) | |
139 | { | |
140 | // | |
141 | // assignment operator | |
142 | // | |
a07ad8e0 | 143 | |
992ba7d8 | 144 | if (this != &source) { |
145 | ||
146 | AliRDHFCuts::operator=(source); | |
e7af8919 | 147 | fPidSelectionFlag = source.fPidSelectionFlag; |
992ba7d8 | 148 | delete fPidHFV0pos; |
149 | fPidHFV0pos = new AliAODPidHF(*(source.fPidHFV0pos)); | |
150 | delete fPidHFV0neg; | |
151 | fPidHFV0neg = new AliAODPidHF(*(source.fPidHFV0neg)); | |
152 | ||
e7af8919 | 153 | delete fV0daughtersCuts; |
154 | fV0daughtersCuts = new AliESDtrackCuts(*(source.fV0daughtersCuts)); | |
155 | ||
34595b3c | 156 | fV0Type = source.fV0Type; |
992ba7d8 | 157 | |
158 | } | |
a07ad8e0 | 159 | |
160 | return *this; | |
161 | } | |
162 | ||
163 | ||
992ba7d8 | 164 | //--------------------------------------------------------------------------- |
165 | AliRDHFCutsLctoV0::~AliRDHFCutsLctoV0() { | |
166 | // | |
167 | // // Default Destructor | |
34595b3c | 168 | // |
992ba7d8 | 169 | |
170 | if (fPidHFV0pos) { | |
171 | delete fPidHFV0pos; | |
172 | fPidHFV0pos=0; | |
173 | } | |
174 | if (fPidHFV0neg) { | |
175 | delete fPidHFV0neg; | |
176 | fPidHFV0neg=0; | |
177 | } | |
178 | ||
e7af8919 | 179 | if (fV0daughtersCuts) { |
180 | delete fV0daughtersCuts; | |
181 | fV0daughtersCuts=0; | |
182 | } | |
183 | ||
992ba7d8 | 184 | } |
185 | ||
a07ad8e0 | 186 | //--------------------------------------------------------------------------- |
187 | void AliRDHFCutsLctoV0::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) { | |
34595b3c | 188 | // |
189 | // Fills in vars the values of the variables | |
a07ad8e0 | 190 | // |
e654189e | 191 | |
992ba7d8 | 192 | if (pdgdaughters[0]==-9999) return; // dummy |
a07ad8e0 | 193 | |
992ba7d8 | 194 | if (nvars!=fnVarsForOpt) { |
a07ad8e0 | 195 | printf("AliRDHFCutsLctoV0::GetCutsVarsForOpt: wrong number of variables\n"); |
196 | return; | |
197 | } | |
198 | ||
199 | AliAODRecoCascadeHF *dd = (AliAODRecoCascadeHF*)d; | |
200 | ||
201 | // Get the v0 and all daughter tracks | |
992ba7d8 | 202 | AliAODTrack *bachelorTrack = (AliAODTrack*)dd->GetBachelor(); |
203 | AliAODv0 *v0 = (AliAODv0*)dd->Getv0(); | |
204 | AliAODTrack *v0positiveTrack = (AliAODTrack*)dd->Getv0PositiveTrack(); | |
34595b3c | 205 | AliAODTrack *v0negativeTrack = (AliAODTrack*)dd->Getv0NegativeTrack(); |
a07ad8e0 | 206 | |
207 | Int_t iter=-1; | |
992ba7d8 | 208 | // cut on cascade mass, if K0S + p |
209 | if (fVarsForOpt[0]) { | |
a07ad8e0 | 210 | iter++; |
211 | vars[iter]=dd->InvMassLctoK0sP(); | |
212 | } | |
992ba7d8 | 213 | // cut on cascade mass, if Lambda + pi |
214 | if (fVarsForOpt[1]) { | |
a07ad8e0 | 215 | iter++; |
216 | vars[iter]=dd->InvMassLctoLambdaPi(); | |
217 | } | |
218 | ||
992ba7d8 | 219 | // cut on V0 mass if K0S |
220 | if (fVarsForOpt[2]) { | |
a07ad8e0 | 221 | iter++; |
222 | vars[iter]=v0->MassK0Short(); | |
223 | } | |
224 | ||
992ba7d8 | 225 | // cut on V0 mass if Lambda |
a07ad8e0 | 226 | // ----------------------------- pb with anti-lambda?? --------->>>>>>>> |
992ba7d8 | 227 | if (fVarsForOpt[3]) { |
228 | ||
229 | if (bachelorTrack->Charge()==1) { | |
230 | iter++; | |
231 | vars[iter]=v0->MassLambda(); | |
232 | } else if (bachelorTrack->Charge()==-1) { | |
233 | iter++; | |
234 | vars[iter]=v0->MassAntiLambda(); | |
235 | } | |
a07ad8e0 | 236 | |
a07ad8e0 | 237 | } |
238 | ||
992ba7d8 | 239 | // cut bachelor min pt |
240 | if (fVarsForOpt[4]) { | |
a07ad8e0 | 241 | iter++; |
992ba7d8 | 242 | vars[iter]=bachelorTrack->Pt(); |
a07ad8e0 | 243 | } |
244 | ||
992ba7d8 | 245 | // cut on V0-positive min pt |
246 | if (fVarsForOpt[5]) { | |
a07ad8e0 | 247 | iter++; |
992ba7d8 | 248 | vars[iter]=v0positiveTrack->Pt(); |
a07ad8e0 | 249 | } |
250 | ||
992ba7d8 | 251 | // cut on V0-negative min pt |
252 | if (fVarsForOpt[6]) { | |
a07ad8e0 | 253 | iter++; |
992ba7d8 | 254 | vars[iter]=v0negativeTrack->Pt(); |
a07ad8e0 | 255 | } |
256 | ||
257 | // cut on cascade dca | |
992ba7d8 | 258 | if (fVarsForOpt[7]) { |
259 | iter++; | |
260 | vars[iter]=dd->GetDCA(); // prong-to-prong DCA | |
261 | } | |
34595b3c | 262 | |
992ba7d8 | 263 | // cut on V0 dca |
264 | if (fVarsForOpt[8]) { | |
a07ad8e0 | 265 | iter++; |
992ba7d8 | 266 | vars[iter]=v0->GetDCA(); // prong-to-prong DCA |
a07ad8e0 | 267 | } |
268 | ||
269 | return; | |
270 | } | |
271 | //--------------------------------------------------------------------------- | |
272 | Int_t AliRDHFCutsLctoV0::IsSelected(TObject* obj,Int_t selectionLevel) { | |
273 | // | |
274 | // Apply selection | |
275 | // | |
276 | ||
992ba7d8 | 277 | if (!fCutsRD) { |
a07ad8e0 | 278 | cout<<"Cut matrice not inizialized. Exit..."<<endl; |
279 | return 0; | |
280 | } | |
992ba7d8 | 281 | |
a07ad8e0 | 282 | //PrintAll(); |
a07ad8e0 | 283 | |
992ba7d8 | 284 | AliAODRecoCascadeHF* d = (AliAODRecoCascadeHF*)obj; |
285 | if (!d) { | |
e7af8919 | 286 | AliDebug(2,"AliAODRecoCascadeHF null"); |
a07ad8e0 | 287 | return 0; |
288 | } | |
289 | ||
992ba7d8 | 290 | // Get the bachelor track |
291 | AliAODTrack *bachelorTrack = (AliAODTrack*)d->GetBachelor(); | |
e7af8919 | 292 | if (!bachelorTrack) { |
293 | AliDebug(2,"No bachelor object"); | |
294 | return 0; | |
295 | } | |
0dbd1d4f | 296 | |
297 | // not used | |
298 | //if ( fUseTrackSelectionWithFilterBits && | |
299 | //!(bachelorTrack->TestFilterMask(BIT(4))) ) return 0; | |
a07ad8e0 | 300 | |
e7af8919 | 301 | // Get V0 |
992ba7d8 | 302 | AliAODv0 *v0 = (AliAODv0*)d->Getv0(); |
e7af8919 | 303 | if (!v0) { |
304 | AliDebug(2,"No v0 object"); | |
305 | return 0; | |
306 | } | |
307 | ||
34595b3c | 308 | |
309 | ||
e7af8919 | 310 | // Get the V0 daughter tracks |
992ba7d8 | 311 | AliAODTrack *v0positiveTrack = (AliAODTrack*)d->Getv0PositiveTrack(); |
34595b3c | 312 | AliAODTrack *v0negativeTrack = (AliAODTrack*)d->Getv0NegativeTrack(); |
e7af8919 | 313 | if (!v0positiveTrack || !v0negativeTrack ) { |
314 | AliDebug(2,"No V0 daughters' objects"); | |
992ba7d8 | 315 | return 0; |
316 | } | |
a07ad8e0 | 317 | |
34595b3c | 318 | // selection on daughter tracks |
319 | if (selectionLevel==AliRDHFCuts::kAll || | |
e7af8919 | 320 | selectionLevel==AliRDHFCuts::kTracks) { |
321 | ||
322 | if (fIsCandTrackSPDFirst && d->Pt()<fMaxPtCandTrackSPDFirst) { | |
323 | if (!bachelorTrack->HasPointOnITSLayer(0)) return 0; | |
324 | } | |
325 | if (fTrackCuts && fV0daughtersCuts) { | |
326 | AliAODVertex *vAOD = (AliAODVertex*)d->GetPrimaryVtx(); | |
327 | Double_t pos[3]; vAOD->GetXYZ(pos); | |
328 | Double_t cov[6]; vAOD->GetCovarianceMatrix(cov); | |
329 | const AliESDVertex vESD(pos,cov,100.,100); | |
330 | if ( !(IsDaughterSelected(bachelorTrack,&vESD,fTrackCuts)) || | |
331 | !(IsDaughterSelected(v0negativeTrack,&vESD,fV0daughtersCuts)) || | |
332 | !(IsDaughterSelected(v0positiveTrack,&vESD,fV0daughtersCuts)) ) return 0; | |
333 | } | |
0dbd1d4f | 334 | //if (!AreDaughtersSelected(d)) return 0; |
e7af8919 | 335 | } |
336 | ||
992ba7d8 | 337 | Bool_t okLck0sp=kTRUE, okLcLpi=kTRUE, okLcLBarpi=kTRUE; |
338 | Bool_t okK0spipi=kTRUE, okLppi=kTRUE, okLBarpip=kTRUE; | |
a07ad8e0 | 339 | |
340 | // selection on candidate | |
34595b3c | 341 | if (selectionLevel==AliRDHFCuts::kAll || |
992ba7d8 | 342 | selectionLevel==AliRDHFCuts::kCandidate) { |
a07ad8e0 | 343 | |
992ba7d8 | 344 | Double_t pt = d->Pt(); |
992ba7d8 | 345 | Int_t ptbin = PtBin(pt); |
34595b3c | 346 | |
0dbd1d4f | 347 | Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass(); |
a07ad8e0 | 348 | Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass(); |
0dbd1d4f | 349 | Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass(); |
a07ad8e0 | 350 | |
992ba7d8 | 351 | // K0S + p |
0dbd1d4f | 352 | Double_t mk0s = v0->MassK0Short(); |
992ba7d8 | 353 | Double_t mLck0sp = d->InvMassLctoK0sP(); |
0dbd1d4f | 354 | |
34595b3c | 355 | // Lambda + pi |
0dbd1d4f | 356 | Double_t mlambda = v0->MassLambda(); |
357 | Double_t malambda = v0->MassAntiLambda(); | |
358 | Double_t mLcLpi = d->InvMassLctoLambdaPi(); | |
359 | ||
992ba7d8 | 360 | // cut on Lc mass with K0S+p hypothesis |
361 | if (TMath::Abs(mLck0sp-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) { | |
362 | okLck0sp = kFALSE; | |
363 | AliDebug(4,Form(" cascade mass is %2.2e and does not correspond to Lambda_c into K0S+p cut",mLck0sp)); | |
364 | } | |
a07ad8e0 | 365 | |
992ba7d8 | 366 | // cuts on the V0 mass: K0S case |
34595b3c | 367 | if (TMath::Abs(mk0s-mk0sPDG)>fCutsRD[GetGlobalIndex(2,ptbin)]) { |
0dbd1d4f | 368 | okK0spipi = kFALSE; |
992ba7d8 | 369 | AliDebug(4,Form(" V0 mass is %2.2e and does not correspond to K0S cut",mk0s)); |
a07ad8e0 | 370 | } |
992ba7d8 | 371 | |
992ba7d8 | 372 | // cut on Lc mass with Lambda+pi hypothesis |
373 | if (TMath::Abs(mLcLpi-mLcPDG)>fCutsRD[GetGlobalIndex(1,ptbin)]) { | |
374 | okLcLpi = kFALSE; | |
375 | okLcLBarpi = kFALSE; | |
376 | AliDebug(4,Form(" cascade mass is %2.2e and does not correspond to Lambda_c into Lambda+pi cut",mLcLpi)); | |
a07ad8e0 | 377 | } |
378 | ||
992ba7d8 | 379 | // cuts on the V0 mass: Lambda/LambdaBar case |
380 | if ( TMath::Abs(mlambda-mLPDG)>fCutsRD[GetGlobalIndex(3,ptbin)] ) { | |
381 | okLppi = kFALSE; | |
382 | AliDebug(4,Form(" V0 mass is %2.2e and does not correspond to LambdaBar cut",mlambda)); | |
a07ad8e0 | 383 | } |
992ba7d8 | 384 | |
385 | if ( TMath::Abs(malambda-mLPDG)>fCutsRD[GetGlobalIndex(3,ptbin)] ) { | |
386 | okLBarpip = kFALSE; | |
387 | AliDebug(4,Form(" V0 mass is %2.2e and does not correspond to LambdaBar cut",malambda)); | |
a07ad8e0 | 388 | } |
389 | ||
992ba7d8 | 390 | okLck0sp = okLck0sp && okK0spipi; |
391 | okLcLpi = okLcLpi && okLppi; | |
392 | okLcLBarpi = okLcLBarpi && okLBarpip; | |
393 | ||
394 | if (!okLck0sp && !okLcLpi && !okLcLBarpi) return 0; | |
a07ad8e0 | 395 | |
34595b3c | 396 | // cuts on the minimum pt of the tracks |
992ba7d8 | 397 | if (TMath::Abs(bachelorTrack->Pt()) < fCutsRD[GetGlobalIndex(4,ptbin)]) { |
398 | AliDebug(4,Form(" bachelor track Pt=%2.2e > %2.2e",bachelorTrack->Pt(),fCutsRD[GetGlobalIndex(4,ptbin)])); | |
a07ad8e0 | 399 | return 0; |
400 | } | |
992ba7d8 | 401 | if (TMath::Abs(v0positiveTrack->Pt()) < fCutsRD[GetGlobalIndex(5,ptbin)]) { |
402 | AliDebug(4,Form(" V0-positive track Pt=%2.2e > %2.2e",v0positiveTrack->Pt(),fCutsRD[GetGlobalIndex(5,ptbin)])); | |
a07ad8e0 | 403 | return 0; |
404 | } | |
992ba7d8 | 405 | if (TMath::Abs(v0negativeTrack->Pt()) < fCutsRD[GetGlobalIndex(6,ptbin)]) { |
406 | AliDebug(4,Form(" V0-negative track Pt=%2.2e > %2.2e",v0negativeTrack->Pt(),fCutsRD[GetGlobalIndex(6,ptbin)])); | |
a07ad8e0 | 407 | return 0; |
408 | } | |
409 | ||
992ba7d8 | 410 | // cut on cascade dca |
411 | //if (TMath::Abs(d->GetDCA()) > fCutsRD[GetGlobalIndex(7,ptbin)]) { | |
412 | if ( TMath::Abs(d->GetDCA()) > fCutsRD[GetGlobalIndex(7,ptbin)] /*|| // prong-to-prong DCA | |
413 | TMath::Abs(d->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(7,ptbin)] || // rphi impact params w.r.t. Primary Vtx | |
414 | TMath::Abs(d->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(7,ptbin)]*/ ) { // rphi impact params w.r.t. Primary Vtx | |
415 | AliDebug(4,Form(" cascade tracks DCA don't pass the cut")); | |
a07ad8e0 | 416 | return 0; |
417 | } | |
418 | ||
992ba7d8 | 419 | // cut on V0 dca |
420 | //if (TMath::Abs(v0->DcaV0Daughters()) > fCutsRD[GetGlobalIndex(8,ptbin)]) { // prong-to-prong DCA | |
421 | if ( TMath::Abs(v0->GetDCA()) > fCutsRD[GetGlobalIndex(8,ptbin)] /*|| // prong-to-prong DCA | |
422 | TMath::Abs(v0->DcaV0ToPrimVertex()) > fCutsRD[GetGlobalIndex(8,ptbin)] || // V0-to-vertex DCA | |
423 | TMath::Abs(v0->DcaPosToPrimVertex()) > fCutsRD[GetGlobalIndex(8,ptbin)] || // prong-to-vertex DCA | |
424 | TMath::Abs(v0->DcaNegToPrimVertex()) > fCutsRD[GetGlobalIndex(8,ptbin)]*/ ) { // prong-to-vertex DCA | |
425 | AliDebug(4,Form(" V0 DCA don't pass the cut")); | |
a07ad8e0 | 426 | return 0; |
427 | } | |
428 | ||
992ba7d8 | 429 | } |
a07ad8e0 | 430 | |
992ba7d8 | 431 | Int_t returnvalue = okLck0sp+2*okLcLBarpi+4*okLcLpi; |
432 | /* | |
433 | retvalue case | |
434 | 1 Lc->K0S + p | |
435 | 2 Lc->LambdaBar + pi | |
436 | 3 Lc->K0S + p AND Lc->LambdaBar + pi | |
437 | 4 Lc->Lambda + pi | |
438 | 5 Lc->K0S + p AND Lc->Lambda + pi | |
439 | 6 Lc->LambdaBar + pi AND Lc->Lambda + pi | |
440 | 7 Lc->K0S + p AND Lc->LambdaBar + pi AND Lc->Lambda + pi | |
441 | */ | |
442 | ||
0dbd1d4f | 443 | Int_t returnvaluePID = 7; |
444 | ||
445 | // selection on candidate | |
34595b3c | 446 | if (selectionLevel==AliRDHFCuts::kAll || |
447 | //selectionLevel==AliRDHFCuts::kCandidate || | |
0dbd1d4f | 448 | selectionLevel==AliRDHFCuts::kPID ) |
449 | returnvaluePID = IsSelectedPID(d); | |
450 | ||
451 | //if (fUsePID && returnvaluePID==0) return 0; | |
452 | ||
992ba7d8 | 453 | Int_t returnvalueTot = 0; |
e7af8919 | 454 | if ( fUsePID ) |
992ba7d8 | 455 | returnvalueTot = CombinePIDCuts(returnvalue,returnvaluePID); |
456 | else | |
457 | returnvalueTot = returnvalue; | |
458 | ||
459 | return returnvalueTot; | |
460 | ||
461 | } | |
462 | //--------------------------------------------------------------------------- | |
463 | Int_t AliRDHFCutsLctoV0::IsSelectedPID(AliAODRecoDecayHF* obj) { | |
464 | ||
465 | // fPidHF -> PID object for bachelor | |
466 | // fPidHFV0pos -> PID object for positive V0 daughter | |
467 | // fPidHFV0neg -> PID object for negative V0 daughter | |
468 | ||
469 | if (!fUsePID || !obj) return 7; // all hypothesis are valid | |
470 | ||
471 | AliAODRecoCascadeHF *objD = (AliAODRecoCascadeHF*)obj; | |
472 | ||
473 | Bool_t isPeriodd = fPidHF->GetOnePad(); | |
474 | Bool_t isMC = fPidHF->GetMC(); | |
475 | ||
476 | if (isPeriodd) { | |
477 | fPidHFV0pos->SetOnePad(kTRUE); | |
478 | fPidHFV0neg->SetOnePad(kTRUE); | |
479 | } | |
480 | if (isMC) { | |
481 | fPidHFV0neg->SetMC(kTRUE); | |
482 | fPidHFV0pos->SetMC(kTRUE); | |
a07ad8e0 | 483 | } |
484 | ||
992ba7d8 | 485 | AliAODTrack *bachelor = (AliAODTrack*)objD->GetBachelor(); |
486 | AliAODTrack *v0Pos = (AliAODTrack*)objD->Getv0PositiveTrack(); | |
487 | AliAODTrack *v0Neg = (AliAODTrack*)objD->Getv0NegativeTrack(); | |
488 | ||
489 | if (!bachelor || !v0Pos || !v0Neg) return 0; | |
490 | ||
e7af8919 | 491 | Bool_t okLcK0Sp = kTRUE; // K0S case |
492 | Bool_t okLcLambdaBarPi = kTRUE; // LambdaBar case | |
493 | Bool_t okLcLambdaPi = kTRUE; // Lambda case | |
992ba7d8 | 494 | |
e7af8919 | 495 | CheckPID(bachelor,v0Neg,v0Pos,okLcK0Sp,okLcLambdaBarPi,okLcLambdaPi); |
992ba7d8 | 496 | |
497 | Int_t returnvalue = okLcK0Sp+2*okLcLambdaBarPi+4*okLcLambdaPi; | |
498 | ||
a07ad8e0 | 499 | return returnvalue; |
500 | } | |
992ba7d8 | 501 | //----------------------- |
e7af8919 | 502 | void AliRDHFCutsLctoV0::CheckPID(AliAODTrack *bachelor, AliAODTrack *v0Neg, AliAODTrack *v0Pos, |
503 | Bool_t &isBachelorID1, Bool_t &isV0NegID2, Bool_t &isV0PosID4) { | |
504 | // identification strategy | |
505 | ||
506 | Int_t trackIDtof = -1; | |
507 | Int_t trackIDtpc = -1; | |
992ba7d8 | 508 | |
e7af8919 | 509 | switch (fPidSelectionFlag) { |
510 | ||
511 | case 0: | |
512 | ||
513 | // identify bachelor | |
514 | trackIDtof = fPidHF->ApplyPidTOFRaw(bachelor,4); | |
515 | trackIDtpc = fPidHF->ApplyPidTPCRaw(bachelor,4); | |
516 | AliDebug(1,Form(" fPidHF->ApplyPidTOFRaw(bachelor,4)=%d fPidHF->ApplyPidTPCRaw(bachelor,4)=%d",trackIDtof,trackIDtpc)); | |
517 | isBachelorID1 = (trackIDtof==4) && (trackIDtpc==4); // K0S case | |
0dbd1d4f | 518 | //Bool_t isBachelorID2 = (fPidHF->ApplyPidTPCRaw(bachelor,2)==2) && (fPidHF->ApplyPidTOFRaw(bachelor,2)==2); // LambdaBar case |
e7af8919 | 519 | //Bool_t isBachelorID4 = isBachelorID2; // Lambda case |
520 | ||
521 | // identify V0neg | |
0dbd1d4f | 522 | //Bool_t isV0NegID1 = (fPidHFV0neg->ApplyPidTPCRaw(v0Neg,2)==2) && (fPidHFV0neg->ApplyPidTOFRaw(v0Neg,2)==2); // K0S case |
e7af8919 | 523 | trackIDtof = fPidHFV0neg->ApplyPidTOFRaw(v0Neg,4); |
524 | trackIDtpc = fPidHFV0neg->ApplyPidTPCRaw(v0Neg,4); | |
525 | AliDebug(1,Form(" fPidHFV0neg->ApplyPidTOFRaw(v0Neg,4)=%d fPidHFV0neg->ApplyPidTPCRaw(v0Neg,4)=%d",trackIDtof,trackIDtpc)); | |
526 | isV0NegID2 = (trackIDtof==4) && (trackIDtpc==4); // LambdaBar case | |
527 | //Bool_t isV0NegID4 = isV0NegID1; // Lambda case | |
528 | ||
529 | // identify V0pos | |
0dbd1d4f | 530 | //Bool_t isV0PosID1 = (fPidHFV0pos->ApplyPidTPCRaw(v0Pos,2)==2) && (fPidHFV0pos->ApplyPidTOFRaw(v0Pos,2)==2); // K0S case |
e7af8919 | 531 | //Bool_t isV0PosID2 = isV0PosID1; // LambdaBar case |
532 | trackIDtof = fPidHFV0pos->ApplyPidTOFRaw(v0Pos,4); | |
533 | trackIDtpc = fPidHFV0pos->ApplyPidTPCRaw(v0Pos,4); | |
534 | AliDebug(1,Form(" fPidHFV0pos->ApplyPidTOFRaw(v0Pos,4)=%d fPidHFV0pos->ApplyPidTPCRaw(v0POS,4)=%d",trackIDtof,trackIDtpc)); | |
535 | isV0PosID4 = (trackIDtof==4) && (trackIDtpc==4); // Lambda case | |
536 | ||
537 | break; | |
538 | case 1: | |
539 | ||
540 | // identify bachelor | |
541 | trackIDtof = fPidHF->ApplyPidTOFRaw(bachelor,4); | |
542 | trackIDtpc = fPidHF->ApplyPidTPCRaw(bachelor,4); | |
543 | AliDebug(1,Form(" fPidHF->ApplyPidTOFRaw(bachelor,4)=%d fPidHFV0->ApplyPidTPCRaw(bachelor,4)=%d",trackIDtof,trackIDtpc)); | |
544 | isBachelorID1 = ( trackIDtof==4 ); | |
545 | Bool_t dummy1 = ( !(fPidHF->CheckTOFPIDStatus(bachelor)) && (trackIDtpc==4) && | |
546 | fPidHF->IsExcluded(bachelor,2,2.,"TPC") && fPidHF->IsExcluded(bachelor,3,2.,"TPC") ); // K0S case | |
547 | isBachelorID1 = isBachelorID1 || dummy1; | |
548 | ||
549 | ||
0dbd1d4f | 550 | // identify V0neg |
551 | trackIDtof = fPidHFV0neg->ApplyPidTOFRaw(v0Neg,4); | |
552 | trackIDtpc = fPidHFV0neg->ApplyPidTPCRaw(v0Neg,4); | |
553 | AliDebug(1,Form(" fPidHFV0neg->ApplyPidTOFRaw(v0Neg,4)=%d fPidHFV0neg->ApplyPidTPCRaw(v0Neg,4)=%d",trackIDtof,trackIDtpc)); | |
554 | isV0NegID2 = ( trackIDtof==4 ); | |
555 | Bool_t dummy2 = ( !(fPidHFV0neg->CheckTOFPIDStatus(v0Neg)) && (trackIDtpc==4) && | |
556 | fPidHFV0neg->IsExcluded(v0Neg,2,2.,"TPC") && fPidHFV0neg->IsExcluded(v0Neg,3,2.,"TPC") ); // LambdaBar case | |
557 | isV0NegID2 = isV0NegID2 || dummy2; | |
558 | ||
559 | ||
e7af8919 | 560 | // identify V0pos |
561 | trackIDtof = fPidHFV0pos->ApplyPidTOFRaw(v0Pos,4); | |
562 | trackIDtpc = fPidHFV0pos->ApplyPidTPCRaw(v0Pos,4); | |
563 | AliDebug(1,Form(" fPidHFV0pos->ApplyPidTOFRaw(v0Pos,4)=%d fPidHFV0pos->ApplyPidTPCRaw(v0Pos,4)=%d",trackIDtof,trackIDtpc)); | |
564 | isV0PosID4 = ( trackIDtof==4 ); | |
565 | Bool_t dummy4 = ( !(fPidHFV0pos->CheckTOFPIDStatus(v0Pos)) && (trackIDtpc==4) && | |
566 | fPidHFV0pos->IsExcluded(v0Pos,2,2.,"TPC") && fPidHFV0pos->IsExcluded(v0Pos,3,2.,"TPC") ); // Lambda case | |
567 | isV0PosID4 = isV0PosID4 || dummy4; | |
568 | ||
569 | ||
e7af8919 | 570 | break; |
571 | ||
572 | } | |
573 | ||
574 | } | |
575 | //---------------- | |
992ba7d8 | 576 | Int_t AliRDHFCutsLctoV0::CombinePIDCuts(Int_t returnvalue, Int_t returnvaluePID) const { |
577 | // combine PID with topological cuts | |
578 | ||
579 | Int_t returnvalueTot=returnvalue&returnvaluePID; | |
580 | ||
581 | return returnvalueTot; | |
582 | } | |
583 | ||
584 | //---------------------------------- | |
0dbd1d4f | 585 | Int_t AliRDHFCutsLctoV0::IsSelectedSingleCut(TObject* obj, Int_t selectionLevel, Int_t cutIndex) { |
992ba7d8 | 586 | // |
0dbd1d4f | 587 | // Apply selection on single cut |
992ba7d8 | 588 | // |
589 | ||
590 | if (!fCutsRD) { | |
591 | cout<<"Cut matrice not inizialized. Exit..."<<endl; | |
592 | return 0; | |
593 | } | |
594 | ||
595 | AliAODRecoCascadeHF* d = (AliAODRecoCascadeHF*)obj; | |
596 | if (!d) { | |
0dbd1d4f | 597 | AliDebug(2,"AliAODRecoCascadeHF null"); |
992ba7d8 | 598 | return 0; |
599 | } | |
600 | ||
992ba7d8 | 601 | // Get the v0 and all daughter tracks |
602 | AliAODTrack *bachelorTrack = (AliAODTrack*)d->GetBachelor(); | |
0dbd1d4f | 603 | if (!bachelorTrack) { |
604 | AliDebug(2,"No bachelor object"); | |
605 | return 0; | |
606 | } | |
607 | ||
608 | // not used | |
34595b3c | 609 | //if ( fUseTrackSelectionWithFilterBits && |
0dbd1d4f | 610 | //!(bachelorTrack->TestFilterMask(BIT(4))) ) return 0; |
992ba7d8 | 611 | |
612 | AliAODv0 *v0 = (AliAODv0*)d->Getv0(); | |
0dbd1d4f | 613 | if (!v0) { |
614 | AliDebug(2,"No v0 object"); | |
615 | return 0; | |
616 | } | |
617 | ||
618 | // Get the V0 daughter tracks | |
992ba7d8 | 619 | AliAODTrack *v0positiveTrack = (AliAODTrack*)d->Getv0PositiveTrack(); |
34595b3c | 620 | AliAODTrack *v0negativeTrack = (AliAODTrack*)d->Getv0NegativeTrack(); |
0dbd1d4f | 621 | if (!v0positiveTrack || !v0negativeTrack ) { |
622 | AliDebug(2,"No V0 daughters' objects"); | |
992ba7d8 | 623 | return 0; |
624 | } | |
625 | ||
34595b3c | 626 | // selection on daughter tracks |
627 | if (selectionLevel==AliRDHFCuts::kAll || | |
0dbd1d4f | 628 | selectionLevel==AliRDHFCuts::kTracks) { |
629 | ||
630 | if (fIsCandTrackSPDFirst && d->Pt()<fMaxPtCandTrackSPDFirst) { | |
631 | if (!bachelorTrack->HasPointOnITSLayer(0)) return 0; | |
632 | } | |
633 | if (fTrackCuts && fV0daughtersCuts) { | |
634 | AliAODVertex *vAOD = (AliAODVertex*)d->GetPrimaryVtx(); | |
635 | Double_t pos[3]; vAOD->GetXYZ(pos); | |
636 | Double_t cov[6]; vAOD->GetCovarianceMatrix(cov); | |
637 | const AliESDVertex vESD(pos,cov,100.,100); | |
638 | if ( !(IsDaughterSelected(bachelorTrack,&vESD,fTrackCuts)) || | |
639 | !(IsDaughterSelected(v0negativeTrack,&vESD,fV0daughtersCuts)) || | |
640 | !(IsDaughterSelected(v0positiveTrack,&vESD,fV0daughtersCuts)) ) return 0; | |
641 | } | |
642 | //if (!AreDaughtersSelected(d)) return 0; | |
643 | } | |
992ba7d8 | 644 | |
645 | Bool_t okLck0sp=kFALSE, okLcLpi=kFALSE, okLcLBarpi=kFALSE; | |
646 | ||
647 | // selection on candidate | |
34595b3c | 648 | if (selectionLevel==AliRDHFCuts::kAll || |
992ba7d8 | 649 | selectionLevel==AliRDHFCuts::kCandidate) { |
650 | ||
0dbd1d4f | 651 | Double_t pt = d->Pt(); |
652 | Int_t ptbin = PtBin(pt); | |
653 | ||
654 | Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass(); | |
992ba7d8 | 655 | Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass(); |
0dbd1d4f | 656 | Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass(); |
992ba7d8 | 657 | |
0dbd1d4f | 658 | // K0S + p |
992ba7d8 | 659 | Double_t mk0s = v0->MassK0Short(); |
660 | Double_t mLck0sp = d->InvMassLctoK0sP(); | |
661 | ||
34595b3c | 662 | // Lambda + pi |
992ba7d8 | 663 | Double_t mlambda = v0->MassLambda(); |
664 | Double_t malambda = v0->MassAntiLambda(); | |
665 | Double_t mLcLpi = d->InvMassLctoLambdaPi(); | |
666 | ||
992ba7d8 | 667 | switch (cutIndex) { |
668 | case 0: | |
0dbd1d4f | 669 | // cut on Lc mass with K0S+p hypothesis |
992ba7d8 | 670 | okLck0sp = TMath::Abs(mLck0sp-mLcPDG)<=fCutsRD[GetGlobalIndex(0,ptbin)]; |
671 | okLcLpi = kFALSE; | |
672 | okLcLBarpi = kFALSE; | |
673 | break; | |
674 | case 1: | |
0dbd1d4f | 675 | // cut on Lc mass with Lambda+pi hypothesis |
992ba7d8 | 676 | okLck0sp = kFALSE; |
677 | okLcLpi = TMath::Abs(mLcLpi-mLcPDG)<=fCutsRD[GetGlobalIndex(1,ptbin)]; | |
678 | okLcLBarpi = okLcLpi; | |
679 | break; | |
680 | case 2: | |
0dbd1d4f | 681 | // cuts on the V0 mass: K0S case |
992ba7d8 | 682 | okLck0sp = TMath::Abs(mk0s-mk0sPDG)<=fCutsRD[GetGlobalIndex(2,ptbin)]; |
683 | okLcLpi = kFALSE; | |
684 | okLcLBarpi = kFALSE; | |
685 | break; | |
686 | case 3: | |
0dbd1d4f | 687 | // cuts on the V0 mass: Lambda/LambdaBar case |
992ba7d8 | 688 | okLck0sp = kFALSE; |
689 | okLcLpi = TMath::Abs(mlambda-mLPDG)<=fCutsRD[GetGlobalIndex(3,ptbin)]; | |
690 | okLcLBarpi = TMath::Abs(malambda-mLPDG)<=fCutsRD[GetGlobalIndex(3,ptbin)]; | |
691 | break; | |
692 | case 4: | |
0dbd1d4f | 693 | // cuts on the minimum pt of bachelor |
992ba7d8 | 694 | okLck0sp = TMath::Abs(bachelorTrack->Pt())>=fCutsRD[GetGlobalIndex(4,ptbin)]; |
695 | okLcLpi = okLck0sp; | |
696 | okLcLBarpi = okLck0sp; | |
697 | break; | |
698 | case 5: | |
0dbd1d4f | 699 | // cuts on the minimum pt of positive V0daughter |
992ba7d8 | 700 | okLck0sp = TMath::Abs(v0positiveTrack->Pt())>=fCutsRD[GetGlobalIndex(5,ptbin)]; |
701 | okLcLpi = okLck0sp; | |
702 | okLcLBarpi = okLck0sp; | |
703 | break; | |
704 | case 6: | |
0dbd1d4f | 705 | // cuts on the minimum pt of negative V0daughter |
992ba7d8 | 706 | okLck0sp = TMath::Abs(v0negativeTrack->Pt())>=fCutsRD[GetGlobalIndex(6,ptbin)]; |
707 | okLcLpi = okLck0sp; | |
708 | okLcLBarpi = okLck0sp; | |
709 | break; | |
710 | case 7: | |
0dbd1d4f | 711 | // cut on cascade dca |
992ba7d8 | 712 | //okLck0sp = TMath::Abs(d->GetDCA(0))<=fCutsRD[GetGlobalIndex(8,ptbin)]; |
713 | okLck0sp = TMath::Abs(d->GetDCA())<=fCutsRD[GetGlobalIndex(7,ptbin)] /*&& | |
714 | TMath::Abs(d->Getd0Prong(0))<=fCutsRD[GetGlobalIndex(7,ptbin)] && | |
715 | TMath::Abs(d->Getd0Prong(1))<=fCutsRD[GetGlobalIndex(7,ptbin)]*/; | |
716 | okLcLpi = okLck0sp; | |
717 | okLcLBarpi = okLck0sp; | |
718 | break; | |
719 | case 8: | |
0dbd1d4f | 720 | // cut on V0 dca |
992ba7d8 | 721 | //okLck0sp = TMath::Abs(v0->DcaV0Daughters())<=fCutsRD[GetGlobalIndex(7,ptbin)]; |
722 | okLck0sp = TMath::Abs(v0->GetDCA())<=fCutsRD[GetGlobalIndex(8,ptbin)] /*&& | |
723 | TMath::Abs(v0->DcaV0ToPrimVertex())<=fCutsRD[GetGlobalIndex(8,ptbin)] && | |
724 | TMath::Abs(v0->DcaPosToPrimVertex())<=fCutsRD[GetGlobalIndex(8,ptbin)] && | |
725 | TMath::Abs(v0->DcaNegToPrimVertex())<=fCutsRD[GetGlobalIndex(8,ptbin)]*/; | |
726 | okLcLpi = okLck0sp; | |
727 | okLcLBarpi = okLck0sp; | |
728 | break; | |
729 | } | |
730 | ||
731 | } | |
732 | ||
733 | Int_t returnvalue = okLck0sp+2*okLcLBarpi+4*okLcLpi; | |
734 | /* | |
735 | retvalue case | |
736 | 1 Lc->K0S + p | |
737 | 2 Lc->LambdaBar + pi | |
738 | 3 Lc->K0S + p AND Lc->LambdaBar + pi | |
739 | 4 Lc->Lambda + pi | |
740 | 5 Lc->K0S + p AND Lc->Lambda + pi | |
741 | 6 Lc->LambdaBar + pi AND Lc->Lambda + pi | |
742 | 7 Lc->K0S + p AND Lc->LambdaBar + pi AND Lc->Lambda + pi | |
743 | */ | |
744 | ||
745 | ||
0dbd1d4f | 746 | /* |
992ba7d8 | 747 | Int_t returnvaluePID = 7; |
748 | ||
749 | // selection on PID | |
34595b3c | 750 | if (selectionLevel==AliRDHFCuts::kAll || |
751 | //selectionLevel==AliRDHFCuts::kCandidate || | |
e7af8919 | 752 | selectionLevel==AliRDHFCuts::kPID ) |
992ba7d8 | 753 | returnvaluePID = IsSelectedPID(d); |
0dbd1d4f | 754 | */ |
992ba7d8 | 755 | |
0dbd1d4f | 756 | Int_t returnvalueTot = 0; |
757 | //if ( fUsePID ) | |
758 | //returnvalueTot = CombinePIDCuts(returnvalue,returnvaluePID); | |
759 | //else | |
760 | returnvalueTot = returnvalue; | |
992ba7d8 | 761 | |
762 | return returnvalueTot; | |
763 | ||
764 | } | |
e7af8919 | 765 | //---------------------------------- |
766 | void AliRDHFCutsLctoV0::SetStandardCutsPP2010() { | |
767 | ||
768 | SetName("LctoV0ProductionCuts"); | |
769 | SetTitle("Production cuts for Lc->V0+bachelor analysis"); | |
770 | ||
771 | AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts(); | |
772 | esdTrackCuts->SetRequireSigmaToVertex(kFALSE); | |
773 | //default | |
774 | esdTrackCuts->SetRequireTPCRefit(kTRUE); | |
775 | esdTrackCuts->SetRequireITSRefit(kTRUE); | |
0dbd1d4f | 776 | esdTrackCuts->SetMinNClustersITS(0);//(4); // default is 5 |
e7af8919 | 777 | esdTrackCuts->SetMinNClustersTPC(70); |
0dbd1d4f | 778 | //esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, |
34595b3c | 779 | // AliESDtrackCuts::kAny); |
e7af8919 | 780 | // default is kBoth, otherwise kAny |
781 | esdTrackCuts->SetMinDCAToVertexXY(0.); | |
782 | esdTrackCuts->SetPtRange(0.3,1.e10); | |
0dbd1d4f | 783 | //esdTrackCuts->SetEtaRange(-0.8,+0.8); |
784 | esdTrackCuts->SetAcceptKinkDaughters(kFALSE); | |
e7af8919 | 785 | AddTrackCuts(esdTrackCuts); |
786 | ||
787 | ||
788 | AliESDtrackCuts* esdTrackCutsV0daughters=new AliESDtrackCuts(); | |
789 | esdTrackCutsV0daughters->SetRequireSigmaToVertex(kFALSE); | |
790 | //default | |
791 | esdTrackCutsV0daughters->SetRequireTPCRefit(kTRUE); | |
0dbd1d4f | 792 | esdTrackCutsV0daughters->SetRequireITSRefit(kFALSE);//(kTRUE); |
793 | esdTrackCutsV0daughters->SetMinNClustersITS(0);//(4); // default is 5 | |
e7af8919 | 794 | esdTrackCutsV0daughters->SetMinNClustersTPC(70); |
0dbd1d4f | 795 | //esdTrackCutsV0daughters->SetClusterRequirementITS(AliESDtrackCuts::kSPD, |
34595b3c | 796 | // AliESDtrackCuts::kAny); |
e7af8919 | 797 | // default is kBoth, otherwise kAny |
798 | esdTrackCutsV0daughters->SetMinDCAToVertexXY(0.); | |
799 | esdTrackCutsV0daughters->SetPtRange(0.,1.e10); | |
0dbd1d4f | 800 | esdTrackCutsV0daughters->SetAcceptKinkDaughters(kFALSE); |
e7af8919 | 801 | AddTrackCutsV0daughters(esdTrackCutsV0daughters); |
802 | ||
803 | const Int_t nptbins=1; | |
804 | Float_t* ptbins; | |
805 | ptbins=new Float_t[nptbins+1]; | |
806 | ptbins[0]=0.; | |
807 | ptbins[1]=99999999.; | |
808 | ||
809 | SetPtBins(nptbins+1,ptbins); | |
810 | SetPtBins(nptbins+1,ptbins); | |
811 | ||
812 | const Int_t nvars=9 ; | |
813 | ||
814 | Float_t** prodcutsval; | |
815 | prodcutsval=new Float_t*[nvars]; | |
816 | for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];} | |
817 | for(Int_t ipt2=0;ipt2<nptbins;ipt2++){ | |
818 | prodcutsval[0][ipt2]=1.; // inv. mass if K0S [GeV/c2] | |
819 | prodcutsval[1][ipt2]=1.; // inv. mass if Lambda [GeV/c2] | |
820 | prodcutsval[2][ipt2]=0.05; // inv. mass V0 if K0S [GeV/c2] | |
821 | prodcutsval[3][ipt2]=0.05; // inv. mass V0 if Lambda [GeV/c2] | |
822 | prodcutsval[4][ipt2]=0.3; // pT min bachelor track [GeV/c] // AOD by construction | |
823 | prodcutsval[5][ipt2]=0.; // pT min V0-positive track [GeV/c] | |
824 | prodcutsval[6][ipt2]=0.; // pT min V0-negative track [GeV/c] | |
825 | prodcutsval[7][ipt2]=1000.; // dca cascade cut [cm] | |
826 | prodcutsval[8][ipt2]=1000.; // dca V0 cut [nSigma] // it's 1.5 x offline V0s | |
827 | } | |
0dbd1d4f | 828 | SetCuts(nvars,nptbins,prodcutsval); |
e7af8919 | 829 | |
0dbd1d4f | 830 | SetGlobalIndex(nvars,nptbins); |
831 | SetPtBins(nptbins+1,ptbins); | |
e7af8919 | 832 | |
833 | ||
834 | //pid settings | |
835 | //1. bachelor: default one | |
836 | AliAODPidHF* pidObjBachelor = new AliAODPidHF(); | |
837 | Double_t sigmasBac[5]={3.,1.,1.,3.,3.}; // 0, 1(A), 2(A) -> TPC; 3 -> TOF; 4 -> ITS | |
838 | pidObjBachelor->SetSigma(sigmasBac); | |
839 | pidObjBachelor->SetAsym(kFALSE); | |
840 | pidObjBachelor->SetMatch(1); | |
841 | pidObjBachelor->SetTPC(kTRUE); | |
842 | pidObjBachelor->SetTOF(kTRUE); | |
843 | pidObjBachelor->SetTOFdecide(kFALSE); | |
844 | SetPidHF(pidObjBachelor); | |
845 | ||
846 | //2. V0pos | |
847 | AliAODPidHF* pidObjV0pos = new AliAODPidHF(); | |
848 | Double_t sigmasV0pos[5]={3.,1.,1.,3.,3.}; // 0, 1(A), 2(A) -> TPC; 3 -> TOF; 4 -> ITS | |
849 | pidObjV0pos->SetSigma(sigmasV0pos); | |
850 | pidObjV0pos->SetAsym(kFALSE); | |
851 | pidObjV0pos->SetMatch(1); | |
852 | pidObjV0pos->SetTPC(kTRUE); | |
853 | pidObjV0pos->SetTOF(kTRUE); | |
854 | pidObjV0pos->SetTOFdecide(kFALSE); | |
855 | SetPidV0pos(pidObjV0pos); | |
856 | ||
857 | //2. V0neg | |
858 | AliAODPidHF* pidObjV0neg = new AliAODPidHF(); | |
859 | Double_t sigmasV0neg[5]={3.,1.,1.,3.,3.}; // 0, 1(A), 2(A) -> TPC; 3 -> TOF; 4 -> ITS | |
860 | pidObjV0neg->SetSigma(sigmasV0neg); | |
861 | pidObjV0neg->SetAsym(kFALSE); | |
862 | pidObjV0neg->SetMatch(1); | |
863 | pidObjV0neg->SetTPC(kTRUE); | |
864 | pidObjV0neg->SetTOF(kTRUE); | |
865 | pidObjV0neg->SetTOFdecide(kFALSE); | |
866 | SetPidV0neg(pidObjV0neg); | |
867 | ||
868 | SetUsePID(kFALSE);//(kTRUE); | |
869 | ||
870 | PrintAll(); | |
871 | ||
872 | for(Int_t iiv=0;iiv<nvars;iiv++){ | |
873 | delete [] prodcutsval[iiv]; | |
874 | } | |
875 | delete [] prodcutsval; | |
876 | prodcutsval=NULL; | |
877 | delete [] ptbins; | |
878 | ptbins=NULL; | |
879 | ||
880 | ||
881 | delete pidObjBachelor; | |
882 | pidObjBachelor=NULL; | |
883 | ||
884 | delete pidObjV0pos; | |
885 | pidObjV0pos=NULL; | |
886 | ||
887 | delete pidObjV0neg; | |
888 | pidObjV0neg=NULL; | |
889 | ||
890 | return; | |
891 | } | |
892 | //------------------ | |
893 | void AliRDHFCutsLctoV0::SetStandardCutsPbPb2010() { | |
894 | ||
895 | SetName("LctoV0ProductionCuts"); | |
896 | SetTitle("Production cuts for Lc->V0+bachelor analysis"); | |
897 | ||
898 | SetStandardCutsPP2010(); | |
899 | ||
900 | return; | |
901 | } | |
902 | //------------------ | |
903 | void AliRDHFCutsLctoV0::SetStandardCutsPbPb2011() { | |
904 | ||
905 | // Default 2010 PbPb cut object | |
906 | SetStandardCutsPbPb2010(); | |
907 | ||
908 | // | |
909 | // Enable all 2011 PbPb run triggers | |
34595b3c | 910 | // |
e7af8919 | 911 | SetTriggerClass(""); |
912 | ResetMaskAndEnableMBTrigger(); | |
913 | EnableCentralTrigger(); | |
914 | EnableSemiCentralTrigger(); | |
915 | ||
916 | } | |
34595b3c | 917 | //----------------------- |
918 | Int_t AliRDHFCutsLctoV0::GetV0Type(){ | |
919 | ||
920 | const Int_t nvars = this->GetNVars() ; | |
921 | //Float_t *vArray =GetCuts(); | |
922 | //fV0Type = vArray[nvars-1]; | |
923 | fV0Type = (this->GetCuts())[nvars-1]; | |
924 | //this->GetCuts(vArray); | |
925 | TString *sVarNames=GetVarNames(); | |
926 | ||
927 | if(sVarNames[nvars-1].Contains("V0 type")) return (Int_t)fV0Type; | |
928 | else {AliInfo("AliRDHFCutsLctoV0 Last variable is not the Vo type!!!"); return -999;} | |
929 | } |