#include "AliVertexerTracks.h"
#include "AliHLTGlobalBarrelTrack.h"
#include "AliExternalTrackParam.h"
+#include "AliKFVertex.h"
ClassImp(AliHLTD0toKpi)
{
}
-Double_t AliHLTD0toKpi::InvMass(AliExternalTrackParam* d1, AliExternalTrackParam* 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();
return TMath::Sqrt((energy[0]+energy[1])*(energy[0]+energy[1])-momTot2);
}
-void AliHLTD0toKpi::cosThetaStar(AliExternalTrackParam* d1, AliExternalTrackParam* 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();
D0bar = (qL/gamma-beta*TMath::Sqrt(pStar*pStar+mK*mK))/pStar;
}
-Double_t AliHLTD0toKpi::pointingAngle(AliExternalTrackParam* n, AliExternalTrackParam* 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());
return TMath::Cos(pta);
}
-AliAODVertex* AliHLTD0toKpi::ReconstructSecondaryVertex(TObjArray *trkArray, Double_t b, AliESDVertex *v)
+AliAODVertex* AliHLTD0toKpi::ReconstructSecondaryVertex(TObjArray *trkArray, Double_t b, const AliESDVertex *v, bool useKF)
{
AliESDVertex *vertexESD = 0;
AliAODVertex *vertexAOD = 0;
- AliVertexerTracks *vertexer = new AliVertexerTracks(b);
- vertexer->SetVtxStart(v);
- //if(isESD){vertexESD = (AliESDVertex*)vertexer->VertexForSelectedESDTracks(trkArray);}
- UShort_t *id = new UShort_t[2];
- AliHLTGlobalBarrelTrack *t1 = (AliHLTGlobalBarrelTrack*) trkArray->At(0);
- AliHLTGlobalBarrelTrack *t2 = (AliHLTGlobalBarrelTrack*) trkArray->At(1);
- id[0]=(UShort_t) t1->GetID();
- id[1]=(UShort_t) t2->GetID();
- vertexESD = (AliESDVertex*)vertexer->VertexForSelectedTracks(trkArray,id);
- delete id;
- delete vertexer; vertexer=NULL;
-
- if(!vertexESD) return vertexAOD;
-
- if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
- //AliDebug(2,"vertexing failed");
- delete vertexESD; vertexESD=NULL;
- return vertexAOD;
+ 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
return vertexAOD;
}
-Double_t AliHLTD0toKpi::Pt(AliExternalTrackParam* d1, AliExternalTrackParam* d2)
+Double_t AliHLTD0toKpi::Pt(const AliExternalTrackParam* d1, const AliExternalTrackParam* d2)
{
Double_t p1[3],p2[3];
d1->GetPxPyPz(p1);