00001 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
00002 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertex.h"
00003
00004 typedef edm::RefVector<edm::HepMCProduct, HepMC::GenVertex > GenVertexRefVector;
00005 typedef edm::Ref<edm::HepMCProduct, HepMC::GenVertex > GenVertexRef;
00006
00007
00008
00009 TrackingVertex::TrackingVertex() : position_(LorentzVector(0,0,0,0)), eId_(0) {
00010
00011 }
00012
00013 TrackingVertex::TrackingVertex(const LorentzVector &p, const bool inVolume, const EncodedEventId eId) :
00014 position_(p), inVolume_(inVolume), eId_(eId) {
00015
00016 }
00017
00018
00019
00020 void TrackingVertex::addG4Vertex(const SimVertex& v) {
00021 g4Vertices_.push_back(v);
00022 }
00023
00024 void TrackingVertex::addGenVertex(const GenVertexRef &ref){
00025 genVertices_.push_back(ref);
00026 }
00027
00028
00029
00030 void TrackingVertex::addDaughterTrack(const TrackingParticleRef &ref){
00031 daughterTracks_.push_back(ref);
00032 }
00033
00034 void TrackingVertex::addParentTrack(const TrackingParticleRef &ref){
00035 sourceTracks_.push_back(ref);
00036 }
00037
00038 void TrackingVertex::clearDaughterTracks() {
00039 daughterTracks_.clear();
00040 }
00041
00042 void TrackingVertex::clearParentTracks() {
00043 sourceTracks_.clear();
00044 }
00045
00046
00047
00048
00049 TrackingVertex::genv_iterator TrackingVertex::genVertices_begin() const { return genVertices_.begin(); }
00050 TrackingVertex::genv_iterator TrackingVertex::genVertices_end() const { return genVertices_.end(); }
00051 TrackingVertex::g4v_iterator TrackingVertex::g4Vertices_begin() const { return g4Vertices_.begin(); }
00052 TrackingVertex::g4v_iterator TrackingVertex::g4Vertices_end() const { return g4Vertices_.end(); }
00053
00054 TrackingVertex::tp_iterator TrackingVertex::daughterTracks_begin() const { return daughterTracks_.begin(); }
00055 TrackingVertex::tp_iterator TrackingVertex::daughterTracks_end() const { return daughterTracks_.end(); }
00056 TrackingVertex::tp_iterator TrackingVertex::sourceTracks_begin() const { return sourceTracks_.begin(); }
00057 TrackingVertex::tp_iterator TrackingVertex::sourceTracks_end() const { return sourceTracks_.end(); }
00058
00059
00060
00061 const std::vector<SimVertex>& TrackingVertex::g4Vertices() const { return g4Vertices_; }
00062 const GenVertexRefVector& TrackingVertex::genVertices() const { return genVertices_; }
00063 const TrackingParticleRefVector& TrackingVertex::sourceTracks() const { return sourceTracks_; }
00064 const TrackingParticleRefVector& TrackingVertex::daughterTracks() const { return daughterTracks_; }
00065
00066 std::ostream& operator<< (std::ostream& s, const TrackingVertex & v) {
00067
00068 using std::endl;
00069 typedef GenVertexRefVector::iterator genv_iterator;
00070 typedef std::vector<SimVertex>::const_iterator g4v_iterator;
00071 typedef TrackingParticleRefVector::iterator tp_iterator;
00072 typedef std::vector<SimTrack>::const_iterator g4t_iterator;
00073
00074 s << "Vertex Position & Event #" << v.position() << " " << v.eventId().bunchCrossing() << "." << v.eventId().event() << endl;
00075 s << " Associated with " << v.daughterTracks().size() << " tracks" << endl;
00076 for (genv_iterator genV = v.genVertices_begin(); genV != v.genVertices_end(); ++genV) {
00077 s << " HepMC vertex position " << (*(*genV)).position().x() << ","<< (*(*genV)).position().y() << (*(*genV)).position().z() << endl;
00078 }
00079
00080 for (g4v_iterator g4V = v.g4Vertices_begin(); g4V != v.g4Vertices_end(); ++g4V) {
00081 s << " Geant vertex position " << (*g4V).position() << endl;
00082
00083 }
00084
00085
00086 for (tp_iterator iTP = v.daughterTracks_begin(); iTP != v.daughterTracks_end(); ++iTP) {
00087 s << " Daughter starts: " << (*(*iTP)).vertex();
00088 for (g4t_iterator g4T = (*(*iTP)).g4Track_begin(); g4T != (*(*iTP)).g4Track_end(); ++g4T) {
00089 s << " p " << g4T->momentum();
00090 }
00091 s << endl;
00092 }
00093
00094
00095 for (tp_iterator iTP = v.sourceTracks_begin(); iTP != v.sourceTracks_end(); ++iTP) {
00096 s << " Source starts: " << (*(*iTP)).vertex();
00097 for (g4t_iterator g4T = (*iTP)->g4Track_begin(); g4T != (*iTP)->g4Track_end(); ++g4T) {
00098 s << ", p " << g4T ->momentum();
00099 }
00100 s << endl;
00101 }
00102 return s;
00103 }
00104