25 #include <TDatabasePDG.h> 26 #include <Riostream.h> 30 #include "AliAODTrack.h" 31 #include "AliESDtrack.h" 32 #include "AliAODPid.h" 33 #include "AliTPCPIDResponse.h" 34 #include "AliAODVertex.h" 35 #include "AliKFVertex.h" 36 #include "AliKFParticle.h" 37 #include "TObjArray.h" 53 fUsed0MeasMinusExpCut(0),
54 fMaxd0MeasMinusExp(0x0),
55 fUseSpecialCuts(kFALSE),
60 fPtMaxSpecialCuts(9999.),
61 fmaxPtrackForPID(9999),
63 fnSpecies(AliPID::kSPECIES),
75 TString varNames[11]={
"inv. mass [GeV]",
86 Bool_t isUpperCut[11]={kTRUE,
110 Float_t limits[2]={0,999999999.};
116 for (
Int_t i = 0; i<AliPID::kSPECIES; i++) {
156 if(&source ==
this)
return *
this;
223 AliFatal(Form(
"Wrong number of pt bins: it has to be %d, exiting",
fnPtBins));
250 AliFatal(Form(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins));
268 printf(
"AliRDHFCutsD0toKpi::GetCutsVarsForOpt: wrong number of variables\n");
276 AliAODVertex *origownvtx=0x0;
289 if(TMath::Abs(pdgdaughters[0])==211) {
297 vars[iter]=dd->GetDCA();
301 if(TMath::Abs(pdgdaughters[0])==211) {
309 if(TMath::Abs(pdgdaughters[0])==321) {
310 vars[iter]=dd->PtProng(0);
313 vars[iter]=dd->PtProng(1);
318 if(TMath::Abs(pdgdaughters[0])==211) {
319 vars[iter]=dd->PtProng(0);
322 vars[iter]=dd->PtProng(1);
327 if(TMath::Abs(pdgdaughters[0])==321) {
328 vars[iter]=dd->Getd0Prong(0);
331 vars[iter]=dd->Getd0Prong(1);
336 if(TMath::Abs(pdgdaughters[0])==211) {
337 vars[iter]=dd->Getd0Prong(0);
340 vars[iter]=dd->Getd0Prong(1);
372 AliAODTrack *track0 = (AliAODTrack*)aodTracks.At(0);
373 AliAODTrack *track1 = (AliAODTrack*)aodTracks.At(1);
382 Double_t ptD=TMath::Sqrt((px0+px1)*(px0+px1)+(py0+py1)*(py0+py1));
391 track0->GetImpactParameters(xy[0],z[0]);
392 track1->GetImpactParameters(xy[1],z[1]);
411 AliFatal(Form(
"Wrong number of pt bins for D imp par cut: it has to be %d\n",
fnPtBins));
414 AliFatal(Form(
"Wrong number of pt bins for D imp par cut: it has to be %d\n",
fnPtBins));
418 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
424 cout<<
"AliAODRecoDecayHF2Prong null"<<endl;
437 Int_t returnvaluePID=3;
438 Int_t returnvalueCuts=3;
447 AliAODVertex *origownvtx=0x0;
466 Int_t okD0=0,okD0bar=0;
477 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
510 if (returnvalueCuts!=0) {
511 if (okD0) returnvalueCuts=1;
512 if (okD0bar) returnvalueCuts=2;
513 if (okD0 && okD0bar) returnvalueCuts=3;
518 for(
Int_t ipr=0; ipr<2; ipr++) {
522 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
523 if(ipr==0) dd0max=normdd0;
524 else if(TMath::Abs(normdd0)>TMath::Abs(dd0max)) dd0max=normdd0;
556 if(!returnvalueCuts)
return 0;
566 if(!returnvaluePID)
return 0;
569 if(!returnvaluePID)
return 0;
575 if(!returnvalueComb)
return 0;
584 return returnvalueComb;
593 AliAODTrack *track0 = (AliAODTrack*)d->GetDaughter(0);
594 AliAODTrack *track1 = (AliAODTrack*)d->GetDaughter(1);
596 if(!track0 || !track1) {
597 cout<<
"one or two D0 daughters missing!"<<endl;
602 Int_t returnvalueCuts=3;
605 AliKFParticle::SetField(aod->GetMagneticField());
607 Int_t okD0=0,okD0bar=0;
612 AliKFParticle negPiKF(*track1,-211);
613 AliKFParticle negKKF(*track1,-321);
614 AliKFParticle posPiKF(*track0,211);
615 AliKFParticle posKKF(*track0,321);
619 AliKFParticle d0c(negKKF,posPiKF);
620 AliKFParticle ad0c(posKKF,negPiKF);
624 AliAODVertex *vtx1 = aod->GetPrimaryVertex();
625 AliKFVertex primVtx(*vtx1);
626 AliKFVertex aprimVtx(*vtx1);
628 if(primVtx.GetNContributors()<=0) okD0 = 0;
629 if(aprimVtx.GetNContributors()<=0) okD0bar = 0;
630 if(!okD0 && !okD0bar) returnvalueCuts=0;
654 if(track0->GetUsedForPrimVtxFit()) {
659 if(track1->GetUsedForPrimVtxFit()) {
667 if(primVtx.GetNContributors()<=0) okD0 = 0;
668 if(aprimVtx.GetNContributors()<=0) okD0bar = 0;
669 if(!okD0 && !okD0bar) returnvalueCuts=0;
675 Double_t impactPi = posPiKF.GetDistanceFromVertexXY(primVtx);
676 Double_t aimpactPi = negPiKF.GetDistanceFromVertexXY(aprimVtx);
677 Double_t impactKa = negKKF.GetDistanceFromVertexXY(primVtx);
678 Double_t aimpactKa = posKKF.GetDistanceFromVertexXY(aprimVtx);
682 Double_t prodParam = impactPi*impactKa;
683 Double_t aprodParam = aimpactPi*aimpactKa;
687 TVector3 mom(d0c.GetPx(),d0c.GetPy(),d0c.GetPz());
688 TVector3 fline(d0c.GetX()-primVtx.GetX(),
689 d0c.GetY()-primVtx.GetY(),
690 d0c.GetZ()-primVtx.GetZ());
694 TVector3 amom(ad0c.GetPx(),ad0c.GetPy(),ad0c.GetPz());
695 TVector3 afline(ad0c.GetX()-aprimVtx.GetX(),
696 ad0c.GetY()-aprimVtx.GetY(),
697 ad0c.GetZ()-aprimVtx.GetZ());
702 negKKF.TransportToParticle(d0c);
703 posPiKF.TransportToParticle(d0c);
704 posKKF.TransportToParticle(ad0c);
705 negPiKF.TransportToParticle(ad0c);
723 Double_t massvtx = TDatabasePDG::Instance()->GetParticle(421)->Mass();
725 massp[0] = TDatabasePDG::Instance()->GetParticle(321)->Mass();
726 massp[1] = TDatabasePDG::Instance()->GetParticle(211)->Mass();
727 Double_t pStar = TMath::Sqrt(TMath::Power(massvtx*massvtx-massp[0]*massp[0]-massp[1]*massp[1],2.)
728 -4.*massp[0]*massp[0]*massp[1]*massp[1])/(2.*massvtx);
732 Double_t d0E = TMath::Sqrt(massvtx*massvtx + d0P*d0P);
735 TVector3 momPi(pxPi,pyPi,pzPi);
736 TVector3 momTot(d0Px,d0Py,d0Pz);
737 Double_t q1 = momPi.Dot(momTot)/momTot.Mag();
738 Double_t cts = (q1/gamma-beta*TMath::Sqrt(pStar*pStar+massp[1]*massp[1]))/pStar;
742 Double_t ad0E = TMath::Sqrt(massvtx*massvtx + ad0P*ad0P);
745 TVector3 amomPi(apxPi,apyPi,apzPi);
746 TVector3 amomTot(ad0Px,ad0Py,ad0Pz);
747 Double_t aq1 = amomPi.Dot(amomTot)/amomTot.Mag();
748 Double_t acts = (aq1/agamma-abeta*TMath::Sqrt(pStar*pStar+massp[1]*massp[1]))/pStar;
751 d0c.SetProductionVertex(primVtx);
752 ad0c.SetProductionVertex(aprimVtx);
753 negKKF.SetProductionVertex(d0c);
754 posPiKF.SetProductionVertex(d0c);
755 posKKF.SetProductionVertex(ad0c);
756 negPiKF.SetProductionVertex(ad0c);
757 d0c.TransportToProductionVertex();
758 ad0c.TransportToProductionVertex();
761 Double_t decayLengthD0 = d0c.GetDecayLength();
762 Double_t adecayLengthD0 = ad0c.GetDecayLength();
765 if(d0c.GetNDF() > 0 && d0c.GetChi2() >= 0) {
766 chi2D0 = d0c.GetChi2()/d0c.GetNDF();
770 if(ad0c.GetNDF() > 0 && ad0c.GetChi2() >= 0) {
771 achi2D0 = ad0c.GetChi2()/ad0c.GetNDF();
778 if(ptbin < 0) okD0 = 0;
779 if(aptbin < 0) okD0bar = 0;
780 if(!okD0 && !okD0bar) returnvalueCuts=0;
784 if(!okD0 && !okD0bar) returnvalueCuts=0;
793 if(!okD0 && !okD0bar) returnvalueCuts=0;
798 if(!okD0 && !okD0bar) returnvalueCuts=0;
802 if(!okD0 && !okD0bar) returnvalueCuts=0;
806 if(!okD0 && !okD0bar) returnvalueCuts=0;
810 if(!okD0 && !okD0bar) returnvalueCuts=0;
814 if(!okD0 && !okD0bar) returnvalueCuts=0;
818 if(!okD0 && !okD0bar) returnvalueCuts=0;
822 if(!okD0 && !okD0bar) returnvalueCuts=0;
824 if(returnvalueCuts!=0) {
825 if(okD0) returnvalueCuts=1;
826 if(okD0bar) returnvalueCuts=2;
827 if(okD0 && okD0bar) returnvalueCuts=3;
830 return returnvalueCuts;
847 AliDebug(2,Form(
"pt of D0 = %f (> 5), cutting at |y| < 0.8\n",pt));
848 if (TMath::Abs(y) > 0.8){
853 Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
854 Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
855 AliDebug(2,Form(
"pt of D0 = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
856 if (y < minFiducialY || y > maxFiducialY){
872 aodTracks.AddAt(d->GetDaughter(0),0);
873 aodTracks.AddAt(d->GetDaughter(1),1);
888 Int_t isD0D0barPID[2]={1,2};
889 Int_t combinedPID[2][2];
901 Bool_t checkPIDInfo[2]={kTRUE,kTRUE};
904 AliAODTrack *aodtrack1=(AliAODTrack*)aodTracks.At(0);
905 AliAODTrack *aodtrack2=(AliAODTrack*)aodTracks.At(1);
906 Short_t relativeSign = aodtrack1->Charge() * aodtrack2->Charge();
907 for(
Int_t daught=0;daught<2;daught++){
909 AliAODTrack *aodtrack=(AliAODTrack*)aodTracks.At(daught);
913 checkPIDInfo[daught]=kFALSE;
925 combinedPID[daught][1]=0;
934 if(combinedPID[daught][0]<=-1&&combinedPID[daught][1]<=-1){
938 else if(combinedPID[daught][0]==2&&combinedPID[daught][1]>=1){
939 if((relativeSign == -1 && aodtrack->Charge() == -1) || (relativeSign == 1 && daught == 1)) isD0D0barPID[1]=0;
940 else isD0D0barPID[0]=0;
947 else if(combinedPID[daught][0]>=1||combinedPID[daught][1]<=-1){
948 if((relativeSign == -1 && aodtrack->Charge() == -1) || (relativeSign == 1 && daught == 1)) isD0D0barPID[1]=0;
949 else isD0D0barPID[0]=0;
951 else if(combinedPID[daught][0]<=-1||combinedPID[daught][1]>=1){
952 if((relativeSign == -1 && aodtrack->Charge() == -1) || (relativeSign == 1 && daught == 1)) isD0D0barPID[0]=0;
953 else isD0D0barPID[1]=0;
969 combinedPID[daught][1]=0;
979 combinedPID[daught][1]=1;
981 combinedPID[daught][1]=-1;
990 if(!checkPIDInfo[0] && !checkPIDInfo[1]) {
997 if(combinedPID[0][0]<=-1&&combinedPID[1][0]<=-1){
1004 if(combinedPID[0][0]<=0&&combinedPID[1][0]<=0){
1013 return isD0D0barPID[0]+isD0D0barPID[1];
1021 aodTracks.AddAt(d->GetDaughter(0),0);
1022 aodTracks.AddAt(d->GetDaughter(1),1);
1059 Int_t isD0D0barPID[2]={1,2};
1060 Double_t nsigmaTPCpi=-1., nsigmaTPCK=-1.;
1062 Int_t hasPID[2]={2,2};
1063 Int_t isKaonPionTOF[2][2],isKaonPionTPC[2][2];
1064 Int_t combinedPID[2][2];
1071 isKaonPionTOF[0][0]=0;
1072 isKaonPionTOF[0][1]=0;
1073 isKaonPionTOF[1][0]=0;
1074 isKaonPionTOF[1][1]=0;
1076 isKaonPionTPC[0][0]=0;
1077 isKaonPionTPC[0][1]=0;
1078 isKaonPionTPC[1][0]=0;
1079 isKaonPionTPC[1][1]=0;
1081 combinedPID[0][0]=0;
1082 combinedPID[0][1]=0;
1083 combinedPID[1][0]=0;
1084 combinedPID[1][1]=0;
1086 for(
Int_t daught=0;daught<2;daught++){
1091 AliAODTrack *aodtrack=(AliAODTrack*)aodTracks.At(daught);
1093 if(!(aodtrack->GetStatus()&AliESDtrack::kTPCrefit)){
1097 if(!(aodtrack->GetStatus()&AliESDtrack::kITSrefit)){
1102 AliAODPid *pid=aodtrack->GetDetPid();
1113 if (!(aodtrack->GetStatus()&AliESDtrack::kTPCpid )){
1118 static AliTPCPIDResponse theTPCpid;
1119 AliAODPid *pidObj = aodtrack->GetDetPid();
1120 Double_t ptProng=pidObj->GetTPCmomentum();
1121 nsigmaTPCpi = theTPCpid.GetNumberOfSigmas(ptProng,(
Float_t)pid->GetTPCsignal(),(
Int_t)aodtrack->GetTPCClusterMap().CountBits(),
AliPID::kPion);
1122 nsigmaTPCK = theTPCpid.GetNumberOfSigmas(ptProng,(
Float_t)pid->GetTPCsignal(),(
Int_t)aodtrack->GetTPCClusterMap().CountBits(),
AliPID::kKaon);
1125 if(TMath::Abs(nsigmaTPCK)<2.)isKaonPionTPC[daught][0]=1;
1126 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1127 if(TMath::Abs(nsigmaTPCpi)<2.)isKaonPionTPC[daught][1]=1;
1128 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1131 else if(ptProng<.8){
1132 if(TMath::Abs(nsigmaTPCK)<1.)isKaonPionTPC[daught][0]=1;
1133 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1134 if(TMath::Abs(nsigmaTPCpi)<1.)isKaonPionTPC[daught][1]=1;
1135 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1139 if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1141 if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1146 if(!((aodtrack->GetStatus()&AliESDtrack::kTOFpid)&&(aodtrack->GetStatus()&AliESDtrack::kTOFout)&&(aodtrack->GetStatus()&AliESDtrack::kTIME))){
1151 tofSig=pid->GetTOFsignal();
1152 pid->GetIntegratedTimes(times);
1153 if((tofSig-times[3])>5.*160.)
return 0;
1154 if(TMath::Abs(tofSig-times[3])>3.*160.){
1155 isKaonPionTOF[daught][0]=-1;
1159 isKaonPionTOF[daught][0]=1;
1166 combinedPID[daught][0]=isKaonPionTOF[daught][0]+isKaonPionTPC[daught][0];
1167 combinedPID[daught][1]=isKaonPionTOF[daught][1]+isKaonPionTPC[daught][1];
1171 if(combinedPID[daught][0]<=-1&&combinedPID[daught][1]<=-1){
1175 else if(combinedPID[daught][0]==2&&combinedPID[daught][1]>=1){
1176 if(aodtrack->Charge()==-1)isD0D0barPID[1]=0;
1177 else isD0D0barPID[0]=0;
1179 else if(combinedPID[daught][0]==1&&combinedPID[daught][1]>=1){
1183 else if(combinedPID[daught][0]>=1||combinedPID[daught][1]<=-1){
1184 if(aodtrack->Charge()==-1)isD0D0barPID[1]=0;
1185 else isD0D0barPID[0]=0;
1187 else if(combinedPID[daught][0]<=-1||combinedPID[daught][1]>=1){
1188 if(aodtrack->Charge()==-1)isD0D0barPID[0]=0;
1189 else isD0D0barPID[1]=0;
1196 isKaonPionTPC[daught][0]=0;
1197 isKaonPionTPC[daught][1]=0;
1198 AliAODPid *pidObj = aodtrack->GetDetPid();
1199 Double_t ptProng=pidObj->GetTPCmomentum();
1202 if(TMath::Abs(nsigmaTPCK)<3.)isKaonPionTPC[daught][0]=1;
1203 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1204 if(TMath::Abs(nsigmaTPCpi)<3.)isKaonPionTPC[daught][1]=1;
1205 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1208 else if(ptProng<.8){
1209 if(TMath::Abs(nsigmaTPCK)<2.)isKaonPionTPC[daught][0]=1;
1210 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1211 if(TMath::Abs(nsigmaTPCpi)<3.)isKaonPionTPC[daught][1]=1;
1212 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1215 if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1216 if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1223 if(combinedPID[0][0]<=-1&&combinedPID[1][0]<=-1){
1227 else if(hasPID[0]==0&&hasPID[1]==0){
1233 combinedPID[0][0]=0;
1234 combinedPID[0][1]=0;
1235 combinedPID[1][0]=0;
1236 combinedPID[1][1]=0;
1238 combinedPID[0][0]=isKaonPionTOF[0][0]+isKaonPionTPC[0][0];
1239 combinedPID[0][1]=isKaonPionTOF[0][1]+isKaonPionTPC[0][1];
1240 combinedPID[1][0]=isKaonPionTOF[1][0]+isKaonPionTPC[1][0];
1241 combinedPID[1][1]=isKaonPionTOF[1][1]+isKaonPionTPC[1][1];
1243 if(combinedPID[0][0]<=0&&combinedPID[1][0]<=0){
1250 return isD0D0barPID[0]+isD0D0barPID[1];
1255 Int_t selectionvalCand,
1256 Int_t selectionvalPID)
const 1261 if(selectionvalTrack==0)
return 0;
1265 switch(selectionvalPID) {
1270 returnvalue=((selectionvalCand==1 || selectionvalCand==3) ? 1 : 0);
1273 returnvalue=((selectionvalCand==2 || selectionvalCand==3) ? 2 : 0);
1276 returnvalue=selectionvalCand;
1296 Float_t normDecLengthCut=1.,decLengthCut=TMath::Min(d->P()*0.0066+0.01,0.06), normd0Cut=0.5;
1300 Int_t returnvalue=3;
1301 for(
Int_t i=0;i<2;i++){
1304 if(d->
DecayLength2()<decLengthCut*decLengthCut)
return 0;
1319 TString varNamesKF[11]={
"inv. mass [GeV]",
1330 Bool_t isUpperCutKF[11]={kTRUE,
1343 Bool_t forOpt[11]={kFALSE,
1366 SetName(
"D0toKpiCutsStandard");
1367 SetTitle(
"Standard Cuts for D0 analysis");
1378 AliESDtrackCuts *esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
1379 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1380 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1381 esdTrackCuts->SetRequireITSRefit(kTRUE);
1383 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
1384 esdTrackCuts->SetMinDCAToVertexXY(0.);
1385 esdTrackCuts->SetEtaRange(-0.8,0.8);
1386 esdTrackCuts->SetPtRange(0.3,1.e10);
1389 delete esdTrackCuts;
1394 const Int_t nvars=11;
1415 Float_t cutsMatrixD0toKpiStand[
nptbins][nvars]={{0.400,350.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,0.},
1416 {0.400,350.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,0.},
1417 {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.80,0.,0.},
1418 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.85,0.,0.},
1419 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1420 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1421 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1422 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1423 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-7000.*1E-8,0.85,0.,0.},
1424 {0.400,300.*1E-4,0.9,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85,0.,0.},
1425 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,10000.*1E-8,0.85,0.,0.},
1426 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.},
1427 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.},
1428 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.}};
1432 for(
Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1435 for (
Int_t ivar = 0; ivar<nvars; ivar++){
1436 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1440 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1444 for(
Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1445 delete [] cutsMatrixTransposeStand;
1446 cutsMatrixTransposeStand=NULL;
1452 const Int_t nlims=2;
1488 SetName(
"D0toKpiCuts");
1489 SetTitle(
"Cuts for D0 analysis in 2010-data pp 7 TeV vs multiplicity");
1494 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
1495 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1497 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1498 esdTrackCuts->SetRequireITSRefit(kTRUE);
1499 esdTrackCuts->SetEtaRange(-0.8,0.8);
1500 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1501 AliESDtrackCuts::kAny);
1503 esdTrackCuts->SetMinDCAToVertexXY(0.);
1504 esdTrackCuts->SetPtRange(0.3,1.e10);
1507 delete esdTrackCuts;
1513 const Int_t nvars=11;
1516 ptbins=
new Float_t[nptbins+1];
1536 Float_t cutsMatrixD0toKpiStand[
nptbins][nvars]={{0.400,350.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,3.},
1537 {0.400,350.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,3.},
1538 {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-30000.*1E-8,0.80,0.,4.},
1539 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-20000.*1E-8,0.85,0.,4.},
1540 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.85,0.,4.},
1541 {0.400,300.*1E-4,0.75,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.875,0.,0.},
1542 {0.400,300.*1E-4,0.75,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.875,0.,0.},
1543 {0.400,400.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1544 {0.400,400.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1545 {0.400,0.06,0.85,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00001,0.85,0.,0.},
1546 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1547 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1548 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1549 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.}};
1553 for(
Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1556 for (
Int_t ivar = 0; ivar<nvars; ivar++){
1557 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1561 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1562 for(
Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1563 delete [] cutsMatrixTransposeStand;
1576 if(pidflag) cout<<
"PID is used"<<endl;
1577 else cout<<
"PID is not used"<<endl;
1581 const Int_t nlims=2;
1623 SetName(
"D0toKpiCutsStandard");
1624 SetTitle(
"Standard Cuts for D0 analysis in pp2011 at 2.76TeV run");
1629 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
1630 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1632 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1633 esdTrackCuts->SetRequireITSRefit(kTRUE);
1634 esdTrackCuts->SetEtaRange(-0.8,0.8);
1635 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1636 AliESDtrackCuts::kAny);
1638 esdTrackCuts->SetMinDCAToVertexXY(0.);
1639 esdTrackCuts->SetPtRange(0.3,1.e10);
1641 esdTrackCuts->SetMaxDCAToVertexXY(1.);
1642 esdTrackCuts->SetMaxDCAToVertexZ(1.);
1643 esdTrackCuts->SetMinDCAToVertexXYPtDep(
"0.0075*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
1646 delete esdTrackCuts;
1649 const Int_t nvars=11;
1669 Float_t cutsMatrixD0toKpiStand[
nptbins][nvars]={{0.400,0.04,0.75,0.3,0.3,1000.*1E-4,1000.*1E-4,0.,0.85,0.,0.},
1670 {0.400,0.04,0.75,0.3,0.3,1000.*1E-4,1000.*1E-4,0.,0.85,0.,0.},
1671 {0.400,0.03,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.8,0.,0.},
1672 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.0003,0.9,0.,0.},
1673 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.0002,0.9,0.,0.},
1674 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00015,0.9,0.,0.},
1675 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.0001,0.9,0.,0.},
1676 {0.400,0.09,0.85,0.7,0.7,1000.*1E-4,1000.*1E-4,0.,0.85,0.,0.},
1677 {0.400,0.06,0.85,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00001,0.85,0.,0.},
1678 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1679 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1680 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1681 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.}};
1685 for(
Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1687 for (
Int_t ivar = 0; ivar<nvars; ivar++){
1688 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1691 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1692 for(
Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1693 delete [] cutsMatrixTransposeStand;
1698 const Int_t nlims=2;
1749 SetName(
"D0toKpiCutsStandard");
1750 SetTitle(
"Standard Cuts for D0 analysis in PbPb2010 run");
1767 AliESDtrackCuts *esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
1768 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1769 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1770 esdTrackCuts->SetRequireITSRefit(kTRUE);
1772 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
1773 esdTrackCuts->SetMinDCAToVertexXY(0.);
1774 esdTrackCuts->SetEtaRange(-0.8,0.8);
1775 esdTrackCuts->SetPtRange(0.7,1.e10);
1777 esdTrackCuts->SetMaxDCAToVertexXY(1.);
1778 esdTrackCuts->SetMaxDCAToVertexZ(1.);
1779 esdTrackCuts->SetMinDCAToVertexXYPtDep(
"0.0075*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
1782 delete esdTrackCuts;
1790 const Int_t nvars=11;
1811 Float_t cutsMatrixD0toKpiStand[
nptbins][nvars]={{0.400,400.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.85,0.99,2.},
1812 {0.400,400.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.9,0.99,2.},
1813 {0.400,400.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-43000.*1E-8,0.85,0.995,8.},
1814 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-45000.*1E-8,0.95,0.998,7.},
1815 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-36000.*1E-8,0.95,0.998,5.},
1816 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-27000.*1E-8,0.95,0.998,5.},
1817 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-21000.*1E-8,0.92,0.998,5.},
1818 {0.400,270.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-14000.*1E-8,0.88,0.998,5.},
1819 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85,0.998,5.},
1820 {0.400,350.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-1000.*1E-8,0.83,0.998,8.},
1821 {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-1000.*1E-8,0.82,0.995,6.},
1822 {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-1000.*1E-8,0.81,0.995,6.},
1823 {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,-1000.*1E-8,0.8,0.99,2.}};
1827 for(
Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1830 for (
Int_t ivar = 0; ivar<nvars; ivar++){
1831 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1835 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1838 for(
Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1839 delete [] cutsMatrixTransposeStand;
1840 cutsMatrixTransposeStand=NULL;
1846 const Int_t nlims=2;
1879 SetName(
"D0toKpiCutsStandard");
1880 SetTitle(
"Standard Cuts for D0 analysis in PbPb2010 run, for peripheral events");
1897 AliESDtrackCuts *esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
1898 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1899 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1900 esdTrackCuts->SetRequireITSRefit(kTRUE);
1902 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
1903 esdTrackCuts->SetMinDCAToVertexXY(0.);
1904 esdTrackCuts->SetEtaRange(-0.8,0.8);
1905 esdTrackCuts->SetPtRange(0.5,1.e10);
1907 esdTrackCuts->SetMaxDCAToVertexXY(1.);
1908 esdTrackCuts->SetMaxDCAToVertexZ(1.);
1909 esdTrackCuts->SetMinDCAToVertexXYPtDep(
"0.0025*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
1912 delete esdTrackCuts;
1920 const Int_t nvars=11;
1941 Float_t cutsMatrixD0toKpiStand[
nptbins][nvars]={{0.400,400.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-20000.*1E-8,0.7,0.993,2.},
1942 {0.400,400.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.85,0.993,2.},
1943 {0.400,400.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-40000.*1E-8,0.85,0.995,6.},
1944 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-40000.*1E-8,0.95,0.991,5.},
1945 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-36000.*1E-8,0.95,0.993,5.},
1946 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-27000.*1E-8,0.95,0.995,5.},
1947 {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-21000.*1E-8,0.92,0.998,5.},
1948 {0.400,270.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-14000.*1E-8,0.88,0.998,5.},
1949 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85,0.995,5.},
1950 {0.400,350.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.83,0.995,4.},
1951 {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.82,0.995,4.},
1952 {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.81,0.995,4.},
1953 {0.400,400.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.8,0.995,4.}};
1957 for(
Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1960 for (
Int_t ivar = 0; ivar<nvars; ivar++){
1961 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1965 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1968 for(
Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1969 delete [] cutsMatrixTransposeStand;
1970 cutsMatrixTransposeStand=NULL;
1976 const Int_t nlims=2;
2040 aodTracks.AddAt(d->GetDaughter(0),0);
2041 aodTracks.AddAt(d->GetDaughter(1),1);
2055 Int_t returnvalue = 0;
2057 Int_t isPosKaon = 0, isNegKaon = 0, isPosPion = 0, isNegPion = 0;
2061 Bool_t checkPIDInfo[2] = {kTRUE, kTRUE};
2062 AliAODTrack *aodtrack[2] = {(AliAODTrack*)aodTracks.At(0), (AliAODTrack*)aodTracks.At(1)};
2064 if ((aodtrack[0]->Charge()*aodtrack[1]->Charge()) != -1) {
2067 Double_t momentumpositive=0., momentumnegative=0.;
2068 for (
Int_t daught = 0; daught < 2; daught++) {
2071 if (aodtrack[daught]->Charge() == -1) {
2072 momentumnegative = aodtrack[daught]->P();
2074 if (aodtrack[daught]->Charge() == +1) {
2075 momentumpositive = aodtrack[daught]->P();
2078 checkPIDInfo[daught] = kFALSE;
2086 if (!checkPIDInfo[0] && !checkPIDInfo[1]) {
2118 GetBinContent(
fPidHF->
GetPidCombined()->GetPriorDistribution(AliPID::kKaon)->FindBin(momentumnegative)))) {
2122 GetBinContent(
fPidHF->
GetPidCombined()->GetPriorDistribution(AliPID::kKaon)->FindBin(momentumpositive)))) {
2151 if (isNegKaon && isPosKaon) {
2154 }
else if (isNegKaon && isPosPion) {
2156 }
else if (isPosKaon && isNegPion) {
2162 if (aodtrack[0]->Charge() == -1) {
2165 if (aodtrack[0]->Charge() == 1) {
2170 if (aodtrack[1]->Charge() == -1) {
2173 if (aodtrack[1]->Charge() == 1) {
2179 if (isD0 && isD0bar) {
2182 if (isD0 && !isD0bar) {
2185 if (!isD0 && isD0bar) {
2188 if (!isD0 && !isD0bar) {
2196 if (isPosKaon && isNegKaon) {
2198 }
else if (isNegKaon && isPosPion) {
2200 }
else if (isPosKaon && isNegPion) {
2202 }
else if (isPosPion && isNegPion) {
2204 }
else {returnvalue = 0;}
2215 aodTracks.AddAt(d->GetDaughter(0),0);
2216 aodTracks.AddAt(d->GetDaughter(1),1);
2224 AliAODTrack *aodtrack[2] = {(AliAODTrack*)aodTracks.At(0), (AliAODTrack*)aodTracks.At(1)};
2225 if ((aodtrack[0]->Charge() * aodtrack[1]->Charge()) != -1) {
2228 for (
Int_t daught = 0; daught < 2; daught++) {
2236 if (aodtrack[daught]->Charge() == +1) {
2240 if (aodtrack[daught]->Charge() == -1) {
2252 printf(
"Cuts on d0meas-d0exp:\n");
2259 printf(
"Cuts on d0:\n");
Double_t NormalizedDecayLengthXY() const
Int_t fIsSelectedCuts
fix the daughter track references
Double_t fPtMaxSpecialCuts
void SetAsym(Bool_t asym)
Int_t fnSpecies
switch for Bayesian
Int_t fWhyRejection
PID for heavy flavours manager.
void SetUseDefaultPID(Bool_t defPID)
UInt_t fUseImpParDCut
transverse momentum below which the strong PID is applied
Bool_t IsSignalMC(AliAODRecoDecay *d, AliAODEvent *aod, Int_t pdg) const
Bool_t IsTOFPiKexcluded(AliAODTrack *track, Double_t nsigmaK)
general method to perform PID using raw signals
Bool_t fUseKF
flag to switch on/off the default pid
void Getd0MeasMinusExpProng(Int_t ip, Double_t magf, Double_t &d0diff, Double_t &errd0diff) const
Bool_t fUseMCVertex
flag to switch on the removal of duaghters from the primary vertex computation
void SetSigmaForTPC(Double_t *sigma)
Double_t GetSigma(Int_t idet) const
void SetMaxVtxZ(Float_t z=1e6)
Bool_t SetMCPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Bool_t fCombPID
max momentum for applying PID
Bool_t fRemoveDaughtersFromPrimary
void SetUseCentrality(Int_t flag=1)
virtual void PrintAll() const
virtual Int_t IsSelectedCombPID(AliAODRecoDecayHF *d)
Double_t NormalizedDecayLength2() const
Double_t ImpParXY() const
Double_t fmaxPtrackForPID
transverse momentum below which the special cuts are applied
void SetPCompatTOF(Double_t pTOF)
virtual void SetStandardCutsPP2011_276TeV()
void SetNVars(Int_t nVars)
virtual void SetStandardCutsPP2010()
Double_t CosPointingAngleXY() const
Double_t fMaxRapidityCand
minimum pt of the candidate
void EnableSemiCentralTrigger()
Double_t InvMassD0() const
AliRDHFCutsD0toKpi(const char *name="CutsD0toKpi")
Double_t Prodd0d0() const
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Bool_t fLowPt
flag to switch on/off special cuts
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
void SetSelectCandTrackSPDFirst(Bool_t flag, Double_t ptmax)
Flag and pt-maximum to check if the candidate daughters fulfill the kFirst criteria.
void SetPidHF(AliAODPidHF *pidObj)
see enum below
AliAODPidHF * GetPidHF() const
Bool_t HasBadDaughters() const
Bool_t fDefaultPID
flag to switch on/off different pid for low pt D0
UInt_t fUsed0MeasMinusExpCut
void SetMinVtxContr(Int_t contr=1)
void Setd0MeasMinusExpCut(UInt_t nPtBins, Float_t *cutval)
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
void SetUseKF(Bool_t useKF)
void ResetMaskAndEnableMBTrigger()
void SetMaximumPtSpecialCuts(Double_t pt)
Double_t * fWeightsNegative
void SetMinCentrality(Float_t minCentrality=0.)
AliPIDCombined * GetPidCombined() const
Double_t CosThetaStarD0bar() const
angle of K
Double_t fMaxPtCand
minimum pt of the candidate
Bool_t CheckStatus(AliAODTrack *track, TString detectors) const
AliAODVertex * GetOwnPrimaryVtx() const
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
Float_t * fMaxImpParD
switch for cut on D0 ImpParXY; =0 –> not used, >0 value represents array size (it has to coincide wi...
virtual void CalculateBayesianWeights(AliAODRecoDecayHF *d)
Int_t fIsSelectedPID
outcome of cuts selection
void SetImpParDCut(UInt_t nPtBins, Float_t *cutval)
Double_t InvMassD0bar() const
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
void SetSigma(Double_t *sigma)
void SetSigmaForTOFCompat(Double_t sigma)
Float_t * fCutsRD
fnVars*fnPtBins
Int_t IsSelectedKF(AliAODRecoDecayHF2Prong *d, AliAODEvent *aod) const
Double_t DecayLength2() const
kinematics & topology
void SetSigmaForTPCCompat(Double_t sigma)
void SetMaxCentrality(Float_t maxCentrality=100.)
AliRDHFCutsD0toKpi & operator=(const AliRDHFCutsD0toKpi &source)
Int_t IsSelectedSpecialCuts(AliAODRecoDecayHF *d) const
Int_t CombineSelectionLevels(Int_t selectionvalTrack, Int_t selectionvalCand, Int_t selectionvalPID) const
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
virtual ~AliRDHFCutsD0toKpi()
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Float_t * fMaxd0MeasMinusExp
switch for cut on d0meas-d0exp; =0 –> not used, >0 value represents array size (it has to coincide w...
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd, const AliAODEvent *aod=0x0) const
void EnableCentralTrigger()
Bool_t IsPionRaw(AliAODTrack *track, TString detector) const
void SetUsePID(Bool_t flag=kTRUE)
Double_t Normalizedd0Prong(Int_t ip) const
virtual void PrintAll() const
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd)
void SetFlatd0MeasMinusExpCut(Float_t value)
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
void SetRemoveDaughtersFromPrim(Bool_t removeDaughtersPrim)
void SetUseSpecialCuts(Bool_t useSpecialCuts)
void SetOldPid(Bool_t oldPid)
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
virtual void SetStandardCutsPP2010vsMult()
void SetLowPt(Bool_t lowpt, Double_t ptlow=2.)
void SetFlatImpParDCut(Float_t value)
Double_t * fWeightsPositive
number of species (used only for array declaration)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Int_t fBayesianCondition
Switch for which Bayesian PID strategy to use.
void SetMatch(Int_t match)
void AddTrackCuts(const AliESDtrackCuts *cuts)
void SetPLimit(Double_t *plim, Int_t npLim)
void SetMinPtCandidate(Double_t ptCand=-1.)
Double_t CosPointingAngle() const
Int_t fnPtBins
cuts on the candidate
void SetStandardCutsPbPb2010Peripherals()
void SetCompat(Bool_t comp)
Double_t CosThetaStarD0() const
virtual Int_t PreSelect(TObjArray aodtracks)
void SetTriggerClass(TString trclass0, TString trclass1="")
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Int_t PtBin(Double_t pt) const
void SetOptPileup(Int_t opt=0)
virtual void SetStandardCutsPbPb2010()
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t fPtLowPID
flag to switch on/off D0 selection via KF
Double_t fMinPtCand
outcome of PID selection
Int_t IsSelectedPIDdefault(AliAODRecoDecayHF *rd)
virtual void SetStandardCutsPbPb2011()