25 #include <TDatabasePDG.h>
46 Double_t *px,Double_t *py,Double_t *pz,
47 Double_t *d0,Double_t *d0err,
49 Double_t dist12,Double_t dist3,
54 fDist12toPrim(dist12),
65 Double_t *d0,Double_t *d0err,
67 Double_t dist12,Double_t dist3,
72 fDist12toPrim(dist12),
85 fDist12toPrim(source.fDist12toPrim),
86 fDist3toPrim(source.fDist3toPrim),
87 fDist4toPrim(source.fDist4toPrim)
99 if(&source ==
this)
return *
this;
116 pdg[0]=211; pdg[1]=321; pdg[2]=211; pdg[3]=211;
117 mD0[0]=InvMass(4,pdg);
118 pdg[1]=211; pdg[3]=321;
119 mD0[1]=InvMass(4,pdg);
129 pdg[0]=321; pdg[1]=211; pdg[2]=211; pdg[3]=211;
130 mD0bar[0]=InvMass(4,pdg);
131 pdg[0]=211; pdg[2]=321;
132 mD0bar[1]=InvMass(4,pdg);
157 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
162 Bool_t goodMass=kFALSE;
163 if(TMath::Abs(mD0[0]-mD0PDG)<=cuts[0]) {goodMass=kTRUE; okD0=1;}
164 if(TMath::Abs(mD0[1]-mD0PDG)<=cuts[0]) {goodMass=kTRUE; okD0=1;}
165 if(TMath::Abs(mD0bar[0]-mD0PDG)<=cuts[0]) {goodMass=kTRUE; okD0bar=1;}
166 if(TMath::Abs(mD0bar[1]-mD0PDG)<=cuts[0]) {goodMass=kTRUE; okD0bar=1;}
167 if(!goodMass)
return kFALSE;
171 if(GetDCA(0)>cuts[1])
return kFALSE;
172 if(GetDCA(1)>cuts[1])
return kFALSE;
173 if(GetDCA(2)>cuts[1])
return kFALSE;
174 if(GetDCA(3)>cuts[1])
return kFALSE;
175 if(GetDCA(4)>cuts[1])
return kFALSE;
176 if(GetDCA(5)>cuts[1])
return kFALSE;
195 if(Pt()<cuts[6])
return kFALSE;
199 Double_t massD0bar[2];
200 Bool_t good=
CutRhoMass(massD0,massD0bar,cuts[0],cuts[7]);
201 if(!good)
return kFALSE;
212 Bool_t isGood=kFALSE;
214 for(Int_t i=0;i<2;i++){massD0[i]=0.;massD0bar[i]=0.;}
216 Bool_t isTrue=kFALSE;
217 Double_t mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
218 Double_t mPDGRho=TDatabasePDG::Instance()->GetParticle(113)->Mass();
220 if(TMath::Abs(minv01-mPDGRho)<cutRho) isRho=kTRUE;
222 UInt_t pdg1[4]={211,211,321,211};
223 Double_t mass1=InvMass(nprongs,pdg1);
224 if(TMath::Abs(mass1-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
225 if(isTrue) massD0bar[1]=mass1;
227 UInt_t pdg2[4]={211,211,211,321};
228 Double_t mass2=InvMass(4,pdg2);
229 if(TMath::Abs(mass2-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
230 if(isTrue) massD0[1]=mass2;
234 if(TMath::Abs(minv03-mPDGRho)<cutRho) isRho=kTRUE;
236 UInt_t pdg1[4]={211,211,321,211};
237 Double_t mass1=InvMass(4,pdg1);
238 if(TMath::Abs(mass1-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
239 if(isTrue) massD0bar[1]=mass1;
241 UInt_t pdg2[4]={211,321,211,211};
242 Double_t mass2=InvMass(4,pdg2);
243 if(TMath::Abs(mass2-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
244 if(isTrue) massD0[0]=mass2;
248 if(TMath::Abs(minv12-mPDGRho)<cutRho) isRho=kTRUE;
250 UInt_t pdg1[4]={321,211,211,211};
251 Double_t mass1=InvMass(4,pdg1);
252 if(TMath::Abs(mass1-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
253 if(isTrue) massD0bar[0]=mass1;
255 UInt_t pdg2[4]={211,211,211,321};
256 Double_t mass2=InvMass(4,pdg2);
257 if(TMath::Abs(mass2-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
258 if(isTrue) massD0[1]=mass2;
262 if(TMath::Abs(minv23-mPDGRho)<cutRho) isRho=kTRUE;
264 UInt_t pdg1[4]={321,211,211,211};
265 Double_t mass1=InvMass(4,pdg1);
266 if(TMath::Abs(mass1-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
267 if(isTrue) massD0bar[0]=mass1;
269 UInt_t pdg2[4]={211,321,211,211};
270 Double_t mass2=InvMass(4,pdg2);
271 if(TMath::Abs(mass2-mPDG)<cutMass) {isTrue=kTRUE;isGood=kTRUE;}
272 if(isTrue) massD0[0]=mass2;
AliAODRecoDecayHF4Prong & operator=(const AliAODRecoDecayHF4Prong &source)
Bool_t SelectD0(const Double_t *cuts, Int_t &okD0, Int_t &okD0bar) const
AliAODRecoDecayHF & operator=(const AliAODRecoDecayHF &source)
Double_t InvMassRho(Int_t i, Int_t j) 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
Double_t fDist3toPrim
distance prim vert - 2 opposite sign track vertex
void InvMassD0bar(Double_t mD0bar[2]) const
Double_t fDist4toPrim
distance prim vert - 3 track vertex
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliAODRecoDecayHF4Prong()
Double_t CosPointingAngle() const