#ifndef STNTUPLE_TStnVertex #define STNTUPLE_TStnVertex #ifdef __GNUG__ #pragma interface #endif class TMatrixRow; class TMatrixColumn; class TMatrixDiag; #include "TLorentzVector.h" #include "Stntuple/base/TMatrix33.hh" class TStnTrack; class StnVertexBlock_t; class TStnVertex : public TObject { friend Int_t StnRun1InitVertex(TStnVertex* Vert, StnVertexBlock_t* R1V , Int_t I ); public: enum { kUNCLASSIFIED = -1, kEMPTY = 0, kBEAMGAS = 1, kPRIMARY = 12 }; //------------------------------------------------------------------------------ // data members //------------------------------------------------------------------------------ Short_t fNumber; // sequential number of this vertex Short_t fNTracks; // N(tracks) assoc. with the vertex Int_t fVClass; // vertex class Float_t fQ; // total track charge in the vertex Float_t fMassError; // mass error Float_t fChi2; // chi2 of fit Float_t fNdof; // number of degrees of freedom of fit Float_t fSumPt; // scalar total pt of tracks in vertex Float_t fT0 ; // T0 of the vertex , new in V3 Float_t fT0Error; // uncertainty on T0, new in V3 Float_t fFloat[5]; // reserve , new in V3 TVector3 fVertex; // position of the vertex TLorentzVector fMomentum; // reconstructed momentum TMatrix33 fVtxCov; // || vertex covariance TMatrix33 fMomCov; // || 3-momentum covariance //----------------------------------------------------------------------------- // transient-only data members //----------------------------------------------------------------------------- Float_t fSumW; // ! Float_t fSumW2; // ! Float_t fSumX; // ! Float_t fSumX2; // ! Float_t fSumY; // ! Float_t fSumY2; // ! Float_t fSumZ; // ! Float_t fSumZ2; // ! //------------------------------------------------------------------------------ // functions //------------------------------------------------------------------------------ // ****** constructors and destructor TStnVertex(Int_t Number = -1); virtual ~TStnVertex(); // ****** initialization methods int Init(TStnTrack* track); // ****** accessors Int_t VClass () { return fVClass; } Float_t X () { return fVertex[0]; } Float_t Y () { return fVertex[1]; } Float_t Z () { return fVertex[2]; } Float_t T0 () { return fT0; } Float_t T0Error () { return fT0Error; } Float_t SigmaX () { return sqrt(fVtxCov(0,0)); } Float_t SigmaY () { return sqrt(fVtxCov(1,1)); } Float_t SigmaZ () { return sqrt(fVtxCov(2,2)); } TVector3* Vertex () { return &fVertex;} TLorentzVector* Momentum () { return &fMomentum;} Float_t Mass () { return fMomentum.M();} Float_t MassError () { return fMassError;} TMatrix33* VtxCov () { return &fVtxCov; } TMatrix33* MomCov () { return &fMomCov; } Float_t Q () { return fQ; } Float_t Chi2 () { return fChi2; } Float_t Ndof () { return fNdof; } Int_t NTracks () { return fNTracks;} Int_t Number () { return fNumber; } Float_t SumPt () { return fSumPt; } // ****** setters void SetNumber(Int_t n) { fNumber = n; } void SetXYZ (Double_t X0, Double_t Y0, Double_t Z0) { fVertex.SetXYZ(X0,Y0,Z0); } // ****** non-trivial methods // add new track to the vertex int Add(TStnTrack* track); //----------------------------------------------------------------------------- // overloaded functions of TObject //----------------------------------------------------------------------------- virtual Bool_t IsSortable() const { return kTRUE; } virtual Int_t Compare(const TObject* vertex) const; virtual void Print(Option_t* opt = "") const; //----------------------------------------------------------------------------- // schema evolution //----------------------------------------------------------------------------- void ReadV1 (TBuffer& R__b); void ReadV2 (TBuffer& R__b); ClassDef(TStnVertex,3) }; #endif