25 #include <TDatabasePDG.h>
28 #include "AliAODTrack.h"
29 #include "AliESDtrack.h"
30 #include "AliVertexerTracks.h"
32 #include "TLorentzVector.h"
57 fDist12toPrim(dist12),
72 fDist12toPrim(dist12),
83 fSigmaVert(source.fSigmaVert),
84 fDist12toPrim(source.fDist12toPrim),
85 fDist23toPrim(source.fDist23toPrim)
97 if(&source ==
this)
return *
this;
129 Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
131 if(TMath::Abs(mDplus-mDplusPDG)>cuts[0])
return kFALSE;
133 if(TMath::Abs(PtProng(1)) < cuts[1] || TMath::Abs(Getd0Prong(1))<cuts[3])
return kFALSE;
134 if(TMath::Abs(PtProng(0)) < cuts[2] || TMath::Abs(Getd0Prong(0))<cuts[4])
return kFALSE;
135 if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])
return kFALSE;
138 for(
Int_t i=0;i<3;i++) if(GetDCA(i)>cuts[11])
return kFALSE;
142 if(Getd0Prong(0)*Getd0Prong(1)<0. && Getd0Prong(2)*Getd0Prong(1)<0.)
return kFALSE;
149 if(TMath::Abs(PtProng(0))<cuts[8] && TMath::Abs(PtProng(1))<cuts[8] && TMath::Abs(PtProng(2))<cuts[8])
return kFALSE;
151 Double_t sum2=Getd0Prong(0)*Getd0Prong(0)+Getd0Prong(1)*Getd0Prong(1)+Getd0Prong(2)*Getd0Prong(2);
152 if(sum2<cuts[10])
return kFALSE;
180 okDsKKpi=1; okDspiKK=1;
181 okMassPhi=0; okMassK0star=0;
183 Double_t mDsPDG = TDatabasePDG::Instance()->GetParticle(431)->Mass();
188 if(TMath::Abs(mDsKKpi-mDsPDG)>cuts[0]) okDsKKpi = 0;
189 if(TMath::Abs(mDspiKK-mDsPDG)>cuts[0]) okDspiKK = 0;
190 if(!okDsKKpi && !okDspiKK)
return kFALSE;
193 if(TMath::Abs(PtProng(0)) < cuts[1] || TMath::Abs(Getd0Prong(0))<cuts[3])
return kFALSE;
194 if(TMath::Abs(PtProng(1)) < cuts[1] || TMath::Abs(Getd0Prong(1))<cuts[3])
return kFALSE;
195 if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])
return kFALSE;
198 Double_t mPhiPDG = TDatabasePDG::Instance()->GetParticle(333)->Mass();
199 Double_t mK0starPDG = TDatabasePDG::Instance()->GetParticle(313)->Mass();
201 Double_t mass01phi=InvMass2Prongs(0,1,321,321);
202 Double_t mass12K0s=InvMass2Prongs(1,2,321,211);
203 if(TMath::Abs(mass01phi-mPhiPDG)<cuts[12]) okMassPhi=1;
204 if(TMath::Abs(mass12K0s-mK0starPDG)<cuts[13]) okMassK0star = 1;
205 if(!okMassPhi && !okMassK0star) okDsKKpi=kFALSE;
208 Double_t mass01K0s=InvMass2Prongs(0,1,211,321);
209 Double_t mass12phi=InvMass2Prongs(1,2,321,321);
210 if(TMath::Abs(mass01K0s-mK0starPDG)<cuts[13]) okMassK0star = 1;
211 if(TMath::Abs(mass12phi-mPhiPDG)<cuts[12]) okMassPhi=1;
212 if(!okMassPhi && !okMassK0star) okDspiKK=kFALSE;
214 if(!okDsKKpi && !okDspiKK)
return kFALSE;
220 for(
Int_t i=0;i<3;i++) if(GetDCA(i)>cuts[11])
return kFALSE;
230 if(TMath::Abs(PtProng(0))<cuts[8] && TMath::Abs(PtProng(1))<cuts[8] && TMath::Abs(PtProng(2))<cuts[8])
return kFALSE;
232 Double_t sum2=Getd0Prong(0)*Getd0Prong(0)+Getd0Prong(1)*Getd0Prong(1)+Getd0Prong(2)*Getd0Prong(2);
233 if(sum2<cuts[10])
return kFALSE;
260 okLcpKpi=1; okLcpiKp=1;
262 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
267 if(TMath::Abs(mLcpKpi-mLcPDG)>cuts[0]) okLcpKpi = 0;
268 if(TMath::Abs(mLcpiKp-mLcPDG)>cuts[0]) okLcpiKp = 0;
269 if(!okLcpKpi && !okLcpiKp)
return kFALSE;
272 if(TMath::Abs(PtProng(0)) < cuts[1] || TMath::Abs(Getd0Prong(0))<cuts[3])
return kFALSE;
273 if(TMath::Abs(PtProng(1)) < cuts[2] || TMath::Abs(Getd0Prong(1))<cuts[4])
return kFALSE;
274 if(TMath::Abs(PtProng(2)) < cuts[2] || TMath::Abs(Getd0Prong(2))<cuts[4])
return kFALSE;
277 for(
Int_t i=0;i<3;i++) if(GetDCA(i)>cuts[11])
return kFALSE;
281 if(Getd0Prong(0)*Getd0Prong(1)<0. && Getd0Prong(2)*Getd0Prong(1)<0.)
return kFALSE;
288 if(TMath::Abs(PtProng(0))<cuts[8] && TMath::Abs(PtProng(1))<cuts[8] && TMath::Abs(PtProng(2))<cuts[8])
return kFALSE;
290 Double_t sum2=Getd0Prong(0)*Getd0Prong(0)+Getd0Prong(1)*Getd0Prong(1)+Getd0Prong(2)*Getd0Prong(2);
291 if(sum2<cuts[10])
return kFALSE;
316 Double_t ePhi=EProng(indexK1,321)+EProng(indexK2,321);
317 Double_t pxPhi=PxProng(indexK1)+PxProng(indexK2);
318 Double_t pyPhi=PyProng(indexK1)+PyProng(indexK2);
319 Double_t pzPhi=PzProng(indexK1)+PzProng(indexK2);
324 TVector3 vecK1Phiframe;
325 TLorentzVector vecK1(PxProng(indexK1),PyProng(indexK1),PzProng(indexK1),EProng(indexK1,321));
326 vecK1.Boost(-bxPhi,-byPhi,-bzPhi);
327 vecK1.Boost(vecK1Phiframe);
328 vecK1Phiframe=vecK1.BoostVector();
330 TVector3 vecPiPhiframe;
331 TLorentzVector vecPi(PxProng(indexPi),PyProng(indexPi),PzProng(indexPi),EProng(indexPi,211));
332 vecPi.Boost(-bxPhi,-byPhi,-bzPhi);
333 vecPi.Boost(vecPiPhiframe);
334 vecPiPhiframe=vecPi.BoostVector();
336 Double_t innera=vecPiPhiframe.Dot(vecK1Phiframe);
337 Double_t norm1a=TMath::Sqrt(vecPiPhiframe.Dot(vecPiPhiframe));
338 Double_t norm2a=TMath::Sqrt(vecK1Phiframe.Dot(vecK1Phiframe));
339 Double_t cosK1PhiFrame=innera/(norm1a*norm2a);
341 return cosK1PhiFrame;
364 TLorentzVector vecPi(PxProng(indexPi),PyProng(indexPi),PzProng(indexPi),EProng(indexPi,211));
365 vecPi.Boost(-bxD,-byD,-bzD);
366 vecPi.Boost(piDsframe);
367 piDsframe=vecPi.BoostVector();
369 TVector3 vecDs(Px(),Py(),Pz());
371 Double_t inner=vecDs.Dot(piDsframe);
372 Double_t norm1=TMath::Sqrt(vecDs.Dot(vecDs));
373 Double_t norm2=TMath::Sqrt(piDsframe.Dot(piDsframe));
374 Double_t cosPiDsFrame=inner/(norm1*norm2);
385 AliVertexerTracks vertexer(aod->GetMagneticField());
387 AliAODVertex* aodV=aod->GetPrimaryVertex();
389 aodV->GetCovarianceMatrix(cov);
391 Int_t nC=aodV->GetNContributors();
392 AliESDVertex vprim(pos,cov,chi2,nC);
393 vertexer.SetVtxStart(&vprim);
396 for(
Int_t iDau=0; iDau<GetNDaughters(); iDau++){
397 AliVTrack* at=(AliVTrack*)GetDaughter(iDau);
398 threeTrackArray.AddAt(
new AliESDtrack(at),iDau);
401 AliESDVertex* secVert=vertexer.VertexForSelectedESDTracks(&threeTrackArray,kFALSE,kTRUE,kFALSE);
402 Double_t disp=secVert->GetDispersion();
404 threeTrackArray.Delete();
AliAODRecoDecayHF & operator=(const AliAODRecoDecayHF &source)
Double_t InvMassDsKKpi() const
Double_t CosPiDsLabFrame(Int_t option) const
Bool_t SelectLc(const Double_t *cuts, Int_t &okLcpKpi, Int_t &okLcpiKp) const
Double_t InvMassDspiKK() const
Double_t fDist23toPrim
distance prim vert - 2 opposite sign track vertex
virtual void DeleteRecoD()
Double_t fDist12toPrim
track dispersion around the secondary vertex
Bool_t SelectDs(const Double_t *cuts, Int_t &okDsKKpi, Int_t &okDspiKK, Int_t &okMassPhi, Int_t &okMassK0star) const
Double_t InvMassDplus() const
Double_t ComputeSigmaVert(const AliAODEvent *aod) const
Bool_t SelectDplus(const Double_t *cuts) const
virtual void DeleteRecoD()
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Double_t CosPiKPhiRFrame(Int_t option) const
AliAODRecoDecayHF3Prong & operator=(const AliAODRecoDecayHF3Prong &source)
Double_t CosPointingAngle() const
Double_t InvMassLcpKpi() const
Double_t DecayLength() const
Double_t InvMassLcpiKp() const
AliAODRecoDecayHF3Prong()