]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/trigger/AliHLTD0toKpi.cxx
Changes for bug #70680: AliROOT Coverity DELETE_ARRAY checker fix
[u/mrichter/AliRoot.git] / HLT / trigger / AliHLTD0toKpi.cxx
CommitLineData
5f4502cc 1// $Id$
2#include "AliHLTD0toKpi.h"
3#include "TDatabasePDG.h"
4#include "TMath.h"
5#include "AliESDtrack.h"
6#include "TVector3.h"
9929f8f5 7#include "AliAODVertex.h"
8#include "AliESDVertex.h"
9#include "TObjArray.h"
10#include "AliVertexerTracks.h"
629b904b 11#include "AliHLTGlobalBarrelTrack.h"
12#include "AliExternalTrackParam.h"
15f6cee9 13#include "AliKFVertex.h"
5f4502cc 14
15ClassImp(AliHLTD0toKpi)
16
17AliHLTD0toKpi::AliHLTD0toKpi()
18{
19}
20
629b904b 21Double_t AliHLTD0toKpi::InvMass(AliExternalTrackParam* d1, AliExternalTrackParam* d2)
5f4502cc 22{
23 Double_t mpi=TDatabasePDG::Instance()->GetParticle(211)->Mass();
24 Double_t mK=TDatabasePDG::Instance()->GetParticle(321)->Mass();
25
26 Double_t energy[2];
27 energy[1] = TMath::Sqrt(mK*mK+d1->GetP()*d1->GetP());
28 energy[0] = TMath::Sqrt(mpi*mpi+d2->GetP()*d2->GetP());
29
30 Double_t p1[3],p2[3];
31 d1->GetPxPyPz(p1);
32 d2->GetPxPyPz(p2);
33
34 Double_t momTot2 = (p1[0]+p2[0])*(p1[0]+p2[0])+
35 (p1[1]+p2[1])*(p1[1]+p2[1])+
36 (p1[2]+p2[2])*(p1[2]+p2[2]);
37
38 return TMath::Sqrt((energy[0]+energy[1])*(energy[0]+energy[1])-momTot2);
39
40}
629b904b 41void AliHLTD0toKpi::cosThetaStar(AliExternalTrackParam* d1, AliExternalTrackParam* d2,Double_t &D0,Double_t &D0bar)
5f4502cc 42{
43 Double_t mD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
44 Double_t mpi=TDatabasePDG::Instance()->GetParticle(211)->Mass();
45 Double_t mK=TDatabasePDG::Instance()->GetParticle(321)->Mass();
46
47 Double_t pStar = TMath::Sqrt(TMath::Power(mD0*mD0-mK*mK-mpi*mpi,2.)-4.*mK*mK*mpi*mpi)/(2.*mD0);
48
49 Double_t px = d1->Px()+d2->Px();
50 Double_t py = d1->Py()+d2->Py();
51 Double_t pz = d1->Pz()+d2->Pz();
52 Double_t p = TMath::Sqrt(px*px+py*py+pz*pz);
53 Double_t energy = TMath::Sqrt(p*p+mD0*mD0);
54
55 Double_t beta = p/energy;
56 Double_t gamma = energy/mD0;
57
58 Double_t qL;
59 TVector3 mom(d1->Px(),d1->Py(),d1->Pz());
60 TVector3 momD(px,py,pz);
61 qL = mom.Dot(momD)/momD.Mag();
62
63 D0 = (qL/gamma-beta*TMath::Sqrt(pStar*pStar+mK*mK))/pStar;
64
65 TVector3 mom2(d2->Px(),d2->Py(),d2->Pz());
66 TVector3 momD2(px,py,pz);
67 qL = mom2.Dot(momD2)/momD2.Mag();
68
69 D0bar = (qL/gamma-beta*TMath::Sqrt(pStar*pStar+mK*mK))/pStar;
70
71}
629b904b 72Double_t AliHLTD0toKpi::pointingAngle(AliExternalTrackParam* n, AliExternalTrackParam* p, Double_t *pv, Double_t *sv)
5f4502cc 73{
74
75 TVector3 mom(n->Px()+p->Px(),n->Py()+p->Py(),n->Pz()+p->Pz());
76 TVector3 flight(sv[0]-pv[0],sv[1]-pv[1],sv[2]-pv[2]);
77
78 double pta = mom.Angle(flight);
79
80 return TMath::Cos(pta);
81}
9929f8f5 82
15f6cee9 83AliAODVertex* AliHLTD0toKpi::ReconstructSecondaryVertex(TObjArray *trkArray, Double_t b, AliESDVertex *v, bool useKF)
9929f8f5 84{
85
86 AliESDVertex *vertexESD = 0;
87 AliAODVertex *vertexAOD = 0;
88
15f6cee9 89 if(!useKF){
90 AliVertexerTracks *vertexer = new AliVertexerTracks(b);
91 vertexer->SetVtxStart(v);
92 //if(isESD){vertexESD = (AliESDVertex*)vertexer->VertexForSelectedESDTracks(trkArray);}
93 UShort_t *id = new UShort_t[2];
94 AliHLTGlobalBarrelTrack *t1 = (AliHLTGlobalBarrelTrack*) trkArray->At(0);
95 AliHLTGlobalBarrelTrack *t2 = (AliHLTGlobalBarrelTrack*) trkArray->At(1);
96 id[0]=(UShort_t) t1->GetID();
97 id[1]=(UShort_t) t2->GetID();
98 vertexESD = (AliESDVertex*)vertexer->VertexForSelectedTracks(trkArray,id);
4ce766eb 99 delete [] id;
15f6cee9 100 delete vertexer; vertexer=NULL;
101
102 if(!vertexESD) return vertexAOD;
103
104 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
105 //AliDebug(2,"vertexing failed");
106 delete vertexESD; vertexESD=NULL;
107 return vertexAOD;
108 }
109 }
110 else{
111 AliKFParticle::SetField(b);
112
113 AliKFVertex vertexKF;
114
115 Int_t nTrks = trkArray->GetEntriesFast();
116 for(Int_t i=0; i<nTrks; i++) {
117 AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
118 AliKFParticle daughterKF(*esdTrack,211);
119 vertexKF.AddDaughter(daughterKF);
120 }
121 vertexESD = new AliESDVertex(vertexKF.Parameters(),
122 vertexKF.CovarianceMatrix(),
123 vertexKF.GetChi2(),
124 vertexKF.GetNContributors());
9929f8f5 125 }
9929f8f5 126 // convert to AliAODVertex
127 Double_t pos[3],cov[6],chi2perNDF;
128 vertexESD->GetXYZ(pos); // position
129 vertexESD->GetCovMatrix(cov); //covariance matrix
130 chi2perNDF = vertexESD->GetChi2toNDF();
131 //dispersion = vertexESD->GetDispersion();
132 delete vertexESD; vertexESD=NULL;
133
134 Int_t nprongs= trkArray->GetEntriesFast();
135 vertexAOD = new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
136
137 return vertexAOD;
138
139}
252bba71 140Double_t AliHLTD0toKpi::Pt(AliExternalTrackParam* d1, AliExternalTrackParam* d2)
141{
142 Double_t p1[3],p2[3];
143 d1->GetPxPyPz(p1);
144 d2->GetPxPyPz(p2);
145
146 Double_t pt2 = (p1[0]+p2[0])*(p1[0]+p2[0]) + (p1[1]+p2[1])*(p1[1]+p2[1]);
147
148 return TMath::Sqrt(pt2);
149}