26 #include <Riostream.h> 28 #include <TDatabasePDG.h> 31 #include "AliAnalysisManager.h" 32 #include "AliInputEventHandler.h" 33 #include "AliPIDResponse.h" 36 #include "AliAODTrack.h" 37 #include "AliESDtrack.h" 38 #include "AliESDVertex.h" 39 #include "AliAODVertex.h" 60 fMinCombProbVsLcPt(0x0),
64 fBachelorPLimitsForPID(0x0),
65 fNTPCSigmaCutForPreselection(999.)
73 TString varNames[nvars]={
"Lc inv. mass if K0S [GeV/c2]",
74 "Lc inv. mass if Lambda [GeV/c2]",
75 "K0S inv. mass [GeV/c2]",
76 "Lambda/LambdaBar inv. mass[GeV/c2]",
77 "pT min bachelor track [GeV/c]",
78 "pT min V0-positive track [GeV/c]",
79 "pT min V0-negative track [GeV/c]",
80 "dca cascade (prong-to-prong) cut [cm]",
81 "dca V0 (prong-to-prong) cut [number of sigmas]",
82 "V0 cosPA min wrt PV",
83 "d0 max bachelor wrt PV [cm]",
84 "d0 max V0 wrt PV [cm]",
85 "mass K0S veto [GeV/c2]",
86 "mass Lambda/LambdaBar veto [GeV/c2]",
87 "mass Gamma veto [GeV/c2]",
88 "pT min V0 track [GeV/c]",
89 "Max Proton emission angle in Lc CMS",
90 "Min Proton emission angle in Lc CMS",
96 Bool_t isUpperCut[nvars]={kTRUE,
119 Bool_t forOpt[nvars]={kFALSE,
143 Float_t limits[2]={0,999999999.};
149 Float_t bachelorPlimits[1]={0};
207 if(&source ==
this)
return *
this;
279 if (pdgdaughters[0]==-9999)
return;
282 printf(
"AliRDHFCutsLctoV0::GetCutVarsForOpt: wrong number of variables\n");
286 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
287 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
288 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
293 AliAODTrack *bachelorTrack = (AliAODTrack*)dd->
GetBachelor();
294 AliAODv0 *v0 = (AliAODv0*)dd->
Getv0();
313 vars[iter]=TMath::Abs(v0->MassK0Short()-mk0sPDG);
319 if (bachelorTrack->Charge()==1) {
321 vars[iter]=TMath::Abs(v0->MassLambda()-mLPDG);
322 }
else if (bachelorTrack->Charge()==-1) {
324 vars[iter]=TMath::Abs(v0->MassAntiLambda()-mLPDG);
332 vars[iter]=bachelorTrack->Pt();
338 vars[iter]=v0positiveTrack->Pt();
344 vars[iter]=v0negativeTrack->Pt();
350 vars[iter]=dd->GetDCA();
356 vars[iter]=v0->GetDCA();
368 vars[iter]=dd->Getd0Prong(0);
374 vars[iter]=dd->Getd0Prong(1);
380 vars[iter]=TMath::Abs(v0->MassK0Short()-mk0sPDG);
386 if (bachelorTrack->Charge()==1) {
388 vars[iter]=TMath::Abs(v0->MassLambda()-mLPDG);
389 }
else if (bachelorTrack->Charge()==-1) {
391 vars[iter]=TMath::Abs(v0->MassAntiLambda()-mLPDG);
399 vars[iter]= v0->InvMass2Prongs(0,1,11,11);
406 vars[iter]= v0->Pt();
430 vars[iter]= v0->PtArmV0()/TMath::Abs(v0->AlphaV0());
443 AliFatal(
"Cut matrice not inizialized. Exit...");
449 AliDebug(2,
"AliAODRecoCascadeHF null");
457 if (!d->GetSecondaryVtx()) {
458 AliDebug(2,
"No secondary vertex for cascade");
462 if (d->GetNDaughters()!=2) {
463 AliDebug(2,Form(
"No 2 daughters for current cascade (nDaughters=%d)",d->GetNDaughters()));
467 AliAODv0 * v0 =
dynamic_cast<AliAODv0*
>(d->
Getv0());
472 AliAODTrack * bachelorTrack =
dynamic_cast<AliAODTrack*
>(d->
GetBachelor());
473 if (!v0 || !bachelorTrack) {
474 AliDebug(2,
"No V0 or no bachelor for current cascade");
478 if (bachelorTrack->GetID()<0) {
479 AliDebug(2,Form(
"Bachelor has negative ID %d",bachelorTrack->GetID()));
483 if (!v0->GetSecondaryVtx()) {
484 AliDebug(2,
"No secondary vertex for V0 by cascade");
488 if (v0->GetNDaughters()!=2) {
489 AliDebug(2,Form(
"No 2 daughters for V0 of current cascade (onTheFly=%d, nDaughters=%d)",v0->GetOnFlyStatus(),v0->GetNDaughters()));
497 if (!v0positiveTrack || !v0negativeTrack ) {
498 AliDebug(2,
"No V0 daughters' objects");
502 if (v0positiveTrack->GetID()<0 || v0negativeTrack->GetID()<0) {
503 AliDebug(2,Form(
"At least one of V0 daughters has negative ID %d %d",v0positiveTrack->GetID(),v0negativeTrack->GetID()));
509 AliDebug(2,
"Check on the bachelor FilterBit: no BIT(4). Candidate rejected.");
513 Int_t returnvalueTrack = 7;
523 Bool_t okLck0sp=kTRUE, okLcLpi=kTRUE, okLcLBarpi=kTRUE;
532 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
533 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
534 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
541 Double_t mlambda = v0->MassLambda();
542 Double_t malambda = v0->MassAntiLambda();
545 Bool_t okK0spipi=kTRUE, okLppi=kTRUE, okLBarpip=kTRUE;
546 Bool_t isNotK0S = kTRUE, isNotLambda = kTRUE, isNotLambdaBar = kTRUE, isNotGamma = kTRUE;
551 AliDebug(4,Form(
" cascade mass is %2.2e and does not correspond to Lambda_c into K0S+p cut",mLck0sp));
557 AliDebug(4,Form(
" V0 mass is %2.2e and does not correspond to K0S cut",mk0s));
564 AliDebug(4,Form(
" cascade mass is %2.2e and does not correspond to Lambda_c into Lambda+pi cut",mLcLpi));
571 AliDebug(4,Form(
" V0 mass is %2.2e and does not correspond to LambdaBar cut",mlambda));
577 AliDebug(4,Form(
" V0 mass is %2.2e and does not correspond to LambdaBar cut",malambda));
582 AliDebug(4,Form(
" veto on K0S invariant mass doesn't pass the cut"));
589 AliDebug(4,Form(
" veto on Lambda invariant mass doesn't pass the cut"));
594 AliDebug(4,Form(
" veto on LambdaBar invariant mass doesn't pass the cut"));
595 isNotLambdaBar=kFALSE;
601 AliDebug(4,Form(
" veto on gamma invariant mass doesn't pass the cut"));
606 okLck0sp = okLck0sp && okK0spipi && isNotLambda && isNotLambdaBar && isNotGamma;
607 okLcLpi = okLcLpi && okLppi && isNotK0S && isNotLambdaBar && isNotGamma;
608 okLcLBarpi = okLcLBarpi && okLBarpip && isNotK0S && isNotLambda && isNotGamma;
610 if (!okLck0sp && !okLcLpi && !okLcLBarpi)
return 0;
614 AliDebug(4,Form(
" bachelor track Pt=%2.2e > %2.2e",bachelorTrack->Pt(),
fCutsRD[
GetGlobalIndex(4,ptbin)]));
618 AliDebug(4,Form(
" V0-positive track Pt=%2.2e > %2.2e",v0positiveTrack->Pt(),
fCutsRD[
GetGlobalIndex(5,ptbin)]));
622 AliDebug(4,Form(
" V0-negative track Pt=%2.2e > %2.2e",v0negativeTrack->Pt(),
fCutsRD[
GetGlobalIndex(6,ptbin)]));
628 AliDebug(4,Form(
" cascade tracks DCA don't pass the cut"));
634 AliDebug(4,Form(
" V0 DCA don't pass the cut"));
640 AliDebug(4,Form(
" V0 cosine of pointing angle doesn't pass the cut"));
646 AliDebug(4,Form(
" bachelor transverse impact parameter doesn't pass the cut"));
652 AliDebug(4,Form(
" V0 transverse impact parameter doesn't pass the cut"));
686 Double_t cutvar = v0->PtArmV0()/TMath::Abs(v0->AlphaV0());
695 Int_t returnvalue = okLck0sp+2*okLcLBarpi+4*okLcLpi;
707 Int_t returnvaluePID = 7;
717 Int_t returnvalueTot = 0;
719 returnvalueTot =
CombineCuts(returnvalueTrack,returnvalue,returnvaluePID);
721 returnvalueTot =
CombineCuts(returnvalueTrack,returnvalue,7);
723 return returnvalueTot;
733 AliFatal(
"Cut matrix not inizialized. Exit...");
739 AliDebug(2,
"AliAODRecoCascadeHF null");
755 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
756 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
757 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
764 Double_t mlambda = v0->MassLambda();
765 Double_t malambda = v0->MassAntiLambda();
768 Bool_t okLck0sp=kTRUE, okLcLpi=kTRUE, okLcLBarpi=kTRUE;
769 Bool_t okK0spipi=kTRUE, okLppi=kTRUE, okLBarpip=kTRUE;
770 Bool_t isNotK0S = kTRUE, isNotLambda = kTRUE, isNotLambdaBar = kTRUE, isNotGamma = kTRUE;
790 if (TMath::Abs(v0->MassAntiLambda()-mLPDG) <
fCutsRD[
GetGlobalIndex(13,ptbin)]) isNotLambdaBar=kFALSE;
795 okLck0sp = okLck0sp && okK0spipi && isNotLambda && isNotLambdaBar && isNotGamma;
796 okLcLpi = okLcLpi && okLppi && isNotK0S && isNotLambdaBar && isNotGamma;
797 okLcLBarpi = okLcLBarpi && okLBarpip && isNotK0S && isNotLambda && isNotGamma;
799 if (!okLck0sp && !okLcLpi && !okLcLBarpi)
return 0;
815 AliDebug(2,
"PID selection inactive. Candidate accepted.");
821 AliAODv0 * v0 =
dynamic_cast<AliAODv0*
>(objD->
Getv0());
825 AliAODTrack *bachelor = (AliAODTrack*)objD->
GetBachelor();
829 if (!bachelor || !v0Pos || !v0Neg)
return 0;
832 Bool_t okLcLambdaBarPi = kTRUE;
833 Bool_t okLcLambdaPi = kTRUE;
835 CheckPID(bachelor,v0Neg,v0Pos,okLcK0Sp,okLcLambdaBarPi,okLcLambdaPi);
837 Int_t returnvalue = okLcK0Sp+2*okLcLambdaBarPi+4*okLcLambdaPi;
843 AliAODTrack * , AliAODTrack * ,
847 Int_t idxIDbyTOF = -1;
848 Int_t idxIDbyTPC = -1;
867 isBachelorID1 = (idxIDbyTOF==4) && (idxIDbyTPC==4);
871 isBachelorID2 = (idxIDbyTOF==2) && (idxIDbyTPC==2);
873 isBachelorID4 = isBachelorID2;
884 isBachelorID1 = ( (idxIDbyTOF==4) || dummy );
890 isBachelorID2 = ( (idxIDbyTOF==2) || dummy );
892 isBachelorID4 = isBachelorID2;
903 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
904 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
905 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) ||
906 (bachelor->P()>=
fLowPtCut && TMath::Abs(nTPCsigmas)<3) ) );
907 isBachelorID1 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && trackIDByTPC && trackIDByTOF);
913 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
914 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
915 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) ||
916 (bachelor->P()>=
fLowPtCut && TMath::Abs(nTPCsigmas)<3) ) );
917 isBachelorID2 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && trackIDByTPC && trackIDByTOF);
919 isBachelorID4 = isBachelorID2;
930 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
931 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
932 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) ||
934 (bachelor->P()>=
fHighPtCut && nTPCsigmas>-3 && nTPCsigmas<2) ) );
935 isBachelorID1 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && trackIDByTPC && trackIDByTOF);
941 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
942 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
943 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) ||
945 (bachelor->P()>=
fHighPtCut && nTPCsigmas>-3 && nTPCsigmas<2) ) );
946 isBachelorID2 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && trackIDByTPC && trackIDByTOF);
948 isBachelorID4 = isBachelorID2;
959 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
960 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
961 trackIDByTPC = ( (tpcID==1) && (TMath::Abs(nTPCsigmas)<2) );
962 isBachelorID1 = ( (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && trackIDByTOF) );
968 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
969 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
970 trackIDByTPC = ( (tpcID==1) && (TMath::Abs(nTPCsigmas)<2) );
971 isBachelorID2 = ( (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && trackIDByTOF) );
973 isBachelorID4 = isBachelorID2;
984 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
985 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
986 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fHighPtCut && tofID!=1 && TMath::Abs(nTPCsigmas)<3) ) );
987 isBachelorID1 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && trackIDByTOF) || (bachelor->P()>=
fHighPtCut && (trackIDByTOF || trackIDByTPC) );
993 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
994 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
995 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fHighPtCut && tofID!=1 && TMath::Abs(nTPCsigmas)<3) ) );
996 isBachelorID2 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && trackIDByTOF) || (bachelor->P()>=
fHighPtCut && (trackIDByTOF || trackIDByTPC) );
998 isBachelorID4 = isBachelorID2;
1009 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
1010 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
1011 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fHighPtCut && tofID!=1 && nTPCsigmas>-3 && nTPCsigmas<2) ) );
1012 isBachelorID1 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && trackIDByTOF) || (bachelor->P()>=
fHighPtCut && (trackIDByTOF || trackIDByTPC) );
1018 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
1019 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
1020 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fHighPtCut && tofID!=1 && nTPCsigmas>-3 && nTPCsigmas<2) ) );
1021 isBachelorID2 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && trackIDByTOF) || (bachelor->P()>=
fHighPtCut && (trackIDByTOF || trackIDByTPC) );
1023 isBachelorID4 = isBachelorID2;
1034 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
1035 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
1036 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fLowPtCut && tofID!=1 && TMath::Abs(nTPCsigmas)<3) ) );
1037 isBachelorID1 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && (trackIDByTOF || trackIDByTPC) );
1043 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
1044 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
1045 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fHighPtCut && tofID!=1 && TMath::Abs(nTPCsigmas)<3) ) );
1046 isBachelorID2 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && (trackIDByTOF || trackIDByTPC) );
1048 isBachelorID4 = isBachelorID2;
1059 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
1060 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
1061 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fLowPtCut && tofID!=1 && nTPCsigmas>-3 && nTPCsigmas<2) ) );
1062 isBachelorID1 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && (trackIDByTOF || trackIDByTPC) );
1068 trackIDByTOF = ( (tofID==1) && ( (bachelor->P()>=
fLowPtCut && bachelor->P()<
fHighPtCut && TMath::Abs(nTOFsigmas)<3) ||
1069 (bachelor->P()>=
fHighPtCut && nTOFsigmas>-2 && nTOFsigmas<3) ) );
1070 trackIDByTPC = ( (tpcID==1) && ( (bachelor->P()<
fLowPtCut && TMath::Abs(nTPCsigmas)<2) || (bachelor->P()>=
fHighPtCut && tofID!=1 && nTPCsigmas>-3 && nTPCsigmas<2) ) );
1071 isBachelorID2 = (bachelor->P()<
fLowPtCut && trackIDByTPC) || (bachelor->P()>=
fLowPtCut && (trackIDByTOF || trackIDByTPC) );
1073 isBachelorID4 = isBachelorID2;
1082 Double_t probTPCTOF[AliPID::kSPECIES]={-1.};
1088 probPion = probTPCTOF[AliPID::kPion];
1095 probPion = probTPCTOF[AliPID::kPion];
1100 Double_t pBachelor = bachelor->P();
1102 if (bachelorPBin==-1) {
1117 isBachelorID4 = isBachelorID2;
1129 isBachelorID1 = kFALSE;
1130 if((tpcID==1)&&(tofID==1)&&(TMath::Abs(nTPCsigmas)<3.)&&(TMath::Abs(nTOFsigmas)<3.)){
1131 isBachelorID1 = !(bachelor->Pt()>
fLowPtCut&& nTOFsigmas<-2.) && !(bachelor->Pt()>
fLowPtCut&& nTPCsigmas>2.);
1139 isBachelorID2 = TMath::Abs(nTPCsigmas)<3. && TMath::Abs(nTOFsigmas)<3. && (tpcID==1)&&(tofID==1);
1140 isBachelorID4 = isBachelorID2;
1153 Int_t returnvalueTot=returnvalueTrack&returnvalue;
1154 returnvalueTot=returnvalueTot&returnvaluePID;
1156 return returnvalueTot;
1166 AliDebug(2,
"Cut matrice not inizialized. Exit...");
1172 AliDebug(2,
"AliAODRecoCascadeHF null");
1176 if (!d->GetSecondaryVtx()) {
1177 AliDebug(2,
"No secondary vertex for cascade");
1181 if (d->GetNDaughters()!=2) {
1182 AliDebug(2,Form(
"No 2 daughters for current cascade (nDaughters=%d)",d->GetNDaughters()));
1186 AliAODv0 * v0 =
dynamic_cast<AliAODv0*
>(d->
Getv0());
1190 AliAODTrack * bachelorTrack =
dynamic_cast<AliAODTrack*
>(d->
GetBachelor());
1191 if (!v0 || !bachelorTrack) {
1192 AliDebug(2,
"No V0 or no bachelor for current cascade");
1196 if (bachelorTrack->GetID()<0) {
1197 AliDebug(2,Form(
"Bachelor has negative ID %d",bachelorTrack->GetID()));
1201 if (!v0->GetSecondaryVtx()) {
1202 AliDebug(2,
"No secondary vertex for V0 by cascade");
1206 if (v0->GetNDaughters()!=2) {
1207 AliDebug(2,Form(
"No 2 daughters for V0 of current cascade (onTheFly=%d, nDaughters=%d)",v0->GetOnFlyStatus(),v0->GetNDaughters()));
1215 if (!v0positiveTrack || !v0negativeTrack ) {
1216 AliDebug(2,
"No V0 daughters' objects");
1220 if (v0positiveTrack->GetID()<0 || v0negativeTrack->GetID()<0) {
1221 AliDebug(2,Form(
"At least one of V0 daughters has negative ID %d %d",v0positiveTrack->GetID(),v0negativeTrack->GetID()));
1227 AliDebug(2,
"Check on the bachelor FilterBit: no BIT(4). Candidate rejected.");
1240 Bool_t okLck0sp=kFALSE, okLcLpi=kFALSE, okLcLBarpi=kFALSE;
1249 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
1250 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
1251 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
1258 Double_t mlambda = v0->MassLambda();
1259 Double_t malambda = v0->MassAntiLambda();
1267 okLcLBarpi = kFALSE;
1273 okLcLBarpi = okLcLpi;
1279 okLcLBarpi = kFALSE;
1293 okLcLBarpi = okLck0sp;
1299 okLcLBarpi = okLck0sp;
1305 okLcLBarpi = okLck0sp;
1311 okLcLBarpi = okLck0sp;
1317 okLcLBarpi = okLck0sp;
1323 okLcLBarpi = okLck0sp;
1329 okLcLBarpi = okLck0sp;
1335 okLcLBarpi = okLck0sp;
1351 okLcLBarpi = okLck0sp;
1357 okLcLBarpi = okLck0sp;
1362 okLcLBarpi = okLck0sp;
1367 okLcLBarpi = okLck0sp;
1372 okLcLBarpi = okLck0sp;
1377 okLcLBarpi = okLck0sp;
1382 Int_t returnvalue = okLck0sp+2*okLcLBarpi+4*okLcLpi;
1405 Int_t returnvalueTot = 0;
1409 returnvalueTot = returnvalue;
1411 return returnvalueTot;
1417 SetName(
"LctoV0ProductionCuts");
1418 SetTitle(
"Production cuts for Lc->V0+bachelor analysis");
1420 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
1421 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1423 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1424 esdTrackCuts->SetRequireITSRefit(kTRUE);
1425 esdTrackCuts->SetMinNClustersITS(0);
1426 esdTrackCuts->SetMinNClustersTPC(70);
1430 esdTrackCuts->SetMinDCAToVertexXY(0.);
1431 esdTrackCuts->SetPtRange(0.3,1.e10);
1433 esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
1435 delete esdTrackCuts;
1439 AliESDtrackCuts* esdTrackCutsV0daughters=
new AliESDtrackCuts();
1440 esdTrackCutsV0daughters->SetRequireSigmaToVertex(kFALSE);
1442 esdTrackCutsV0daughters->SetRequireTPCRefit(kTRUE);
1443 esdTrackCutsV0daughters->SetRequireITSRefit(kFALSE);
1444 esdTrackCutsV0daughters->SetMinNClustersITS(0);
1445 esdTrackCutsV0daughters->SetMinNClustersTPC(70);
1449 esdTrackCutsV0daughters->SetMinDCAToVertexXY(0.);
1450 esdTrackCutsV0daughters->SetPtRange(0.,1.e10);
1451 esdTrackCutsV0daughters->SetAcceptKinkDaughters(kFALSE);
1453 delete esdTrackCutsV0daughters;
1454 esdTrackCutsV0daughters=NULL;
1458 ptbins=
new Float_t[nptbins+1];
1460 ptbins[1]=99999999.;
1465 const Int_t nvars=21;
1468 prodcutsval=
new Float_t*[nvars];
1471 prodcutsval[0][ipt2]=1.;
1472 prodcutsval[1][ipt2]=1.;
1473 prodcutsval[2][ipt2]=0.05;
1474 prodcutsval[3][ipt2]=0.05;
1475 prodcutsval[4][ipt2]=0.3;
1476 prodcutsval[5][ipt2]=0.;
1477 prodcutsval[6][ipt2]=0.;
1478 prodcutsval[7][ipt2]=1000.;
1479 prodcutsval[8][ipt2]=1.5;
1480 prodcutsval[9][ipt2]=-1.;
1481 prodcutsval[10][ipt2]=3.;
1482 prodcutsval[11][ipt2]=1000.;
1483 prodcutsval[12][ipt2]=0.;
1484 prodcutsval[13][ipt2]=0.;
1485 prodcutsval[14][ipt2]=0.;
1486 prodcutsval[15][ipt2]=0.;
1487 prodcutsval[16][ipt2]=9999.;
1488 prodcutsval[17][ipt2]=-9999.;
1489 prodcutsval[18][ipt2]=-9999.;
1490 prodcutsval[19][ipt2]=-9999.;
1491 prodcutsval[20][ipt2]=0.;
1493 SetCuts(nvars,nptbins,prodcutsval);
1502 Double_t sigmasBac[5]={3.,1.,1.,3.,3.};
1503 pidObjBachelor->
SetSigma(sigmasBac);
1504 pidObjBachelor->
SetAsym(kFALSE);
1506 pidObjBachelor->
SetTPC(kTRUE);
1507 pidObjBachelor->
SetTOF(kTRUE);
1515 for(
Int_t iiv=0;iiv<nvars;iiv++){
1516 delete [] prodcutsval[iiv];
1518 delete [] prodcutsval;
1524 delete pidObjBachelor;
1525 pidObjBachelor=NULL;
1532 SetName(
"LctoV0ProductionCuts");
1533 SetTitle(
"Production cuts for Lc->V0+bachelor analysis");
1564 if(sVarNames[nvars-1].Contains(
"V0 type"))
return (
Int_t)
fV0Type;
1565 else {AliInfo(
"AliRDHFCutsLctoV0 Last variable is not the V0 type!!!");
return -999;}
1583 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1585 printf(
"Reject kink: %s\n",
fKinkReject ?
"Yes" :
"No");
1586 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1587 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1599 cout<<
"Array of variables"<<endl;
1606 cout<<
"Array of optimization"<<endl;
1613 cout<<
"Array of upper/lower cut"<<endl;
1620 cout<<
"Array of ptbin limits"<<endl;
1627 cout<<
"Matrix of cuts"<<endl;
1637 if (fPidSelectionFlag==9) {
1642 cout<<
"fMinCombProb["<<ib<<
"] = "<<
fMinCombProb[ib]<<
"\t" 1645 cout<<
"fMinCombProb["<<fNBachelorPBins-1<<
"] = "<<
fMinCombProb[fNBachelorPBins-1]<<
"\t" 1655 cout <<
" etaRange for Bachelor: [" << eta1 <<
"," << eta2 <<
"]\n";
1659 cout <<
" etaRange for V0daughters: [" << eta3 <<
"," << eta4 <<
"]\n";
1681 AliDebug(2,Form(
"pt of Lambda_c = %f (> 5), cutting at |y| < 0.8",pt));
1682 if (TMath::Abs(y) > 0.8)
return kFALSE;
1686 Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
1687 Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
1688 AliDebug(2,Form(
"pt of Lambda_c = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
1689 if (y < minFiducialY || y > maxFiducialY)
return kFALSE;
1702 AliDebug(2,
"AliAODRecoCascadeHF null");
1707 AliFatal(
"Cut object is not defined for bachelor. Candidate accepted.");
1711 AliAODTrack * bachelorTrack =
dynamic_cast<AliAODTrack*
>(d->
GetBachelor());
1712 if (!bachelorTrack)
return kFALSE;
1715 if(!bachelorTrack->HasPointOnITSLayer(0))
return kFALSE;
1719 AliError(Form(
"Not compatible setting: fKinkReject=%1d - fTrackCuts->GetAcceptKinkDaughters()=%1d",
fKinkReject,
fTrackCuts->GetAcceptKinkDaughters()));
1724 Double_t pos[3]; vAOD->GetXYZ(pos);
1725 Double_t cov[6]; vAOD->GetCovarianceMatrix(cov);
1726 const AliESDVertex vESD(pos,cov,100.,100);
1731 AliFatal(
"Cut object is not defined for V0daughters. Candidate accepted.");
1735 AliAODv0 * v0 =
dynamic_cast<AliAODv0*
>(d->
Getv0());
1736 if (!v0)
return kFALSE;
1738 if (!v0positiveTrack)
return kFALSE;
1740 if (!v0negativeTrack)
return kFALSE;
1744 if ( (v0positiveTrack->Eta()<=etaMin || v0positiveTrack->Eta()>=etaMax) ||
1745 (v0negativeTrack->Eta()<=etaMin || v0negativeTrack->Eta()>=etaMax) )
return kFALSE;
1747 if ( (v0positiveTrack->Pt()<=ptMin || v0positiveTrack->Pt()>=
ptMax) ||
1748 (v0negativeTrack->Pt()<=ptMin || v0negativeTrack->Pt()>=
ptMax) )
return kFALSE;
1752 if ( ( ( v0positiveTrack->GetTPCClusterInfo(2,1) ) <
fV0daughtersCuts->GetMinNClusterTPC() ) ||
1753 ( ( v0negativeTrack->GetTPCClusterInfo(2,1) ) <
fV0daughtersCuts->GetMinNClusterTPC() ) )
return kFALSE;
1756 if (
fV0daughtersCuts->GetMinRatioCrossedRowsOverFindableClustersTPC()>0.5) {
1757 Float_t ratioCrossedRowsOverFindableClustersTPCPos = 1.0;
1758 Float_t ratioCrossedRowsOverFindableClustersTPCNeg = 1.0;
1759 if (v0positiveTrack->GetTPCNclsF()>0) {
1760 ratioCrossedRowsOverFindableClustersTPCPos = v0positiveTrack->GetTPCClusterInfo(2,1) / v0positiveTrack->GetTPCNclsF();
1762 if (v0negativeTrack->GetTPCNclsF()>0) {
1763 ratioCrossedRowsOverFindableClustersTPCNeg = v0negativeTrack->GetTPCClusterInfo(2,1) / v0negativeTrack->GetTPCNclsF();
1765 if ( ( ( ratioCrossedRowsOverFindableClustersTPCPos ) <
fV0daughtersCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) ||
1766 ( ( ratioCrossedRowsOverFindableClustersTPCNeg ) <
fV0daughtersCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) )
return kFALSE;
1770 if (v0->GetOnFlyStatus()==kFALSE) {
1772 if( !(v0positiveTrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
1773 if( !(v0negativeTrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
1778 AliAODVertex *maybeKinkPos = (AliAODVertex*)v0positiveTrack->GetProdVertex();
1779 AliAODVertex *maybeKinkNeg = (AliAODVertex*)v0negativeTrack->GetProdVertex();
1780 if (maybeKinkPos->GetType()==AliAODVertex::kKink ||
1781 maybeKinkNeg->GetType()==AliAODVertex::kKink)
return kFALSE;
1852 AliDebug(2,
"AliAODRecoCascadeHF null");
1855 Double_t mprPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass();
1856 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
1857 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
1859 TLorentzVector vpr, vk0s,vlc;
1860 vpr.SetXYZM(d->PxProng(0),d->PyProng(0),d->PzProng(0),mprPDG);
1861 vk0s.SetXYZM(d->PxProng(1),d->PyProng(1),d->PzProng(1),mk0sPDG);
1863 TVector3 vboost = vlc.BoostVector();
1865 Double_t bachcosthe = cos(vpr.Angle(vlc.Vect()));
1879 AliDebug(2,
"AliAODRecoCascadeHF null");
1883 AliAODTrack * bachelorTrack =
dynamic_cast<AliAODTrack*
>(d->
GetBachelor());
1884 AliAODVertex *primvert =
dynamic_cast<AliAODVertex*
>(d->
GetPrimaryVtx());
1886 Double_t d0z0bach[2],covd0z0bach[3];
1887 bachelorTrack->PropagateToDCA(primvert,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1889 bachelorTrack->GetXYZ(tx);
1890 tx[0] -= primvert->GetX();
1891 tx[1] -= primvert->GetY();
1892 tx[2] -= primvert->GetZ();
1893 Double_t innerpro = tx[0]*d->Px()+tx[1]*d->Py();
1895 if(innerpro<0.) signd0 = -1.;
1897 return signd0*TMath::Abs(d0z0bach[0]);
1907 AliFatal(
"V0 object is NULL");
1912 AliFatal(
"Cut object is not defined for V0daughters. Candidate accepted.");
1919 if (!v0->GetSecondaryVtx()) {
1920 AliDebug(2,
"No secondary vertex for V0 by cascade");
1923 if (v0->GetNDaughters()!=2) {
1924 AliDebug(2,Form(
"No 2 daughters for V0 of current cascade (onTheFly=%d, nDaughters=%d)",v0->GetOnFlyStatus(),v0->GetNDaughters()));
1930 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
1935 if (TMath::Abs(mk0s-mk0sPDG) > maxcut_m) {
1944 if (v0->Pt() < mincut_p) {
1948 AliAODTrack *v0positiveTrack =
dynamic_cast<AliAODTrack*
>(v0->GetDaughter(0));
1949 if (!v0positiveTrack)
return kFALSE;
1950 AliAODTrack *v0negativeTrack =
dynamic_cast<AliAODTrack*
>(v0->GetDaughter(1));
1951 if (!v0negativeTrack)
return kFALSE;
1955 if ( (v0positiveTrack->Eta()<=etaMin || v0positiveTrack->Eta()>=etaMax) ||
1956 (v0negativeTrack->Eta()<=etaMin || v0negativeTrack->Eta()>=etaMax) )
return kFALSE;
1958 if ( (v0positiveTrack->Pt()<=ptMin || v0positiveTrack->Pt()>=
ptMax) ||
1959 (v0negativeTrack->Pt()<=ptMin || v0negativeTrack->Pt()>=
ptMax) )
return kFALSE;
1963 if ( ( ( v0positiveTrack->GetTPCClusterInfo(2,1) ) <
fV0daughtersCuts->GetMinNClusterTPC() ) ||
1964 ( ( v0negativeTrack->GetTPCClusterInfo(2,1) ) <
fV0daughtersCuts->GetMinNClusterTPC() ) )
return kFALSE;
1967 if (
fV0daughtersCuts->GetMinRatioCrossedRowsOverFindableClustersTPC()>0.5) {
1968 Float_t ratioCrossedRowsOverFindableClustersTPCPos = 1.0;
1969 Float_t ratioCrossedRowsOverFindableClustersTPCNeg = 1.0;
1970 if (v0positiveTrack->GetTPCNclsF()>0) {
1971 ratioCrossedRowsOverFindableClustersTPCPos = v0positiveTrack->GetTPCClusterInfo(2,1) / v0positiveTrack->GetTPCNclsF();
1973 if (v0negativeTrack->GetTPCNclsF()>0) {
1974 ratioCrossedRowsOverFindableClustersTPCNeg = v0negativeTrack->GetTPCClusterInfo(2,1) / v0negativeTrack->GetTPCNclsF();
1976 if ( ( ( ratioCrossedRowsOverFindableClustersTPCPos ) <
fV0daughtersCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) ||
1977 ( ( ratioCrossedRowsOverFindableClustersTPCNeg ) <
fV0daughtersCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) )
return kFALSE;
1981 if (v0->GetOnFlyStatus()==kFALSE) {
1983 if( !(v0positiveTrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
1984 if( !(v0negativeTrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
1989 AliAODVertex *maybeKinkPos = (AliAODVertex*)v0positiveTrack->GetProdVertex();
1990 AliAODVertex *maybeKinkNeg = (AliAODVertex*)v0negativeTrack->GetProdVertex();
1991 if (maybeKinkPos->GetType()==AliAODVertex::kKink ||
1992 maybeKinkNeg->GetType()==AliAODVertex::kKink)
return kFALSE;
2006 AliFatal(
"Cut object is not defined for bachelor. Candidate accepted.");
2010 if (!bachelorTrack) {
2011 AliFatal(
"Track object is NULL.");
2016 AliDebug(2,
"Check on the bachelor FilterBit: no BIT(4). Candidate rejected.");
2022 if(bachelorTrack->Pt()<
ptmin)
return kFALSE;
2023 if(bachelorTrack->Pt()>
ptmax)
return kFALSE;
2030 if (bachelorTrack->Pt() < mincut_p) {
2035 AliError(Form(
"Not compatible setting: fKinkReject=%1d - fTrackCuts->GetAcceptKinkDaughters()=%1d",
fKinkReject,
fTrackCuts->GetAcceptKinkDaughters()));
2040 AliAODVertex *vAOD = (AliAODVertex*)aod->GetPrimaryVertex();
2041 Double_t pos[3]; vAOD->GetXYZ(pos);
2042 Double_t cov[6]; vAOD->GetCovarianceMatrix(cov);
2043 const AliESDVertex vESD(pos,cov,100.,100);
2050 CheckPID(bachelorTrack,0,0,okLcK0Sp,dummy1,dummy2);
2062 AliFatal(
"Cut matrice not inizialized. Exit...");
2069 AliDebug(2,
"AliAODRecoCascadeHF null");
2078 AliVTrack *bachelorTrack = (AliVTrack*)d->
GetBachelor();
2079 AliAODv0 *v0 = (AliAODv0*)d->
Getv0();
2082 if(!spdfirstflag)
return kFALSE;
2086 AliAODTrack *v0positiveTrack = (AliAODTrack*)v0->GetDaughter(0);
2087 AliAODTrack *v0negativeTrack = (AliAODTrack*)v0->GetDaughter(1);
2088 if (!v0positiveTrack || !v0negativeTrack ) {
2089 AliDebug(2,
"No V0 daughters' objects");
2093 if (v0positiveTrack->GetID()<0 || v0negativeTrack->GetID()<0) {
2094 AliDebug(2,Form(
"At least one of V0 daughters has negative ID %d %d",v0positiveTrack->GetID(),v0negativeTrack->GetID()));
2098 AliAODVertex *vAOD = (AliAODVertex*)aod->GetPrimaryVertex();
2099 Double_t posVtx[3]; vAOD->GetXYZ(posVtx);
2101 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
2102 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
2103 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
2110 Double_t mlambda = v0->MassLambda();
2111 Double_t malambda = v0->MassAntiLambda();
2114 Bool_t okK0spipi=kTRUE, okLppi=kTRUE, okLBarpip=kTRUE;
2115 Bool_t isNotK0S = kTRUE, isNotLambda = kTRUE, isNotLambdaBar = kTRUE, isNotGamma = kTRUE;
2117 Bool_t okLck0sp=kTRUE, okLcLpi=kTRUE, okLcLBarpi=kTRUE;
2122 AliDebug(4,Form(
" cascade mass is %2.2e and does not correspond to Lambda_c into K0S+p cut",mLck0sp));
2128 AliDebug(4,Form(
" V0 mass is %2.2e and does not correspond to K0S cut",mk0s));
2134 okLcLBarpi = kFALSE;
2135 AliDebug(4,Form(
" cascade mass is %2.2e and does not correspond to Lambda_c into Lambda+pi cut",mLcLpi));
2141 AliDebug(4,Form(
" V0 mass is %2.2e and does not correspond to LambdaBar cut",mlambda));
2146 AliDebug(4,Form(
" V0 mass is %2.2e and does not correspond to LambdaBar cut",malambda));
2151 AliDebug(4,Form(
" veto on K0S invariant mass doesn't pass the cut"));
2157 AliDebug(4,Form(
" veto on Lambda invariant mass doesn't pass the cut"));
2161 AliDebug(4,Form(
" veto on LambdaBar invariant mass doesn't pass the cut"));
2162 isNotLambdaBar=kFALSE;
2167 AliDebug(4,Form(
" veto on gamma invariant mass doesn't pass the cut"));
2171 okLck0sp = okLck0sp && okK0spipi && isNotLambda && isNotLambdaBar && isNotGamma;
2172 okLcLpi = okLcLpi && okLppi && isNotK0S && isNotLambdaBar && isNotGamma;
2173 okLcLBarpi = okLcLBarpi && okLBarpip && isNotK0S && isNotLambda && isNotGamma;
2175 if (!okLck0sp)
return kFALSE;
2179 AliDebug(4,Form(
" bachelor track Pt=%2.2e > %2.2e",bachelorTrack->Pt(),
fCutsRD[
GetGlobalIndex(4,ptbin)]));
2183 AliDebug(4,Form(
" V0-positive track Pt=%2.2e > %2.2e",v0positiveTrack->Pt(),
fCutsRD[
GetGlobalIndex(5,ptbin)]));
2187 AliDebug(4,Form(
" V0-negative track Pt=%2.2e > %2.2e",v0negativeTrack->Pt(),
fCutsRD[
GetGlobalIndex(6,ptbin)]));
2192 AliDebug(4,Form(
" cascade tracks DCA don't pass the cut"));
2198 AliDebug(4,Form(
" V0 DCA don't pass the cut"));
2204 AliDebug(4,Form(
" V0 cosine of pointing angle doesn't pass the cut"));
2210 AliDebug(4,Form(
" bachelor transverse impact parameter doesn't pass the cut"));
2216 AliDebug(4,Form(
" V0 transverse impact parameter doesn't pass the cut"));
2250 Double_t cutvar = v0->PtArmV0()/TMath::Abs(v0->AlphaV0());
void SetMinCombinedProbability(Int_t nPBins, Float_t *minProb)
AliESDtrackCuts * fV0daughtersCuts
virtual void SetStandardCutsPbPb2010()
Int_t GetBachelorPBin(Double_t bachelorP) const
Double_t fMaxPtCandTrackSPDFirst
flag to select the track kFirst criteria for pt < ptlimit
void SetAsym(Bool_t asym)
void SetBachelorPLimitsForPID(Int_t nPBins, Float_t *pMin)
AliRDHFCutsLctoV0(const char *name="CutsLctoV0", Short_t v0channel=0)
Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const
virtual void SetStandardCutsPP2010()
Bool_t fRemoveDaughtersFromPrimary
AliAODTrack * Getv0NegativeTrack() const
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
Bool_t CheckTOFPIDStatus(AliAODTrack *track) const
Float_t * fPtBinLimits
"number of limits", that is fnPtBins+1
ECombDetectors GetCombDetectors() const
virtual void SetStandardCutsPbPb2011()
Int_t fMinVtxContr
0: not cut; 1: SPDZ; 2: SPD3D; 3: Tracks
Double_t InvMassLctoLambdaPi() const
Bool_t AreLctoV0DaughtersSelected(AliAODRecoDecayHF *rd, AliAODEvent *aod=0x0) const
Float_t fMaxVtxRedChi2
minimum vertex contributors
Int_t CombineCuts(Int_t returnvalueTrack, Int_t returnvalue, Int_t returnvaluePID) const
const Float_t * GetCuts() const
Float_t fV0Type
cuts for v0 daughters (AOD converted to ESD on the flight!)
void SetNVars(Int_t nVars)
Float_t fNTPCSigmaCutForPreselection
Int_t fMinVtxType
cuts on the event
Double_t fMaxRapidityCand
minimum pt of the candidate
void EnableSemiCentralTrigger()
AliRDHFCutsLctoV0 & operator=(const AliRDHFCutsLctoV0 &source)
TString * GetVarNames() const
Int_t ApplyPidTPCRaw(AliAODTrack *track, Int_t specie) const
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Int_t fUseCentrality
flag to use a multiplicity dependent pileup selection
void SetPidHF(AliAODPidHF *pidObj)
see enum below
Double_t InvMassLctoK0sP() const
AliAODPidHF * GetPidHF() const
AliAODTrack * Getv0PositiveTrack() const
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Double_t GetReSignedd0(AliAODRecoDecayHF *d)
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
virtual ~AliRDHFCutsLctoV0()
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
void ResetMaskAndEnableMBTrigger()
AliPIDCombined * GetPidCombined() const
Bool_t ApplySingleProtonCuts(AliAODTrack *trk, AliAODEvent *aod)
Int_t fNBachelorPBins
Magnetic field for propagation.
TString * fVarNames
number of cut vars for candidates
Double_t fMaxPtCand
minimum pt of the candidate
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
void AddTrackCutsV0daughters(AliESDtrackCuts *v0daug)
Float_t fLowPtCut
high pT cut separation for proton identification
AliAODTrack * GetBachelor() const
Float_t * fMinCombProbVsLcPt
cut to be excluded (-1=none)
Int_t fOptPileup
use Physics selection criteria
Bool_t IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t nsigmaCut, TString detector)
virtual void PrintAll() const
AliPIDResponse * GetPidResponse() const
Int_t fnPtBinLimits
number of pt bins for cuts
void SetSigma(Double_t *sigma)
Float_t * fCutsRD
fnVars*fnPtBins
Double_t CosV0PointingAngle() const
Int_t ApplyPidTOFRaw(AliAODTrack *track, Int_t specie) const
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
Bool_t ApplyCandidateCuts(AliAODRecoDecayHF *rd, AliAODEvent *aod, Bool_t spdfirst)
Double_t GetProtonEmissionAngleCMS(AliAODRecoDecayHF *d)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Bool_t PreSelect(TObject *obj, AliAODv0 *v0, AliVTrack *bachelorTrack)
void EnableCentralTrigger()
Int_t fMinSPDMultiplicity
maximum |z| of primary vertex
void SetUsePID(Bool_t flag=kTRUE)
Int_t fExcludedCut
low pT cut separation for proton identification
Bool_t fIsCandTrackSPDFirst
IsSelected returns always kTRUE for MC signal.
Bool_t ApplySingleK0Cuts(AliAODv0 *v0, AliAODEvent *aod)
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t fKinkReject
cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm...
Bool_t fUsePhysicsSelection
use MC primary vertex
void SetTOFdecide(Bool_t tOFdecide)
void SetMatch(Int_t match)
AliAODVertex * GetPrimaryVtx() const
void AddTrackCuts(const AliESDtrackCuts *cuts)
Int_t fnPtBins
cuts on the candidate
Float_t fHighPtCut
V0 type – should be defined as in AliRDHFCuts.h.
void SetTriggerClass(TString trclass0, TString trclass1="")
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Int_t PtBin(Double_t pt) const
void CheckPID(AliAODTrack *bachelor, AliAODTrack *, AliAODTrack *, Bool_t &isBachelorID1, Bool_t &isBachelorID2, Bool_t &isBachelorID4)
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Float_t * fBachelorPLimitsForPID
Int_t IsSelectedSingleCut(TObject *obj, Int_t selectionLevel, Int_t cutIndex, AliAODEvent *aod=0x0)
Double_t fMinPtCand
outcome of PID selection
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Float_t fMaxCentrality
minimum centrality for selected events
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)