CMS 3D CMS Logo

TrackingVertex.cc

Go to the documentation of this file.
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 // Constructors
00008 
00009 TrackingVertex::TrackingVertex() : position_(LorentzVector(0,0,0,0)), eId_(0) {
00010 //  daughterTracks_.clear();
00011 }
00012 
00013 TrackingVertex::TrackingVertex(const LorentzVector &p, const bool inVolume, const EncodedEventId eId) :
00014     position_(p), inVolume_(inVolume), eId_(eId) {
00015 //  daughterTracks_.clear();
00016 }
00017 
00018 // Add a reference to vertex vectors
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 // Add a reference to track vectors
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 // Iterators over vertices and tracks
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 // Accessors for whole vectors
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     // Probably empty all the time, currently
00083   }
00084 
00085   // Loop over daughter track(s)
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   // Loop over source track(s) (can be multiple since vertices are collapsed)
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 

Generated on Tue Jun 9 17:46:47 2009 for CMSSW by  doxygen 1.5.4