File indexing completed on 2024-04-06 12:29:43
0001 #ifndef SimDataFormats_TrackingVertex_h
0002 #define SimDataFormats_TrackingVertex_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "DataFormats/Common/interface/RefVector.h"
0013 #include "DataFormats/Math/interface/LorentzVector.h"
0014 #include "DataFormats/Math/interface/Point3D.h"
0015
0016 #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
0017 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
0018 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
0019 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0020 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
0021
0022 class TrackingVertex {
0023 friend std::ostream& operator<<(std::ostream& s, const TrackingVertex& tv);
0024
0025 public:
0026 typedef edm::RefVector<edm::HepMCProduct, HepMC::GenVertex> GenVertexRefVector;
0027 typedef edm::Ref<edm::HepMCProduct, HepMC::GenVertex> GenVertexRef;
0028 typedef math::XYZTLorentzVectorD LorentzVector;
0029 typedef GenVertexRefVector::iterator genv_iterator;
0030 typedef std::vector<SimVertex>::const_iterator g4v_iterator;
0031 typedef TrackingParticleRefVector::iterator tp_iterator;
0032
0033
0034 TrackingVertex();
0035 TrackingVertex(const LorentzVector& position, const bool inVolume, const EncodedEventId e = EncodedEventId(0));
0036
0037
0038 void setEventId(EncodedEventId e) { eId_ = e; };
0039
0040
0041 genv_iterator genVertices_begin() const;
0042 genv_iterator genVertices_end() const;
0043 g4v_iterator g4Vertices_begin() const;
0044 g4v_iterator g4Vertices_end() const;
0045
0046 tp_iterator daughterTracks_begin() const;
0047 tp_iterator daughterTracks_end() const;
0048 tp_iterator sourceTracks_begin() const;
0049 tp_iterator sourceTracks_end() const;
0050
0051 unsigned int nG4Vertices() const { return g4Vertices_.size(); };
0052 unsigned int nGenVertices() const { return genVertices_.size(); };
0053 unsigned int nDaughterTracks() const { return daughterTracks_.size(); };
0054 unsigned int nSourceTracks() const { return sourceTracks_.size(); };
0055
0056
0057 void addG4Vertex(const SimVertex&);
0058 void addGenVertex(const GenVertexRef&);
0059 void addDaughterTrack(const TrackingParticleRef&);
0060 void addParentTrack(const TrackingParticleRef&);
0061 void clearDaughterTracks();
0062 void clearParentTracks();
0063
0064
0065 const std::vector<SimVertex>& g4Vertices() const;
0066 const GenVertexRefVector& genVertices() const;
0067 const TrackingParticleRefVector& sourceTracks() const;
0068 const TrackingParticleRefVector& daughterTracks() const;
0069
0070
0071 const LorentzVector& position() const { return position_; };
0072 const EncodedEventId& eventId() const { return eId_; };
0073 const bool inVolume() const { return inVolume_; };
0074
0075 private:
0076 LorentzVector position_;
0077 bool inVolume_;
0078 EncodedEventId eId_;
0079
0080
0081
0082 std::vector<SimVertex> g4Vertices_;
0083 GenVertexRefVector genVertices_;
0084 TrackingParticleRefVector daughterTracks_;
0085 TrackingParticleRefVector sourceTracks_;
0086 };
0087
0088 #endif