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"
54 fPIDStrategy(kNSigmaCuts),
55 fCombinedPIDThreshold(0.),
56 fUseLambdaPID(kFALSE),
59 fUseOnTheFlyV0(kFALSE),
60 fProdTrackTPCNclsPIDMin(0),
61 fProdTrackTPCNclsRatioMin(0.0),
62 fProdUseAODFilterBit(kTRUE),
63 fProdV0MassTolLambda(0.01),
64 fProdV0MassTolLambdaRough(0.01),
66 fProdV0CosPointingAngleToPrimVtxMin(0.99),
67 fProdV0DcaDaughtersMax(1.5),
68 fProdV0DaughterEtaRange(0.8),
69 fProdV0DaughterPtMin(0.0),
70 fProdV0DaughterTPCClusterMin(70),
71 fProdV0DaughterTPCCrossRatioMin(0.0),
73 fProdRfidMaxV0(100.0),
74 fProdDcaV0ToPrimVertexMin(0.),
75 fProdDcaV0PrToPrimVertexMin(0.),
76 fProdDcaV0PiToPrimVertexMin(0.),
77 fProdV0ProperDecayLengthMax(99999.),
79 fProdV0EtaMin(-9999.),
81 fProdV0RapMin(-9999.),
83 fProdRoughMassTol(0.25),
85 fExcludePionTPC(kFALSE),
86 fExcludeProtonTPC(kFALSE),
87 fExcludeKaonTPC(kFALSE),
88 fExcludenSigmaPionTPC(3.),
89 fExcludenSigmaProtonTPC(3.),
90 fExcludenSigmaKaonTPC(3.),
91 fSigmaElectronTPCMin(-9999.),
92 fSigmaElectronTPCPtDepPar0(-9999.),
93 fSigmaElectronTPCPtDepPar1(-9999.),
94 fSigmaElectronTPCPtDepPar2(0.),
95 fSigmaElectronTPCMax(9999.),
96 fSigmaElectronTOFMin(-9999.),
97 fSigmaElectronTOFMax(9999.)
105 TString varNames[nvars]={
107 "cos(Opening angle) [cos(rad)]"
110 Bool_t isUpperCut[nvars]={
115 Bool_t forOpt[nvars]={
121 Float_t limits[2]={0,999999999.};
127 fPIDStrategy(source.fPIDStrategy),
128 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
129 fUseLambdaPID(source.fUseLambdaPID),
130 fPidObjProton(source.fPidObjProton),
131 fPidObjPion(source.fPidObjPion),
132 fUseOnTheFlyV0(source.fUseOnTheFlyV0),
133 fProdTrackTPCNclsPIDMin(source.fProdTrackTPCNclsPIDMin),
134 fProdTrackTPCNclsRatioMin(source.fProdTrackTPCNclsRatioMin),
135 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
136 fProdV0MassTolLambda(source.fProdV0MassTolLambda),
137 fProdV0MassTolLambdaRough(source.fProdV0MassTolLambdaRough),
138 fProdV0PtMin(source.fProdV0PtMin),
139 fProdV0CosPointingAngleToPrimVtxMin(source.fProdV0CosPointingAngleToPrimVtxMin),
140 fProdV0DcaDaughtersMax(source.fProdV0DcaDaughtersMax),
141 fProdV0DaughterEtaRange(source.fProdV0DaughterEtaRange),
142 fProdV0DaughterPtMin(source.fProdV0DaughterPtMin),
143 fProdV0DaughterTPCClusterMin(source.fProdV0DaughterTPCClusterMin),
144 fProdV0DaughterTPCCrossRatioMin(source.fProdV0DaughterTPCCrossRatioMin),
145 fProdRfidMinV0(source.fProdRfidMinV0),
146 fProdRfidMaxV0(source.fProdRfidMaxV0),
147 fProdDcaV0ToPrimVertexMin(source.fProdDcaV0ToPrimVertexMin),
148 fProdDcaV0PrToPrimVertexMin(source.fProdDcaV0PrToPrimVertexMin),
149 fProdDcaV0PiToPrimVertexMin(source.fProdDcaV0PiToPrimVertexMin),
150 fProdV0ProperDecayLengthMax(source.fProdV0ProperDecayLengthMax),
151 fProdMassRejK0s(source.fProdMassRejK0s),
152 fProdV0EtaMin(source.fProdV0EtaMin),
153 fProdV0EtaMax(source.fProdV0EtaMax),
154 fProdV0RapMin(source.fProdV0RapMin),
155 fProdV0RapMax(source.fProdV0RapMax),
156 fProdRoughMassTol(source.fProdRoughMassTol),
157 fProdRoughPtMin(source.fProdRoughPtMin),
158 fExcludePionTPC(source.fExcludePionTPC),
159 fExcludeProtonTPC(source.fExcludeProtonTPC),
160 fExcludeKaonTPC(source.fExcludeKaonTPC),
161 fExcludenSigmaPionTPC(source.fExcludenSigmaPionTPC),
162 fExcludenSigmaProtonTPC(source.fExcludenSigmaProtonTPC),
163 fExcludenSigmaKaonTPC(source.fExcludenSigmaKaonTPC),
164 fSigmaElectronTPCMin(source.fSigmaElectronTPCMin),
165 fSigmaElectronTPCPtDepPar0(source.fSigmaElectronTPCPtDepPar0),
166 fSigmaElectronTPCPtDepPar1(source.fSigmaElectronTPCPtDepPar1),
167 fSigmaElectronTPCPtDepPar2(source.fSigmaElectronTPCPtDepPar2),
168 fSigmaElectronTPCMax(source.fSigmaElectronTPCMax),
169 fSigmaElectronTOFMin(source.fSigmaElectronTOFMin),
170 fSigmaElectronTOFMax(source.fSigmaElectronTOFMax)
183 if (
this != &source) {
250 if (pdgdaughters[0]==-9999)
return;
254 AliError(
"No AliAODRecoCascadeHF object found\n");
259 AliError(
"Cut object seems to have the wrong number of variables\n");
270 UInt_t pdgdg[2]={11,3122};
271 vars[iter]= dd->InvMass(2,pdgdg);
275 Double_t v0px = dd->PxProng(1);
276 Double_t v0py = dd->PyProng(1);
277 Double_t v0pz = dd->PzProng(1);
278 Double_t epx = dd->PxProng(0);
279 Double_t epy = dd->PyProng(0);
280 Double_t epz = dd->PzProng(0);
281 vars[iter]= (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
294 AliFatal(
"Cut matrix not inizialized. Exit...");
300 AliDebug(2,
"AliAODRecoCascadeHF null");
304 Double_t ptD=d->Pt();
313 Int_t returnvalueCuts=1;
319 Int_t ptbin=
PtBin(pt);
325 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
326 UInt_t pdgdg[2]={11,3122};
327 Double_t InvMassEleLambda = d->InvMass(2,pdgdg);
329 Double_t v0px = d->PxProng(1);
330 Double_t v0py = d->PyProng(1);
331 Double_t v0pz = d->PzProng(1);
332 Double_t epx = d->PxProng(0);
333 Double_t epy = d->PyProng(0);
334 Double_t epz = d->PzProng(0);
335 Double_t cosoa = (v0px*epx+v0py*epy+v0pz*epz)/sqrt(v0px*v0px+v0py*v0py+v0pz*v0pz)/sqrt(epx*epx+epy*epy+epz*epz);
346 if(!okcand)
return 0;
350 Int_t returnvaluePID=1;
357 Int_t returnvalue = 0;
358 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
378 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
379 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
380 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
385 if(isElectron<1) returnvalue = 0;
396 if(!
fUsePID || !obj) {
return 1;}
414 if(trk->GetStatus()&AliESDtrack::kITSpureSA)
return kFALSE;
415 if(!(trk->GetStatus()&AliESDtrack::kITSin))
return kFALSE;
417 Double_t pos[3]; primVert->GetXYZ(pos);
418 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
419 const AliESDVertex vESD(pos,cov,100.,100);
423 if(trk->GetTPCNclsF()>0){
424 Float_t tpcratio = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
432 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
433 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
434 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
464 if(trk->GetStatus()&AliESDtrack::kITSpureSA)
return kFALSE;
465 if(!(trk->GetStatus()&AliESDtrack::kITSin))
return kFALSE;
467 Double_t pos[3]; primVert->GetXYZ(pos);
468 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
469 const AliESDVertex vESD(pos,cov,100.,100);
473 if(trk->GetTPCNclsF()>0){
474 Float_t tpcratio = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
509 if(isElectron<1)
return kFALSE;
564 Double_t pte = trk->Pt();
587 Bool_t onFlyV0 = v0->GetOnFlyStatus();
589 if(!v0)
return kFALSE;
590 if(!(v0->GetSecondaryVtx()))
return kFALSE;
592 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
593 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
594 if(!cptrack || !cntrack)
return kFALSE;
595 if(cptrack->Charge()<0 && cntrack->Charge()>0){
597 cptrack = (AliAODTrack*)(v0->GetDaughter(1));
598 cntrack = (AliAODTrack*)(v0->GetDaughter(0));
601 if ( cptrack->Charge() == cntrack->Charge() )
return kFALSE;
602 if(!(cptrack->GetStatus() & AliESDtrack::kTPCrefit) ||
603 !(cntrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
604 AliAODVertex *maybeKinkPos = (AliAODVertex*)cptrack->GetProdVertex();
605 AliAODVertex *maybeKinkNeg = (AliAODVertex*)cntrack->GetProdVertex();
606 if (maybeKinkPos->GetType()==AliAODVertex::kKink || maybeKinkNeg->GetType()==AliAODVertex::kKink)
616 Double_t massLambda = v0->MassLambda();
617 Double_t massAntiLambda = v0->MassAntiLambda();
618 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
619 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
622 Double_t massK0s = v0->MassK0Short();
626 Bool_t isparticle = kTRUE;
631 Double_t posVtx[3] = {0.,0.,0.};
632 primVert->GetXYZ(posVtx);
633 Double_t cospav0 = v0->CosPointingAngle(posVtx);
641 Double_t lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex();
642 Double_t lDcaPosToPrimVertex = v0->DcaPosToPrimVertex();
643 Double_t lDcaNegToPrimVertex = v0->DcaNegToPrimVertex();
653 lPosV0[0] = v0->DecayVertexV0X();
654 lPosV0[1] = v0->DecayVertexV0Y();
655 lPosV0[2] = v0->DecayVertexV0Z();
656 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
658 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
660 Double_t ptotlam = TMath::Sqrt(pow(v0->Px(),2)+pow(v0->Py(),2)+pow(v0->Pz(),2));
661 Double_t properdl = v0->DecayLengthV0(posVtx)*mlamPDG/ptotlam;
668 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
669 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
670 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
674 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
675 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
676 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
680 Int_t isProton= -9999;
689 if(isProton<1)
return kFALSE;
690 if(isPion<1)
return kFALSE;
693 Double_t RapLambda = v0->RapLambda();
694 if(RapLambda<fProdV0RapMin || RapLambda>
fProdV0RapMax)
return kFALSE;
696 Double_t EtaLambda = v0->PseudoRapV0();
697 if(EtaLambda<fProdV0EtaMin || EtaLambda>
fProdV0EtaMax)
return kFALSE;
709 if(!v0)
return kFALSE;
710 if(!part)
return kFALSE;
719 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
720 Double_t massL = v0->MassLambda();
722 massL = v0->MassAntiLambda();
732 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
733 Double_t massL = v0->M();
742 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
743 Double_t massL = v0->MassLambda();
745 massL = v0->MassAntiLambda();
747 Bool_t issideband = kFALSE;
756 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
757 Double_t massL = v0->M();
758 Bool_t issideband = kFALSE;
Bool_t SingleV0Cuts(AliAODv0 *v0, AliAODVertex *vert)
Double_t fProdV0RapMax
Minimum rapidity of cascade.
Double_t fProdV0DaughterTPCCrossRatioMin
V0 daughter Minimum TPC cluster pT used before object creation.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Bool_t IsSelectedCustomizedeID(AliAODTrack *trk)
Double_t fProdV0ProperDecayLengthMax
Min Dca between v0-pion and PV.
Double_t fSigmaElectronTPCMin
nSigma to exclude for Kaon band
AliAODPidHF * fPidObjProton
Use PID for proton from Lc.
Double_t fProdRoughMassTol
Maximum rapidity of cascade.
AliRDHFCutsLctoeleLambdafromAODtracks & operator=(const AliRDHFCutsLctoeleLambdafromAODtracks &source)
Bool_t IsSelectedeID(AliAODTrack *trk)
Bool_t IsPeakRegion(AliAODv0 *c)
Double_t fProdV0CosPointingAngleToPrimVtxMin
Minimum Lambda pT used before object creation.
Double_t fProdV0PtMin
Lambda mass selection used before object creation.
Double_t fExcludenSigmaKaonTPC
nSigma to exclude for proton band
void SetNVars(Int_t nVars)
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Bool_t fExcludePionTPC
pT cut for Lc used before object creation
Double_t fProdTrackTPCNclsRatioMin
Min. Number of TPC PID cluster.
Double_t fSigmaElectronTPCPtDepPar1
nSigma electron lower limit (par0)
Double_t fSigmaElectronTPCPtDepPar0
nSigma to exclude for Kaon band
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
Bool_t IsSelectedCustomizedPtDepeID(AliAODTrack *trk)
Double_t fExcludenSigmaProtonTPC
nSigma to exclude for pion band
Double_t fProdDcaV0PrToPrimVertexMin
Min Dca between v0 and PV.
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Double_t fProdV0RapMin
Maximum eta of cascade.
EPIDStrategy fPIDStrategy
Double_t fProdV0DaughterEtaRange
Max DCA between V0 daughters used before object creation.
Bool_t fUseLambdaPID
Threshold used in IsSelectedCombinedPID.
Double_t fMaxPtCand
minimum pt of the candidate
Double_t fSigmaElectronTOFMin
nSigma to exclude for Kaon band
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
Bool_t IsSelectedCombinedeID(AliAODTrack *trk)
Bool_t fExcludeKaonTPC
Flag wheter to exlude proton band.
Double_t fProdRoughPtMin
Mass cut for Lc used before object creation.
Double_t fProdDcaV0PiToPrimVertexMin
Min Dca between v0-proton and PV.
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts) const
Double_t fSigmaElectronTOFMax
nSigma to exclude for Kaon band
Int_t fProdTrackTPCNclsPIDMin
Flag to check if we use on-the-fly v0.
AliAODTrack * GetBachelor() const
Bool_t fUseOnTheFlyV0
PID object for proton from Lc.
Double_t fSigmaElectronTPCPtDepPar2
nSigma electron lower limit (par1)
Bool_t SelectWithRoughCuts(AliAODv0 *v0, AliAODTrack *trk1)
Double_t fProdRfidMaxV0
Minimum Decay vertex of V0.
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Double_t fProdV0MassTolLambda
Flag for AOD filter Bit used before object creation.
Float_t * fCutsRD
fnVars*fnPtBins
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
Double_t fProdV0EtaMin
Rejection range of Omega mass from PDG value.
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
Double_t fProdV0DaughterTPCClusterMin
V0 Daughter pT min used before object creation.
Double_t fExcludenSigmaPionTPC
Flag wheter to exlude proton band.
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t fExcludeProtonTPC
Flag wheter to exlude pion band.
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Double_t fProdV0MassTolLambdaRough
Lambda mass selection used before object creation.
Double_t fProdDcaV0ToPrimVertexMin
Max Decay vertex of V0.
Bool_t fProdUseAODFilterBit
Min. Number of TPC PID cluster.
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t SingleTrkCutsNoPID(AliAODTrack *trk, AliAODVertex *vert)
Double_t fSigmaElectronTPCMax
nSigma electron lower limit (par2)
virtual ~AliRDHFCutsLctoeleLambdafromAODtracks()
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fCombinedPIDThreshold
PID strategy.
Double_t fProdMassRejK0s
mL/p of cascade
Double_t fProdRfidMinV0
V0 daughter Minimum TPC cluster pT used before object creation.
Double_t fProdV0DcaDaughtersMax
V0 pointing angle used before object creation.
Double_t fProdV0EtaMax
Minimum eta of cascade.
AliRDHFCutsLctoeleLambdafromAODtracks(const char *name="CutsLctoeleLambda")
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t fMinPtCand
outcome of PID selection
AliAODPidHF * fPidObjPion
PID object for proton from Lc.
Double_t fProdV0DaughterPtMin
V0Daughter eta range used before object creation.
Bool_t IsSideBand(AliAODv0 *c)
void SetPidResponse(AliPIDResponse *pidResp)
Bool_t SingleTrkCuts(AliAODTrack *trk, AliAODVertex *vert)