26 #include <TDatabasePDG.h>
27 #include <Riostream.h>
31 #include "AliAODTrack.h"
32 #include "AliESDtrack.h"
52 TString varNames[9]={
"inv. mass [GeV]",
54 "Dist 2-trk Vtx to PrimVtx [cm]",
55 "Dist 3-trk Vtx to PrimVtx [cm]",
56 "Dist 4-trk Vtx to PrimVtx [cm]",
61 Bool_t isUpperCut[9]={kTRUE,
71 Bool_t forOpt[9]={kFALSE,
81 Float_t limits[2]={0,999999999.};
99 if(&source ==
this)
return *
this;
114 printf(
"AliRDHFCutsD0toKpipipi::GetCutsVarsForOpt: wrong number of variables\n");
121 Bool_t cleanvtx=kFALSE;
122 AliAODVertex *origownvtx=0x0;
136 Double_t mD0[2],mD0bar[2];
137 if(TMath::Abs(pdgdaughters[1])==321 || TMath::Abs(pdgdaughters[3])==321) {
139 if(TMath::Abs(pdgdaughters[1])==321) {
146 if(TMath::Abs(pdgdaughters[0])==321) {
147 vars[iter]=mD0bar[0];
149 vars[iter]=mD0bar[1];
156 vars[iter]=dd->GetDCA();
181 vars[iter]=999999999.;
182 printf(
"ERROR: optmization for rho mass cut not implemented\n");
186 vars[iter]=999999999.;
187 printf(
"ERROR: optmization for PID cut not implemented\n");
200 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
207 cout<<
"AliAODRecoDecayHF4Prong null"<<endl;
211 Double_t ptD=d->Pt();
230 Int_t ptbin=
PtBin(d->Pt());
232 Int_t okD0=1,okD0bar=1;
233 Double_t mD0[2],mD0bar[2];
234 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
242 if(!okD0 && !okD0bar)
return 0;
255 if (okD0) returnvalue=1;
256 if (okD0bar) returnvalue=2;
257 if (okD0 && okD0bar) returnvalue=3;
269 Int_t d01PID = 0, d02PID = 0, d0bar1PID = 0, d0bar2PID = 0;
274 if((selD01 == 1 && d01PID == 1)||(selD02 == 1 && d02PID == 1)||(selD0bar1 == 1 && d0bar1PID == 1)||(selD0bar2 == 1 && d0bar2PID == 1)) returnvalue = 1;
289 Int_t matchK[4], matchPi[4];
290 Double_t ptlimit[2] = {0.6,0.8};
292 trk[0] = (AliAODTrack*)d->GetDaughter(0);
293 trk[1] = (AliAODTrack*)d->GetDaughter(1);
294 trk[2] = (AliAODTrack*)d->GetDaughter(2);
295 trk[3] = (AliAODTrack*)d->GetDaughter(3);
313 for(Int_t ii=0; ii<4; ii++) {
321 Int_t d01rho03 = 0, d01rho23 = 0, d02rho01 = 0, d02rho12 = 0, d0bar1rho12 = 0, d0bar1rho23 = 0, d0bar2rho01 = 0, d0bar2rho03 = 0;
322 if(TMath::Abs(0.775 - d->
InvMassRho(0,3))<0.1) {d01rho03 = 1; d0bar2rho03 = 1;}
323 if(TMath::Abs(0.775 - d->
InvMassRho(2,3))<0.1) {d01rho23 = 1; d0bar1rho23 = 1;}
324 if(TMath::Abs(0.775 - d->
InvMassRho(0,1))<0.1) {d02rho01 = 1; d0bar2rho01 = 1;}
325 if(TMath::Abs(0.775 - d->
InvMassRho(1,2))<0.1) {d02rho12 = 1; d0bar1rho12 = 1;}
326 Int_t d01rho = 0, d02rho = 0, d0bar1rho = 0, d0bar2rho = 0;
327 if(d01rho03==1||d01rho23==1) d01rho = 1;
328 if(d02rho01==1||d02rho12==1) d02rho = 1;
329 if(d0bar1rho12==1||d0bar1rho23==1) d0bar1rho = 1;
330 if(d0bar2rho01==1||d0bar2rho03==1) d0bar2rho = 1;
333 if(d01rho==1 && (matchK[1]>=0 && matchPi[0]>=0 && matchPi[2]>=0 && matchPi[3]>=0)) {*hyp1 = 1; output = 1;}
334 if(d02rho==1 && (matchK[3]>=0 && matchPi[0]>=0 && matchPi[1]>=0 && matchPi[2]>=0)) {*hyp2 = 1; output = 1;}
335 if(d0bar1rho==1 && (matchK[0]>=0 && matchPi[1]>=0 && matchPi[2]>=0 && matchPi[3]>=0)) {*hyp3 = 1; output = 1;}
336 if(d0bar2rho==1 && (matchK[2]>=0 && matchPi[0]>=0 && matchPi[1]>=0 && matchPi[3]>=0)) {*hyp4 = 1; output = 1;}
347 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
354 cout<<
"AliAODRecoDecayHF4Prong null"<<endl;
364 Int_t ptbin=
PtBin(d->Pt());
367 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
382 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
389 cout<<
"AliAODRecoDecayHF4Prong null"<<endl;
399 Int_t ptbin=
PtBin(d->Pt());
402 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
416 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
423 cout<<
"AliAODRecoDecayHF4Prong null"<<endl;
433 Int_t ptbin=
PtBin(d->Pt());
436 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
451 cout<<
"Cut matrix not inizialized. Exit..."<<endl;
458 cout<<
"AliAODRecoDecayHF4Prong null"<<endl;
468 Int_t ptbin=
PtBin(d->Pt());
471 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
493 AliDebug(4,Form(
"pt of D0 = %f (> 5), cutting at |y| < 0.8\n",pt));
494 if (TMath::Abs(y) > 0.8){
499 Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
500 Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
501 AliDebug(4,Form(
"pt of D0 = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
502 if (y < minFiducialY || y > maxFiducialY){
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
void SetAsym(Bool_t asym)
virtual Int_t D01Selected(TObject *obj, Int_t selectionLevel)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t fRemoveDaughtersFromPrimary
virtual Int_t IsSelectedFromPID(AliAODRecoDecayHF4Prong *d, Int_t *hyp1, Int_t *hyp2, Int_t *hyp3, Int_t *hyp4)
void SetNVars(Int_t nVars)
Double_t fMaxRapidityCand
minimum pt of the candidate
virtual Int_t D0bar1Selected(TObject *obj, Int_t selectionLevel)
AliRDHFCuts & operator=(const AliRDHFCuts &source)
AliRDHFCutsD0toKpipipi & operator=(const AliRDHFCutsD0toKpipipi &source)
Double_t InvMassRho(Int_t i, Int_t j) const
Double_t GetDist12toPrim() const
Bool_t HasBadDaughters() const
void InvMassD0(Double_t mD0[2]) const
Bool_t CutRhoMass(Double_t massD0[2], Double_t massD0bar[2], Double_t CutMass, Double_t CutRho) const
virtual Int_t D02Selected(TObject *obj, Int_t selectionLevel)
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
Double_t fMaxPtCand
minimum pt of the candidate
AliAODVertex * GetOwnPrimaryVtx() const
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd) const
void InvMassD0bar(Double_t mD0bar[2]) const
Int_t MatchTPCTOF(AliAODTrack *track, Int_t specie)
void SetSigma(Double_t *sigma)
Double_t GetDist3toPrim() const
Float_t * fCutsRD
fnVars*fnPtBins
Double_t GetDist4toPrim() const
virtual Int_t D0bar2Selected(TObject *obj, Int_t selectionLevel)
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
AliRDHFCutsD0toKpipipi(const char *name="CutsD0toKpipipi")
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
void SetMatch(Int_t match)
void SetPLimit(Double_t *plim, Int_t npLim)
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Double_t CosPointingAngle() const
void SetCompat(Bool_t comp)
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Double_t fMinPtCand
outcome of PID selection
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)