Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4MCTSimEvent implementation 27 // 28 // Author: Youhei Morita, 12.09.2001 29 // ------------------------------------------- 30 31 #include "G4ios.hh" 32 #include "G4MCTSimEvent.hh" 33 #include "G4MCTSimParticle.hh" 34 #include "G4MCTSimVertex.hh" 35 36 // ------------------------------------------- 37 G4MCTSimEvent::G4MCTSimEvent() 38 { 39 } 40 41 // ------------------------------------------- 42 G4MCTSimEvent::~G4MCTSimEvent() 43 { 44 ClearEvent(); 45 } 46 47 // ------------------------------------------- 48 G4bool G4MCTSimEvent::AddParticle(const G4MCTS 49 50 { 51 G4MCTSimParticle* qpart = const_cast<G4MCTSi 52 G4int trackID = aparticle->GetTrac 53 std::size_t nc = particleMap.count( 54 if(nc == 0) 55 { 56 particleMap.insert(std::make_pair(trackID, 57 return true; 58 } 59 else 60 { 61 return false; 62 } 63 } 64 65 // ------------------------------------------- 66 G4MCTSimParticle* G4MCTSimEvent::FindParticle( 67 { 68 G4MCTSimParticleContainer::const_iterator po 69 if(pos != particleMap.cend()) 70 { 71 return pos->second; 72 } 73 else 74 { 75 return nullptr; 76 } 77 } 78 79 // ------------------------------------------- 80 G4MCTSimVertex* G4MCTSimEvent::GetVertex(G4int 81 { 82 G4int nv = (G4int)vertexVec.size(); 83 if(vid >= 1 && vid <= nv) 84 { 85 return vertexVec[vid - 1]; 86 } 87 else 88 { 89 return nullptr; 90 } 91 } 92 93 // ------------------------------------------- 94 void G4MCTSimEvent::BuildVertexContainer() 95 { 96 G4MCTSimParticleContainer::iterator itr; 97 G4int vid = 1; 98 for(itr = particleMap.begin(); itr != partic 99 { 100 G4MCTSimVertex* vertex = itr->second->GetV 101 if(vertex) 102 { 103 if(vertex->GetID() < 0) 104 { 105 vertex->SetID(vid); // ID not yet a 106 ++vid; 107 if(vertex) 108 vertexVec.push_back(vertex); 109 } 110 } 111 } 112 } 113 114 // ------------------------------------------- 115 void G4MCTSimEvent::ClearEvent() 116 { 117 G4MCTSimParticleContainer::iterator itr; 118 for(itr = particleMap.begin(); itr != partic 119 { 120 delete itr->second; 121 } 122 particleMap.clear(); 123 124 G4MCTSimVertexContainer::iterator itrv; 125 for(itrv = vertexVec.begin(); itrv != vertex 126 { 127 delete(*itrv); 128 } 129 vertexVec.clear(); 130 } 131 132 // ------------------------------------------- 133 G4int G4MCTSimEvent::GetNofStoredParticles() c 134 { 135 G4int n = 0; 136 G4MCTSimParticleContainer::const_iterator it 137 for(itr = particleMap.cbegin(); itr != parti 138 { 139 if(itr->second->GetStoreFlag()) 140 ++n; 141 } 142 return n; 143 } 144 145 // ------------------------------------------- 146 G4int G4MCTSimEvent::GetNofStoredVertices() co 147 { 148 G4int n = 0; 149 G4MCTSimVertexContainer::const_iterator itr; 150 for(itr = vertexVec.cbegin(); itr != vertexV 151 { 152 if((*itr)->GetStoreFlag()) 153 ++n; 154 } 155 return n; 156 } 157 158 // ------------------------------------------- 159 void G4MCTSimEvent::Print(std::ostream& ostr) 160 { 161 ostr << "___________________________________ 162 "____________________________" 163 << G4endl; 164 ostr << "SimEvent:" << G4endl << G4endl; 165 ostr << "Current Memory Usage: " << particle 166 << vertexVec.size() << " vertices." << 167 ostr << "trk#<ptrk#: P(Px(GeV), Py, 168 << " vtx#- X( X(mm), Y, 169 << G4endl; 170 ostr << "___________________________________ 171 "____________________________" 172 << G4endl; 173 174 G4MCTSimParticleContainer::const_iterator it 175 for(itr = particleMap.cbegin(); itr != parti 176 { 177 itr->second->PrintSingle(ostr); 178 } 179 ostr << "___________________________________ 180 "____________________________" 181 << G4endl; 182 } 183