26 #include <TDatabasePDG.h>
27 #include <Riostream.h>
32 #include "AliAODTrack.h"
33 #include "AliESDtrack.h"
51 fUseImpParProdCorrCut(kFALSE)
58 TString varNames[14]={
"inv. mass [GeV]",
61 "d0K [cm] lower limit!",
62 "d0Pi [cm] lower limit!",
66 "pM=Max{pT1,pT2,pT3} (GeV/c)",
72 Bool_t isUpperCut[14]={kTRUE,
87 Bool_t forOpt[14]={kFALSE,
102 Float_t limits[2]={0,999999999.};
106 Double_t plim[2]={0.6,0.8};
107 Double_t
nsigma[5]={2.,1.,2.,3.,0.};
132 fUseStrongPid(source.fUseStrongPid),
133 fMaxPtStrongPid(source.fMaxPtStrongPid),
134 fMaxPStrongPidK(source.fMaxPStrongPidK),
135 fMaxPStrongPidpi(source.fMaxPStrongPidpi),
136 fUseImpParProdCorrCut(source.fUseImpParProdCorrCut)
149 if(&source ==
this)
return *
this;
172 printf(
"AliRDHFCutsDplustoKpipi::GetCutsVarsForOpt: wrong number of variables\n");
179 Bool_t cleanvtx=kFALSE;
180 AliAODVertex *origownvtx=0x0;
197 for(Int_t iprong=0;iprong<3;iprong++){
198 if(TMath::Abs(pdgdaughters[iprong])==321) {
199 vars[iter]=dd->PtProng(iprong);
205 Float_t minPtDau=1000000.0;
206 for(Int_t iprong=0;iprong<3;iprong++){
207 if(TMath::Abs(pdgdaughters[iprong])==211) {
208 if(dd->PtProng(iprong)<minPtDau){
209 minPtDau=dd->PtProng(iprong);
217 for(Int_t iprong=0;iprong<3;iprong++){
218 if(TMath::Abs(pdgdaughters[iprong])==321) {
219 vars[iter]=dd->Getd0Prong(iprong);
225 Float_t minImpParDau=1000000.0;
226 for(Int_t iprong=0;iprong<3;iprong++){
227 if(TMath::Abs(pdgdaughters[iprong])==211) {
228 if(dd->Getd0Prong(iprong)<minImpParDau){
229 minImpParDau=dd->Getd0Prong(iprong);
233 vars[iter]=minImpParDau;
239 if(dist12<dist23)vars[iter]=dist12;
240 else vars[iter]=dist23;
253 for(Int_t i=0;i<3;i++){
254 if(dd->PtProng(i)>
ptmax)ptmax=dd->PtProng(i);
264 vars[iter]=dd->Getd0Prong(0)*dd->Getd0Prong(0)+dd->Getd0Prong(1)*dd->Getd0Prong(1)+dd->Getd0Prong(2)*dd->Getd0Prong(2);
269 for(Int_t iprong=0;iprong<3;iprong++){
270 if(dd->GetDCA(iprong)<maxDCA){
271 maxDCA=dd->GetDCA(iprong);
303 AliDebug(2,Form(
"pt of D+ = %f (> 5), cutting at |y| < 0.8",pt));
304 if (TMath::Abs(y) > 0.8)
return kFALSE;
308 Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
309 Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
310 AliDebug(2,Form(
"pt of D+ = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
311 if (y < minFiducialY || y > maxFiducialY)
return kFALSE;
323 Int_t sign=rd->GetCharge();
324 for(Int_t daught=0;daught<3;daught++){
325 AliAODTrack *track=(AliAODTrack*)rd->GetDaughter(daught);
327 if(sign==track->Charge()){
329 if(isPion==0)mask+=1;
330 else if(isPion>0)mask+=3;
335 if(isKaon==0)mask+=1;
336 else if(isKaon>0)mask+=3;
353 Int_t sign= rd->GetCharge();
354 for(Int_t daught=0;daught<3;daught++){
355 AliAODTrack *track=(AliAODTrack*)rd->GetDaughter(daught);
360 if(isProton>0 && isKaon<0 && isPion<0)
return 0;
361 if(isKaon>0 && isPion<0) nkaons++;
362 if(isKaon<0) nNotKaons++;
363 if(sign==track->Charge()){
364 if(isPion<0)
return 0;
368 if(isKaon<0)
return 0;
373 if(nkaons>1)
return 0;
374 if(nNotKaons==3)
return 0;
391 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
399 cout<<
"AliAODRecoDecayHF3Prong null"<<endl;
406 Int_t returnvaluePID=3;
407 Int_t returnvalueCuts=3;
420 AliAODVertex *origownvtx=0x0;
437 Int_t ptbin=
PtBin(pt);
443 Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
450 Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
454 if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.) {
CleanOwnPrimaryVtx(d,aod,origownvtx);
return 0;}
495 if(returnvaluePID==0)
return 0;
520 SetName(
"DplustoKpipiCutsStandard");
521 SetTitle(
"Standard Cuts for D+ analysis");
529 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
530 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
532 esdTrackCuts->SetRequireTPCRefit(kTRUE);
533 esdTrackCuts->SetRequireITSRefit(kTRUE);
535 esdTrackCuts->SetMinNClustersTPC(70);
536 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
537 AliESDtrackCuts::kAny);
539 esdTrackCuts->SetMinDCAToVertexXY(0.);
540 esdTrackCuts->SetPtRange(0.3,1.e10);
546 const Int_t nvars=14;
547 Float_t ptbins[nptbins+1];
566 Float_t** anacutsval;
567 anacutsval=
new Float_t*[nvars];
569 for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=
new Float_t[
nptbins];}
572 for(Int_t ipt=0;ipt<
nptbins;ipt++){
573 anacutsval[0][ipt]=0.2;
574 anacutsval[3][ipt]=0.;
575 anacutsval[4][ipt]=0.;
576 anacutsval[5][ipt]=0.01;
577 anacutsval[11][ipt]=10000000000.;
580 anacutsval[1][0]=0.3;
581 anacutsval[1][1]=0.4;
582 anacutsval[1][2]=0.4;
583 anacutsval[2][0]=0.3;
584 anacutsval[2][1]=0.3;
585 anacutsval[2][2]=0.4;
586 for(Int_t ipt=3;ipt<
nptbins;ipt++){
587 anacutsval[1][ipt]=0.4;
588 anacutsval[2][ipt]=0.4;
591 anacutsval[6][0]=0.022100;
592 anacutsval[6][1]=0.022100;
593 anacutsval[6][2]=0.034;
594 anacutsval[6][3]=0.020667;
595 anacutsval[6][4]=0.020667;
596 anacutsval[6][5]=0.023333;
599 anacutsval[7][0]=0.08;
600 anacutsval[7][1]=0.08;
601 anacutsval[7][2]=0.09;
602 anacutsval[7][3]=0.095;
603 anacutsval[7][4]=0.095;
605 anacutsval[8][0]=0.5;
606 anacutsval[8][1]=0.5;
607 anacutsval[8][2]=1.0;
608 anacutsval[8][3]=0.5;
609 anacutsval[8][4]=0.5;
612 anacutsval[9][0]=0.97;
613 anacutsval[9][1]=0.936;
614 anacutsval[9][2]=0.95;
615 anacutsval[9][3]=0.95;
616 anacutsval[9][4]= 0.95;
617 anacutsval[9][5]=0.92;
618 anacutsval[9][6]=0.92;
619 anacutsval[9][7]=0.92;
620 anacutsval[9][8]=0.92;
621 anacutsval[9][9]=0.90;
622 for(Int_t ipt=10;ipt<
nptbins;ipt++){
623 anacutsval[9][ipt]=0.90;
627 anacutsval[10][0]=0.0055;
628 anacutsval[10][1]=0.0055;
629 anacutsval[10][2]= 0.0028;
630 anacutsval[10][3]=0.000883;
631 anacutsval[10][4]=0.000883;
634 for(Int_t ipt=5;ipt<
nptbins;ipt++){
635 anacutsval[6][ipt]=0.02333;
636 anacutsval[7][ipt]=0.115;
637 anacutsval[8][ipt]=0.5;
638 anacutsval[10][ipt]=0.000883;
644 anacutsval[13][0]=0.98;
645 anacutsval[13][1]=0.98;
646 for(Int_t ipt=2;ipt<
nptbins;ipt++){
647 anacutsval[12][ipt]=0.;
648 anacutsval[13][ipt]=0.;
655 SetCuts(nvars,nptbins,anacutsval);
662 for(Int_t iic=0;iic<nvars;iic++){
delete [] anacutsval[iic];}
663 delete [] anacutsval;
678 SetName(
"DplustoKpipiCutsStandard");
679 SetTitle(
"Standard Cuts for D+ analysis in PbPb2010 run");
688 AliESDtrackCuts* esdTrackCuts=
new AliESDtrackCuts();
689 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
691 esdTrackCuts->SetRequireTPCRefit(kTRUE);
692 esdTrackCuts->SetRequireITSRefit(kTRUE);
694 esdTrackCuts->SetMinNClustersTPC(70);
695 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
696 AliESDtrackCuts::kAny);
698 esdTrackCuts->SetMinDCAToVertexXY(0.);
699 esdTrackCuts->SetPtRange(0.8,1.e10);
705 ptbins=
new Float_t[nptbins+1];
718 const Int_t nvars=14;
720 Float_t** anacutsval;
721 anacutsval=
new Float_t*[nvars];
723 for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=
new Float_t[
nptbins];}
726 for(Int_t ipt=0;ipt<
nptbins;ipt++){
727 anacutsval[0][ipt]=0.2;
728 anacutsval[1][ipt]=0.8;
729 anacutsval[2][ipt]=0.8;
730 anacutsval[3][ipt]=0.;
731 anacutsval[4][ipt]=0.;
732 anacutsval[5][ipt]=0.01;
733 anacutsval[11][ipt]=10000000000.;
734 anacutsval[12][ipt]=0.;
735 anacutsval[13][ipt]=0.;
737 anacutsval[1][5]=0.9;
739 anacutsval[6][0]=0.022100;
740 anacutsval[6][1]=0.022100;
741 anacutsval[6][2]=0.034;
742 anacutsval[6][3]=0.020667;
743 anacutsval[6][4]=0.020667;
744 anacutsval[6][5]=0.023333;
746 anacutsval[7][0]=0.08;
747 anacutsval[7][1]=0.08;
748 anacutsval[7][2]=0.17;
749 anacutsval[7][3]=0.14;
750 anacutsval[7][4]=0.14;
751 anacutsval[7][5]=0.19;
753 anacutsval[8][0]=0.8;
754 anacutsval[8][1]=0.8;
755 anacutsval[8][2]=1.1;
756 anacutsval[8][3]=0.5;
757 anacutsval[8][4]=0.5;
758 anacutsval[8][5]=0.5;
760 anacutsval[9][0]=0.995;
761 anacutsval[9][1]=0.995;
762 anacutsval[9][2]=0.997;
763 anacutsval[9][3]=0.998;
764 anacutsval[9][4]=0.998;
765 anacutsval[9][5]=0.995;
767 anacutsval[10][0]=0.0055;
768 anacutsval[10][1]=0.0055;
769 anacutsval[10][2]= 0.0028;
770 anacutsval[10][3]=0.000883;
771 anacutsval[10][4]=0.000883;
772 anacutsval[10][5]=0.000883;
774 anacutsval[12][5]=12.;
775 anacutsval[13][5]=0.998571;
776 anacutsval[12][6]=10.;
777 anacutsval[13][6]=0.997143;
779 for(Int_t ipt=6;ipt<
nptbins;ipt++){
780 anacutsval[6][ipt]=0.02333;
781 anacutsval[7][ipt]=0.19;
782 anacutsval[8][ipt]=2.0;
783 anacutsval[9][ipt]=0.997;
784 anacutsval[10][ipt]=0.000883;
786 anacutsval[7][6]=0.14;
787 anacutsval[9][6]=0.995;
790 SetCuts(nvars,nptbins,anacutsval);
800 for(Int_t iic=0;iic<nvars;iic++){
delete [] anacutsval[iic];}
801 delete [] anacutsval;
836 Double_t sigmaTPCPionHyp=-999.;
837 Double_t sigmaTPCKaonHyp=-999.;
838 Double_t sigmaTPCProtonHyp=-999.;
839 Double_t sigmaTOFPionHyp=-999.;
840 Double_t sigmaTOFKaonHyp=-999.;
841 Double_t sigmaTOFProtonHyp=-999.;
850 sigmaTPCPionHyp=TMath::Abs(sigmaTPCPionHyp);
851 sigmaTPCKaonHyp=TMath::Abs(sigmaTPCKaonHyp);
852 sigmaTPCProtonHyp=TMath::Abs(sigmaTPCProtonHyp);
853 sigmaTOFPionHyp=TMath::Abs(sigmaTOFPionHyp);
854 sigmaTOFKaonHyp=TMath::Abs(sigmaTOFKaonHyp);
855 sigmaTOFProtonHyp=TMath::Abs(sigmaTOFProtonHyp);
857 if (oksigmaTPCPionHyp && sigmaTPCPionHyp>0.){
868 if (oksigmaTPCKaonHyp && sigmaTPCKaonHyp>0.){
879 if (oksigmaTPCProtonHyp && sigmaTPCProtonHyp>0.){
890 if (oksigmaTOFPionHyp && sigmaTOFPionHyp>0.){
901 if (oksigmaTOFKaonHyp && sigmaTOFKaonHyp>0.){
912 if (oksigmaTOFProtonHyp && sigmaTOFProtonHyp>0.){
Double_t NormalizedDecayLengthXY() const
Int_t fIsSelectedCuts
fix the daughter track references
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
virtual void SetStandardCutsPbPb2010()
void SetAsym(Bool_t asym)
Bool_t IsSignalMC(AliAODRecoDecay *d, AliAODEvent *aod, Int_t pdg) const
AliRDHFCutsDplustoKpipi & operator=(const AliRDHFCutsDplustoKpipi &source)
Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const
Bool_t fUseMCVertex
flag to switch on the removal of duaghters from the primary vertex computation
Bool_t SetMCPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Bool_t fRemoveDaughtersFromPrimary
Double_t GetDist12toPrim() const
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
void SetUseCentrality(Int_t flag=1)
Int_t GetPIDBitMask(AliAODRecoDecayHF *rd)
Float_t fMaxPStrongPidpi
Maximum P of track to apply strong Pid on K.
void SetNVars(Int_t nVars)
UInt_t GetPIDTrackTPCTOFBitMap(AliAODTrack *track) const
Double_t CosPointingAngleXY() const
Double_t fMaxRapidityCand
minimum pt of the candidate
void EnableSemiCentralTrigger()
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
AliRDHFCuts & operator=(const AliRDHFCuts &source)
AliRDHFCutsDplustoKpipi(const char *name="CutsDplustoKpipi")
Bool_t HasBadDaughters() const
Class for cuts on AOD reconstructed D+->Kpipi.
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 ResetMaskAndEnableMBTrigger()
void SetMinCentrality(Float_t minCentrality=0.)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t fUseImpParProdCorrCut
Maximum P of track to apply strong Pid on pi.
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Double_t fMaxPtCand
minimum pt of the candidate
Float_t fMaxPStrongPidK
Maximum pt of candidate to apply strong Pid.
AliAODVertex * GetOwnPrimaryVtx() const
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
Double_t GetSigmaVert(const AliAODEvent *aod=0x0)
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd) const
virtual void SetStandardCutsPbPb2011()
Int_t fIsSelectedPID
outcome of cuts selection
Double_t InvMassDplus() const
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
void SetSigma(Double_t *sigma)
Float_t * fCutsRD
fnVars*fnPtBins
Double_t DecayLength2() const
kinematics & topology
Double_t GetDist23toPrim() const
void SetMaxCentrality(Float_t maxCentrality=100.)
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
void EnableCentralTrigger()
void SetUsePID(Bool_t flag=kTRUE)
virtual void PrintAll() const
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd)
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
void SetRemoveDaughtersFromPrim(Bool_t removeDaughtersPrim)
void SetOldPid(Bool_t oldPid)
virtual void SetStandardCutsPP2010()
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
void SetMatch(Int_t match)
void AddTrackCuts(const AliESDtrackCuts *cuts)
void SetPLimit(Double_t *plim, Int_t npLim)
Double_t CosPointingAngle() const
void SetCompat(Bool_t comp)
void SetTriggerClass(TString trclass0, TString trclass1="")
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
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
Float_t fMaxPtStrongPid
use strong pid 0 no,1 only for K,2 pi 3 both
Double_t fMinPtCand
outcome of PID selection