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 fUseOnTheFlyV0(kFALSE),
59 fProdTrackEtaRange(0.8),
60 fProdUseAODFilterBit(kTRUE),
61 fProdV0MassTolK0s(0.01),
63 fProdV0CosPointingAngleToPrimVtxMin(0.99),
64 fProdV0DcaDaughtersMax(1.5),
65 fProdV0DaughterEtaRange(0.8),
66 fProdV0DaughterPtMin(0.0),
67 fProdV0DaughterTPCClusterMin(70),
68 fProdRoughMassTol(0.25),
77 TString varNames[nvars]={
"Lc inv. mass [GeV/c2]",
79 "Bachelor pT [GeV/c]",
83 "Decay Length XY [cm]"
86 Bool_t isUpperCut[nvars]={kTRUE,
95 Bool_t forOpt[nvars]={kFALSE,
105 Float_t limits[2]={0,999999999.};
111 fPIDStrategy(source.fPIDStrategy),
112 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
113 fUseOnTheFlyV0(source.fUseOnTheFlyV0),
114 fProdTrackPtMin(source.fProdTrackPtMin),
115 fProdTrackEtaRange(source.fProdTrackEtaRange),
116 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
117 fProdV0MassTolK0s(source.fProdV0MassTolK0s),
118 fProdV0PtMin(source.fProdV0PtMin),
119 fProdV0CosPointingAngleToPrimVtxMin(source.fProdV0CosPointingAngleToPrimVtxMin),
120 fProdV0DcaDaughtersMax(source.fProdV0DcaDaughtersMax),
121 fProdV0DaughterEtaRange(source.fProdV0DaughterEtaRange),
122 fProdV0DaughterPtMin(source.fProdV0DaughterPtMin),
123 fProdV0DaughterTPCClusterMin(source.fProdV0DaughterTPCClusterMin),
124 fProdRoughMassTol(source.fProdRoughMassTol),
125 fProdRoughPtMin(source.fProdRoughPtMin)
138 if (
this != &source) {
176 if (pdgdaughters[0]==-9999)
return;
180 AliError(
"No AliAODRecoCascadeHF object found\n");
185 AliError(
"Cut object seems to have the wrong number of variables\n");
195 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
200 vars[iter]= dd->Pt();
205 vars[iter]= part->Pt();
209 vars[iter]= dd->Getd0Prong(0);
213 vars[iter]= dd->Getd0Prong(1);
217 AliAODv0 *v0 = dd->
Getv0();
218 vars[iter]= v0->MassK0Short();
235 AliFatal(
"Cut matrix not inizialized. Exit...");
241 AliDebug(2,
"AliAODRecoCascadeHF null");
245 Double_t ptD=d->Pt();
254 Int_t returnvalueCuts=1;
260 Int_t ptbin=
PtBin(pt);
266 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
267 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
269 AliAODv0 *v0 = d->
Getv0();
301 if(!okcand)
return 0;
305 Int_t returnvaluePID=1;
320 Int_t returnvalue = 0;
321 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
341 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
342 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
343 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
348 if(isProton<1) returnvalue = 0;
359 if(!
fUsePID || !obj) {
return 1;}
380 Double_t prob1[AliPID::kSPECIES];
387 return prob1[AliPID::kProton];
397 if(trk->GetStatus()&AliESDtrack::kITSpureSA)
return kFALSE;
398 if(!(trk->GetStatus()&AliESDtrack::kITSin))
return kFALSE;
406 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
407 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
408 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
413 if(isProton<1)
return kFALSE;
423 AliError(
"No AliAODRecoCascadeHF object found\n");
426 Double_t dvertx = lcobj->GetSecondaryVtx()->GetX()-lcobj->
GetOwnPrimaryVtx()->GetX();
427 Double_t dverty = lcobj->GetSecondaryVtx()->GetY()-lcobj->
GetOwnPrimaryVtx()->GetY();
428 Double_t px = lcobj->Px();
429 Double_t py = lcobj->Py();
430 if(TMath::Sqrt(dvertx*dvertx+dverty*dverty)==0)
return -9999.;
431 if(TMath::Sqrt(px*px+py*py)==0)
return -9999.;
432 Double_t cospaxy = (dvertx*px+dverty*py)/TMath::Sqrt(dvertx*dvertx+dverty*dverty)/TMath::Sqrt(px*px+py*py);
433 return (Float_t)cospaxy;
442 Bool_t onFlyV0 = v0->GetOnFlyStatus();
445 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
446 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
447 if(!cptrack || !cntrack)
return kFALSE;
448 if ( cptrack->Charge() == cntrack->Charge() )
return kFALSE;
449 if(!(cptrack->GetStatus() & AliESDtrack::kTPCrefit) ||
450 !(cntrack->GetStatus() & AliESDtrack::kTPCrefit))
return kFALSE;
451 AliAODVertex *maybeKinkPos = (AliAODVertex*)cptrack->GetProdVertex();
452 AliAODVertex *maybeKinkNeg = (AliAODVertex*)cntrack->GetProdVertex();
453 if (maybeKinkPos->GetType()==AliAODVertex::kKink || maybeKinkNeg->GetType()==AliAODVertex::kKink)
459 Double_t massK0S = v0->MassK0Short();
460 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
465 Double_t posVtx[3] = {0.,0.,0.};
466 primVert->GetXYZ(posVtx);
467 Double_t cospav0 = v0->CosPointingAngle(posVtx);
485 Double_t mprPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass();
486 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
488 Double_t pxpr_init = part->Px();
489 Double_t pypr_init = part->Py();
490 Double_t pzpr_init = part->Pz();
491 Double_t Epr_init = sqrt(pxpr_init*pxpr_init+pypr_init*pypr_init+pzpr_init*pzpr_init+mprPDG*mprPDG);
493 Double_t pxv0_init = v0->Px();
494 Double_t pyv0_init = v0->Py();
495 Double_t pzv0_init = v0->Pz();
496 Double_t massv0_init = v0->MassK0Short();
497 Double_t Ev0_init = sqrt(pxv0_init*pxv0_init+pyv0_init*pyv0_init+pzv0_init*pzv0_init+massv0_init*massv0_init);
499 Double_t pxlc_init = pxpr_init+pxv0_init;
500 Double_t pylc_init = pypr_init+pyv0_init;
501 Double_t pzlc_init = pzpr_init+pzv0_init;
502 Double_t Elc_init = Epr_init+Ev0_init;
503 Double_t lcmass_init = sqrt(Elc_init*Elc_init-pxlc_init*pxlc_init-pylc_init*pylc_init-pzlc_init*pzlc_init);
505 if(lcmass_init<mLcPDG-fProdRoughMassTol || lcmass_init>mLcPDG+
fProdRoughMassTol)
return kFALSE;
506 if(sqrt(pxlc_init*pxlc_init+pylc_init*pylc_init)<
fProdRoughPtMin)
return kFALSE;
Double_t fCombinedPIDThreshold
PID strategy.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Double_t fProdV0DaughterTPCClusterMin
V0 Daughter pT min used before object creation.
void SetNVars(Int_t nVars)
AliRDHFCutsLctopK0sfromAODtracks & operator=(const AliRDHFCutsLctopK0sfromAODtracks &source)
Double_t fProdRoughPtMin
Mass cut for Lc used before object creation.
Double_t fProdTrackPtMin
Flag to check if we use on-the-fly v0.
AliRDHFCuts & operator=(const AliRDHFCuts &source)
virtual ~AliRDHFCutsLctopK0sfromAODtracks()
Double_t fProdV0DaughterEtaRange
Max DCA between V0 daughters used before object creation.
Double_t fProdV0MassTolK0s
Flag for AOD filter Bit used before object creation.
Bool_t SingleV0Cuts(AliAODv0 *v0, AliAODVertex *vert)
Double_t InvMassLctoK0sP() const
Double_t GetProtonProbabilityTPCTOF(AliAODTrack *trk)
Double_t fProdV0CosPointingAngleToPrimVtxMin
Minimum K0s pT used before object creation.
Double_t fProdRoughMassTol
V0 daughter Minimum TPC cluster pT used before object creation.
Double_t fProdV0PtMin
K0s mass selection used before object creation.
AliPIDCombined * GetPidCombined() const
Double_t fMaxPtCand
minimum pt of the candidate
Double_t CalculateLcCosPAXY(AliAODRecoDecayHF *obj)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t fUseOnTheFlyV0
Threshold used in IsSelectedCombinedPID.
AliAODTrack * GetBachelor() const
AliAODVertex * GetOwnPrimaryVtx() const
Double_t fProdV0DcaDaughtersMax
V0 pointing angle used before object creation.
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Float_t * fCutsRD
fnVars*fnPtBins
Bool_t fProdUseAODFilterBit
eta range used before object creation
Double_t fProdV0DaughterPtMin
V0Daughter eta range used before object creation.
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
Double_t fProdTrackEtaRange
Minimum Track pT used before object creation.
Bool_t SingleTrkCuts(AliAODTrack *trk)
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
AliRDHFCutsLctopK0sfromAODtracks(const char *name="CutsLctopK0s")
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t SelectWithRoughCuts(AliAODv0 *v0, AliAODTrack *trk1)
EPIDStrategy fPIDStrategy
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
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
void SetPidResponse(AliPIDResponse *pidResp)