Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // G4MCTSimEvent 27 28 // Author: Youhei Morita, 12.09.2001 29 // -------------------------------------------------------------------- 30 #ifndef G4MCTSIMEVENT_HH 31 #define G4MCTSIMEVENT_HH 1 32 33 #include <iostream> 34 #include <vector> 35 #include <map> 36 37 #include "G4Types.hh" 38 39 class G4MCTSimParticle; 40 class G4MCTSimVertex; 41 42 using G4MCTSimParticleContainer = std::map<int, G4MCTSimParticle*>; 43 using G4MCTSimVertexContainer = std::vector<G4MCTSimVertex*>; 44 45 class G4MCTSimEvent 46 { 47 public: 48 49 G4MCTSimEvent(); 50 ~G4MCTSimEvent(); 51 52 inline G4MCTSimEvent(const G4MCTSimEvent& right); 53 inline G4MCTSimEvent& operator=(const G4MCTSimEvent& right); 54 // copy constructor and assignment operator 55 56 G4bool AddParticle(const G4MCTSimParticle* aparticle); 57 inline G4int GetNofParticles() const; 58 inline G4int GetNofVertices() const; 59 G4int GetNofStoredParticles() const; 60 G4int GetNofStoredVertices() const; 61 G4MCTSimParticle* FindParticle(G4int tid) const; 62 G4MCTSimVertex* GetVertex(G4int vid) const; 63 64 void BuildVertexContainer(); 65 void ClearEvent(); 66 void Print(std::ostream& ostr = std::cout) const; 67 68 // iterators 69 using particle_iterator = G4MCTSimParticleContainer::iterator; 70 using particle_const_iterator = G4MCTSimParticleContainer::const_iterator; 71 inline particle_iterator particles_begin(); 72 inline particle_iterator particles_end(); 73 inline particle_const_iterator particles_begin() const; 74 inline particle_const_iterator particles_end() const; 75 76 using vertex_iterator = G4MCTSimVertexContainer::iterator; 77 using vertex_const_iterator = G4MCTSimVertexContainer::const_iterator; 78 inline vertex_iterator vertices_begin(); 79 inline vertex_iterator vertices_end(); 80 inline vertex_const_iterator vertices_begin() const; 81 inline vertex_const_iterator vertices_end() const; 82 83 protected: 84 85 G4MCTSimParticleContainer particleMap; 86 G4MCTSimVertexContainer vertexVec; 87 }; 88 89 // ==================================================================== 90 // inline methods 91 // ==================================================================== 92 93 inline G4MCTSimEvent::G4MCTSimEvent(const G4MCTSimEvent& right) 94 { 95 *this = right; 96 } 97 98 inline G4MCTSimEvent& G4MCTSimEvent::operator=(const G4MCTSimEvent& right) 99 { 100 particleMap = right.particleMap; // shallow copy 101 102 return *this; 103 } 104 105 inline G4int G4MCTSimEvent::GetNofParticles() const 106 { 107 return (G4int)particleMap.size(); 108 } 109 110 inline G4int G4MCTSimEvent::GetNofVertices() const 111 { 112 return (G4int)vertexVec.size(); 113 } 114 115 // iterators 116 inline G4MCTSimEvent::particle_iterator G4MCTSimEvent::particles_begin() 117 { 118 return particleMap.begin(); 119 } 120 121 inline G4MCTSimEvent::particle_iterator G4MCTSimEvent::particles_end() 122 { 123 return particleMap.end(); 124 } 125 126 inline G4MCTSimEvent::particle_const_iterator G4MCTSimEvent::particles_begin() 127 const 128 { 129 return particleMap.cbegin(); 130 } 131 132 inline G4MCTSimEvent::particle_const_iterator G4MCTSimEvent::particles_end() 133 const 134 { 135 return particleMap.cend(); 136 } 137 138 inline G4MCTSimEvent::vertex_iterator G4MCTSimEvent::vertices_begin() 139 { 140 return vertexVec.begin(); 141 } 142 143 inline G4MCTSimEvent::vertex_iterator G4MCTSimEvent::vertices_end() 144 { 145 return vertexVec.end(); 146 } 147 148 inline G4MCTSimEvent::vertex_const_iterator G4MCTSimEvent::vertices_begin() 149 const 150 { 151 return vertexVec.cbegin(); 152 } 153 154 inline G4MCTSimEvent::vertex_const_iterator G4MCTSimEvent::vertices_end() const 155 { 156 return vertexVec.cend(); 157 } 158 159 #endif 160