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"
50 fUseSpecialCuts(kFALSE),
55 fPtMaxSpecialCuts(9999.),
56 fmaxPtrackForPID(9999),
58 fnSpecies(AliPID::kSPECIES),
70 TString varNames[11]={
"inv. mass [GeV]",
81 Bool_t isUpperCut[11]={kTRUE,
93 Bool_t forOpt[11]={kFALSE,
105 Float_t limits[2]={0,999999999.};
111 for (Int_t i = 0; i<AliPID::kSPECIES; i++) {
120 fUseSpecialCuts(source.fUseSpecialCuts),
121 fLowPt(source.fLowPt),
122 fDefaultPID(source.fDefaultPID),
123 fUseKF(source.fUseKF),
124 fPtLowPID(source.fPtLowPID),
125 fPtMaxSpecialCuts(source.fPtMaxSpecialCuts),
126 fmaxPtrackForPID(source.fmaxPtrackForPID),
127 fCombPID(source.fCombPID),
128 fnSpecies(source.fnSpecies),
129 fWeightsPositive(source.fWeightsPositive),
130 fWeightsNegative(source.fWeightsNegative),
131 fProbThreshold(source.fProbThreshold),
132 fBayesianStrategy(source.fBayesianStrategy),
133 fBayesianCondition(source.fBayesianCondition)
146 if(&source ==
this)
return *
this;
191 printf(
"AliRDHFCutsD0toKpi::GetCutsVarsForOpt: wrong number of variables\n");
198 Bool_t cleanvtx=kFALSE;
199 AliAODVertex *origownvtx=0x0;
212 if(TMath::Abs(pdgdaughters[0])==211) {
220 vars[iter]=dd->GetDCA();
224 if(TMath::Abs(pdgdaughters[0])==211) {
232 if(TMath::Abs(pdgdaughters[0])==321) {
233 vars[iter]=dd->PtProng(0);
236 vars[iter]=dd->PtProng(1);
241 if(TMath::Abs(pdgdaughters[0])==211) {
242 vars[iter]=dd->PtProng(0);
245 vars[iter]=dd->PtProng(1);
250 if(TMath::Abs(pdgdaughters[0])==321) {
251 vars[iter]=dd->Getd0Prong(0);
254 vars[iter]=dd->Getd0Prong(1);
259 if(TMath::Abs(pdgdaughters[0])==211) {
260 vars[iter]=dd->Getd0Prong(0);
263 vars[iter]=dd->Getd0Prong(1);
300 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
306 cout<<
"AliAODRecoDecayHF2Prong null"<<endl;
312 Double_t ptD=d->Pt();
319 Int_t returnvaluePID=3;
320 Int_t returnvalueCuts=3;
329 AliAODVertex *origownvtx=0x0;
348 Int_t okD0=0,okD0bar=0;
350 Int_t ptbin=
PtBin(pt);
356 Double_t mD0,mD0bar,ctsD0,ctsD0bar;
359 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
396 if (returnvalueCuts!=0) {
397 if (okD0) returnvalueCuts=1;
398 if (okD0bar) returnvalueCuts=2;
399 if (okD0 && okD0bar) returnvalueCuts=3;
416 if(!returnvalueCuts)
return 0;
427 if(!returnvaluePID)
return 0;
430 if(!returnvaluePID)
return 0;
438 if(!returnvalueComb)
return 0;
447 return returnvalueComb;
452 AliAODEvent* aod)
const {
457 AliAODTrack *track0 = (AliAODTrack*)d->GetDaughter(0);
458 AliAODTrack *track1 = (AliAODTrack*)d->GetDaughter(1);
460 if(!track0 || !track1) {
461 cout<<
"one or two D0 daughters missing!"<<endl;
466 Int_t returnvalueCuts=3;
469 AliKFParticle::SetField(aod->GetMagneticField());
471 Int_t okD0=0,okD0bar=0;
476 AliKFParticle negPiKF(*track1,-211);
477 AliKFParticle negKKF(*track1,-321);
478 AliKFParticle posPiKF(*track0,211);
479 AliKFParticle posKKF(*track0,321);
483 AliKFParticle d0c(negKKF,posPiKF);
484 AliKFParticle ad0c(posKKF,negPiKF);
488 AliAODVertex *vtx1 = aod->GetPrimaryVertex();
489 AliKFVertex primVtx(*vtx1);
490 AliKFVertex aprimVtx(*vtx1);
492 if(primVtx.GetNContributors()<=0) okD0 = 0;
493 if(aprimVtx.GetNContributors()<=0) okD0bar = 0;
494 if(!okD0 && !okD0bar) returnvalueCuts=0;
498 Double_t d0mass = d0c.GetMass();
499 Double_t ad0mass = ad0c.GetMass();
502 Double_t d0P = d0c.GetP();
503 Double_t d0Px = d0c.GetPx();
504 Double_t d0Py = d0c.GetPy();
505 Double_t d0Pz = d0c.GetPz();
506 Double_t ad0P = ad0c.GetP();
507 Double_t ad0Px = ad0c.GetPx();
508 Double_t ad0Py = ad0c.GetPy();
509 Double_t ad0Pz = ad0c.GetPz();
513 Double_t pt=d0c.GetPt();
514 Double_t apt=ad0c.GetPt();
518 if(track0->GetUsedForPrimVtxFit()) {
523 if(track1->GetUsedForPrimVtxFit()) {
531 if(primVtx.GetNContributors()<=0) okD0 = 0;
532 if(aprimVtx.GetNContributors()<=0) okD0bar = 0;
533 if(!okD0 && !okD0bar) returnvalueCuts=0;
539 Double_t impactPi = posPiKF.GetDistanceFromVertexXY(primVtx);
540 Double_t aimpactPi = negPiKF.GetDistanceFromVertexXY(aprimVtx);
541 Double_t impactKa = negKKF.GetDistanceFromVertexXY(primVtx);
542 Double_t aimpactKa = posKKF.GetDistanceFromVertexXY(aprimVtx);
546 Double_t prodParam = impactPi*impactKa;
547 Double_t aprodParam = aimpactPi*aimpactKa;
551 TVector3 mom(d0c.GetPx(),d0c.GetPy(),d0c.GetPz());
552 TVector3 fline(d0c.GetX()-primVtx.GetX(),
553 d0c.GetY()-primVtx.GetY(),
554 d0c.GetZ()-primVtx.GetZ());
555 Double_t pta = mom.Angle(fline);
556 Double_t cosP = TMath::Cos(pta);
558 TVector3 amom(ad0c.GetPx(),ad0c.GetPy(),ad0c.GetPz());
559 TVector3 afline(ad0c.GetX()-aprimVtx.GetX(),
560 ad0c.GetY()-aprimVtx.GetY(),
561 ad0c.GetZ()-aprimVtx.GetZ());
562 Double_t apta = amom.Angle(afline);
563 Double_t acosP = TMath::Cos(apta);
566 negKKF.TransportToParticle(d0c);
567 posPiKF.TransportToParticle(d0c);
568 posKKF.TransportToParticle(ad0c);
569 negPiKF.TransportToParticle(ad0c);
571 Double_t pxPi = posPiKF.GetPx();
572 Double_t pyPi = posPiKF.GetPy();
573 Double_t pzPi = posPiKF.GetPz();
574 Double_t ptPi = posPiKF.GetPt();
576 Double_t apxPi = negPiKF.GetPx();
577 Double_t apyPi = negPiKF.GetPy();
578 Double_t apzPi = negPiKF.GetPz();
579 Double_t aptPi = negPiKF.GetPt();
583 Double_t ptK = negKKF.GetPt();
584 Double_t aptK = posKKF.GetPt();
587 Double_t massvtx = TDatabasePDG::Instance()->GetParticle(421)->Mass();
589 massp[0] = TDatabasePDG::Instance()->GetParticle(321)->Mass();
590 massp[1] = TDatabasePDG::Instance()->GetParticle(211)->Mass();
591 Double_t pStar = TMath::Sqrt(TMath::Power(massvtx*massvtx-massp[0]*massp[0]-massp[1]*massp[1],2.)
592 -4.*massp[0]*massp[0]*massp[1]*massp[1])/(2.*massvtx);
596 Double_t d0E = TMath::Sqrt(massvtx*massvtx + d0P*d0P);
597 Double_t beta = d0P/d0E;
598 Double_t gamma = d0E/massvtx;
599 TVector3 momPi(pxPi,pyPi,pzPi);
600 TVector3 momTot(d0Px,d0Py,d0Pz);
601 Double_t q1 = momPi.Dot(momTot)/momTot.Mag();
602 Double_t cts = (q1/gamma-beta*TMath::Sqrt(pStar*pStar+massp[1]*massp[1]))/pStar;
606 Double_t ad0E = TMath::Sqrt(massvtx*massvtx + ad0P*ad0P);
607 Double_t abeta = ad0P/ad0E;
608 Double_t agamma = ad0E/massvtx;
609 TVector3 amomPi(apxPi,apyPi,apzPi);
610 TVector3 amomTot(ad0Px,ad0Py,ad0Pz);
611 Double_t aq1 = amomPi.Dot(amomTot)/amomTot.Mag();
612 Double_t acts = (aq1/agamma-abeta*TMath::Sqrt(pStar*pStar+massp[1]*massp[1]))/pStar;
615 d0c.SetProductionVertex(primVtx);
616 ad0c.SetProductionVertex(aprimVtx);
617 negKKF.SetProductionVertex(d0c);
618 posPiKF.SetProductionVertex(d0c);
619 posKKF.SetProductionVertex(ad0c);
620 negPiKF.SetProductionVertex(ad0c);
621 d0c.TransportToProductionVertex();
622 ad0c.TransportToProductionVertex();
625 Double_t decayLengthD0 = d0c.GetDecayLength();
626 Double_t adecayLengthD0 = ad0c.GetDecayLength();
628 Double_t chi2D0 = 50.;
629 if(d0c.GetNDF() > 0 && d0c.GetChi2() >= 0) {
630 chi2D0 = d0c.GetChi2()/d0c.GetNDF();
633 Double_t achi2D0 = 50.;
634 if(ad0c.GetNDF() > 0 && ad0c.GetChi2() >= 0) {
635 achi2D0 = ad0c.GetChi2()/ad0c.GetNDF();
639 Int_t ptbin=
PtBin(pt);
640 Int_t aptbin=
PtBin(apt);
642 if(ptbin < 0) okD0 = 0;
643 if(aptbin < 0) okD0bar = 0;
644 if(!okD0 && !okD0bar) returnvalueCuts=0;
648 if(!okD0 && !okD0bar) returnvalueCuts=0;
657 if(!okD0 && !okD0bar) returnvalueCuts=0;
662 if(!okD0 && !okD0bar) returnvalueCuts=0;
667 if(!okD0 && !okD0bar) returnvalueCuts=0;
672 if(!okD0 && !okD0bar) returnvalueCuts=0;
676 if(!okD0 && !okD0bar) returnvalueCuts=0;
680 if(!okD0 && !okD0bar) returnvalueCuts=0;
684 if(!okD0 && !okD0bar) returnvalueCuts=0;
688 if(!okD0 && !okD0bar) returnvalueCuts=0;
690 if(returnvalueCuts!=0) {
691 if(okD0) returnvalueCuts=1;
692 if(okD0bar) returnvalueCuts=2;
693 if(okD0 && okD0bar) returnvalueCuts=3;
696 return returnvalueCuts;
714 AliDebug(2,Form(
"pt of D0 = %f (> 5), cutting at |y| < 0.8\n",pt));
715 if (TMath::Abs(y) > 0.8){
720 Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
721 Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
722 AliDebug(2,Form(
"pt of D0 = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
723 if (y < minFiducialY || y > maxFiducialY){
744 Int_t isD0D0barPID[2]={1,2};
745 Int_t combinedPID[2][2];
757 Bool_t checkPIDInfo[2]={kTRUE,kTRUE};
760 for(Int_t daught=0;daught<2;daught++){
762 AliAODTrack *aodtrack=(AliAODTrack*)d->GetDaughter(daught);
766 checkPIDInfo[daught]=kFALSE;
769 Double_t pProng=aodtrack->P();
778 combinedPID[daught][1]=0;
787 if(combinedPID[daught][0]<=-1&&combinedPID[daught][1]<=-1){
791 else if(combinedPID[daught][0]==2&&combinedPID[daught][1]>=1){
792 if(aodtrack->Charge()==-1)isD0D0barPID[1]=0;
793 else isD0D0barPID[0]=0;
800 else if(combinedPID[daught][0]>=1||combinedPID[daught][1]<=-1){
801 if(aodtrack->Charge()==-1)isD0D0barPID[1]=0;
802 else isD0D0barPID[0]=0;
804 else if(combinedPID[daught][0]<=-1||combinedPID[daught][1]>=1){
805 if(aodtrack->Charge()==-1)isD0D0barPID[0]=0;
806 else isD0D0barPID[1]=0;
810 Double_t sigmaTPC[3]={3.,2.,0.};
822 combinedPID[daught][1]=0;
825 Double_t sigmaTPCpi[3]={3.,3.,0.};
832 combinedPID[daught][1]=1;
834 combinedPID[daught][1]=-1;
843 if(!checkPIDInfo[0] && !checkPIDInfo[1]) {
850 if(combinedPID[0][0]<=-1&&combinedPID[1][0]<=-1){
857 if(combinedPID[0][0]<=0&&combinedPID[1][0]<=0){
866 return isD0D0barPID[0]+isD0D0barPID[1];
903 Int_t isD0D0barPID[2]={1,2};
904 Double_t nsigmaTPCpi=-1., nsigmaTPCK=-1.;
905 Double_t tofSig,times[5];
906 Int_t hasPID[2]={2,2};
907 Int_t isKaonPionTOF[2][2],isKaonPionTPC[2][2];
908 Int_t combinedPID[2][2];
915 isKaonPionTOF[0][0]=0;
916 isKaonPionTOF[0][1]=0;
917 isKaonPionTOF[1][0]=0;
918 isKaonPionTOF[1][1]=0;
920 isKaonPionTPC[0][0]=0;
921 isKaonPionTPC[0][1]=0;
922 isKaonPionTPC[1][0]=0;
923 isKaonPionTPC[1][1]=0;
932 for(Int_t daught=0;daught<2;daught++){
937 AliAODTrack *aodtrack=(AliAODTrack*)d->GetDaughter(daught);
939 if(!(aodtrack->GetStatus()&AliESDtrack::kTPCrefit)){
943 if(!(aodtrack->GetStatus()&AliESDtrack::kITSrefit)){
948 AliAODPid *pid=aodtrack->GetDetPid();
957 Double_t ptrack=aodtrack->P();
959 if (!(aodtrack->GetStatus()&AliESDtrack::kTPCpid )){
964 static AliTPCPIDResponse theTPCpid;
965 AliAODPid *pidObj = aodtrack->GetDetPid();
966 Double_t ptProng=pidObj->GetTPCmomentum();
967 nsigmaTPCpi = theTPCpid.GetNumberOfSigmas(ptProng,(Float_t)pid->GetTPCsignal(),(Int_t)aodtrack->GetTPCClusterMap().CountBits(),AliPID::kPion);
968 nsigmaTPCK = theTPCpid.GetNumberOfSigmas(ptProng,(Float_t)pid->GetTPCsignal(),(Int_t)aodtrack->GetTPCClusterMap().CountBits(),AliPID::kKaon);
971 if(TMath::Abs(nsigmaTPCK)<2.)isKaonPionTPC[daught][0]=1;
972 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
973 if(TMath::Abs(nsigmaTPCpi)<2.)isKaonPionTPC[daught][1]=1;
974 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
978 if(TMath::Abs(nsigmaTPCK)<1.)isKaonPionTPC[daught][0]=1;
979 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
980 if(TMath::Abs(nsigmaTPCpi)<1.)isKaonPionTPC[daught][1]=1;
981 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
985 if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
987 if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
993 if(!((aodtrack->GetStatus()&AliESDtrack::kTOFpid)&&(aodtrack->GetStatus()&AliESDtrack::kTOFout)&&(aodtrack->GetStatus()&AliESDtrack::kTIME))){
998 tofSig=pid->GetTOFsignal();
999 pid->GetIntegratedTimes(times);
1000 if((tofSig-times[3])>5.*160.)
return 0;
1001 if(TMath::Abs(tofSig-times[3])>3.*160.){
1002 isKaonPionTOF[daught][0]=-1;
1006 isKaonPionTOF[daught][0]=1;
1013 combinedPID[daught][0]=isKaonPionTOF[daught][0]+isKaonPionTPC[daught][0];
1014 combinedPID[daught][1]=isKaonPionTOF[daught][1]+isKaonPionTPC[daught][1];
1019 if(combinedPID[daught][0]<=-1&&combinedPID[daught][1]<=-1){
1023 else if(combinedPID[daught][0]==2&&combinedPID[daught][1]>=1){
1024 if(aodtrack->Charge()==-1)isD0D0barPID[1]=0;
1025 else isD0D0barPID[0]=0;
1027 else if(combinedPID[daught][0]==1&&combinedPID[daught][1]>=1){
1031 else if(combinedPID[daught][0]>=1||combinedPID[daught][1]<=-1){
1032 if(aodtrack->Charge()==-1)isD0D0barPID[1]=0;
1033 else isD0D0barPID[0]=0;
1035 else if(combinedPID[daught][0]<=-1||combinedPID[daught][1]>=1){
1036 if(aodtrack->Charge()==-1)isD0D0barPID[0]=0;
1037 else isD0D0barPID[1]=0;
1044 isKaonPionTPC[daught][0]=0;
1045 isKaonPionTPC[daught][1]=0;
1046 AliAODPid *pidObj = aodtrack->GetDetPid();
1047 Double_t ptProng=pidObj->GetTPCmomentum();
1050 if(TMath::Abs(nsigmaTPCK)<3.)isKaonPionTPC[daught][0]=1;
1051 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1052 if(TMath::Abs(nsigmaTPCpi)<3.)isKaonPionTPC[daught][1]=1;
1053 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1056 else if(ptProng<.8){
1057 if(TMath::Abs(nsigmaTPCK)<2.)isKaonPionTPC[daught][0]=1;
1058 else if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1059 if(TMath::Abs(nsigmaTPCpi)<3.)isKaonPionTPC[daught][1]=1;
1060 else if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1063 if(TMath::Abs(nsigmaTPCK)>3.)isKaonPionTPC[daught][0]=-1;
1064 if(TMath::Abs(nsigmaTPCpi)>3.)isKaonPionTPC[daught][1]=-1;
1071 if(combinedPID[0][0]<=-1&&combinedPID[1][0]<=-1){
1075 else if(hasPID[0]==0&&hasPID[1]==0){
1081 combinedPID[0][0]=0;
1082 combinedPID[0][1]=0;
1083 combinedPID[1][0]=0;
1084 combinedPID[1][1]=0;
1086 combinedPID[0][0]=isKaonPionTOF[0][0]+isKaonPionTPC[0][0];
1087 combinedPID[0][1]=isKaonPionTOF[0][1]+isKaonPionTPC[0][1];
1088 combinedPID[1][0]=isKaonPionTOF[1][0]+isKaonPionTPC[1][0];
1089 combinedPID[1][1]=isKaonPionTOF[1][1]+isKaonPionTPC[1][1];
1091 if(combinedPID[0][0]<=0&&combinedPID[1][0]<=0){
1098 return isD0D0barPID[0]+isD0D0barPID[1];
1105 Int_t selectionvalCand,
1106 Int_t selectionvalPID)
const
1111 if(selectionvalTrack==0)
return 0;
1115 switch(selectionvalPID) {
1120 returnvalue=((selectionvalCand==1 || selectionvalCand==3) ? 1 : 0);
1123 returnvalue=((selectionvalCand==2 || selectionvalCand==3) ? 2 : 0);
1126 returnvalue=selectionvalCand;
1145 Float_t normDecLengthCut=1.,decLengthCut=TMath::Min(d->P()*0.0066+0.01,0.06), normd0Cut=0.5;
1149 Int_t returnvalue=3;
1150 for(Int_t i=0;i<2;i++){
1153 if(d->
DecayLength2()<decLengthCut*decLengthCut)
return 0;
1168 TString varNamesKF[11]={
"inv. mass [GeV]",
1179 Bool_t isUpperCutKF[11]={kTRUE,
1192 Bool_t forOpt[11]={kFALSE,
1216 SetName(
"D0toKpiCutsStandard");
1217 SetTitle(
"Standard Cuts for D0 analysis");
1228 AliESDtrackCuts *esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
1229 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1230 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1231 esdTrackCuts->SetRequireITSRefit(kTRUE);
1233 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
1234 esdTrackCuts->SetMinDCAToVertexXY(0.);
1235 esdTrackCuts->SetEtaRange(-0.8,0.8);
1236 esdTrackCuts->SetPtRange(0.3,1.e10);
1239 delete esdTrackCuts;
1243 const Double_t
ptmax = 9999.;
1244 const Int_t nvars=11;
1245 Float_t ptbins[nptbins+1];
1265 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.},
1266 {0.400,350.*1E-4,0.8,0.5,0.5,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,0.},
1267 {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.80,0.,0.},
1268 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.85,0.,0.},
1269 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1270 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1271 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1272 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1273 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-7000.*1E-8,0.85,0.,0.},
1274 {0.400,300.*1E-4,0.9,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85,0.,0.},
1275 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,10000.*1E-8,0.85,0.,0.},
1276 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.},
1277 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.},
1278 {0.400,300.*1E-4,1.0,0.7,0.7,1000.*1E-4,1000.*1E-4,999999.*1E-8,0.85,0.,0.}};
1282 Float_t **cutsMatrixTransposeStand=
new Float_t*[nvars];
1283 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1285 for (Int_t ibin=0;ibin<
nptbins;ibin++){
1286 for (Int_t ivar = 0; ivar<nvars; ivar++){
1287 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1291 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1295 for(Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1296 delete [] cutsMatrixTransposeStand;
1297 cutsMatrixTransposeStand=NULL;
1303 const Int_t nlims=2;
1304 Double_t plims[nlims]={0.6,0.8};
1305 Bool_t compat=kTRUE;
1307 Double_t
sigmas[5]={2.,1.,0.,3.,0.};
1340 SetName(
"D0toKpiCuts");
1341 SetTitle(
"Cuts for D0 analysis in 2010-data pp 7 TeV vs multiplicity");
1346 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
1347 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1349 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1350 esdTrackCuts->SetRequireITSRefit(kTRUE);
1351 esdTrackCuts->SetEtaRange(-0.8,0.8);
1352 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1353 AliESDtrackCuts::kAny);
1355 esdTrackCuts->SetMinDCAToVertexXY(0.);
1356 esdTrackCuts->SetPtRange(0.3,1.e10);
1359 delete esdTrackCuts;
1366 const Int_t nvars=11;
1369 ptbins=
new Float_t[nptbins+1];
1389 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.},
1390 {0.400,350.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.80,0.,3.},
1391 {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-30000.*1E-8,0.80,0.,4.},
1392 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-20000.*1E-8,0.85,0.,4.},
1393 {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.85,0.,4.},
1394 {0.400,300.*1E-4,0.75,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.875,0.,0.},
1395 {0.400,300.*1E-4,0.75,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.875,0.,0.},
1396 {0.400,400.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1397 {0.400,400.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85,0.,0.},
1398 {0.400,0.06,0.85,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00001,0.85,0.,0.},
1399 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1400 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1401 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1402 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.}};
1406 Float_t **cutsMatrixTransposeStand=
new Float_t*[nvars];
1407 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1409 for (Int_t ibin=0;ibin<
nptbins;ibin++){
1410 for (Int_t ivar = 0; ivar<nvars; ivar++){
1411 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1415 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1416 for(Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1417 delete [] cutsMatrixTransposeStand;
1428 Bool_t pidflag=kTRUE;
1430 if(pidflag) cout<<
"PID is used"<<endl;
1431 else cout<<
"PID is not used"<<endl;
1435 const Int_t nlims=2;
1436 Double_t plims[nlims]={0.6,0.8};
1437 Bool_t compat=kTRUE;
1439 Double_t
sigmas[5]={2.,1.,0.,3.,0.};
1478 SetName(
"D0toKpiCutsStandard");
1479 SetTitle(
"Standard Cuts for D0 analysis in pp2011 at 2.76TeV run");
1484 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
1485 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1487 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1488 esdTrackCuts->SetRequireITSRefit(kTRUE);
1489 esdTrackCuts->SetEtaRange(-0.8,0.8);
1490 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1491 AliESDtrackCuts::kAny);
1493 esdTrackCuts->SetMinDCAToVertexXY(0.);
1494 esdTrackCuts->SetPtRange(0.3,1.e10);
1496 esdTrackCuts->SetMaxDCAToVertexXY(1.);
1497 esdTrackCuts->SetMaxDCAToVertexZ(1.);
1498 esdTrackCuts->SetMinDCAToVertexXYPtDep(
"0.0075*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
1501 delete esdTrackCuts;
1505 const Int_t nvars=11;
1507 Float_t ptbins[nptbins+1];
1526 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.},
1527 {0.400,0.04,0.75,0.3,0.3,1000.*1E-4,1000.*1E-4,0.,0.85,0.,0.},
1528 {0.400,0.03,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.8,0.,0.},
1529 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.0003,0.9,0.,0.},
1530 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.0002,0.9,0.,0.},
1531 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00015,0.9,0.,0.},
1532 {0.400,0.03,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.0001,0.9,0.,0.},
1533 {0.400,0.09,0.85,0.7,0.7,1000.*1E-4,1000.*1E-4,0.,0.85,0.,0.},
1534 {0.400,0.06,0.85,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.00001,0.85,0.,0.},
1535 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1536 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1537 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.},
1538 {0.400,0.09,1.0,0.7,0.7,9999.,9999.,0.,0.,0.,0.}};
1541 Float_t **cutsMatrixTransposeStand=
new Float_t*[nvars];
1542 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1543 for (Int_t ibin=0;ibin<
nptbins;ibin++){
1544 for (Int_t ivar = 0; ivar<nvars; ivar++){
1545 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1548 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1549 for(Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1550 delete [] cutsMatrixTransposeStand;
1556 const Int_t nlims=2;
1557 Double_t plims[nlims]={0.6,0.8};
1558 Bool_t compat=kTRUE;
1560 Double_t
sigmas[5]={2.,1.,0.,3.,0.};
1608 SetName(
"D0toKpiCutsStandard");
1609 SetTitle(
"Standard Cuts for D0 analysis in PbPb2010 run");
1629 AliESDtrackCuts *esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
1630 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1631 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1632 esdTrackCuts->SetRequireITSRefit(kTRUE);
1634 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
1635 esdTrackCuts->SetMinDCAToVertexXY(0.);
1636 esdTrackCuts->SetEtaRange(-0.8,0.8);
1637 esdTrackCuts->SetPtRange(0.7,1.e10);
1639 esdTrackCuts->SetMaxDCAToVertexXY(1.);
1640 esdTrackCuts->SetMaxDCAToVertexZ(1.);
1641 esdTrackCuts->SetMinDCAToVertexXYPtDep(
"0.0075*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
1645 delete esdTrackCuts;
1652 const Double_t
ptmax = 9999.;
1653 const Int_t nvars=11;
1654 Float_t ptbins[nptbins+1];
1674 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.},
1675 {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.},
1676 {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.},
1677 {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.},
1678 {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.},
1679 {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.},
1680 {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.},
1681 {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.},
1682 {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.},
1683 {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.},
1684 {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.},
1685 {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.},
1686 {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.}};
1690 Float_t **cutsMatrixTransposeStand=
new Float_t*[nvars];
1691 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1693 for (Int_t ibin=0;ibin<
nptbins;ibin++){
1694 for (Int_t ivar = 0; ivar<nvars; ivar++){
1695 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1699 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1702 for(Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1703 delete [] cutsMatrixTransposeStand;
1704 cutsMatrixTransposeStand=NULL;
1710 const Int_t nlims=2;
1711 Double_t plims[nlims]={0.6,0.8};
1712 Bool_t compat=kTRUE;
1714 Double_t
sigmas[5]={2.,1.,0.,3.,0.};
1748 SetName(
"D0toKpiCutsStandard");
1749 SetTitle(
"Standard Cuts for D0 analysis in PbPb2010 run, for peripheral events");
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.5,1.e10);
1777 esdTrackCuts->SetMaxDCAToVertexXY(1.);
1778 esdTrackCuts->SetMaxDCAToVertexZ(1.);
1779 esdTrackCuts->SetMinDCAToVertexXYPtDep(
"0.0025*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))");
1783 delete esdTrackCuts;
1790 const Double_t
ptmax = 9999.;
1791 const Int_t nvars=11;
1792 Float_t ptbins[nptbins+1];
1812 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.},
1813 {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.},
1814 {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.},
1815 {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.},
1816 {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.},
1817 {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.},
1818 {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.},
1819 {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.},
1820 {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.},
1821 {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.},
1822 {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.},
1823 {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.},
1824 {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.}};
1828 Float_t **cutsMatrixTransposeStand=
new Float_t*[nvars];
1829 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=
new Float_t[nptbins];
1831 for (Int_t ibin=0;ibin<
nptbins;ibin++){
1832 for (Int_t ivar = 0; ivar<nvars; ivar++){
1833 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
1837 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
1840 for(Int_t iv=0;iv<nvars;iv++)
delete [] cutsMatrixTransposeStand[iv];
1841 delete [] cutsMatrixTransposeStand;
1842 cutsMatrixTransposeStand=NULL;
1848 const Int_t nlims=2;
1849 Double_t plims[nlims]={0.6,0.8};
1850 Bool_t compat=kTRUE;
1852 Double_t
sigmas[5]={2.,1.,0.,3.,0.};
1924 Int_t returnvalue = 0;
1926 Int_t isPosKaon = 0, isNegKaon = 0, isPosPion = 0, isNegPion = 0;
1931 Bool_t checkPIDInfo[2] = {kTRUE, kTRUE};
1932 AliAODTrack *aodtrack[2] = {(AliAODTrack*)d->GetDaughter(0), (AliAODTrack*)d->GetDaughter(1)};
1934 if ((aodtrack[0]->Charge()*aodtrack[1]->Charge()) != -1) {
1937 Double_t momentumpositive=0., momentumnegative=0.;
1938 for (Int_t daught = 0; daught < 2; daught++) {
1941 if (aodtrack[daught]->Charge() == -1) {
1942 momentumnegative = aodtrack[daught]->P();
1944 if (aodtrack[daught]->Charge() == +1) {
1945 momentumpositive = aodtrack[daught]->P();
1948 checkPIDInfo[daught] = kFALSE;
1956 if (!checkPIDInfo[0] && !checkPIDInfo[1]) {
1990 GetBinContent(
fPidHF->
GetPidCombined()->GetPriorDistribution(AliPID::kKaon)->FindBin(momentumnegative)))) {
1994 GetBinContent(
fPidHF->
GetPidCombined()->GetPriorDistribution(AliPID::kKaon)->FindBin(momentumpositive)))) {
2024 if (isNegKaon && isPosKaon) {
2027 }
else if (isNegKaon && isPosPion) {
2029 }
else if (isPosKaon && isNegPion) {
2035 if (aodtrack[0]->Charge() == -1) {
2038 if (aodtrack[0]->Charge() == 1) {
2043 if (aodtrack[1]->Charge() == -1) {
2046 if (aodtrack[1]->Charge() == 1) {
2054 if (isD0 && isD0bar) {
2057 if (isD0 && !isD0bar) {
2060 if (!isD0 && isD0bar) {
2063 if (!isD0 && !isD0bar) {
2071 if (isPosKaon && isNegKaon) {
2073 }
else if (isNegKaon && isPosPion) {
2075 }
else if (isPosKaon && isNegPion) {
2077 }
else if (isPosPion && isNegPion) {
2079 }
else {returnvalue = 0;}
2097 AliAODTrack *aodtrack[2] = {(AliAODTrack*)d->GetDaughter(0), (AliAODTrack*)d->GetDaughter(1)};
2098 if ((aodtrack[0]->Charge() * aodtrack[1]->Charge()) != -1) {
2101 for (Int_t daught = 0; daught < 2; daught++) {
2110 if (aodtrack[daught]->Charge() == +1) {
2114 if (aodtrack[daught]->Charge() == -1) {
Double_t NormalizedDecayLengthXY() const
Int_t fIsSelectedCuts
fix the daughter track references
Double_t fPtMaxSpecialCuts
transverse momentum below which the strong PID is applied
void SetAsym(Bool_t asym)
Int_t fnSpecies
switch for Bayesian
Int_t fWhyRejection
PID for heavy flavours manager.
void SetUseDefaultPID(Bool_t defPID)
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
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 Int_t IsSelectedCombPID(AliAODRecoDecayHF *d)
Double_t NormalizedDecayLength2() 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
void SetMinVtxContr(Int_t contr=1)
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)
virtual void CalculateBayesianWeights(AliAODRecoDecayHF *d)
Int_t fIsSelectedPID
outcome of cuts selection
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)
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
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd)
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.)
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
void SetStandardCutsPbPb2010Peripherals()
void SetCompat(Bool_t comp)
Double_t CosThetaStarD0() const
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()