00001 //-------------------------------------------------------------------------- 00002 #ifndef HEPMC_TempParticleMap_H 00003 #define HEPMC_TempParticleMap_H 00004 00006 // garren@fnal.gov, October 2007 00007 // 00008 // Used by IO classes 00010 00011 #include <map> 00012 00013 namespace HepMC { 00014 00015 class GenParticle; 00016 00018 00024 class TempParticleMap { 00025 public: 00026 typedef std::map<HepMC::GenParticle*,int> TempMap; 00027 typedef std::map<int,HepMC::GenParticle*> TempOrderMap; 00028 typedef TempMap::iterator TempMapIterator; 00029 typedef TempOrderMap::iterator orderIterator; 00030 00031 TempParticleMap() 00032 : m_particle_to_end_vertex(), m_particle_order() {} 00033 00034 ~TempParticleMap() {} 00035 00036 TempMapIterator begin() { return m_particle_to_end_vertex.begin(); } 00037 TempMapIterator end() { return m_particle_to_end_vertex.end(); } 00038 orderIterator order_begin() { return m_particle_order.begin(); } 00039 orderIterator order_end() { return m_particle_order.end(); } 00040 00041 int end_vertex( GenParticle* ); 00042 00043 void addEndParticle( GenParticle*, int& ); 00044 00045 private: 00046 TempMap m_particle_to_end_vertex; 00047 TempOrderMap m_particle_order; 00048 }; 00049 00050 inline int TempParticleMap::end_vertex( GenParticle* p ) 00051 { 00052 //return m_particle_to_end_vertex[p]->second; 00053 TempMapIterator it = m_particle_to_end_vertex.find(p); 00054 if( it == end() ) return 0; 00055 return m_particle_to_end_vertex[p]; 00056 } 00057 00058 inline void TempParticleMap::addEndParticle( GenParticle* p, int& end_vtx_code ) 00059 { 00060 m_particle_order[p->barcode()] = p; 00061 m_particle_to_end_vertex[p] = end_vtx_code; 00062 } 00063 00064 } // HepMC 00065 00066 #endif // HEPMC_TempParticleMap_H 00067 //--------------------------------------------------------------------------