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();
567 if(nSigmaTPCele<nsigmamin)
return kFALSE;
589 Bool_t onFlyV0 = v0->GetOnFlyStatus();
591 if(!v0)
return kFALSE;
592 if(!(v0->GetSecondaryVtx()))
return kFALSE;
594 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
595 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
596 if(!cptrack || !cntrack)
return kFALSE;
597 if(cptrack->Charge()<0 && cntrack->Charge()>0){
599 cptrack = (AliAODTrack*)(v0->GetDaughter(1));
600 cntrack = (AliAODTrack*)(v0->GetDaughter(0));
603 if ( cptrack->Charge() == cntrack->Charge() )
return kFALSE;
604 if(!(cptrack->GetStatus() & AliESDtrack::kTPCrefit) ||
605 !(cntrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
606 AliAODVertex *maybeKinkPos = (AliAODVertex*)cptrack->GetProdVertex();
607 AliAODVertex *maybeKinkNeg = (AliAODVertex*)cntrack->GetProdVertex();
608 if (maybeKinkPos->GetType()==AliAODVertex::kKink || maybeKinkNeg->GetType()==AliAODVertex::kKink)
618 Double_t massLambda = v0->MassLambda();
619 Double_t massAntiLambda = v0->MassAntiLambda();
620 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
621 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
624 Double_t massK0s = v0->MassK0Short();
628 Bool_t isparticle = kTRUE;
633 Double_t posVtx[3] = {0.,0.,0.};
634 primVert->GetXYZ(posVtx);
635 Double_t cospav0 = v0->CosPointingAngle(posVtx);
643 Double_t lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex();
644 Double_t lDcaPosToPrimVertex = v0->DcaPosToPrimVertex();
645 Double_t lDcaNegToPrimVertex = v0->DcaNegToPrimVertex();
655 lPosV0[0] = v0->DecayVertexV0X();
656 lPosV0[1] = v0->DecayVertexV0Y();
657 lPosV0[2] = v0->DecayVertexV0Z();
658 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
660 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
662 Double_t ptotlam = TMath::Sqrt(pow(v0->Px(),2)+pow(v0->Py(),2)+pow(v0->Pz(),2));
663 Double_t properdl = v0->DecayLengthV0(posVtx)*mlamPDG/ptotlam;
670 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
671 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
672 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
676 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
677 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
678 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
682 Int_t isProton= -9999;
691 if(isProton<1)
return kFALSE;
692 if(isPion<1)
return kFALSE;
695 Double_t RapLambda = v0->RapLambda();
696 if(RapLambda<fProdV0RapMin || RapLambda>
fProdV0RapMax)
return kFALSE;
698 Double_t EtaLambda = v0->PseudoRapV0();
699 if(EtaLambda<fProdV0EtaMin || EtaLambda>
fProdV0EtaMax)
return kFALSE;
711 if(!v0)
return kFALSE;
712 if(!part)
return kFALSE;
721 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
722 Double_t massL = v0->MassLambda();
724 massL = v0->MassAntiLambda();
734 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
735 Double_t massL = v0->M();
744 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
745 Double_t massL = v0->MassLambda();
747 massL = v0->MassAntiLambda();
749 Bool_t issideband = kFALSE;
758 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
759 Double_t massL = v0->M();
760 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)