AliPhysics  61b3849 (61b3849)
AliRDHFCutsLctopKpi.cxx
Go to the documentation of this file.
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 
16 /* $Id$ */
17 
19 //
20 // Class for cuts on AOD reconstructed Lc->pKpi
21 //
22 // Author: A.Dainese, andrea.dainese@pd.infn.it
24 
25 #include <TDatabasePDG.h>
26 #include <Riostream.h>
27 #include <AliAnalysisManager.h>
28 #include <AliInputEventHandler.h>
29 #include <AliPIDResponse.h>
30 
31 #include "AliRDHFCutsLctopKpi.h"
33 #include "AliRDHFCuts.h"
34 #include "AliAODTrack.h"
35 #include "AliESDtrack.h"
36 #include "AliKFParticle.h"
37 #include "AliESDVertex.h"
38 
39 using std::cout;
40 using std::endl;
41 
43 ClassImp(AliRDHFCutsLctopKpi);
45 
46 //--------------------------------------------------------------------------
48 AliRDHFCuts(name),
49 fPidObjprot(0),
50 fPidObjpion(0),
51 fUseImpParProdCorrCut(kFALSE),
52 fPIDStrategy(kNSigma),
53 fCutsStrategy(kStandard),
54 fUseSpecialCut(kFALSE)
55 {
56  //
57  // Default Constructor
58  //
59  Int_t nvars=13;
60  SetNVars(nvars);
61  TString varNames[13]={"inv. mass [GeV]",
62  "pTK [GeV/c]",
63  "pTP [GeV/c]",
64  "d0K [cm] lower limit!",
65  "d0Pi [cm] lower limit!",
66  "dist12 (cm)",
67  "sigmavert (cm)",
68  "dist prim-sec (cm)",
69  "pM=Max{pT1,pT2,pT3} (GeV/c)",
70  "cosThetaPoint",
71  "Sum d0^2 (cm^2)",
72  "dca cut (cm)",
73  "cut on pTpion [GeV/c]"};
74  Bool_t isUpperCut[13]={kTRUE,
75  kFALSE,
76  kFALSE,
77  kFALSE,
78  kFALSE,
79  kFALSE,
80  kTRUE,
81  kFALSE,
82  kFALSE,
83  kFALSE,
84  kFALSE,
85  kTRUE,
86  kFALSE
87  };
88  SetVarNames(nvars,varNames,isUpperCut);
89  Bool_t forOpt[13]={kFALSE,
90  kTRUE,
91  kTRUE,
92  kFALSE,
93  kFALSE,
94  kFALSE,
95  kFALSE,
96  kTRUE,
97  kFALSE,
98  kFALSE,
99  kFALSE,
100  kFALSE,
101  kTRUE};
102  SetVarsForOpt(4,forOpt);
103  Float_t limits[2]={0,999999999.};
104  SetPtBins(2,limits);
105  for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies)
106  fPIDThreshold[ispecies]=0.;
107 }
108 //--------------------------------------------------------------------------
110  AliRDHFCuts(source),
111  fPidObjprot(0x0),
112  fPidObjpion(0x0),
114  fPIDStrategy(source.fPIDStrategy),
117 {
118  //
119  // Copy constructor
120  //
121  if (source.fPidObjprot) fPidObjprot = new AliAODPidHF(*(source.fPidObjprot));
122  else fPidObjprot = new AliAODPidHF();
123  if (source.fPidObjpion) fPidObjpion = new AliAODPidHF(*(source.fPidObjpion));
124  else fPidObjpion = new AliAODPidHF();
125  memcpy(fPIDThreshold,source.fPIDThreshold,AliPID::kSPECIES*sizeof(Double_t));
126 }
127 //--------------------------------------------------------------------------
129 {
130  //
131  // assignment operator
132  //
133  if(this != &source) {
134 
135  AliRDHFCuts::operator=(source);
136  delete fPidObjprot;
137  fPidObjprot = new AliAODPidHF(*(source.fPidObjprot));
138  delete fPidObjpion;
139  fPidObjpion = new AliAODPidHF(*(source.fPidObjpion));
140  fPIDStrategy=source.fPIDStrategy;
142  memcpy(fPIDThreshold,source.fPIDThreshold,AliPID::kSPECIES*sizeof(Double_t));
143  }
144 
145  return *this;
146 }
147 //---------------------------------------------------------------------------
149  //
150  // // Default Destructor
151  //
152  if(fPidObjpion){
153  delete fPidObjpion;
154  fPidObjpion=0;
155  }
156  if(fPidObjprot){
157  delete fPidObjprot;
158  fPidObjprot=0;
159  }
160 
161 }
162 
163 //---------------------------------------------------------------------------
165  //
166  // Fills in vars the values of the variables
167  //
168 
169  if(nvars!=fnVarsForOpt) {
170  printf("AliRDHFCutsLctopKpi::GetCutsVarsForOpt: wrong number of variables\n");
171  return;
172  }
173 
175 
176  Int_t iter=-1;
177  if(fVarsForOpt[0]){
178  iter++;
179  vars[iter]=dd->InvMassLcpKpi();
180  }
181  if(fVarsForOpt[1]){
182  iter++;
183  for(Int_t iprong=0;iprong<3;iprong++){
184  if(TMath::Abs(pdgdaughters[iprong])==321) {
185  vars[iter]=dd->PtProng(iprong);
186  }
187  }
188  }
189  if(fVarsForOpt[2]){
190  iter++;
191  for(Int_t iprong=0;iprong<3;iprong++){
192  if(TMath::Abs(pdgdaughters[iprong])==2212) {
193  vars[iter]=dd->PtProng(iprong);
194  }
195  }
196  }
197  if(fVarsForOpt[3]){
198  iter++;
199  for(Int_t iprong=0;iprong<3;iprong++){
200  if(TMath::Abs(pdgdaughters[iprong])==2212) {
201  vars[iter]=dd->Getd0Prong(iprong);
202  }
203  }
204  }
205  if(fVarsForOpt[4]){
206  iter++;
207  for(Int_t iprong=0;iprong<3;iprong++){
208  if(TMath::Abs(pdgdaughters[iprong])==211) {
209  vars[iter]=dd->Getd0Prong(iprong);
210  }
211  }
212  }
213  if(fVarsForOpt[5]){
214  iter++;
215  vars[iter]=dd->GetDist12toPrim();
216  }
217  if(fVarsForOpt[6]){
218  iter++;
219  vars[iter]=dd->GetSigmaVert(aod);
220  }
221  if(fVarsForOpt[7]){
222  iter++;
223  vars[iter] = dd->DecayLength();
224  }
225  if(fVarsForOpt[8]){
226  iter++;
227  Float_t ptmax=0;
228  for(Int_t i=0;i<3;i++){
229  if(dd->PtProng(i)>ptmax)ptmax=dd->PtProng(i);
230  }
231  vars[iter]=ptmax;
232  }
233  if(fVarsForOpt[9]){
234  iter++;
235  vars[iter]=dd->CosPointingAngle();
236  }
237  if(fVarsForOpt[10]){
238  iter++;
239  vars[iter]=dd->Getd0Prong(0)*dd->Getd0Prong(0)+dd->Getd0Prong(1)*dd->Getd0Prong(1)+dd->Getd0Prong(2)*dd->Getd0Prong(2);
240  }
241  if(fVarsForOpt[11]){
242  iter++;
243  vars[iter]=dd->GetDCA();
244  }
245  if(fVarsForOpt[12]){
246  iter++;
247  for(Int_t iprong=0;iprong<3;iprong++){
248  if(TMath::Abs(pdgdaughters[iprong])==211) {
249  vars[iter]=dd->PtProng(iprong);
250  }
251  }
252  }
253 
254  return;
255 }
256 //---------------------------------------------------------------------------
258  //
259  // Apply selection
260  //
261 
262  if(!fCutsRD){
263  AliError("Cut matrice not inizialized. Exit...\n");
264  return 0;
265  }
266  //PrintAll();
268 
269  if(!d){
270  AliError("AliAODRecoDecayHF3Prong null \n");
271  return 0;
272  }
273 
274 
275  if(fKeepSignalMC) if(IsSignalMC(d,aod,4122)) return 3;
276 
277  Int_t returnvalue=3;
278  Int_t returnvaluePID=3;
279 
280  if(d->Pt()<fMinPtCand) return 0;
281  if(d->Pt()>fMaxPtCand) return 0;
282 
284 
285 
286  // selection on daughter tracks
287  if(selectionLevel==AliRDHFCuts::kAll ||
288  selectionLevel==AliRDHFCuts::kTracks) {
289  if(!AreDaughtersSelected(d,aod)) return 0;
290  }
291 
292 
293  // PID selection
294  if(selectionLevel==AliRDHFCuts::kAll ||
295  selectionLevel==AliRDHFCuts::kCandidate||
296  selectionLevel==AliRDHFCuts::kPID) {
297  switch (fPIDStrategy) {
298  case kNSigma:
299  returnvaluePID = IsSelectedPID(d);
300  break;
301  case kNSigmaMin:
302  returnvaluePID = IsSelectedPID(d);
303  break;
304  case kNSigmaPbPb:
305  returnvaluePID = IsSelectedNSigmaPbPb(d);
306  break;
307  case kCombined:
308  returnvaluePID = IsSelectedCombinedPID(d);
309  break;
310  case kCombinedSoft:
311  returnvaluePID = IsSelectedCombinedPIDSoft(d);
312  break;
313  case kNSigmaStrong:
314  returnvaluePID = IsSelectedPIDStrong(d);
315  break;
316  case kCombinedpPb:
317  returnvaluePID = IsSelectedCombinedPIDpPb(d);
318  break;
319  case kCombinedpPb2:
320  returnvaluePID = IsSelectedCombinedPIDpPb2(d);
321  break;
322  case kCombinedProb:
323  returnvaluePID = IsSelectedCombinedPIDProb(d);
324  break;
325  }
326  fIsSelectedPID=returnvaluePID;
327  }
328  // if(fUsePID || selectionLevel==AliRDHFCuts::kPID) returnvaluePID = IsSelectedCombinedPID(d); // to test!!
329  if(returnvaluePID==0) return 0;
330 
331 
332 
333 
334  // selection on candidate
335  if(selectionLevel==AliRDHFCuts::kAll ||
336  selectionLevel==AliRDHFCuts::kCandidate) {
337 
338  Double_t pt=d->Pt();
339 
340  Int_t ptbin=PtBin(pt);
341 
342  Double_t mLcpKpi=0.,mLcpiKp=0.;
343  Int_t okLcpKpi=1,okLcpiKp=1;
344 
345  Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
346 
347  mLcpKpi=d->InvMassLcpKpi();
348  mLcpiKp=d->InvMassLcpiKp();
349 
350  if(TMath::Abs(mLcpKpi-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okLcpKpi = 0;
351  if(TMath::Abs(mLcpiKp-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okLcpiKp = 0;
352  if(!okLcpKpi && !okLcpiKp) return 0;
353 
354  switch (fCutsStrategy) {
355 
356  case kStandard:
357  if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)]) return 0;//Kaon
358  if(d->Pt()>=3. && d->PProng(1)<0.55) return 0;
359  if(fUseSpecialCut) {
360  if(TMath::Abs(d->PtProng(0)) < TMath::Abs(d->PtProng(2)) )okLcpKpi=0;
361  if(TMath::Abs(d->PtProng(2)) < TMath::Abs(d->PtProng(0)) )okLcpiKp=0;
362  }
363  if((TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)]) || (TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(12,ptbin)])) okLcpKpi=0;
364  if((TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)]) || (TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(12,ptbin)]))okLcpiKp=0;
365  if(!okLcpKpi && !okLcpiKp) return 0;
366  //2track cuts
367  if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]) return 0;
368  if(d->GetDist12toPrim()>0.5) return 0;
369  if(d->GetDist23toPrim()>0.5) return 0;
371  if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.) return 0;
372  }
373  //sec vert
374  if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
375  if(d->DecayLength()>0.5) return 0;
376 
377  // Double_t sumd0s=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
378  // if(sumd0s<fCutsRD[GetGlobalIndex(10,ptbin)]) return 0;
379  if((d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(10,ptbin)]) return 0;
380 
381  if(TMath::Abs(d->PtProng(0))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(1))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(2))<fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
382  if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)]) return 0;
383  if(d->GetSigmaVert(aod)>fCutsRD[GetGlobalIndex(6,ptbin)]) return 0;
384 
385  //DCA
386  for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) return 0;
387 
388  break;
389 
390  case kKF:
391  Int_t pdgs[3]={0,321,0};
392  Bool_t constraint=kFALSE;
393  if(fCutsRD[GetGlobalIndex(1,ptbin)]>0.) constraint=kTRUE;
394  Double_t field=aod->GetMagneticField();
395  if (returnvaluePID==1 || returnvaluePID==3){
396 
397  pdgs[0]=2122;pdgs[2]=211;
398  AliKFParticle *lc1=ReconstructKF(d,pdgs,field,constraint);
399  if(!lc1){
400  okLcpKpi=0;
401  }else{
402  if(lc1->GetChi2()/lc1->GetNDF()>fCutsRD[GetGlobalIndex(2,ptbin)]) okLcpKpi=0;
403  }
404  } else if(returnvaluePID>=2){
405 
406  pdgs[0]=211;pdgs[2]=2212;
407  AliKFParticle *lc2=ReconstructKF(d,pdgs,field,constraint);
408  if(!lc2){
409  okLcpiKp=0;
410  }else{
411  if(lc2->GetChi2()/lc2->GetNDF()>fCutsRD[GetGlobalIndex(2,ptbin)])okLcpiKp=0;
412  }
413  }
414  break;
415 
416  }
417 
418  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
419  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
420  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
421 
422  }
423 
424 
425  Int_t returnvalueTot=CombinePIDCuts(returnvalue,returnvaluePID);
426  return returnvalueTot;
427 }
428 //---------------------------------------------------------------------------
430 
431 
432  if(!fUsePID || !obj) return 3;
433  Int_t okLcpKpi=0,okLcpiKp=0;
434  Int_t returnvalue=0;
435  Bool_t isPeriodd=fPidHF->GetOnePad();
436  Bool_t isMC=fPidHF->GetMC();
437  Bool_t ispion0=kTRUE,ispion2=kTRUE;
438  Bool_t isproton0=kFALSE,isproton2=kFALSE;
439  Bool_t iskaon1=kFALSE;
440  if(isPeriodd) {
441  fPidObjprot->SetOnePad(kTRUE);
442  fPidObjpion->SetOnePad(kTRUE);
443  }
444  if(isMC) {
445  fPidObjprot->SetMC(kTRUE);
446  fPidObjpion->SetMC(kTRUE);
447  }
448 
449  if(fPidObjprot->GetPidResponse()==0x0){
450  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
451  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
452  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
453  fPidObjprot->SetPidResponse(pidResp);
454  }
455  if(fPidObjpion->GetPidResponse()==0x0){
456  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
457  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
458  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
459  fPidObjpion->SetPidResponse(pidResp);
460  }
461  if(fPidHF->GetPidResponse()==0x0){
462  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
463  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
464  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
465  fPidHF->SetPidResponse(pidResp);
466  }
467 
468  for(Int_t i=0;i<3;i++){
469  AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
470  if(!track) return 0;
471  // identify kaon
472  if(track->P()<0.55){
473  fPidHF->SetTOF(kFALSE);
474  fPidHF->SetTOFdecide(kFALSE);
475  }
476  if(i==1) {
477  Int_t isKaon=0;
478  isKaon=fPIDStrategy==kNSigmaMin?fPidHF->MatchTPCTOFMin(track,3):fPidHF->MakeRawPid(track,3);
479  if(isKaon>=1) iskaon1=kTRUE;
480  if(track->P()<0.55){
481  fPidHF->SetTOF(kTRUE);
482  fPidHF->SetTOFdecide(kTRUE);
483  }
484 
485 
486  if(isKaon>=1) iskaon1=kTRUE;
487 
488  if(!iskaon1) return 0;
489 
490  }else{
491  //pion or proton
492  if(track->P()<1.){
493  fPidObjprot->SetTOF(kFALSE);
494  fPidObjprot->SetTOFdecide(kFALSE);
495  }
496 
497  Int_t isProton=0;
499  Int_t isPion=0;
501 
502  if(track->P()<1.){
503  fPidObjprot->SetTOF(kTRUE);
504  fPidObjprot->SetTOFdecide(kTRUE);
505  }
506 
507 
508  if(i==0) {
509  if(isPion<0) ispion0=kFALSE;
510  if(isProton>=1) isproton0=kTRUE;
511 
512  }
513  if(!ispion0 && !isproton0) return 0;
514  if(i==2) {
515  if(isPion<0) ispion2=kFALSE;
516  if(isProton>=1) isproton2=kTRUE;
517  }
518 
519  }
520  }
521 
522  if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
523  if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
524  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
525  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
526  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
527 
528  return returnvalue;
529 }
530 
531 //--------------------------------------------------------------------------
532 
534 
535 
536  if(!fUsePID || !obj) return 3;
537  Int_t okLcpKpi=0,okLcpiKp=0;
538  Int_t returnvalue=0;
539  Bool_t isPeriodd=fPidHF->GetOnePad();
540  Bool_t isMC=fPidHF->GetMC();
541  Bool_t ispion0=kTRUE,ispion2=kTRUE;
542  Bool_t isproton0=kFALSE,isproton2=kFALSE;
543  Bool_t iskaon1=kFALSE;
544  if(isPeriodd) {
545  fPidObjprot->SetOnePad(kTRUE);
546  fPidObjpion->SetOnePad(kTRUE);
547  }
548  if(isMC) {
549  fPidObjprot->SetMC(kTRUE);
550  fPidObjpion->SetMC(kTRUE);
551  }
552 
553  if(fPidObjprot->GetPidResponse()==0x0){
554  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
555  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
556  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
557  fPidObjprot->SetPidResponse(pidResp);
558  }
559  if(fPidObjpion->GetPidResponse()==0x0){
560  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
561  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
562  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
563  fPidObjpion->SetPidResponse(pidResp);
564  }
565  if(fPidHF->GetPidResponse()==0x0){
566  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
567  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
568  AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
569  fPidHF->SetPidResponse(pidResp);
570  }
571 
572  for(Int_t i=0;i<3;i++){
573  AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
574  if(!track) return 0;
575 
576  if(i==1) {
577  //kaon
578  Int_t isKaon=fPidHF->MakeRawPid(track,3);
579  if(isKaon>=1) iskaon1=kTRUE;
580  if(!iskaon1) return 0;
581  }
582 
583  else {
584  //pion or proton
585  Int_t isProton=fPidObjprot->MakeRawPid(track,4);
586  Int_t isPion=fPidObjpion->MakeRawPid(track,2);
587 
588  if(i==0) {
589  if(isPion<0) ispion0=kFALSE;
590  if(isProton>=1) isproton0=kTRUE;
591  }
592  if(!ispion0 && !isproton0) return 0;
593 
594  if(i==2) {
595  if(isPion<0) ispion2=kFALSE;
596  if(isProton>=1) isproton2=kTRUE;
597  }
598  }
599  }
600 
601  if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
602  if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
603  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
604  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
605  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
606 
607  return returnvalue;
608 }
609 
610 
611 
612 
613 //---------------------------------------------------------------------------
615 
616  if(!fUsePID || !obj) {return 3;}
617  Int_t okLcpKpi=0,okLcpiKp=0;
618  Int_t returnvalue=0;
619  Bool_t isPeriodd=fPidHF->GetOnePad();
620  Bool_t isMC=fPidHF->GetMC();
621 
622  if(isPeriodd) {
623  fPidObjprot->SetOnePad(kTRUE);
624  fPidObjpion->SetOnePad(kTRUE);
625  }
626  if(isMC) {
627  fPidObjprot->SetMC(kTRUE);
628  fPidObjpion->SetMC(kTRUE);
629  }
630 
631  AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
632  AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
633  AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
634  if (!track0 || !track1 || !track2) return 0;
635  Double_t prob0[AliPID::kSPECIES];
636  Double_t prob1[AliPID::kSPECIES];
637  Double_t prob2[AliPID::kSPECIES];
638  if(obj->Pt()<3. && track0->P()<1.) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
639  fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
640  if(obj->Pt()<3. && track0->P()<1.) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
641 
642  if(obj->Pt()<3. && track1->P()<0.55) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
643  fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
644  if(obj->Pt()<3. && track1->P()<0.55) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
645 
646  if(obj->Pt()<3. && track2->P()<1.) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
647  fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
648  if(obj->Pt()<3. && track2->P()<1.) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
649 
650  if(fPIDThreshold[AliPID::kPion]>0. && fPIDThreshold[AliPID::kKaon]>0. && fPIDThreshold[AliPID::kProton]>0.){
651  okLcpiKp= (prob0[AliPID::kPion ]>fPIDThreshold[AliPID::kPion ])
652  &&(prob1[AliPID::kKaon ]>fPIDThreshold[AliPID::kKaon ])
654  okLcpKpi= (prob0[AliPID::kProton]>fPIDThreshold[AliPID::kProton])
655  &&(prob1[AliPID::kKaon ]>fPIDThreshold[AliPID::kKaon ])
656  &&(prob2[AliPID::kPion ]>fPIDThreshold[AliPID::kPion ]);
657  }else{
658  //pion or proton
659 
660 
661  if(TMath::MaxElement(AliPID::kSPECIES,prob1) == prob1[AliPID::kKaon]){
662  if(TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kPion]) okLcpKpi = 1;
663  if(TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kPion]) okLcpiKp = 1;
664  }
665  }
666 
667  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
668  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
669  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
670 
671  return returnvalue;
672 }
673 //-----------------------
674 Int_t AliRDHFCutsLctopKpi::CombinePIDCuts(Int_t returnvalue, Int_t returnvaluePID) const {
675 
676  Int_t returnvalueTot=0;
677  Int_t okLcpKpi=0,okLcpiKp=0;
678  if(returnvaluePID==1){
679  if(returnvalue==1 || returnvalue==3) okLcpKpi=1;
680  }
681  if(returnvaluePID==2){
682  if(returnvalue>=2) okLcpiKp=1;
683  }
684  if(returnvaluePID==3 && returnvalue>0){
685  if(returnvalue==1 || returnvalue==3) okLcpKpi=1;
686  if(returnvalue>=2) okLcpiKp=1;
687  }
688 
689  if(okLcpKpi) returnvalueTot=1; //cuts passed as Lc->pKpi
690  if(okLcpiKp) returnvalueTot=2; //cuts passed as Lc->piKp
691  if(okLcpKpi && okLcpiKp) returnvalueTot=3; //cuts passed as both pKpi and piKp
692  return returnvalueTot;
693 }
694 //----------------------------------
696 
697  SetName("LctopKpiProdCuts");
698  SetTitle("Production cuts for Lc analysis");
699 
700  AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
701  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
702  esdTrackCuts->SetRequireTPCRefit(kTRUE);
703  esdTrackCuts->SetMinNClustersTPC(70);
704  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
705  AliESDtrackCuts::kAny);
706  esdTrackCuts->SetRequireITSRefit(kTRUE);
707  esdTrackCuts->SetMinNClustersITS(4);
708  esdTrackCuts->SetMinDCAToVertexXY(0.);
709  esdTrackCuts->SetEtaRange(-0.8,0.8);
710  esdTrackCuts->SetPtRange(0.3,1.e10);
711  AddTrackCuts(esdTrackCuts);
712  delete esdTrackCuts;
713  esdTrackCuts=NULL;
714 
715  const Int_t nptbins=8;
716  const Int_t nvars=13;
717  Float_t* ptbins;
718  ptbins=new Float_t[nptbins+1];
719 
720  ptbins[0]=1.;
721  ptbins[1]=2.;
722  ptbins[2]=3.;
723  ptbins[3]=4.;
724  ptbins[4]=5.;
725  ptbins[5]=6.;
726  ptbins[6]=8.;
727  ptbins[7]=10.;
728  ptbins[8]=20.;
729 
730  SetGlobalIndex(nvars,nptbins);
731  SetPtBins(nptbins+1,ptbins);
732 
733  Float_t** prodcutsval;
734  prodcutsval=new Float_t*[nvars];
735  for(Int_t iv=0;iv<nvars;iv++){
736  prodcutsval[iv]=new Float_t[nptbins];
737  }
738 
739  for(Int_t ipt=0;ipt<nptbins;ipt++){
740  prodcutsval[0][ipt]=0.13;
741  prodcutsval[1][ipt]=0.4;
742  prodcutsval[2][ipt]=0.4;
743  prodcutsval[3][ipt]=0.;
744  prodcutsval[4][ipt]=0.;
745  prodcutsval[5][ipt]=0.;
746  prodcutsval[6][ipt]=0.06;
747  prodcutsval[7][ipt]=0.005;
748  prodcutsval[8][ipt]=0.;
749  prodcutsval[9][ipt]=0.;
750  prodcutsval[10][ipt]=0.;
751  prodcutsval[11][ipt]=0.05;
752  prodcutsval[12][ipt]=0.4;
753  }
754  SetCuts(nvars,nptbins,prodcutsval);
755 
756  AliAODPidHF* pidObjK=new AliAODPidHF();
757  Double_t sigmasK[5]={3.,1.,1.,3.,2.};
758  pidObjK->SetSigma(sigmasK);
759  pidObjK->SetAsym(kTRUE);
760  pidObjK->SetMatch(1);
761  pidObjK->SetTPC(kTRUE);
762  pidObjK->SetTOF(kTRUE);
763  pidObjK->SetITS(kTRUE);
764  Double_t plimK[2]={0.5,0.8};
765  pidObjK->SetPLimit(plimK,2);
766  pidObjK->SetTOFdecide(kTRUE);
767 
768  SetPidHF(pidObjK);
769 
770  AliAODPidHF* pidObjpi=new AliAODPidHF();
771  pidObjpi->SetTPC(kTRUE);
772  Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
773  pidObjpi->SetSigma(sigmaspi);
774  pidObjpi->SetTOFdecide(kTRUE);
775  SetPidpion(pidObjpi);
776 
777  AliAODPidHF* pidObjp=new AliAODPidHF();
778  Double_t sigmasp[5]={3.,1.,1.,3.,2.};
779  pidObjp->SetSigma(sigmasp);
780  pidObjp->SetAsym(kTRUE);
781  pidObjp->SetMatch(1);
782  pidObjp->SetTPC(kTRUE);
783  pidObjp->SetTOF(kTRUE);
784  pidObjp->SetITS(kTRUE);
785  Double_t plimp[2]={1.,2.};
786  pidObjp->SetPLimit(plimp,2);
787  pidObjp->SetTOFdecide(kTRUE);
788 
789  SetPidprot(pidObjp);
790 
791  SetUsePID(kTRUE);
792  SetOptPileup(kTRUE);
793 
794  PrintAll();
795 
796  for(Int_t iiv=0;iiv<nvars;iiv++){
797  delete [] prodcutsval[iiv];
798  }
799  delete [] prodcutsval;
800  prodcutsval=NULL;
801  delete [] ptbins;
802  ptbins=NULL;
803 
804  delete pidObjK;
805  pidObjK=NULL;
806  delete pidObjpi;
807  pidObjpi=NULL;
808  delete pidObjp;
809  pidObjp=NULL;
810 
811  return;
812 }
813 //------------------
815 
816  SetName("LctopKpiProdCuts");
817  SetTitle("Production cuts for Lc analysis");
818 
819  AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
820 
821  esdTrackCuts->SetRequireTPCRefit(kTRUE);
822  esdTrackCuts->SetMinNClustersTPC(70);
823  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
824  AliESDtrackCuts::kAny);
825  esdTrackCuts->SetRequireITSRefit(kTRUE);
826  esdTrackCuts->SetMinNClustersITS(4);
827  esdTrackCuts->SetMinDCAToVertexXYPtDep("0.0100*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
828  esdTrackCuts->SetEtaRange(-0.8,0.8);
829  esdTrackCuts->SetMaxDCAToVertexXY(1.);
830  esdTrackCuts->SetMaxDCAToVertexZ(1.);
831  esdTrackCuts->SetPtRange(0.49,1.e10);
832  AddTrackCuts(esdTrackCuts);
833  delete esdTrackCuts;
834  esdTrackCuts=NULL;
835 
836  const Int_t nptbins=8;
837  const Int_t nvars=13;
838  Float_t* ptbins;
839  ptbins=new Float_t[nptbins+1];
840 
841  ptbins[0]=1.;
842  ptbins[1]=2.;
843  ptbins[2]=3.;
844  ptbins[3]=4.;
845  ptbins[4]=5.;
846  ptbins[5]=6.;
847  ptbins[6]=8.;
848  ptbins[7]=10.;
849  ptbins[8]=99999.;
850 
851 
852  SetGlobalIndex(nvars,nptbins);
853  SetPtBins(nptbins+1,ptbins);
854 
855  Float_t** prodcutsval;
856  prodcutsval=new Float_t*[nvars];
857  for(Int_t iv=0;iv<nvars;iv++){
858  prodcutsval[iv]=new Float_t[nptbins];
859  }
860 
861  for(Int_t ipt=0;ipt<nptbins;ipt++){
862  prodcutsval[0][ipt]=0.13;
863  prodcutsval[1][ipt]=0.5;
864  prodcutsval[2][ipt]=0.6;
865  prodcutsval[3][ipt]=0.;
866  prodcutsval[4][ipt]=0.;
867  prodcutsval[5][ipt]=0.01;
868  prodcutsval[6][ipt]=0.04;
869  prodcutsval[7][ipt]=0.006;
870  prodcutsval[8][ipt]=0.8;
871  prodcutsval[9][ipt]=0.3;
872  prodcutsval[10][ipt]=0.;
873  prodcutsval[11][ipt]=0.05;
874  prodcutsval[12][ipt]=0.4;
875  }
876  SetCuts(nvars,nptbins,prodcutsval);
877 
878  AliAODPidHF* pidObj=new AliAODPidHF();
879  pidObj->SetTPC(kTRUE);
880  pidObj->SetTOF(kTRUE);
881  SetPidHF(pidObj);
882  SetPidpion(pidObj);
883  SetPidprot(pidObj);
884 
885 
886  // bayesian pid
887  GetPidHF()->SetUseCombined(kTRUE);
888  GetPidHF()->SetUseDefaultPriors(kTRUE);
890  for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies){
891  SetPIDThreshold(static_cast<AliPID::EParticleType>(ispecies),0);
892  }
894  SetUsePID(kTRUE);
895 
896 
897  PrintAll();
898 
899  for(Int_t iiv=0;iiv<nvars;iiv++){
900  delete [] prodcutsval[iiv];
901  }
902  delete [] prodcutsval;
903  prodcutsval=NULL;
904  delete [] ptbins;
905  ptbins=NULL;
906 
907  delete pidObj;
908  pidObj=NULL;
909 
910  return;
911 }
912 //------------------
913 AliKFParticle* AliRDHFCutsLctopKpi::ReconstructKF(AliAODRecoDecayHF3Prong *d,Int_t *pdgs,Double_t field,Bool_t constraint) const{
914  // Method to construct the KF particle from the candidate
915 
916  const Int_t nprongs=d->GetNProngs();
917  if(nprongs<=0) return 0x0;
918 
919  Int_t iprongs[nprongs];
920  for(Int_t i=0;i<nprongs;i++) iprongs[i]=i;
921 
922  Double_t mass[2]={0.,0.};
923 
924  AliKFParticle *decay=d->ApplyVertexingKF(iprongs,nprongs,pdgs,constraint,field,mass);
925  if(!decay) return 0x0;
926  AliESDVertex *vertexESD = new AliESDVertex(decay->Parameters(),
927  decay->CovarianceMatrix(),
928  decay->GetChi2(),
929  nprongs);
930  Double_t pos[3],cov[6],chi2perNDF;
931  vertexESD->GetXYZ(pos);
932  vertexESD->GetCovMatrix(cov);
933  chi2perNDF = vertexESD->GetChi2toNDF();
934  delete vertexESD; vertexESD=NULL;
935  AliAODVertex *vertexAOD = new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
936  d->SetSecondaryVtx(vertexAOD);
937  return decay;
938 }
939 
940 //------------------
942 
943  // Default 2010 PbPb cut object
945 
946  //
947  // Enable all 2011 PbPb run triggers
948  //
949  SetTriggerClass("");
953 }
954 //-----------------
955 
957 {
958  //
959  // // Checking if Lc is in fiducial acceptance region
960  // //
961  //
962  if(fMaxRapidityCand>-998.){
963  if(TMath::Abs(y) > fMaxRapidityCand) return kFALSE;
964  else return kTRUE;
965  }
966 
967  if(pt > 5.) {
968  // applying cut for pt > 5 GeV
969  AliDebug(2,Form("pt of Lc = %f (> 5), cutting at |y| < 0.8",pt));
970  if (TMath::Abs(y) > 0.8) return kFALSE;
971 
972  } else {
973  // appliying smooth cut for pt < 5 GeV
974  Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
975  Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
976  AliDebug(2,Form("pt of Lc = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
977  if (y < minFiducialY || y > maxFiducialY) return kFALSE;
978  }
979  //
980  return kTRUE;
981 }
982 //--------------------------------------------------------
984  if(!fUsePID || !obj) {return 3;}
985  Int_t okLcpKpi=0,okLcpiKp=0;
986  Int_t returnvalue=0;
987 
988  AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
989  AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
990  AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
991  if (!track0 || !track1 || !track2) return 0;
992  Double_t prob0[AliPID::kSPECIES];
993  Double_t prob1[AliPID::kSPECIES];
994  Double_t prob2[AliPID::kSPECIES];
995 
996  Bool_t isTOF0=fPidHF->CheckTOFPIDStatus((AliAODTrack*)obj->GetDaughter(0));
997  Bool_t isTOF1=fPidHF->CheckTOFPIDStatus((AliAODTrack*)obj->GetDaughter(1));
998  Bool_t isTOF2=fPidHF->CheckTOFPIDStatus((AliAODTrack*)obj->GetDaughter(2));
999 
1000 Bool_t isK1=kFALSE;
1001  if(isTOF1){ //kaon
1002  if(track1->P()<1.8) {
1003  fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
1004  if(obj->Pt()<3. && track1->P()<0.55) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1005  fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
1006 
1007  }else{
1008  AliAODTrack *trackaod1=(AliAODTrack*)(obj->GetDaughter(1));
1009  if(trackaod1->P()<0.55){
1010  fPidHF->SetTOF(kFALSE);
1011  fPidHF->SetTOFdecide(kFALSE);
1012  }
1013  Int_t isKaon=fPidHF->MakeRawPid(trackaod1,3);
1014  if(isKaon>=1) isK1=kTRUE;
1015  if(trackaod1->P()<0.55){
1016  fPidHF->SetTOF(kTRUE);
1017  fPidHF->SetTOFdecide(kTRUE);
1018  }
1019  }
1020  }else{
1021  if(track1->P()<0.8){
1022  fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1023  fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob0);
1024  }else{
1025  AliAODTrack *trackaod1=(AliAODTrack*)(obj->GetDaughter(1));
1026  if(trackaod1->P()<0.55){
1027  fPidHF->SetTOF(kFALSE);
1028  fPidHF->SetTOFdecide(kFALSE);
1029  }
1030  Int_t isKaon=fPidHF->MakeRawPid(trackaod1,3);
1031  if(isKaon>=1) isK1=kTRUE;
1032  if(trackaod1->P()<0.55){
1033  fPidHF->SetTOF(kTRUE);
1034  fPidHF->SetTOFdecide(kTRUE);
1035  }
1036  }
1037  }
1038 
1039  Bool_t ispi0=kFALSE;
1040  Bool_t isp0=kFALSE;
1041  Bool_t ispi2=kFALSE;
1042  Bool_t isp2=kFALSE;
1043 
1044  if(isTOF0){ //proton
1045  if(track0->P()<2.2) {
1046  fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
1047  if(obj->Pt()<3. && track0->P()<1.) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1048  fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
1049  }else{
1050  AliAODTrack *trackaod0=(AliAODTrack*)(obj->GetDaughter(0));
1051  if(trackaod0->P()<1.){
1052  fPidObjprot->SetTOF(kFALSE);
1053  fPidObjprot->SetTOFdecide(kFALSE);
1054  }
1055  Int_t isProton=fPidObjprot->MakeRawPid(trackaod0,4);
1056  if(isProton>=1) isp0=kTRUE;
1057  if(trackaod0->P()<1.){
1058  fPidObjprot->SetTOF(kTRUE);
1059  fPidObjprot->SetTOFdecide(kTRUE);
1060  }
1061  }
1062  }else{
1063  if(track0->P()<1.2){
1064  fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1065  fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
1066  }else{
1067  AliAODTrack *trackaod0=(AliAODTrack*)(obj->GetDaughter(0));
1068  if(trackaod0->P()<1.){
1069  fPidObjprot->SetTOF(kFALSE);
1070  fPidObjprot->SetTOFdecide(kFALSE);
1071  }
1072  Int_t isProton=fPidObjprot->MakeRawPid(trackaod0,4);
1073  if(isProton>=1) isp0=kTRUE;
1074  if(trackaod0->P()<1.){
1075  fPidObjprot->SetTOF(kTRUE);
1076  fPidObjprot->SetTOFdecide(kTRUE);
1077  }
1078  }
1079  }
1080 
1081  if(isTOF2){ //proton
1082  if(track2->P()<2.2) {
1083  fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
1084  if(obj->Pt()<3. && track2->P()<1.) fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1085  fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
1086  }else{
1087  AliAODTrack *trackaod2=(AliAODTrack*)(obj->GetDaughter(2));
1088  if(trackaod2->P()<1.){
1089  fPidObjprot->SetTOF(kFALSE);
1090  fPidObjprot->SetTOFdecide(kFALSE);
1091  }
1092  Int_t isProton=fPidObjprot->MakeRawPid(trackaod2,4);
1093  if(isProton>=1) isp2=kTRUE;
1094  if(trackaod2->P()<1.){
1095  fPidObjprot->SetTOF(kTRUE);
1096  fPidObjprot->SetTOFdecide(kTRUE);
1097  }
1098  }
1099  }else{
1100  if(track2->P()<1.2){
1101  fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1102  fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
1103  }else{
1104  AliAODTrack *trackaod2=(AliAODTrack*)(obj->GetDaughter(2));
1105  if(trackaod2->P()<1.){
1106  fPidObjprot->SetTOF(kFALSE);
1107  fPidObjprot->SetTOFdecide(kFALSE);
1108  }
1109  Int_t isProton=fPidObjprot->MakeRawPid(trackaod2,4);
1110  if(isProton>=1) isp2=kTRUE;
1111  if(trackaod2->P()<1.){
1112  fPidObjprot->SetTOF(kTRUE);
1113  fPidObjprot->SetTOFdecide(kTRUE);
1114  }
1115  }
1116  }
1117  AliAODTrack *trackaod2=(AliAODTrack*)(obj->GetDaughter(2));
1118  if(fPidObjpion->MakeRawPid(trackaod2,2)>=1)ispi2=kTRUE;
1119  AliAODTrack *trackaod0=(AliAODTrack*)(obj->GetDaughter(2));
1120  if(fPidObjpion->MakeRawPid(trackaod0,2)>=1)ispi0=kTRUE;
1121 
1122  if(TMath::MaxElement(AliPID::kSPECIES,prob1) == prob1[AliPID::kKaon]){
1123 
1124  if(TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kPion]) okLcpKpi = 1;
1125  if(TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kPion]) okLcpiKp = 1;
1126  }
1127 
1128  if(!isK1 && TMath::MaxElement(AliPID::kSPECIES,prob1) == prob1[AliPID::kKaon]) isK1=kTRUE;
1129  if(!ispi0 && TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kPion]) ispi0=kTRUE;
1130  if(!ispi2 && TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kPion]) ispi2=kTRUE;
1131  if(!isp0 && TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kProton]) isp0=kTRUE;
1132  if(!isp2 && TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kProton]) isp2=kTRUE;
1133  if(isK1 && ispi0 && isp2) okLcpiKp = 1;
1134  if(isK1 && isp0 && ispi2) okLcpKpi = 1;
1135 
1136  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
1137  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
1138  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
1139 
1140  return returnvalue;
1141 
1142 
1143 }
1144 //----------------------------------------------------------
1146 
1147 
1148  if(!fUsePID || !obj) return 3;
1149  Int_t okLcpKpi=0,okLcpiKp=0;
1150  Int_t returnvalue=0;
1151  Bool_t isPeriodd=fPidHF->GetOnePad();
1152  Bool_t isMC=fPidHF->GetMC();
1153  Bool_t ispion0=kTRUE,ispion2=kTRUE;
1154  Bool_t isproton0=kFALSE,isproton2=kFALSE;
1155  Bool_t iskaon1=kFALSE;
1156  if(isPeriodd) {
1157  fPidObjprot->SetOnePad(kTRUE);
1158  fPidObjpion->SetOnePad(kTRUE);
1159  }
1160  if(isMC) {
1161  fPidObjprot->SetMC(kTRUE);
1162  fPidObjpion->SetMC(kTRUE);
1163  }
1164 
1165  for(Int_t i=0;i<3;i++){
1166  AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
1167  if(!track) return 0;
1168  // identify kaon
1169  if(i==1) {
1170  Int_t isKaon=fPidHF->MakeRawPid(track,3);
1171  if(isKaon>=1) {
1172  iskaon1=kTRUE;
1173  if(fPidHF->MakeRawPid(track,2)>=1) iskaon1=kFALSE;
1174  }
1175  if(!iskaon1) return 0;
1176 
1177  }else{
1178  //pion or proton
1179 
1180  Int_t isProton=fPidObjprot->MakeRawPid(track,4);
1181  if(isProton>=1){
1182  if(fPidHF->MakeRawPid(track,2)>=1) isProton=-1;
1183  if(fPidHF->MakeRawPid(track,3)>=1) isProton=-1;
1184  }
1185 
1186  Int_t isPion=fPidObjpion->MakeRawPid(track,2);
1187  if(fPidHF->MakeRawPid(track,3)>=1) isPion=-1;
1188  if(fPidObjprot->MakeRawPid(track,4)>=1) isPion=-1;
1189 
1190 
1191  if(i==0) {
1192  if(isPion<0) ispion0=kFALSE;
1193  if(isProton>=1) isproton0=kTRUE;
1194 
1195  }
1196  if(!ispion0 && !isproton0) return 0;
1197  if(i==2) {
1198  if(isPion<0) ispion2=kFALSE;
1199  if(isProton>=1) isproton2=kTRUE;
1200  }
1201 
1202  }
1203  }
1204 
1205  if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
1206  if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
1207  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
1208  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
1209  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
1210 
1211  return returnvalue;
1212 }
1213 //--------------------
1215 
1216  if(!fUsePID || !obj) {return 3;}
1217  Int_t okLcpKpi=0,okLcpiKp=0;
1218  Int_t returnvalue=0;
1219 
1220  Bool_t isMC=fPidHF->GetMC();
1221 
1222 
1223  if(isMC) {
1224  fPidObjprot->SetMC(kTRUE);
1225  fPidObjpion->SetMC(kTRUE);
1226  }
1227 
1228  AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
1229  AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
1230  AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
1231  if (!track0 || !track1 || !track2) return 0;
1232  Double_t prob0[AliPID::kSPECIES];
1233  Double_t prob1[AliPID::kSPECIES];
1234  Double_t prob2[AliPID::kSPECIES];
1235 
1236  fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
1237  fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
1238  fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
1239 
1240 
1241  if(fPIDThreshold[AliPID::kPion]>0. && fPIDThreshold[AliPID::kKaon]>0. && fPIDThreshold[AliPID::kProton]>0.){
1242  okLcpiKp= (prob0[AliPID::kPion ]>fPIDThreshold[AliPID::kPion ])
1243  &&(prob1[AliPID::kKaon ]>fPIDThreshold[AliPID::kKaon ])
1245  okLcpKpi= (prob0[AliPID::kProton]>fPIDThreshold[AliPID::kProton])
1246  &&(prob1[AliPID::kKaon ]>fPIDThreshold[AliPID::kKaon ])
1247  &&(prob2[AliPID::kPion ]>fPIDThreshold[AliPID::kPion ]);
1248  }else{
1249  //pion or proton
1250 
1251 
1252  if(TMath::MaxElement(AliPID::kSPECIES,prob1) == prob1[AliPID::kKaon]){
1253  if(TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kPion]) okLcpKpi = 1;
1254  if(TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kPion]) okLcpiKp = 1;
1255  }
1256  }
1257 
1258  if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
1259  if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
1260  if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
1261 
1262  return returnvalue;
1263 }
1264 //-----------------------
1266 
1267  Int_t returnvalue =0;
1268  Double_t thresholdK =0.7;
1269  Double_t thresholdPi =0.3;
1270  Double_t thresholdPr =0.7;
1271 
1272  AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
1273  AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
1274  AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
1275 
1276  if (!track0 || !track1 || !track2) return 0;
1277  Double_t prob0[AliPID::kSPECIES];
1278  Double_t prob1[AliPID::kSPECIES];
1279  Double_t prob2[AliPID::kSPECIES];
1280 
1281  fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
1282  fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
1283  fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
1284 
1285  if(prob1[AliPID::kKaon]>thresholdK){
1286  if(TMath::MaxElement(AliPID::kSPECIES,prob0)>TMath::MaxElement(AliPID::kSPECIES,prob2)){
1287  if(((prob0[AliPID::kPion ]>prob0[AliPID::kProton ])&& prob0[AliPID::kPion]>thresholdPi) && prob2[AliPID::kProton]>thresholdPr) returnvalue=2;//piKp
1288  else if(((prob0[AliPID::kProton ]>prob0[AliPID::kPion ])&& prob0[AliPID::kProton]>thresholdPr) && prob2[AliPID::kPion]>thresholdPi)returnvalue =1;//pKpi
1289  }
1290 
1291  else if(TMath::MaxElement(AliPID::kSPECIES,prob0)<TMath::MaxElement(AliPID::kSPECIES,prob2)){
1292  if(((prob2[AliPID::kPion ]>prob2[AliPID::kProton ])&& prob2[AliPID::kPion]>thresholdPi) && prob0[AliPID::kProton]>thresholdPr) returnvalue=1; //pKpi
1293  else if(((prob2[AliPID::kProton ]>prob2[AliPID::kPion ])&& prob2[AliPID::kProton]>thresholdPr) && prob0[AliPID::kPion]>thresholdPi)returnvalue =2; //piKp
1294  }
1295 
1296  }
1297  return returnvalue;
1298 
1299 }
1300 //------------------------------------------------------
1302 
1303  SetName("LctopKpiProdCuts");
1304  SetTitle("Production cuts for Lc analysis");
1305 
1306  AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
1307  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1308  esdTrackCuts->SetRequireTPCRefit(kTRUE);
1309  esdTrackCuts->SetMinNClustersTPC(70);
1310  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1311  AliESDtrackCuts::kAny);
1312  esdTrackCuts->SetRequireITSRefit(kTRUE);
1313  esdTrackCuts->SetMinNClustersITS(4);
1314  esdTrackCuts->SetMinDCAToVertexXY(0.);
1315  esdTrackCuts->SetEtaRange(-0.8,0.8);
1316  esdTrackCuts->SetPtRange(0.3,1.e10);
1317  AddTrackCuts(esdTrackCuts);
1318  delete esdTrackCuts;
1319  esdTrackCuts=NULL;
1320 
1321  const Int_t nvars=13;
1322  const Int_t nptbins=9;
1323  Float_t* ptbins;
1324  ptbins=new Float_t[nptbins+1];
1325  ptbins[0]=0.;
1326  ptbins[1]=1.;
1327  ptbins[2]=2.;
1328  ptbins[3]=3.;
1329  ptbins[4]=4.;
1330  ptbins[5]=5.;
1331  ptbins[6]=6.;
1332  ptbins[7]=8.;
1333  ptbins[8]=10.;
1334  ptbins[9]=99999.;
1335 
1336  SetGlobalIndex(nvars,nptbins);
1337  SetPtBins(nptbins+1,ptbins);
1338 
1339  Float_t** prodcutsval;
1340  prodcutsval=new Float_t*[nvars];
1341  for(Int_t iv=0;iv<nvars;iv++){
1342  prodcutsval[iv]=new Float_t[nptbins];
1343  }
1344 
1345  for(Int_t ipt=0;ipt<nptbins;ipt++){
1346  prodcutsval[0][ipt]=0.13;
1347  prodcutsval[1][ipt]=0.4;
1348  prodcutsval[2][ipt]=0.4;
1349  prodcutsval[3][ipt]=0.;
1350  prodcutsval[4][ipt]=0.;
1351  prodcutsval[5][ipt]=0.;
1352  prodcutsval[6][ipt]=0.06;
1353  prodcutsval[7][ipt]=0.;
1354  prodcutsval[8][ipt]=0.;
1355  prodcutsval[9][ipt]=0.;
1356  prodcutsval[10][ipt]=0.;
1357  prodcutsval[11][ipt]=0.05;
1358  prodcutsval[12][ipt]=0.4;
1359  }
1360  SetCuts(nvars,nptbins,prodcutsval);
1361 
1362  AliAODPidHF* pidObjK=new AliAODPidHF();
1363  Double_t sigmasK[5]={3.,1.,1.,3.,2.};
1364  pidObjK->SetSigma(sigmasK);
1365  pidObjK->SetAsym(kTRUE);
1366  pidObjK->SetMatch(1);
1367  pidObjK->SetTPC(kTRUE);
1368  pidObjK->SetTOF(kTRUE);
1369  pidObjK->SetITS(kTRUE);
1370  Double_t plimK[2]={0.5,0.8};
1371  pidObjK->SetPLimit(plimK,2);
1372  pidObjK->SetTOFdecide(kTRUE);
1373  SetPidHF(pidObjK);
1374 
1375  AliAODPidHF* pidObjpi=new AliAODPidHF();
1376  pidObjpi->SetTPC(kTRUE);
1377  Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
1378  pidObjpi->SetSigma(sigmaspi);
1379  pidObjpi->SetTOFdecide(kTRUE);
1380  SetPidpion(pidObjpi);
1381 
1382  AliAODPidHF* pidObjp=new AliAODPidHF();
1383  Double_t sigmasp[5]={3.,1.,1.,3.,2.};
1384  pidObjp->SetSigma(sigmasp);
1385  pidObjp->SetAsym(kTRUE);
1386  pidObjp->SetMatch(1);
1387  pidObjp->SetTPC(kTRUE);
1388  pidObjp->SetTOF(kTRUE);
1389  pidObjp->SetITS(kTRUE);
1390  Double_t plimp[2]={1.,2.};
1391  pidObjp->SetPLimit(plimp,2);
1392  pidObjp->SetTOFdecide(kTRUE);
1393 
1394  SetUsePID(kTRUE);
1395 
1396  PrintAll();
1397 
1398  for(Int_t iiv=0;iiv<nvars;iiv++){
1399  delete [] prodcutsval[iiv];
1400  }
1401  delete [] prodcutsval;
1402  prodcutsval=NULL;
1403  delete [] ptbins;
1404  ptbins=NULL;
1405 
1406  delete pidObjK;
1407  pidObjK=NULL;
1408  delete pidObjpi;
1409  pidObjpi=NULL;
1410  delete pidObjp;
1411  pidObjp=NULL;
1412 
1413  return;
1414 }
1415 //-----------------------
1417 
1418  Int_t returnvalue =0;
1419  Double_t thresholdPr=fPIDThreshold[AliPID::kProton ];
1420  Double_t thresholdK=fPIDThreshold[AliPID::kKaon ];
1421  Double_t thresholdPi=fPIDThreshold[AliPID::kPion ];
1422 
1423 
1424  AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
1425  AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
1426  AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
1427 
1428  if (!track0 || !track1 || !track2) return 0;
1429  Double_t prob0[AliPID::kSPECIES];
1430  Double_t prob1[AliPID::kSPECIES];
1431  Double_t prob2[AliPID::kSPECIES];
1432 
1433  fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
1434  fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
1435  fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
1436 
1437  if(prob1[AliPID::kKaon]<thresholdK) return 0;
1438  if(prob0[AliPID::kPion]<thresholdPi&&prob2[AliPID::kPion]<thresholdPi) return 0;
1439  if(prob0[AliPID::kProton]<thresholdPr&&prob2[AliPID::kProton]<thresholdPr) return 0;
1440  if((prob0[AliPID::kPion]>prob0[AliPID::kProton]&&prob2[AliPID::kPion]>prob2[AliPID::kProton])||(prob0[AliPID::kPion]<prob0[AliPID::kProton]&&prob2[AliPID::kPion]<prob2[AliPID::kProton])) return 0; //pKp or piKpi candidate
1441 
1442  if(prob0[AliPID::kPion]>prob0[AliPID::kProton]&&prob2[AliPID::kPion]<prob2[AliPID::kProton]) returnvalue=2; //piKp
1443  else if(prob0[AliPID::kPion]==prob0[AliPID::kProton]||prob2[AliPID::kPion]==prob2[AliPID::kProton]) returnvalue=3; //pKpi or piKp
1444  else returnvalue=1; //pKpi
1445 
1446  return returnvalue;
1447 
1448 }
1449 
ECutsStrategy fCutsStrategy
PID threshold for each species.
void SetAsym(Bool_t asym)
Definition: AliAODPidHF.h:88
double Double_t
Definition: External.C:58
Bool_t IsSignalMC(AliAODRecoDecay *d, AliAODEvent *aod, Int_t pdg) const
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
virtual void SetStandardCutsPbPb2011()
Double_t mass
Bool_t CheckTOFPIDStatus(AliAODTrack *track) const
void SetPidpion(AliAODPidHF *pidPion)
void SetNVars(Int_t nVars)
Definition: AliRDHFCuts.h:392
virtual void SetStandardCutsPPb2013()
Double_t fMaxRapidityCand
minimum pt of the candidate
Definition: AliRDHFCuts.h:447
void EnableSemiCentralTrigger()
Definition: AliRDHFCuts.h:97
Int_t CombinePIDCuts(Int_t returnvalue, Int_t returnvaluePID) const
void SetGlobalIndex()
Definition: AliRDHFCuts.h:201
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Bool_t fUsePID
Definition: AliRDHFCuts.h:422
Int_t MatchTPCTOFMin(AliAODTrack *track, Int_t specie)
PID nSigma strategy closer to the Bayesian approach with Max. prob.
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
void SetPidHF(AliAODPidHF *pidObj)
see enum below
Definition: AliRDHFCuts.h:215
AliAODPidHF * GetPidHF() const
Definition: AliRDHFCuts.h:246
void SetTOF(Bool_t tof)
Definition: AliAODPidHF.h:95
Bool_t HasBadDaughters() const
virtual void SetStandardCutsPP2010()
void SetUseCombined(Bool_t useCombined=kTRUE)
Definition: AliAODPidHF.h:200
void SetUseDefaultPriors(Bool_t defaultP)
Definition: AliAODPidHF.h:201
void SetCombDetectors(ECombDetectors pidComb)
Definition: AliAODPidHF.h:112
void SetPidprot(AliAODPidHF *pidProt)
int Int_t
Definition: External.C:63
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
Definition: AliRDHFCuts.h:457
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
Int_t fnVarsForOpt
Definition: AliRDHFCuts.h:417
Int_t IsSelectedCombinedPIDpPb2(AliAODRecoDecayHF *obj)
void ResetMaskAndEnableMBTrigger()
Definition: AliRDHFCuts.h:77
AliRDHFCutsLctopKpi & operator=(const AliRDHFCutsLctopKpi &source)
AliPIDCombined * GetPidCombined() const
Definition: AliAODPidHF.h:161
float Float_t
Definition: External.C:68
const Double_t ptmax
Double_t fMaxPtCand
minimum pt of the candidate
Definition: AliRDHFCuts.h:446
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
Definition: AliRDHFCuts.h:448
Double_t GetSigmaVert(const AliAODEvent *aod=0x0)
Int_t fIsSelectedPID
outcome of cuts selection
Definition: AliRDHFCuts.h:444
Int_t IsSelectedCombinedPIDProb(AliAODRecoDecayHF *obj)
virtual void SetStandardCutsPbPb2010()
Bool_t GetMC() const
Definition: AliAODPidHF.h:148
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Definition: AliAODPidHF.h:160
Int_t IsSelectedNSigmaPbPb(AliAODRecoDecayHF *obj)
void SetSigma(Double_t *sigma)
Definition: AliAODPidHF.h:39
Float_t * fCutsRD
fnVars*fnPtBins
Definition: AliRDHFCuts.h:420
Int_t IsSelectedCombinedPIDSoft(AliAODRecoDecayHF *obj)
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Definition: AliRDHFCuts.h:418
Bool_t isMC
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd, const AliAODEvent *aod=0x0) const
void EnableCentralTrigger()
Definition: AliRDHFCuts.h:85
decay
Definition: HFPtSpectrum.C:41
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t GetOnePad() const
Definition: AliAODPidHF.h:149
void SetUsePID(Bool_t flag=kTRUE)
Definition: AliRDHFCuts.h:209
void SetMC(Bool_t mc)
Definition: AliAODPidHF.h:101
virtual void PrintAll() const
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
EPIDStrategy fPIDStrategy
switch for cut on d0p*d0K vs. d0K*d0pi
void SetITS(Bool_t its)
Definition: AliAODPidHF.h:96
void SetPIDStrategy(EPIDStrategy pidStrategy)
void SetTOFdecide(Bool_t tOFdecide)
Definition: AliAODPidHF.h:107
void SetMatch(Int_t match)
Definition: AliAODPidHF.h:98
void AddTrackCuts(const AliESDtrackCuts *cuts)
Definition: AliRDHFCuts.h:207
void SetPLimit(Double_t *plim, Int_t npLim)
AliKFParticle * ApplyVertexingKF(Int_t *iprongs, Int_t nprongs, Int_t *pdgs, Bool_t topoCostraint, Double_t bzkG, Double_t *mass) const
vertexing KF:
Int_t IsSelectedPIDStrong(AliAODRecoDecayHF *obj)
void SetTPC(Bool_t tpc)
Definition: AliAODPidHF.h:94
bool Bool_t
Definition: External.C:53
Double_t CosPointingAngle() const
void SetPIDThreshold(AliPID::EParticleType species, Double_t threshold)
AliRDHFCutsLctopKpi(const char *name="CutsLctopKpi")
void SetTriggerClass(TString trclass0, TString trclass1="")
Definition: AliRDHFCuts.h:197
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Definition: AliRDHFCuts.h:424
Int_t IsSelectedCombinedPIDpPb(AliAODRecoDecayHF *obj)
Int_t PtBin(Double_t pt) const
void SetOptPileup(Int_t opt=0)
Definition: AliRDHFCuts.h:223
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t DecayLength() const
AliKFParticle * ReconstructKF(AliAODRecoDecayHF3Prong *d, Int_t *pdgs, Double_t field, Bool_t constraint) const
Int_t nptbins
Double_t fMinPtCand
outcome of PID selection
Definition: AliRDHFCuts.h:445
Bool_t fUseSpecialCut
cut strategy (standard or KF)
void SetOnePad(Bool_t onepad)
Definition: AliAODPidHF.h:103
Double_t fPIDThreshold[AliPID::kSPECIES]
PIS strategy (nsigma, combined)
void SetPidResponse(AliPIDResponse *pidResp)
Definition: AliAODPidHF.h:111