25 #include <TDatabasePDG.h> 26 #include <Riostream.h> 27 #include <AliAnalysisManager.h> 28 #include <AliInputEventHandler.h> 29 #include <AliPIDResponse.h> 34 #include "AliAODTrack.h" 35 #include "AliESDtrack.h" 36 #include "AliKFParticle.h" 37 #include "AliESDVertex.h" 51 fUseImpParProdCorrCut(kFALSE),
52 fPIDStrategy(kNSigma),
53 fCutsStrategy(kStandard),
54 fUseSpecialCut(kFALSE)
61 TString varNames[13]={
"inv. mass [GeV]",
64 "d0K [cm] lower limit!",
65 "d0Pi [cm] lower limit!",
69 "pM=Max{pT1,pT2,pT3} (GeV/c)",
73 "cut on pTpion [GeV/c]"};
74 Bool_t isUpperCut[13]={kTRUE,
103 Float_t limits[2]={0,999999999.};
105 for (
Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies)
133 if(
this != &source) {
170 printf(
"AliRDHFCutsLctopKpi::GetCutsVarsForOpt: wrong number of variables\n");
183 for(
Int_t iprong=0;iprong<3;iprong++){
184 if(TMath::Abs(pdgdaughters[iprong])==321) {
185 vars[iter]=dd->PtProng(iprong);
191 for(
Int_t iprong=0;iprong<3;iprong++){
192 if(TMath::Abs(pdgdaughters[iprong])==2212) {
193 vars[iter]=dd->PtProng(iprong);
199 for(
Int_t iprong=0;iprong<3;iprong++){
200 if(TMath::Abs(pdgdaughters[iprong])==2212) {
201 vars[iter]=dd->Getd0Prong(iprong);
207 for(
Int_t iprong=0;iprong<3;iprong++){
208 if(TMath::Abs(pdgdaughters[iprong])==211) {
209 vars[iter]=dd->Getd0Prong(iprong);
228 for(
Int_t i=0;i<3;i++){
229 if(dd->PtProng(i)>
ptmax)ptmax=dd->PtProng(i);
239 vars[iter]=dd->Getd0Prong(0)*dd->Getd0Prong(0)+dd->Getd0Prong(1)*dd->Getd0Prong(1)+dd->Getd0Prong(2)*dd->Getd0Prong(2);
243 vars[iter]=dd->GetDCA();
247 for(
Int_t iprong=0;iprong<3;iprong++){
248 if(TMath::Abs(pdgdaughters[iprong])==211) {
249 vars[iter]=dd->PtProng(iprong);
263 AliError(
"Cut matrice not inizialized. Exit...\n");
270 AliError(
"AliAODRecoDecayHF3Prong null \n");
278 Int_t returnvaluePID=3;
329 if(returnvaluePID==0)
return 0;
343 Int_t okLcpKpi=1,okLcpiKp=1;
345 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
352 if(!okLcpKpi && !okLcpiKp)
return 0;
358 if(d->Pt()>=3. && d->PProng(1)<0.55)
return 0;
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;
365 if(!okLcpKpi && !okLcpiKp)
return 0;
371 if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.)
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;
391 Int_t pdgs[3]={0,321,0};
394 Double_t field=aod->GetMagneticField();
395 if (returnvaluePID==1 || returnvaluePID==3){
397 pdgs[0]=2122;pdgs[2]=211;
404 }
else if(returnvaluePID>=2){
406 pdgs[0]=211;pdgs[2]=2212;
418 if(okLcpKpi) returnvalue=1;
419 if(okLcpiKp) returnvalue=2;
420 if(okLcpKpi && okLcpiKp) returnvalue=3;
426 return returnvalueTot;
433 Int_t okLcpKpi=0,okLcpiKp=0;
437 Bool_t ispion0=kTRUE,ispion2=kTRUE;
438 Bool_t isproton0=kFALSE,isproton2=kFALSE;
451 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
452 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
457 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
458 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
463 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
464 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
468 for(
Int_t i=0;i<3;i++){
469 AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
479 if(isKaon>=1) iskaon1=kTRUE;
486 if(isKaon>=1) iskaon1=kTRUE;
488 if(!iskaon1)
return 0;
509 if(isPion<0) ispion0=kFALSE;
510 if(isProton>=1) isproton0=kTRUE;
513 if(!ispion0 && !isproton0)
return 0;
515 if(isPion<0) ispion2=kFALSE;
516 if(isProton>=1) isproton2=kTRUE;
522 if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
523 if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
524 if(okLcpKpi) returnvalue=1;
525 if(okLcpiKp) returnvalue=2;
526 if(okLcpKpi && okLcpiKp) returnvalue=3;
537 Int_t okLcpKpi=0,okLcpiKp=0;
541 Bool_t ispion0=kTRUE,ispion2=kTRUE;
542 Bool_t isproton0=kFALSE,isproton2=kFALSE;
555 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
556 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
561 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
562 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
567 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
568 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
572 for(
Int_t i=0;i<3;i++){
573 AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
579 if(isKaon>=1) iskaon1=kTRUE;
580 if(!iskaon1)
return 0;
589 if(isPion<0) ispion0=kFALSE;
590 if(isProton>=1) isproton0=kTRUE;
592 if(!ispion0 && !isproton0)
return 0;
595 if(isPion<0) ispion2=kFALSE;
596 if(isProton>=1) isproton2=kTRUE;
601 if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
602 if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
603 if(okLcpKpi) returnvalue=1;
604 if(okLcpiKp) returnvalue=2;
605 if(okLcpKpi && okLcpiKp) returnvalue=3;
616 if(!
fUsePID || !obj) {
return 3;}
617 Int_t okLcpKpi=0,okLcpiKp=0;
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;
638 if(obj->Pt()<3. && track0->P()<1.)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
640 if(obj->Pt()<3. && track0->P()<1.)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
642 if(obj->Pt()<3. && track1->P()<0.55)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
644 if(obj->Pt()<3. && track1->P()<0.55)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
646 if(obj->Pt()<3. && track2->P()<1.)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
648 if(obj->Pt()<3. && track2->P()<1.)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
651 okLcpiKp= (prob0[AliPID::kPion ]>
fPIDThreshold[AliPID::kPion ])
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;
667 if(okLcpKpi) returnvalue=1;
668 if(okLcpiKp) returnvalue=2;
669 if(okLcpKpi && okLcpiKp) returnvalue=3;
676 Int_t returnvalueTot=0;
677 Int_t okLcpKpi=0,okLcpiKp=0;
678 if(returnvaluePID==1){
679 if(returnvalue==1 || returnvalue==3) okLcpKpi=1;
681 if(returnvaluePID==2){
682 if(returnvalue>=2) okLcpiKp=1;
684 if(returnvaluePID==3 && returnvalue>0){
685 if(returnvalue==1 || returnvalue==3) okLcpKpi=1;
686 if(returnvalue>=2) okLcpiKp=1;
689 if(okLcpKpi) returnvalueTot=1;
690 if(okLcpiKp) returnvalueTot=2;
691 if(okLcpKpi && okLcpiKp) returnvalueTot=3;
692 return returnvalueTot;
697 SetName(
"LctopKpiProdCuts");
698 SetTitle(
"Production cuts for Lc analysis");
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);
716 const Int_t nvars=13;
734 prodcutsval=
new Float_t*[nvars];
735 for(
Int_t iv=0;iv<nvars;iv++){
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;
754 SetCuts(nvars,nptbins,prodcutsval);
757 Double_t sigmasK[5]={3.,1.,1.,3.,2.};
772 Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
778 Double_t sigmasp[5]={3.,1.,1.,3.,2.};
796 for(
Int_t iiv=0;iiv<nvars;iiv++){
797 delete [] prodcutsval[iiv];
799 delete [] prodcutsval;
816 SetName(
"LctopKpiProdCuts");
817 SetTitle(
"Production cuts for Lc analysis");
819 AliESDtrackCuts *esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
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);
837 const Int_t nvars=13;
856 prodcutsval=
new Float_t*[nvars];
857 for(
Int_t iv=0;iv<nvars;iv++){
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;
876 SetCuts(nvars,nptbins,prodcutsval);
890 for (
Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies){
899 for(
Int_t iiv=0;iiv<nvars;iiv++){
900 delete [] prodcutsval[iiv];
902 delete [] prodcutsval;
916 const Int_t nprongs=d->GetNProngs();
917 if(nprongs<=0)
return 0x0;
919 Int_t iprongs[nprongs];
920 for(
Int_t i=0;i<nprongs;i++) iprongs[i]=i;
925 if(!decay)
return 0x0;
926 AliESDVertex *vertexESD =
new AliESDVertex(decay->Parameters(),
927 decay->CovarianceMatrix(),
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);
969 AliDebug(2,Form(
"pt of Lc = %f (> 5), cutting at |y| < 0.8",pt));
970 if (TMath::Abs(y) > 0.8)
return kFALSE;
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;
984 if(!
fUsePID || !obj) {
return 3;}
985 Int_t okLcpKpi=0,okLcpiKp=0;
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;
1002 if(track1->P()<1.8) {
1004 if(obj->Pt()<3. && track1->P()<0.55)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1008 AliAODTrack *trackaod1=(AliAODTrack*)(obj->GetDaughter(1));
1009 if(trackaod1->P()<0.55){
1014 if(isKaon>=1) isK1=kTRUE;
1015 if(trackaod1->P()<0.55){
1021 if(track1->P()<0.8){
1025 AliAODTrack *trackaod1=(AliAODTrack*)(obj->GetDaughter(1));
1026 if(trackaod1->P()<0.55){
1031 if(isKaon>=1) isK1=kTRUE;
1032 if(trackaod1->P()<0.55){
1045 if(track0->P()<2.2) {
1047 if(obj->Pt()<3. && track0->P()<1.)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1050 AliAODTrack *trackaod0=(AliAODTrack*)(obj->GetDaughter(0));
1051 if(trackaod0->P()<1.){
1056 if(isProton>=1) isp0=kTRUE;
1057 if(trackaod0->P()<1.){
1063 if(track0->P()<1.2){
1067 AliAODTrack *trackaod0=(AliAODTrack*)(obj->GetDaughter(0));
1068 if(trackaod0->P()<1.){
1073 if(isProton>=1) isp0=kTRUE;
1074 if(trackaod0->P()<1.){
1082 if(track2->P()<2.2) {
1084 if(obj->Pt()<3. && track2->P()<1.)
fPidHF->
GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
1087 AliAODTrack *trackaod2=(AliAODTrack*)(obj->GetDaughter(2));
1088 if(trackaod2->P()<1.){
1093 if(isProton>=1) isp2=kTRUE;
1094 if(trackaod2->P()<1.){
1100 if(track2->P()<1.2){
1104 AliAODTrack *trackaod2=(AliAODTrack*)(obj->GetDaughter(2));
1105 if(trackaod2->P()<1.){
1110 if(isProton>=1) isp2=kTRUE;
1111 if(trackaod2->P()<1.){
1117 AliAODTrack *trackaod2=(AliAODTrack*)(obj->GetDaughter(2));
1119 AliAODTrack *trackaod0=(AliAODTrack*)(obj->GetDaughter(2));
1122 if(TMath::MaxElement(AliPID::kSPECIES,prob1) == prob1[AliPID::kKaon]){
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;
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;
1136 if(okLcpKpi) returnvalue=1;
1137 if(okLcpiKp) returnvalue=2;
1138 if(okLcpKpi && okLcpiKp) returnvalue=3;
1148 if(!
fUsePID || !obj)
return 3;
1149 Int_t okLcpKpi=0,okLcpiKp=0;
1150 Int_t returnvalue=0;
1153 Bool_t ispion0=kTRUE,ispion2=kTRUE;
1154 Bool_t isproton0=kFALSE,isproton2=kFALSE;
1165 for(
Int_t i=0;i<3;i++){
1166 AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
1167 if(!track)
return 0;
1175 if(!iskaon1)
return 0;
1192 if(isPion<0) ispion0=kFALSE;
1193 if(isProton>=1) isproton0=kTRUE;
1196 if(!ispion0 && !isproton0)
return 0;
1198 if(isPion<0) ispion2=kFALSE;
1199 if(isProton>=1) isproton2=kTRUE;
1205 if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
1206 if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
1207 if(okLcpKpi) returnvalue=1;
1208 if(okLcpiKp) returnvalue=2;
1209 if(okLcpKpi && okLcpiKp) returnvalue=3;
1216 if(!
fUsePID || !obj) {
return 3;}
1217 Int_t okLcpKpi=0,okLcpiKp=0;
1218 Int_t returnvalue=0;
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;
1242 okLcpiKp= (prob0[AliPID::kPion ]>
fPIDThreshold[AliPID::kPion ])
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;
1258 if(okLcpKpi) returnvalue=1;
1259 if(okLcpiKp) returnvalue=2;
1260 if(okLcpKpi && okLcpiKp) returnvalue=3;
1267 Int_t returnvalue =0;
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));
1276 if (!track0 || !track1 || !track2)
return 0;
1285 if(prob1[AliPID::kKaon]>thresholdK){
1286 if(TMath::MaxElement(AliPID::kSPECIES,prob0)>TMath::MaxElement(AliPID::kSPECIES,prob2)){
1288 else if(((prob0[AliPID::kProton ]>prob0[AliPID::kPion ])&& prob0[AliPID::kProton]>thresholdPr) && prob2[AliPID::kPion]>thresholdPi)returnvalue =1;
1291 else if(TMath::MaxElement(AliPID::kSPECIES,prob0)<TMath::MaxElement(AliPID::kSPECIES,prob2)){
1293 else if(((prob2[AliPID::kProton ]>prob2[AliPID::kPion ])&& prob2[AliPID::kProton]>thresholdPr) && prob0[AliPID::kPion]>thresholdPi)returnvalue =2;
1303 SetName(
"LctopKpiProdCuts");
1304 SetTitle(
"Production cuts for Lc analysis");
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);
1318 delete esdTrackCuts;
1321 const Int_t nvars=13;
1324 ptbins=
new Float_t[nptbins+1];
1340 prodcutsval=
new Float_t*[nvars];
1341 for(
Int_t iv=0;iv<nvars;iv++){
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;
1360 SetCuts(nvars,nptbins,prodcutsval);
1363 Double_t sigmasK[5]={3.,1.,1.,3.,2.};
1377 Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
1383 Double_t sigmasp[5]={3.,1.,1.,3.,2.};
1398 for(
Int_t iiv=0;iiv<nvars;iiv++){
1399 delete [] prodcutsval[iiv];
1401 delete [] prodcutsval;
1418 Int_t returnvalue =0;
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));
1428 if (!track0 || !track1 || !track2)
return 0;
1437 if(prob1[AliPID::kKaon]<thresholdK)
return 0;
1438 if(prob0[AliPID::kPion]<thresholdPi&&prob2[AliPID::kPion]<thresholdPi)
return 0;
1442 if(prob0[AliPID::kPion]>prob0[AliPID::kProton]&&prob2[AliPID::kPion]<prob2[AliPID::kProton]) returnvalue=2;
1443 else if(prob0[AliPID::kPion]==prob0[AliPID::kProton]||prob2[AliPID::kPion]==prob2[AliPID::kProton]) returnvalue=3;
Bool_t fUseImpParProdCorrCut
ECutsStrategy fCutsStrategy
PID threshold for each species.
void SetAsym(Bool_t asym)
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)
Double_t GetDist12toPrim() const
virtual void SetStandardCutsPbPb2011()
Bool_t CheckTOFPIDStatus(AliAODTrack *track) const
void SetPidpion(AliAODPidHF *pidPion)
void SetNVars(Int_t nVars)
virtual void SetStandardCutsPPb2013()
Double_t fMaxRapidityCand
minimum pt of the candidate
void EnableSemiCentralTrigger()
Int_t CombinePIDCuts(Int_t returnvalue, Int_t returnvaluePID) const
AliRDHFCuts & operator=(const AliRDHFCuts &source)
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
AliAODPidHF * GetPidHF() const
Bool_t HasBadDaughters() const
virtual void SetStandardCutsPP2010()
void SetUseCombined(Bool_t useCombined=kTRUE)
void SetUseDefaultPriors(Bool_t defaultP)
void SetCombDetectors(ECombDetectors pidComb)
virtual ~AliRDHFCutsLctopKpi()
void SetPidprot(AliAODPidHF *pidProt)
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
Int_t IsSelectedCombinedPIDpPb2(AliAODRecoDecayHF *obj)
void ResetMaskAndEnableMBTrigger()
AliRDHFCutsLctopKpi & operator=(const AliRDHFCutsLctopKpi &source)
AliPIDCombined * GetPidCombined() const
Double_t fMaxPtCand
minimum pt of the candidate
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
Double_t GetSigmaVert(const AliAODEvent *aod=0x0)
Int_t fIsSelectedPID
outcome of cuts selection
Int_t IsSelectedCombinedPIDProb(AliAODRecoDecayHF *obj)
virtual void SetStandardCutsPbPb2010()
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Int_t IsSelectedNSigmaPbPb(AliAODRecoDecayHF *obj)
void SetSigma(Double_t *sigma)
AliAODPidHF * fPidObjprot
Float_t * fCutsRD
fnVars*fnPtBins
Double_t GetDist23toPrim() const
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
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd, const AliAODEvent *aod=0x0) const
void EnableCentralTrigger()
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
void SetUsePID(Bool_t flag=kTRUE)
virtual void PrintAll() const
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
EPIDStrategy fPIDStrategy
switch for cut on d0p*d0K vs. d0K*d0pi
void SetPIDStrategy(EPIDStrategy pidStrategy)
void SetTOFdecide(Bool_t tOFdecide)
void SetMatch(Int_t match)
void AddTrackCuts(const AliESDtrackCuts *cuts)
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)
Double_t CosPointingAngle() const
Double_t InvMassLcpKpi() const
void SetPIDThreshold(AliPID::EParticleType species, Double_t threshold)
AliRDHFCutsLctopKpi(const char *name="CutsLctopKpi")
void SetTriggerClass(TString trclass0, TString trclass1="")
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Int_t IsSelectedCombinedPIDpPb(AliAODRecoDecayHF *obj)
Int_t PtBin(Double_t pt) const
void SetOptPileup(Int_t opt=0)
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t DecayLength() const
AliAODPidHF * fPidObjpion
AliKFParticle * ReconstructKF(AliAODRecoDecayHF3Prong *d, Int_t *pdgs, Double_t field, Bool_t constraint) const
Double_t fMinPtCand
outcome of PID selection
Bool_t fUseSpecialCut
cut strategy (standard or KF)
void SetOnePad(Bool_t onepad)
Double_t InvMassLcpiKp() const
Double_t fPIDThreshold[AliPID::kSPECIES]
PIS strategy (nsigma, combined)
void SetPidResponse(AliPIDResponse *pidResp)