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.cc 27 // 27 // 28 // Author: Youhei Morita, 12.09.2001 << 28 // ==================================================================== 29 // ------------------------------------------- << 30 << 31 #include "G4ios.hh" 29 #include "G4ios.hh" 32 #include "G4MCTSimEvent.hh" 30 #include "G4MCTSimEvent.hh" 33 #include "G4MCTSimParticle.hh" 31 #include "G4MCTSimParticle.hh" 34 #include "G4MCTSimVertex.hh" 32 #include "G4MCTSimVertex.hh" 35 33 36 // ------------------------------------------- << 34 // ==================================================================== >> 35 // >> 36 // class description >> 37 // >> 38 // ==================================================================== >> 39 >> 40 ////////////////////////// 37 G4MCTSimEvent::G4MCTSimEvent() 41 G4MCTSimEvent::G4MCTSimEvent() >> 42 ////////////////////////// 38 { 43 { 39 } 44 } 40 45 41 // ------------------------------------------- << 46 /////////////////////////// 42 G4MCTSimEvent::~G4MCTSimEvent() 47 G4MCTSimEvent::~G4MCTSimEvent() >> 48 /////////////////////////// 43 { 49 { 44 ClearEvent(); 50 ClearEvent(); 45 } 51 } 46 52 47 // ------------------------------------------- << 53 ////////////////////////////////////////////////////////////// 48 G4bool G4MCTSimEvent::AddParticle(const G4MCTS 54 G4bool G4MCTSimEvent::AddParticle(const G4MCTSimParticle* aparticle) 49 << 55 ////////////////////////////////////////////////////////////// 50 { 56 { 51 G4MCTSimParticle* qpart = const_cast<G4MCTSi << 57 G4MCTSimParticle* qpart= const_cast<G4MCTSimParticle*>(aparticle); 52 G4int trackID = aparticle->GetTrac << 58 int trackID= aparticle-> GetTrackID(); 53 std::size_t nc = particleMap.count( << 59 int nc= particleMap.count(trackID); 54 if(nc == 0) << 60 if(nc==0) { 55 { << 56 particleMap.insert(std::make_pair(trackID, 61 particleMap.insert(std::make_pair(trackID, qpart)); 57 return true; 62 return true; 58 } << 63 } else { 59 else << 60 { << 61 return false; 64 return false; 62 } 65 } >> 66 63 } 67 } 64 68 65 // ------------------------------------------- << 69 //////////////////////////////////////////////////////// 66 G4MCTSimParticle* G4MCTSimEvent::FindParticle( << 70 G4MCTSimParticle* G4MCTSimEvent::FindParticle(int tid) const >> 71 //////////////////////////////////////////////////////// 67 { 72 { 68 G4MCTSimParticleContainer::const_iterator po << 73 G4MCTSimParticleContainer::const_iterator pos= particleMap.find(tid); 69 if(pos != particleMap.cend()) << 74 if(pos != particleMap.end()) { 70 { << 75 return pos-> second; 71 return pos->second; << 76 } else { 72 } << 77 return 0; 73 else << 74 { << 75 return nullptr; << 76 } 78 } 77 } 79 } 78 80 79 // ------------------------------------------- << 81 /////////////////////////////////////////////////// 80 G4MCTSimVertex* G4MCTSimEvent::GetVertex(G4int << 82 G4MCTSimVertex* G4MCTSimEvent::GetVertex(int vid) const >> 83 /////////////////////////////////////////////////// 81 { 84 { 82 G4int nv = (G4int)vertexVec.size(); << 85 int nv= vertexVec.size(); 83 if(vid >= 1 && vid <= nv) << 86 if(vid>=1 && vid<=nv) { 84 { << 87 return vertexVec[vid-1]; 85 return vertexVec[vid - 1]; << 88 } else { 86 } << 89 return 0; 87 else << 88 { << 89 return nullptr; << 90 } 90 } 91 } 91 } 92 92 93 // ------------------------------------------- << 93 //////////////////////////////////////// 94 void G4MCTSimEvent::BuildVertexContainer() 94 void G4MCTSimEvent::BuildVertexContainer() >> 95 //////////////////////////////////////// 95 { 96 { 96 G4MCTSimParticleContainer::iterator itr; 97 G4MCTSimParticleContainer::iterator itr; 97 G4int vid = 1; << 98 int vid=1; 98 for(itr = particleMap.begin(); itr != partic << 99 for(itr= particleMap.begin(); itr!= particleMap.end(); ++itr) { 99 { << 100 G4MCTSimVertex* vertex= itr->second-> GetVertex(); 100 G4MCTSimVertex* vertex = itr->second->GetV << 101 if(vertex) { 101 if(vertex) << 102 if (vertex-> GetID()<0) { // ID not yet assigned 102 { << 103 vertex-> SetID(vid); 103 if(vertex->GetID() < 0) << 104 vid++; 104 { << 105 if (vertex) vertexVec.push_back(vertex); 105 vertex->SetID(vid); // ID not yet a << 106 ++vid; << 107 if(vertex) << 108 vertexVec.push_back(vertex); << 109 } 106 } 110 } 107 } 111 } 108 } 112 } 109 } 113 110 114 // ------------------------------------------- << 111 ////////////////////////////// 115 void G4MCTSimEvent::ClearEvent() << 112 void G4MCTSimEvent::ClearEvent() >> 113 ////////////////////////////// 116 { 114 { 117 G4MCTSimParticleContainer::iterator itr; 115 G4MCTSimParticleContainer::iterator itr; 118 for(itr = particleMap.begin(); itr != partic << 116 for(itr= particleMap.begin(); itr!= particleMap.end(); ++itr) { 119 { << 120 delete itr->second; 117 delete itr->second; 121 } 118 } 122 particleMap.clear(); 119 particleMap.clear(); 123 120 124 G4MCTSimVertexContainer::iterator itrv; 121 G4MCTSimVertexContainer::iterator itrv; 125 for(itrv = vertexVec.begin(); itrv != vertex << 122 for(itrv= vertexVec.begin(); itrv!= vertexVec.end(); ++itrv) { 126 { << 123 delete (*itrv); 127 delete(*itrv); << 128 } 124 } 129 vertexVec.clear(); 125 vertexVec.clear(); 130 } 126 } 131 127 132 // ------------------------------------------- << 128 133 G4int G4MCTSimEvent::GetNofStoredParticles() c << 129 ////////////////////////////////////////////// >> 130 int G4MCTSimEvent::GetNofStoredParticles() const >> 131 ////////////////////////////////////////////// 134 { 132 { 135 G4int n = 0; << 133 int n=0; 136 G4MCTSimParticleContainer::const_iterator it 134 G4MCTSimParticleContainer::const_iterator itr; 137 for(itr = particleMap.cbegin(); itr != parti << 135 for(itr= particleMap.begin(); itr!= particleMap.end(); ++itr) { 138 { << 136 if(itr-> second-> GetStoreFlag()) n++; 139 if(itr->second->GetStoreFlag()) << 140 ++n; << 141 } 137 } 142 return n; 138 return n; 143 } 139 } 144 140 145 // ------------------------------------------- << 141 ///////////////////////////////////////////// 146 G4int G4MCTSimEvent::GetNofStoredVertices() co << 142 int G4MCTSimEvent::GetNofStoredVertices() const >> 143 ///////////////////////////////////////////// 147 { 144 { 148 G4int n = 0; << 145 int n=0; 149 G4MCTSimVertexContainer::const_iterator itr; 146 G4MCTSimVertexContainer::const_iterator itr; 150 for(itr = vertexVec.cbegin(); itr != vertexV << 147 for(itr= vertexVec.begin(); itr!= vertexVec.end(); ++itr) { 151 { << 148 if((*itr)->GetStoreFlag()) n++; 152 if((*itr)->GetStoreFlag()) << 153 ++n; << 154 } 149 } 155 return n; 150 return n; 156 } 151 } 157 152 158 // ------------------------------------------- << 153 >> 154 ///////////////////////////////////////////////// 159 void G4MCTSimEvent::Print(std::ostream& ostr) 155 void G4MCTSimEvent::Print(std::ostream& ostr) const >> 156 ///////////////////////////////////////////////// 160 { 157 { 161 ostr << "___________________________________ 158 ostr << "____________________________________________________" 162 "____________________________" << 159 "____________________________" << G4endl; 163 << G4endl; << 164 ostr << "SimEvent:" << G4endl << G4endl; 160 ostr << "SimEvent:" << G4endl << G4endl; 165 ostr << "Current Memory Usage: " << particle << 161 ostr << "Current Memory Usage: " 166 << vertexVec.size() << " vertices." << << 162 << particleMap.size() << " particles, " >> 163 << vertexVec.size() << " vertices." >> 164 << G4endl; 167 ostr << "trk#<ptrk#: P(Px(GeV), Py, 165 ostr << "trk#<ptrk#: P(Px(GeV), Py, Pz, E ) @PDG %proc\n" 168 << " vtx#- X( X(mm), Y, << 166 << " vtx#- X( X(mm), Y, Z, T(ns)) @vname-#" 169 << G4endl; 167 << G4endl; 170 ostr << "___________________________________ 168 ostr << "____________________________________________________" 171 "____________________________" << 169 "____________________________" << G4endl; 172 << G4endl; << 173 170 174 G4MCTSimParticleContainer::const_iterator it 171 G4MCTSimParticleContainer::const_iterator itr; 175 for(itr = particleMap.cbegin(); itr != parti << 172 for(itr= particleMap.begin(); itr!= particleMap.end(); ++itr) { 176 { << 173 itr-> second-> PrintSingle(ostr); 177 itr->second->PrintSingle(ostr); << 178 } 174 } 179 ostr << "___________________________________ 175 ostr << "____________________________________________________" 180 "____________________________" << 176 "____________________________" << G4endl; 181 << G4endl; << 182 } 177 } 183 178