fZDCEMEnergy(0),
fZDCParticipants(0),
fT0zVertex(0),
+ fSPDVertex(0),
+ fPrimaryVertex(0),
fT0timeStart(0),
- fPrimaryVertex(),
fTracks("AliESDtrack",15000),
fHLTConfMapTracks("AliESDHLTtrack",25000),
fHLTHoughTracks("AliESDHLTtrack",15000),
//
// Standard destructor
//
+ delete fSPDVertex;
+ delete fPrimaryVertex;
fTracks.Delete();
fHLTConfMapTracks.Delete();
fHLTHoughTracks.Delete();
fZDCParticipants=0;
fT0zVertex=0;
fT0timeStart = 0;
- fPrimaryVertex.Reset();
+ delete fSPDVertex; fSPDVertex=0;
+ delete fPrimaryVertex; fPrimaryVertex=0;
fTracks.Clear();
fHLTConfMapTracks.Clear();
fHLTHoughTracks.Clear();
GetTriggerMask(),
GetMagneticField() );
printf("Vertex: (%.4f +- %.4f, %.4f +- %.4f, %.4f +- %.4f) cm\n",
- fPrimaryVertex.GetXv(), fPrimaryVertex.GetXRes(),
- fPrimaryVertex.GetYv(), fPrimaryVertex.GetYRes(),
- fPrimaryVertex.GetZv(), fPrimaryVertex.GetZRes());
+ fPrimaryVertex->GetXv(), fPrimaryVertex->GetXRes(),
+ fPrimaryVertex->GetYv(), fPrimaryVertex->GetYRes(),
+ fPrimaryVertex->GetZv(), fPrimaryVertex->GetZRes());
printf("Event from reconstruction version %d \n",fRecoVersion);
printf("Number of tracks: \n");
printf(" charged %d\n", GetNumberOfTracks());
}
void SetVertex(const AliESDVertex* vertex) {
- new(&fPrimaryVertex) AliESDVertex(*vertex);
+ fSPDVertex=new AliESDVertex(*vertex);
}
- const AliESDVertex* GetVertex() const {return &fPrimaryVertex;};
+ const AliESDVertex* GetVertex() const {return fSPDVertex;};
+
+ void SetPrimaryVertex(const AliESDVertex* vertex) {
+ fPrimaryVertex=new AliESDVertex(*vertex);
+ }
+ const AliESDVertex* GetPrimaryVertex() const {return fPrimaryVertex;};
Int_t GetEventNumber() const {return fEventNumber;}
Int_t GetRunNumber() const {return fRunNumber;}
Int_t fZDCParticipants; // number of participants estimated by the ZDC
Float_t fT0zVertex; // vertex z position estimated by the START
+ AliESDVertex *fSPDVertex; // Primary vertex estimated by the SPD
+ AliESDVertex *fPrimaryVertex; // Primary vertex estimated using ESD tracks
+
Float_t fT0timeStart; // interaction time estimated by the START
Float_t fT0time[24]; // best TOF on each START PMT
Float_t fT0amplitude[24]; // number of particles(MIPs) on each START PMT
- AliESDVertex fPrimaryVertex; // Primary vertex estimated by the ITS
TClonesArray fTracks; // ESD tracks
TClonesArray fHLTConfMapTracks;// HLT ESD tracks from Conformal Mapper method
AliESDFMD * fESDFMD; // FMD object containing rough multiplicity
- ClassDef(AliESD,10) //ESD class
+ ClassDef(AliESD,11) //ESD class
};
#endif
#include "AliESDVertex.h"
#include "AliTracker.h"
#include "AliVertexer.h"
+#include "AliVertexerTracks.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliPID.h"
gROOT->cd();
+ AliVertexerTracks tVertexer;
+
// loop over events
if (fRawReader) fRawReader->RewindEvents();
}
}
+ esd->SetPrimaryVertex(tVertexer.FindVertex(esd));
+
// write ESD
tree->Fill();
// write HLT ESD
//---- AliRoot headers -----
#include "AliStrLine.h"
#include "AliVertexerTracks.h"
+#include "AliESD.h"
#include "AliESDtrack.h"
ClassImp(AliVertexerTracks)
if(fAlgo==5) VertexFinder(0);
return &fVert;
}
+
+//----------------------------------------------------------------------------
+AliESDVertex* AliVertexerTracks::FindVertex(const AliESD *event) {
+//
+// This is a simple wrapping (by Jouri.Belikov@cern.ch) over the original
+// code by the authors of this class.
+//
+ Int_t nt=event->GetNumberOfTracks(), nacc=0;
+ while (nt--) {
+ AliESDtrack *t=event->GetTrack(nt);
+ if ((t->GetStatus()&AliESDtrack::kITSrefit)==0) continue;
+ fTrkArray.AddLast(t);
+ nacc++;
+ }
+
+ // get tracks and propagate them to initial vertex position
+ if(nacc < fMinTracks) {
+ printf("TooFewTracks\n");
+ Double_t vtx[3]={0,0,0};
+ fVert.SetXYZ(vtx);
+ fVert.SetDispersion(999);
+ fVert.SetNContributors(-5);
+ } else
+ switch (fAlgo) {
+ case 1: StrLinVertexFinderMinDist(1); break;
+ case 2: StrLinVertexFinderMinDist(0); break;
+ case 3: HelixVertexFinder(); break;
+ case 4: VertexFinder(1); break;
+ case 5: VertexFinder(0); break;
+ default: printf("Wrong algorithm\n"); break;
+ }
+
+ fTrkArray.Clear();
+ return &fVert;
+}
+
+
//----------------------------------------------------------------------------
AliVertex* AliVertexerTracks::VertexForSelectedTracks(TObjArray *trkArray) {
//
* *
*****************************************************************************/
-#include "AliVertex.h"
+#include "AliESDVertex.h"
#include "AliTracker.h"
#include <TObjArray.h>
class TTree;
-class AliVertex;
class AliESD;
class AliVertexerTracks : public TObject {
AliVertexerTracks(Double_t xStart, Double_t yStart);
virtual ~AliVertexerTracks();
+ AliESDVertex *FindVertex(const AliESD *event);
+
// computes the vertex from the set of tracks in the tree
AliVertex* VertexForSelectedTracks(TTree *trkTree);
AliVertex* VertexForSelectedTracks(TObjArray *trkArray);
static Double_t GetStrLinMinDist(Double_t *p0,Double_t *p1,Double_t *x0);
static Double_t GetDeterminant3X3(Double_t matr[][3]);
- AliVertex fVert; // vertex after vertex finder
+ AliESDVertex fVert; // vertex after vertex finder
Double_t fNominalPos[2]; // initial knowledge on vertex position
Int_t fMinTracks; // minimum number of tracks
TObjArray fTrkArray; // array with tracks to be processed
// approximated as straight lines
- ClassDef(AliVertexerTracks,1) // 3D Vertexing with ESD tracks
+ ClassDef(AliVertexerTracks,2) // 3D Vertexing with ESD tracks
};
#endif