HepMC Reference Documentation

HepMC

GenRanges.h

Go to the documentation of this file.
00001 #ifndef HEPMC_GEN_EVENT_ITERATORS_H
00002 #define HEPMC_GEN_EVENT_ITERATORS_H
00003 
00004 //--------------------------------------------------------------------------
00006 // garren@fnal.gov, May 2009
00007 // 
00009 //--------------------------------------------------------------------------
00010 
00011 #include <stdexcept>
00012 
00013 #include "HepMC/GenEvent.h"
00014 #include "HepMC/GenVertex.h"
00015 
00016 namespace HepMC {
00017 
00019 
00026 class GenEventVertexRange {
00027 
00028 public:
00029 
00031   GenEventVertexRange( GenEvent & e ) : m_event(e) {}
00033   GenEvent::vertex_iterator begin() { return m_event.vertices_begin(); }
00034   GenEvent::vertex_iterator end()   { return m_event.vertices_end(); }
00035 
00036 private:
00039   GenEventVertexRange& operator=( GenEventVertexRange & );
00040 
00041 private:
00042   GenEvent & m_event;
00043 
00044 };
00045 
00047 
00055 class ConstGenEventVertexRange {
00056 
00057 public:
00058 
00060   ConstGenEventVertexRange( GenEvent const & e ) : m_event(e) {}
00062   GenEvent::vertex_const_iterator begin() const { return m_event.vertices_begin(); }
00063   GenEvent::vertex_const_iterator end()   const { return m_event.vertices_end(); }
00064 
00065 private:
00068   ConstGenEventVertexRange& operator=( ConstGenEventVertexRange & );
00069 
00070 private:
00071   GenEvent const & m_event;
00072 
00073 };
00074 
00076 
00083 class GenEventParticleRange {
00084 
00085 public:
00086 
00088   GenEventParticleRange( GenEvent & e ) : m_event(e) {}
00090   GenEvent::particle_iterator begin() { return m_event.particles_begin(); }
00091   GenEvent::particle_iterator end()   { return m_event.particles_end(); }
00092 
00093 private:
00096   GenEventParticleRange& operator=( GenEventParticleRange & );
00097 
00098 private:
00099   GenEvent & m_event;
00100 
00101 };
00102 
00104 
00112 class ConstGenEventParticleRange {
00113 
00114 public:
00115 
00117   ConstGenEventParticleRange( GenEvent const & e ) : m_event(e) {}
00119   GenEvent::particle_const_iterator begin() const { return m_event.particles_begin(); }
00120   GenEvent::particle_const_iterator end()   const { return m_event.particles_end(); }
00121 
00122 private:
00125   ConstGenEventParticleRange& operator=( ConstGenEventParticleRange & );
00126 
00127 private:
00128   GenEvent const & m_event;
00129 
00130 };
00131 
00133 
00140 class GenVertexParticleRange {
00141 
00142 public:
00143 
00145   GenVertexParticleRange( GenVertex & v, IteratorRange range = relatives ) 
00146   : m_vertex(v),m_range(range) {}
00148   GenVertex::particle_iterator begin() { return m_vertex.particles_begin(m_range); }
00149   GenVertex::particle_iterator end()   { return m_vertex.particles_end(m_range); }
00150 
00151 private:
00154   GenVertexParticleRange& operator=( GenVertexParticleRange & );
00155 
00156 private:
00157   GenVertex     & m_vertex;
00158   IteratorRange   m_range;
00159 
00160 };
00161 
00163 
00170 class GenParticleProductionRange {
00171 
00172 public:
00173 
00175   GenParticleProductionRange( GenParticle const & p, IteratorRange range = relatives ) 
00176   : m_particle(p),m_range(range) {}
00178   GenVertex::particle_iterator begin();
00180   GenVertex::particle_iterator end(); 
00181 
00182 private:
00185   GenParticleProductionRange& operator=( GenParticleProductionRange & );
00186 
00187 private:
00188   GenParticle const & m_particle;
00189   IteratorRange       m_range;
00190 
00191 };
00192 
00193 class ConstGenParticleProductionRange {
00194 
00195 public:
00196 
00198   ConstGenParticleProductionRange( GenParticle const & p, IteratorRange range = relatives ) 
00199   : m_particle(p),m_range(range) {}
00201   GenVertex::particle_iterator begin();
00203   GenVertex::particle_iterator end(); 
00204 
00205 private:
00208   ConstGenParticleProductionRange& operator=( ConstGenParticleProductionRange & );
00209 
00210 private:
00211   GenParticle const & m_particle;
00212   IteratorRange       m_range;
00213 
00214 };
00215 
00217 
00224 class GenParticleEndRange {
00225 
00226 public:
00227 
00229   GenParticleEndRange( GenParticle const & p, IteratorRange range = relatives ) 
00230   : m_particle(p),m_range(range) {}
00232   GenVertex::particle_iterator begin();
00234   GenVertex::particle_iterator end(); 
00235 
00236 private:
00239   GenParticleEndRange& operator=( GenParticleEndRange & );
00240 
00241 private:
00242   GenParticle const & m_particle;
00243   IteratorRange       m_range;
00244 
00245 };
00246 
00247 class ConstGenParticleEndRange {
00248 
00249 public:
00250 
00252   ConstGenParticleEndRange( GenParticle const & p, IteratorRange range = relatives ) 
00253   : m_particle(p),m_range(range) {}
00255   GenVertex::particle_iterator begin();
00257   GenVertex::particle_iterator end(); 
00258 
00259 private:
00262   ConstGenParticleEndRange& operator=( ConstGenParticleEndRange & );
00263 
00264 private:
00265   GenParticle const & m_particle;
00266   IteratorRange       m_range;
00267 
00268 };
00269 
00270 
00271 inline GenVertex::particle_iterator GenParticleProductionRange::begin() 
00272 { 
00273     if ( ! m_particle.production_vertex() ) 
00274         throw(std::range_error("GenParticleProductionRange: GenParticle has no production_vertex"));
00275     return m_particle.production_vertex()->particles_begin(m_range); 
00276 }
00277 
00278 inline GenVertex::particle_iterator GenParticleProductionRange::end()
00279 { 
00280     if ( ! m_particle.production_vertex() ) 
00281         throw(std::range_error("GenParticleProductionRange: GenParticle has no production_vertex"));
00282     return m_particle.production_vertex()->particles_end(m_range); 
00283 }
00284 
00285 
00286 inline GenVertex::particle_iterator ConstGenParticleProductionRange::begin() 
00287 { 
00288     if ( ! m_particle.production_vertex() ) 
00289         throw(std::range_error("ConstGenParticleProductionRange: GenParticle has no production_vertex"));
00290     return m_particle.production_vertex()->particles_begin(m_range); 
00291 }
00292 
00293 inline GenVertex::particle_iterator ConstGenParticleProductionRange::end()
00294 { 
00295     if ( ! m_particle.production_vertex() ) 
00296         throw(std::range_error("ConstGenParticleProductionRange: GenParticle has no production_vertex"));
00297     return m_particle.production_vertex()->particles_end(m_range); 
00298 }
00299 
00300 inline GenVertex::particle_iterator GenParticleEndRange::begin() 
00301 { 
00302     if ( ! m_particle.end_vertex() ) 
00303         throw(std::range_error("GenParticleEndRange: GenParticle has no end_vertex"));
00304     return m_particle.end_vertex()->particles_begin(m_range); 
00305 }
00306 inline GenVertex::particle_iterator GenParticleEndRange::end()
00307 { 
00308     if ( ! m_particle.end_vertex() ) 
00309         throw(std::range_error("GenParticleEndRange: GenParticle has no end_vertex"));
00310     return m_particle.end_vertex()->particles_end(m_range); 
00311 }
00312 
00313 inline GenVertex::particle_iterator ConstGenParticleEndRange::begin() 
00314 { 
00315     if ( ! m_particle.end_vertex() ) 
00316         throw(std::range_error("ConstGenParticleEndRange: GenParticle has no end_vertex"));
00317     return m_particle.end_vertex()->particles_begin(m_range); 
00318 }
00319 inline GenVertex::particle_iterator ConstGenParticleEndRange::end()
00320 { 
00321     if ( ! m_particle.end_vertex() ) 
00322         throw(std::range_error("ConstGenParticleEndRange: GenParticle has no end_vertex"));
00323     return m_particle.end_vertex()->particles_end(m_range); 
00324 }
00325 
00326 } // HepMC
00327 
00328 #endif  // HEPMC_GEN_EVENT_ITERATORS_H

Generated on Fri Feb 17 00:31:25 2012 for HepMC by  doxygen 1.4.7