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