]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/trigger/AliHLTD0toKpi.cxx
flat friends update
[u/mrichter/AliRoot.git] / HLT / trigger / AliHLTD0toKpi.cxx
index 971c188ce1e0774c4f7393083183568f911a8f62..e8082c3f559c0932de87524c82123892432b9410 100644 (file)
@@ -4,6 +4,13 @@
 #include "TMath.h"
 #include "AliESDtrack.h"
 #include "TVector3.h"
+#include "AliAODVertex.h"
+#include "AliESDVertex.h"
+#include "TObjArray.h"
+#include "AliVertexerTracks.h"
+#include "AliHLTGlobalBarrelTrack.h"
+#include "AliExternalTrackParam.h"
+#include "AliKFVertex.h"
 
 ClassImp(AliHLTD0toKpi)
 
@@ -11,7 +18,7 @@ AliHLTD0toKpi::AliHLTD0toKpi()
 {
 }
 
-Double_t AliHLTD0toKpi::InvMass(AliESDtrack* d1, AliESDtrack* d2)
+Double_t AliHLTD0toKpi::InvMass(const AliExternalTrackParam* d1, const AliExternalTrackParam* d2)
 {
   Double_t mpi=TDatabasePDG::Instance()->GetParticle(211)->Mass();
   Double_t mK=TDatabasePDG::Instance()->GetParticle(321)->Mass();
@@ -31,7 +38,7 @@ Double_t AliHLTD0toKpi::InvMass(AliESDtrack* d1, AliESDtrack* d2)
   return TMath::Sqrt((energy[0]+energy[1])*(energy[0]+energy[1])-momTot2);
 
 }
-void AliHLTD0toKpi::cosThetaStar(AliESDtrack* d1, AliESDtrack* d2,Double_t &D0,Double_t &D0bar)
+void AliHLTD0toKpi::CosThetaStar(const AliExternalTrackParam* d1, const AliExternalTrackParam* d2,Double_t &D0,Double_t &D0bar)
 {
   Double_t mD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
   Double_t mpi=TDatabasePDG::Instance()->GetParticle(211)->Mass();
@@ -62,7 +69,7 @@ void AliHLTD0toKpi::cosThetaStar(AliESDtrack* d1, AliESDtrack* d2,Double_t &D0,D
   D0bar = (qL/gamma-beta*TMath::Sqrt(pStar*pStar+mK*mK))/pStar;
 
 }
-Double_t AliHLTD0toKpi::pointingAngle(AliESDtrack* n, AliESDtrack* p, Double_t *pv, Double_t *sv)
+Double_t AliHLTD0toKpi::PointingAngle(const AliExternalTrackParam* n, const AliExternalTrackParam* p, const Double_t *pv, const Double_t *sv)
 {
 
   TVector3 mom(n->Px()+p->Px(),n->Py()+p->Py(),n->Pz()+p->Pz());
@@ -72,3 +79,67 @@ Double_t AliHLTD0toKpi::pointingAngle(AliESDtrack* n, AliESDtrack* p, Double_t *
 
   return TMath::Cos(pta); 
 }
+
+AliAODVertex* AliHLTD0toKpi::ReconstructSecondaryVertex(TObjArray *trkArray, Double_t b, const AliESDVertex *v, bool useKF)
+{
+  
+  AliESDVertex *vertexESD = 0;
+  AliAODVertex *vertexAOD = 0;
+  
+  if(!useKF){
+    AliVertexerTracks *vertexer = new AliVertexerTracks(b);
+    AliESDVertex* vertex = new AliESDVertex(*((AliESDVertex*)v));
+    //AliESDVertex* vertex =  const_cast<AliESDVertex*>(v);
+    vertexer->SetVtxStart(vertex);
+    vertexESD = (AliESDVertex*)vertexer->VertexForSelectedESDTracks(trkArray);
+    delete vertexer; vertexer=NULL;
+    delete vertex;
+
+    if(!vertexESD) return vertexAOD;
+    
+    if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) { 
+      //AliDebug(2,"vertexing failed"); 
+      delete vertexESD; vertexESD=NULL;
+      return vertexAOD;
+    }
+  }
+  else{
+    AliKFParticle::SetField(b);
+    
+    AliKFVertex vertexKF;
+    
+    Int_t nTrks = trkArray->GetEntriesFast();
+    for(Int_t i=0; i<nTrks; i++) {
+      AliESDtrack *esdTrack = (AliESDtrack*)trkArray->At(i);
+      AliKFParticle daughterKF(*esdTrack,211);
+      vertexKF.AddDaughter(daughterKF);
+    }
+    vertexESD = new AliESDVertex(vertexKF.Parameters(),
+                                vertexKF.CovarianceMatrix(),
+                                vertexKF.GetChi2(),
+                                vertexKF.GetNContributors());
+  }
+  // convert to AliAODVertex
+  Double_t pos[3],cov[6],chi2perNDF;
+  vertexESD->GetXYZ(pos); // position
+  vertexESD->GetCovMatrix(cov); //covariance matrix
+  chi2perNDF = vertexESD->GetChi2toNDF();
+  //dispersion = vertexESD->GetDispersion();
+  delete vertexESD; vertexESD=NULL;
+
+  Int_t nprongs= trkArray->GetEntriesFast();
+  vertexAOD = new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
+
+  return vertexAOD;
+
+}
+Double_t AliHLTD0toKpi::Pt(const AliExternalTrackParam* d1, const AliExternalTrackParam* d2)
+{
+  Double_t p1[3],p2[3];
+  d1->GetPxPyPz(p1);
+  d2->GetPxPyPz(p2);
+  
+  Double_t pt2 = (p1[0]+p2[0])*(p1[0]+p2[0]) + (p1[1]+p2[1])*(p1[1]+p2[1]);
+
+  return TMath::Sqrt(pt2);
+}