26 #include <Riostream.h>
28 #include <TDatabasePDG.h>
31 #include "AliAnalysisManager.h"
32 #include "AliInputEventHandler.h"
33 #include "AliPIDResponse.h"
36 #include "AliAODTrack.h"
37 #include "AliESDtrack.h"
38 #include "AliESDVertex.h"
39 #include "AliAODVertex.h"
41 #include "AliAODcascade.h"
55 fPIDStrategy(kNSigmaCuts),
56 fCombinedPIDThreshold(0.),
57 fUseCascadePID(kFALSE),
61 fProdTrackEtaRange(9999.),
62 fProdUseAODFilterBit(kTRUE),
63 fProdMassTolLambda(0.010),
64 fProdMassTolXi(0.008),
65 fProdMassRejOmega(0.008),
67 fProdRfidMaxV0(100.0),
69 fProdRfidMaxXi(100.0),
70 fProdCascProperDecayLengthMax(100.0),
71 fProdDcaXiDaughtersMax(100.),
72 fProdDcaV0DaughtersMax(100.),
73 fProdDcaBachToPrimVertexMin(0.),
74 fProdDcaV0ToPrimVertexMin(0.),
75 fProdDcaV0PrToPrimVertexMin(0.),
76 fProdDcaV0PiToPrimVertexMin(0.),
77 fProdXiCosineOfPoiningAngleMin(-1.),
78 fProdV0CosineOfPoiningAngleXiMin(-1.),
79 fProdCascNTPCClustersMin(0.0),
80 fProdLikeSignDcaMax(2.0),
81 fProdRoughMassTol(0.25),
90 TString varNames[nvars]={
"Xic inv. mass [GeV/c2]",
92 "Xi mass Tolrelance [GeV/c2]",
93 "Lambda mass Tolrelance [GeV/c2]",
95 "Max DCA pi-casc [cm]",
98 "Min d0 Xi-Bach [cm]",
101 "Min DecayLengthXY ",
105 Bool_t isUpperCut[nvars]={kTRUE,
120 Bool_t forOpt[nvars]={kFALSE,
136 Float_t limits[2]={0,999999999.};
143 fPIDStrategy(source.fPIDStrategy),
144 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
145 fUseCascadePID(source.fUseCascadePID),
146 fPidObjCascPi(source.fPidObjCascPi),
147 fPidObjCascPr(source.fPidObjCascPr),
148 fProdTrackPtMin(source.fProdTrackPtMin),
149 fProdTrackEtaRange(source.fProdTrackEtaRange),
150 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
151 fProdMassTolLambda(source.fProdMassTolLambda),
152 fProdMassTolXi(source.fProdMassTolXi),
153 fProdMassRejOmega(source.fProdMassRejOmega),
154 fProdRfidMinV0(source.fProdRfidMinV0),
155 fProdRfidMaxV0(source.fProdRfidMaxV0),
156 fProdRfidMinXi(source.fProdRfidMinXi),
157 fProdRfidMaxXi(source.fProdRfidMaxXi),
158 fProdCascProperDecayLengthMax(source.fProdCascProperDecayLengthMax),
159 fProdDcaXiDaughtersMax(source.fProdDcaXiDaughtersMax),
160 fProdDcaV0DaughtersMax(source.fProdDcaV0DaughtersMax),
161 fProdDcaBachToPrimVertexMin(source.fProdDcaBachToPrimVertexMin),
162 fProdDcaV0ToPrimVertexMin(source.fProdDcaV0ToPrimVertexMin),
163 fProdDcaV0PrToPrimVertexMin(source.fProdDcaV0PrToPrimVertexMin),
164 fProdDcaV0PiToPrimVertexMin(source.fProdDcaV0PiToPrimVertexMin),
165 fProdXiCosineOfPoiningAngleMin(source.fProdXiCosineOfPoiningAngleMin),
166 fProdV0CosineOfPoiningAngleXiMin(source.fProdV0CosineOfPoiningAngleXiMin),
167 fProdCascNTPCClustersMin(source.fProdCascNTPCClustersMin),
168 fProdLikeSignDcaMax(source.fProdLikeSignDcaMax),
169 fProdRoughMassTol(source.fProdRoughMassTol),
170 fProdRoughPtMin(source.fProdRoughPtMin)
184 if (
this != &source) {
232 if (pdgdaughters[0]==-9999)
return;
236 AliDebug(2,
" No AliAODRecoCascadeHF3Prong object found\n");
241 AliError(
"AliRDHFCutsXicPlustoXiPiPifromAODtracks wrong number of variables\n");
251 Double_t mxicPDG = TDatabasePDG::Instance()->GetParticle(4232)->Mass();
256 vars[iter]= dd->Pt();
260 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
261 vars[iter]= TMath::Abs(dd->
CascMassXi()-mxiPDG);
265 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
280 vars[iter]= dd->Getd0Prong(0);
284 vars[iter]= dd->Getd0Prong(1);
304 vars[iter]= dd->PtProng(0);
317 AliFatal(
"Cut matrice not inizialized. Exit...");
323 AliDebug(2,
" No AliAODRecoCascadeHF3Prong object found\n");
336 Int_t returnvalueCuts=1;
348 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
349 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
350 Double_t mxicPDG = TDatabasePDG::Instance()->GetParticle(4232)->Mass();
406 if(!okcand)
return 0;
410 Int_t returnvaluePID=1;
425 Int_t returnvalue = 0;
426 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
448 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
449 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
456 if(isPion1<1) returnvalue = 0;
457 if(isPion2<1) returnvalue = 0;
468 if(!
fUsePID || !obj) {
return 1;}
473 if(!part1||!part2)
return 0;
499 return prob1[AliPID::kPion];
509 if(trk->GetStatus()&AliESDtrack::kITSpureSA)
return kFALSE;
510 if(!(trk->GetStatus()&AliESDtrack::kITSin))
return kFALSE;
527 if(!casc)
return kFALSE;
529 AliAODTrack *ptrack = (AliAODTrack*) (casc->GetDaughter(0));
530 AliAODTrack *ntrack = (AliAODTrack*) (casc->GetDaughter(1));
531 AliAODTrack *btrack = (AliAODTrack*) (casc->GetDecayVertexXi()->GetDaughter(0));
533 if(!ptrack||!ntrack||!btrack)
return kFALSE;
540 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
541 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
542 Double_t momegaPDG = TDatabasePDG::Instance()->GetParticle(3334)->Mass();
544 Double_t massLambda = casc->MassLambda();
545 Double_t massAntiLambda = casc->MassAntiLambda();
549 Bool_t isparticle = kTRUE;
556 Double_t massOmega = casc->MassOmega();
561 lPosXi[0] = casc->DecayVertexXiX();
562 lPosXi[1] = casc->DecayVertexXiY();
563 lPosXi[2] = casc->DecayVertexXiZ();
564 Double_t decayvertXi = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
566 lPosV0[0] = casc->DecayVertexV0X();
567 lPosV0[1] = casc->DecayVertexV0Y();
568 lPosV0[2] = casc->DecayVertexV0Z();
569 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
571 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
572 if(decayvertXi<fProdRfidMinXi || decayvertXi>
fProdRfidMaxXi)
return kFALSE;
574 Double_t ptotxi = TMath::Sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)+pow(casc->MomXiZ(),2));
575 Double_t properdl = casc->DecayLengthXi(primvert[0],primvert[1],primvert[2])*mxiPDG/ptotxi;
578 Double_t lDcaXiDaughters = casc->DcaXiDaughters();
579 Double_t lDcaV0Daughters = casc->DcaV0Daughters();
583 Double_t lDcaBachToPrimVertex = casc->DcaBachToPrimVertex();
584 Double_t lDcaV0ToPrimVertex = casc->DcaV0ToPrimVertex();
585 Double_t lDcaPosToPrimVertex = casc->DcaPosToPrimVertex();
586 Double_t lDcaNegToPrimVertex = casc->DcaNegToPrimVertex();
597 Double_t lXiCosineOfPointingAngle = casc->CosPointingAngleXi(primvert[0],primvert[1],primvert[2]);
598 Double_t lV0CosineOfPointingAngleXi = casc->CosPointingAngle(lPosXi);
607 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
608 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
613 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
614 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
621 if(isProton<1)
return kFALSE;
622 if(isPion1<1)
return kFALSE;
623 if(isPion2<1)
return kFALSE;
628 if(isProton<1)
return kFALSE;
629 if(isPion1<1)
return kFALSE;
630 if(isPion2<1)
return kFALSE;
645 if(!casc)
return kFALSE;
647 AliAODTrack *ptrack = (AliAODTrack*) (casc->GetDaughter(0));
648 AliAODTrack *ntrack = (AliAODTrack*) (casc->GetDaughter(1));
649 AliAODTrack *btrack = (AliAODTrack*) (casc->GetDecayVertexXi()->GetDaughter(0));
651 if(!ptrack||!ntrack||!btrack)
return kFALSE;
664 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
665 Double_t momegaPDG = TDatabasePDG::Instance()->GetParticle(3334)->Mass();
666 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
669 Double_t massOmega = casc->MassOmega();
674 Double_t massLambda = casc->MassLambda();
675 Double_t massAntiLambda = casc->MassAntiLambda();
679 Bool_t isparticle = kTRUE;
683 lPosXi[0] = casc->DecayVertexXiX();
684 lPosXi[1] = casc->DecayVertexXiY();
685 lPosXi[2] = casc->DecayVertexXiZ();
686 Double_t decayvertXi = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
688 lPosV0[0] = casc->DecayVertexV0X();
689 lPosV0[1] = casc->DecayVertexV0Y();
690 lPosV0[2] = casc->DecayVertexV0Z();
691 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
693 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
694 if(decayvertXi<fProdRfidMinXi || decayvertXi>
fProdRfidMaxXi)
return kFALSE;
696 Double_t ptotxi = TMath::Sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)+pow(casc->MomXiZ(),2));
697 Double_t properdl = casc->DecayLengthXi(primvert[0],primvert[1],primvert[2])*mxiPDG/ptotxi;
700 Double_t lDcaXiDaughters = casc->DcaXiDaughters();
701 Double_t lDcaV0Daughters = casc->DcaV0Daughters();
705 Double_t lDcaBachToPrimVertex = casc->DcaBachToPrimVertex();
706 Double_t lDcaV0ToPrimVertex = casc->DcaV0ToPrimVertex();
707 Double_t lDcaPosToPrimVertex = casc->DcaPosToPrimVertex();
708 Double_t lDcaNegToPrimVertex = casc->DcaNegToPrimVertex();
719 Double_t lXiCosineOfPointingAngle = casc->CosPointingAngleXi(primvert[0],primvert[1],primvert[2]);
720 Double_t lV0CosineOfPointingAngleXi = casc->CosPointingAngle(lPosXi);
729 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
730 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
735 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
736 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
743 if(isProton<1)
return kFALSE;
744 if(isPion1<1)
return kFALSE;
745 if(isPion2<1)
return kFALSE;
750 if(isProton<1)
return kFALSE;
751 if(isPion1<1)
return kFALSE;
752 if(isPion2<1)
return kFALSE;
766 Double_t mpiPDG = TDatabasePDG::Instance()->GetParticle(211)->Mass();
767 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
768 Double_t mxicPDG = TDatabasePDG::Instance()->GetParticle(4232)->Mass();
773 Double_t Epi1_init = sqrt(pxpi1_init*pxpi1_init+pypi1_init*pypi1_init+pzpi1_init*pzpi1_init+mpiPDG*mpiPDG);
777 Double_t Epi2_init = sqrt(pxpi2_init*pxpi2_init+pypi2_init*pypi2_init+pzpi2_init*pzpi2_init+mpiPDG*mpiPDG);
778 Double_t pxcasc_init = casc->MomXiX();
779 Double_t pycasc_init = casc->MomXiY();
780 Double_t pzcasc_init = casc->MomXiZ();
781 Double_t Ecasc_init = sqrt(pxcasc_init*pxcasc_init+pycasc_init*pycasc_init+pzcasc_init*pzcasc_init+mxiPDG*mxiPDG);
782 Double_t pxxic_init = pxpi1_init+pxpi2_init+pxcasc_init;
783 Double_t pyxic_init = pypi1_init+pypi2_init+pycasc_init;
784 Double_t pzxic_init = pzpi1_init+pzpi2_init+pzcasc_init;
785 Double_t Exic_init = Epi1_init+Epi2_init+Ecasc_init;
786 Double_t xicmass_init = sqrt(Exic_init*Exic_init-pxxic_init*pxxic_init-pyxic_init*pyxic_init-pzxic_init*pzxic_init);
788 if(xicmass_init<mxicPDG-fProdRoughMassTol || xicmass_init>mxicPDG+
fProdRoughMassTol)
return kFALSE;
789 if(sqrt(pxxic_init*pxxic_init+pyxic_init*pyxic_init)<
fProdRoughPtMin)
return kFALSE;
Double_t InvMassPiXiPi() const
Xic invariant mass.
Double_t GetPionProbabilityTPCTOF(AliAODTrack *trk)
AliRDHFCutsXicPlustoXiPiPifromAODtracks & operator=(const AliRDHFCutsXicPlustoXiPiPifromAODtracks &source)
Double_t fProdDcaV0PiToPrimVertexMin
Min Dca between v0-proton and PV.
Double_t fProdCascNTPCClustersMin
AliAODTrack * GetBachelor2() const
Bool_t SingleCascadeCutsRef(AliAODcascade *casc, Double_t *vert)
Bool_t SingleTrkCuts(AliAODTrack *trk)
Double_t fProdMassTolXi
Tolerance of Lambda mass from PDG value.
Bool_t fUseCascadePID
PID threshold used in IsSelectedCombinedPID.
Double_t fProdDcaBachToPrimVertexMin
Max Dca between V0 daughters.
Double_t fProdDcaV0PrToPrimVertexMin
Min Dca between v0 and PV.
Double_t CascMassXi() const
AliRDHFCutsXicPlustoXiPiPifromAODtracks(const char *name="CutsXicPlustoXiPiPi")
void SetNVars(Int_t nVars)
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
Double_t fProdDcaV0ToPrimVertexMin
Min Dca between Bachelor and PV.
Double_t fProdRfidMinV0
Rejection range of Omega mass from PDG value.
Double_t fProdRfidMaxXi
Minimum Decay vertex of Xi.
AliRDHFCuts & operator=(const AliRDHFCuts &source)
AliAODPidHF * fPidObjCascPi
Use PID for cascade or not.
Double_t fProdDcaV0DaughtersMax
Max Dca between Xi daughters.
Double_t fProdMassRejOmega
Tolerance of Xi mass from PDG value.
AliPIDCombined * GetPidCombined() const
Bool_t fProdUseAODFilterBit
Bachelor Eta range.
Double_t fProdV0CosineOfPoiningAngleXiMin
Min Xi cos pointing angle to PV.
Double_t fMaxPtCand
minimum pt of the candidate
Double_t CascDcaV0ToPrimVertex() const
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t CascMassLambda() const
AliAODTrack * GetBachelor1() const
Double_t CascDcaBachToPrimVertex() const
Double_t fProdCascProperDecayLengthMax
Max Decay vertex of Xi.
virtual ~AliRDHFCutsXicPlustoXiPiPifromAODtracks()
AliAODPidHF * fPidObjCascPr
PID object for cascade-pion.
Double_t fProdRoughPtMin
Tolerance of Xic mass from PDG value.
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Float_t * fCutsRD
fnVars*fnPtBins
void GetDCAs(Double_t dca[3]) const
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
Double_t DecayLengthXY() const
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Bool_t SingleCascadeCuts(AliAODcascade *casc, Double_t *vert)
Double_t CascMassAntiLambda() const
Double_t XicCosPointingAngle() const
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Double_t fProdRfidMinXi
Max Decay vertex of V0.
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Double_t fCombinedPIDThreshold
PID Strategy.
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
Double_t fProdRoughMassTol
Maximum DCA of pions.
Bool_t SelectWithRoughCuts(AliAODcascade *casc, AliAODTrack *trk1, AliAODTrack *trk2)
Double_t fProdTrackPtMin
PID object for cascade-proton.
Double_t fProdTrackEtaRange
Minimum Bachelor pT.
Double_t fProdRfidMaxV0
Minimum Decay vertex of V0.
Double_t fProdMassTolLambda
Use AODfilterBit or not.
EPIDStrategy fPIDStrategy
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Double_t fProdXiCosineOfPoiningAngleMin
Min Dca between v0-pion and PV.
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t fMinPtCand
outcome of PID selection
Double_t fProdLikeSignDcaMax
Minimum number of TPC clusters.
Double_t fProdDcaXiDaughtersMax
mL/p of cascade
void SetPidResponse(AliPIDResponse *pidResp)