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 fUseCascadePID(kFALSE),
60 fProdTrackTPCNclsPIDMin(0),
61 fProdTrackTPCNclsRatioMin(0.0),
62 fProdUseAODFilterBit(kTRUE),
63 fProdMassTolLambda(0.010),
64 fProdMassTolOmega(0.008),
65 fProdMassRejXi(0.008),
67 fProdRfidMaxV0(100.0),
68 fProdRfidMinOmega(0.6),
69 fProdRfidMaxOmega(100.0),
70 fProdCascProperDecayLengthMax(100.0),
71 fProdDcaOmegaDaughtersMax(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 fProdCascEtaMin(-9999.),
81 fProdCascEtaMax(9999.),
82 fProdCascRapMin(-9999.),
83 fProdCascRapMax(9999.),
84 fProdRoughMassTol(0.25),
86 fExcludePionTPC(kFALSE),
87 fExcludeProtonTPC(kFALSE),
88 fExcludeKaonTPC(kFALSE),
89 fExcludenSigmaPionTPC(3.),
90 fExcludenSigmaProtonTPC(3.),
91 fExcludenSigmaKaonTPC(3.),
92 fSigmaElectronTPCMin(-9999.),
93 fSigmaElectronTPCMax(9999.),
94 fSigmaElectronTOFMin(-9999.),
95 fSigmaElectronTOFMax(9999.)
105 "cos(Opening angle) [cos(rad)]"
108 Bool_t isUpperCut[nvars]={
119 Float_t limits[2]={0,999999999.};
125 fPIDStrategy(source.fPIDStrategy),
126 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
127 fUseCascadePID(source.fUseCascadePID),
128 fPidObjCascPi(source.fPidObjCascPi),
129 fPidObjCascPr(source.fPidObjCascPr),
130 fPidObjCascKa(source.fPidObjCascKa),
131 fProdTrackTPCNclsPIDMin(source.fProdTrackTPCNclsPIDMin),
132 fProdTrackTPCNclsRatioMin(source.fProdTrackTPCNclsRatioMin),
133 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
134 fProdMassTolLambda(source.fProdMassTolLambda),
135 fProdMassTolOmega(source.fProdMassTolOmega),
136 fProdMassRejXi(source.fProdMassRejXi),
137 fProdRfidMinV0(source.fProdRfidMinV0),
138 fProdRfidMaxV0(source.fProdRfidMaxV0),
139 fProdRfidMinOmega(source.fProdRfidMinOmega),
140 fProdRfidMaxOmega(source.fProdRfidMaxOmega),
141 fProdCascProperDecayLengthMax(source.fProdCascProperDecayLengthMax),
142 fProdDcaOmegaDaughtersMax(source.fProdDcaOmegaDaughtersMax),
143 fProdDcaV0DaughtersMax(source.fProdDcaV0DaughtersMax),
144 fProdDcaBachToPrimVertexMin(source.fProdDcaBachToPrimVertexMin),
145 fProdDcaV0ToPrimVertexMin(source.fProdDcaV0ToPrimVertexMin),
146 fProdDcaV0PrToPrimVertexMin(source.fProdDcaV0PrToPrimVertexMin),
147 fProdDcaV0PiToPrimVertexMin(source.fProdDcaV0PiToPrimVertexMin),
148 fProdXiCosineOfPoiningAngleMin(source.fProdXiCosineOfPoiningAngleMin),
149 fProdV0CosineOfPoiningAngleXiMin(source.fProdV0CosineOfPoiningAngleXiMin),
150 fProdCascNTPCClustersMin(source.fProdCascNTPCClustersMin),
151 fProdCascEtaMin(source.fProdCascEtaMin),
152 fProdCascEtaMax(source.fProdCascEtaMax),
153 fProdCascRapMin(source.fProdCascRapMin),
154 fProdCascRapMax(source.fProdCascRapMax),
155 fProdRoughMassTol(source.fProdRoughMassTol),
156 fProdRoughPtMin(source.fProdRoughPtMin),
157 fExcludePionTPC(source.fExcludePionTPC),
158 fExcludeProtonTPC(source.fExcludeProtonTPC),
159 fExcludeKaonTPC(source.fExcludeKaonTPC),
160 fExcludenSigmaPionTPC(source.fExcludenSigmaPionTPC),
161 fExcludenSigmaProtonTPC(source.fExcludenSigmaProtonTPC),
162 fExcludenSigmaKaonTPC(source.fExcludenSigmaKaonTPC),
163 fSigmaElectronTPCMin(source.fSigmaElectronTPCMin),
164 fSigmaElectronTPCMax(source.fSigmaElectronTPCMax),
165 fSigmaElectronTOFMin(source.fSigmaElectronTOFMin),
166 fSigmaElectronTOFMax(source.fSigmaElectronTOFMax)
179 if (
this != &source) {
244 if (pdgdaughters[0]==-9999)
return;
248 AliError(
"No AliAODRecoCascadeHF object found\n");
253 AliError(
"Cut object seems to have the wrong number of variables\n");
263 UInt_t pdgdg[2]={11,3334};
264 vars[iter]= dd->InvMass(2,pdgdg);
274 vars[iter]= (xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz);
287 AliFatal(
"Cut matrix not inizialized. Exit...");
293 AliDebug(2,
"AliAODRecoCascadeHF null");
306 Int_t returnvalueCuts=1;
318 Double_t momegaPDG = TDatabasePDG::Instance()->GetParticle(3334)->Mass();
319 UInt_t pdgdg[2]={11,3334};
320 Double_t InvMassEleOmega = d->InvMass(2,pdgdg);
327 Double_t cosoa = (xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz);
338 if(!okcand)
return 0;
342 Int_t returnvaluePID=1;
349 Int_t returnvalue = 0;
350 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
371 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
372 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
377 if(isElectron<1) returnvalue = 0;
388 if(!
fUsePID || !obj) {
return 1;}
406 if(trk->GetStatus()&AliESDtrack::kITSpureSA)
return kFALSE;
407 if(!(trk->GetStatus()&AliESDtrack::kITSin))
return kFALSE;
410 Double_t pos[3]; primVert->GetXYZ(pos);
411 Double_t cov[6]; primVert->GetCovarianceMatrix(cov);
412 const AliESDVertex vESD(pos,cov,100.,100);
416 if(trk->GetTPCNclsF()>0){
425 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
426 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
475 if(isElectron<1)
return kFALSE;
533 if(!casc)
return kFALSE;
534 if(!(casc->GetSecondaryVtx()))
return kFALSE;
535 if(!(casc->GetDecayVertexXi()))
return kFALSE;
537 AliAODTrack *ptrack = (AliAODTrack*) (casc->GetDaughter(0));
538 AliAODTrack *ntrack = (AliAODTrack*) (casc->GetDaughter(1));
539 AliAODTrack *btrack = (AliAODTrack*) (casc->GetDecayVertexXi()->GetDaughter(0));
541 if(!ptrack||!ntrack||!btrack)
return kFALSE;
543 if(ptrack->Charge()<0 && ntrack->Charge()>0){
544 ptrack = (AliAODTrack*) (casc->GetDaughter(1));
545 ntrack = (AliAODTrack*) (casc->GetDaughter(0));
553 Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
554 Double_t mxiPDG = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
555 Double_t momegaPDG = TDatabasePDG::Instance()->GetParticle(3334)->Mass();
557 Double_t massLambda = casc->MassLambda();
558 Double_t massAntiLambda = casc->MassAntiLambda();
562 Bool_t isparticle = kTRUE;
566 Double_t massOmega = casc->MassOmega();
575 lPosXi[0] = casc->DecayVertexXiX();
576 lPosXi[1] = casc->DecayVertexXiY();
577 lPosXi[2] = casc->DecayVertexXiZ();
578 Double_t decayvertXi = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
580 lPosV0[0] = casc->DecayVertexV0X();
581 lPosV0[1] = casc->DecayVertexV0Y();
582 lPosV0[2] = casc->DecayVertexV0Z();
583 Double_t decayvertV0 = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
585 if(decayvertV0<fProdRfidMinV0 || decayvertV0>
fProdRfidMaxV0)
return kFALSE;
586 if(decayvertXi<fProdRfidMinOmega || decayvertXi>
fProdRfidMaxOmega)
return kFALSE;
588 Double_t ptotxi = TMath::Sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)+pow(casc->MomXiZ(),2));
589 Double_t properdl = casc->DecayLengthXi(primvert[0],primvert[1],primvert[2])*mxiPDG/ptotxi;
592 Double_t lDcaXiDaughters = casc->DcaXiDaughters();
593 Double_t lDcaV0Daughters = casc->DcaV0Daughters();
597 Double_t lDcaBachToPrimVertex = casc->DcaBachToPrimVertex();
598 Double_t lDcaV0ToPrimVertex = casc->DcaV0ToPrimVertex();
599 Double_t lDcaPosToPrimVertex = casc->DcaPosToPrimVertex();
600 Double_t lDcaNegToPrimVertex = casc->DcaNegToPrimVertex();
611 Double_t lXiCosineOfPointingAngle = casc->CosPointingAngleXi(primvert[0],primvert[1],primvert[2]);
612 Double_t lV0CosineOfPointingAngleXi = casc->CosPointingAngle(lPosXi);
621 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
622 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
627 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
628 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
633 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
634 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
641 if(isProton<1)
return kFALSE;
642 if(isKaon<1)
return kFALSE;
643 if(isPion<1)
return kFALSE;
648 if(isProton<1)
return kFALSE;
649 if(isKaon<1)
return kFALSE;
650 if(isPion<1)
return kFALSE;
654 Double_t RapOmega = casc->RapOmega();
655 if(RapOmega<fProdCascRapMin || RapOmega>
fProdCascRapMax)
return kFALSE;
657 Double_t EtaOmega = 0.5*TMath::Log((ptotxi+casc->MomXiZ())/(ptotxi-casc->MomXiZ()));
658 if(EtaOmega<fProdCascEtaMin || EtaOmega>
fProdCascEtaMax)
return kFALSE;
671 if(!casc)
return kFALSE;
672 if(!part)
return kFALSE;
Double_t fProdMassRejXi
Tolerance of Xi mass from PDG value.
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Double_t fProdCascProperDecayLengthMax
Max Decay vertex of Xi.
Bool_t fExcludePionTPC
pT cut for Lc used before object creation
Double_t fProdMassTolLambda
Flag for AOD filter Bit used before object creation.
Bool_t fExcludeProtonTPC
Flag wheter to exlude pion band.
Double_t fProdRfidMaxOmega
Minimum Decay vertex of Xi.
Double_t fSigmaElectronTOFMin
nSigma to exclude for Kaon band
Double_t fExcludenSigmaPionTPC
Flag wheter to exlude proton band.
Bool_t fUseCascadePID
Threshold used in IsSelectedCombinedPID.
EPIDStrategy fPIDStrategy
Bool_t SingleCascadeCuts(AliAODcascade *casc, Double_t *vert)
Double_t fSigmaElectronTPCMax
nSigma to exclude for Kaon band
Int_t IsSelectedCombinedPID(AliAODRecoDecayHF *obj)
Double_t fProdDcaBachToPrimVertexMin
Max Dca between V0 daughters.
Int_t fProdTrackTPCNclsPIDMin
PID object for cascade-proton.
void SetNVars(Int_t nVars)
Double_t fProdCascRapMin
Maximum eta of cascade.
Double_t fProdRoughMassTol
Maximum rapidity of cascade.
Double_t fProdRfidMaxV0
Minimum Decay vertex of V0.
AliAODPidHF * fPidObjCascPr
PID object for cascade-pion.
AliRDHFCuts & operator=(const AliRDHFCuts &source)
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
AliRDHFCutsOmegactoeleOmegafromAODtracks(const char *name="CutsOmegactoeleOmega")
AliAODPidHF * fPidObjCascPi
Use PID for cascade or not.
Double_t fProdDcaV0PiToPrimVertexMin
Min Dca between v0-proton and PV.
Double_t fProdDcaV0DaughtersMax
Max Dca between Xi daughters.
Double_t fMaxPtCand
minimum pt of the candidate
Bool_t fExcludeKaonTPC
Flag wheter to exlude proton band.
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
Double_t fCombinedPIDThreshold
PID strategy.
AliAODPidHF * fPidObjCascKa
PID object for cascade-proton.
AliAODTrack * GetBachelor() const
Double_t fExcludenSigmaProtonTPC
nSigma to exclude for pion band
Int_t MakeRawPid(AliAODTrack *track, Int_t specie)
AliPIDResponse * GetPidResponse() const
Double_t fProdV0CosineOfPoiningAngleXiMin
Min Xi cos pointing angle to PV.
Float_t * fCutsRD
fnVars*fnPtBins
Double_t fProdCascNTPCClustersMin
Min V0 cos pointing angle to Xi vertex.
Bool_t fProdUseAODFilterBit
Min. Number of TPC PID cluster.
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *obj)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t SingleTrkCuts(AliAODTrack *trk, AliAODVertex *primvert)
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Double_t fSigmaElectronTPCMin
nSigma to exclude for Kaon band
Double_t fProdDcaOmegaDaughtersMax
mL/p of cascade
Double_t fSigmaElectronTOFMax
nSigma to exclude for Kaon band
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t SelectWithRoughCuts(AliAODcascade *casc, AliAODTrack *trk1)
Double_t fProdCascEtaMax
Minimum eta of cascade.
Double_t fProdCascRapMax
Minimum rapidity of cascade.
Double_t fProdMassTolOmega
Tolerance of Lambda mass from PDG value.
virtual ~AliRDHFCutsOmegactoeleOmegafromAODtracks()
Double_t fProdTrackTPCNclsRatioMin
Min. Number of TPC PID cluster.
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Double_t fProdDcaV0ToPrimVertexMin
Min Dca between Bachelor and PV.
Double_t fProdRfidMinOmega
Max Decay vertex of V0.
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t fProdDcaV0PrToPrimVertexMin
Min Dca between v0 and PV.
Double_t fMinPtCand
outcome of PID selection
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
Double_t fProdRoughPtMin
Mass cut for Lc used before object creation.
Double_t fExcludenSigmaKaonTPC
nSigma to exclude for proton band
Bool_t IsSelectedCombinedeID(AliAODTrack *trk)
Bool_t IsSelectedeID(AliAODTrack *trk)
Bool_t IsSelectedCustomizedeID(AliAODTrack *trk)
Double_t fProdRfidMinV0
Rejection range of Omega mass from PDG value.
void SetPidResponse(AliPIDResponse *pidResp)
Double_t fProdXiCosineOfPoiningAngleMin
Min Dca between v0-pion and PV.
Double_t fProdCascEtaMin
Minimum number of TPC clusters.
AliRDHFCutsOmegactoeleOmegafromAODtracks & operator=(const AliRDHFCutsOmegactoeleOmegafromAODtracks &source)