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 // G4ExceptionHandler implementation 27 // 28 // Author: M.Asai - August 2002 29 // ------------------------------------------- 30 31 #include "G4ExceptionHandler.hh" 32 33 #include "G4EventManager.hh" 34 #include "G4Material.hh" 35 #include "G4ParticleDefinition.hh" 36 #include "G4RunManager.hh" 37 #include "G4RunManagerKernel.hh" 38 #include "G4StateManager.hh" 39 #include "G4Step.hh" 40 #include "G4StepPoint.hh" 41 #include "G4SteppingManager.hh" 42 #include "G4String.hh" 43 #include "G4Track.hh" 44 #include "G4TrackingManager.hh" 45 #include "G4UnitsTable.hh" 46 #include "G4VPhysicalVolume.hh" 47 #include "G4VProcess.hh" 48 #include "G4ios.hh" 49 50 #include <cstdlib> 51 52 // ------------------------------------------- 53 G4bool G4ExceptionHandler::operator==(const G4 54 { 55 return (this == &right); 56 } 57 58 // ------------------------------------------- 59 G4bool G4ExceptionHandler::operator!=(const G4 60 { 61 return (this != &right); 62 } 63 64 // ------------------------------------------- 65 G4bool G4ExceptionHandler::Notify(const char* 66 G4ExceptionS 67 { 68 static const G4String es_banner = 69 "\n-------- EEEE ------- G4Exception-START 70 static const G4String ee_banner = 71 "\n-------- EEEE -------- G4Exception-END 72 static const G4String ws_banner = 73 "\n-------- WWWW ------- G4Exception-START 74 static const G4String we_banner = 75 "\n-------- WWWW -------- G4Exception-END 76 std::ostringstream message; 77 message << "*** G4Exception : " << exception 78 << " issued by : " << originOfE 79 G4bool abortionForCoreDump = false; 80 G4ApplicationState aps = G4StateManager::Get 81 switch (severity) { 82 case FatalException: 83 G4cerr << es_banner << message.str() << 84 DumpTrackInfo(); 85 G4cerr << ee_banner << G4endl; 86 abortionForCoreDump = true; 87 break; 88 case FatalErrorInArgument: 89 G4cerr << es_banner << message.str() << 90 << G4endl; 91 DumpTrackInfo(); 92 G4cerr << ee_banner << G4endl; 93 abortionForCoreDump = true; 94 break; 95 case RunMustBeAborted: 96 if (aps == G4State_GeomClosed || aps == 97 G4cerr << es_banner << message.str() < 98 DumpTrackInfo(); 99 G4cerr << ee_banner << G4endl; 100 G4RunManager::GetRunManager()->AbortRu 101 } 102 abortionForCoreDump = false; 103 break; 104 case EventMustBeAborted: 105 if (aps == G4State_EventProc) { 106 G4cerr << es_banner << message.str() < 107 DumpTrackInfo(); 108 G4cerr << ee_banner << G4endl; 109 G4RunManager::GetRunManager()->AbortEv 110 } 111 abortionForCoreDump = false; 112 break; 113 case JustWarning: 114 G4cout << ws_banner << message.str() << 115 << G4endl; 116 abortionForCoreDump = false; 117 break; 118 default: 119 abortionForCoreDump = false; 120 break; 121 } 122 return abortionForCoreDump; 123 } 124 125 // ------------------------------------------- 126 void G4ExceptionHandler::DumpTrackInfo() 127 { 128 const G4Track* theTrack = nullptr; 129 const G4Step* theStep = nullptr; 130 if (G4StateManager::GetStateManager()->GetCu 131 G4SteppingManager* steppingMgr = 132 G4RunManagerKernel::GetRunManagerKernel( 133 theTrack = steppingMgr->GetfTrack(); 134 theStep = steppingMgr->GetfStep(); 135 } 136 137 if (theTrack == nullptr) { 138 G4cerr << " **** Track information is not 139 } 140 else { 141 G4cerr << "G4Track (" << theTrack << ") - 142 << ", parent ID = " << theTrack->Ge 143 G4cerr << " Particle type : " << theTrack- 144 if (theTrack->GetCreatorProcess() != nullp 145 G4cerr << " - creator process : " << the 146 << ", creator model : " << theTra 147 } 148 else { 149 G4cerr << " - creator process : not avai 150 } 151 G4cerr << " Kinetic energy : " << G4BestUn 152 << " - Momentum direction : " << th 153 } 154 155 if (theStep == nullptr) { 156 G4cerr << " **** Step information is not a 157 } 158 else { 159 G4cerr << " Step length : " << G4BestUnit( 160 << " - total energy deposit : " << 161 << G4endl; 162 G4cerr << " Pre-step point : " << theStep- 163 G4cerr << " - Physical volume : "; 164 if (theStep->GetPreStepPoint()->GetPhysica 165 G4cerr << theStep->GetPreStepPoint()->Ge 166 if (theStep->GetPreStepPoint()->GetMater 167 G4cerr << " (" << theStep->GetPreStepP 168 } 169 else { 170 G4cerr << " (material not available)"; 171 } 172 } 173 else { 174 G4cerr << "not available"; 175 } 176 G4cerr << G4endl; 177 if (theStep->GetPreStepPoint()->GetProcess 178 G4cerr << " - defined by : " 179 << theStep->GetPreStepPoint()->Ge 180 << " - step status : " << theStep 181 } 182 else { 183 G4cerr << " - defined by : not available 184 } 185 G4cerr << " Post-step point : " << theStep 186 G4cerr << " - Physical volume : "; 187 if (theStep->GetPostStepPoint()->GetPhysic 188 G4cerr << theStep->GetPostStepPoint()->G 189 if (theStep->GetPostStepPoint()->GetMate 190 G4cerr << " (" << theStep->GetPostStep 191 } 192 else { 193 G4cerr << " (material not available)"; 194 } 195 } 196 else { 197 G4cerr << "not available"; 198 } 199 G4cerr << G4endl; 200 if (theStep->GetPostStepPoint()->GetProces 201 G4cerr << " - defined by : " 202 << theStep->GetPostStepPoint()->G 203 << " - step status : " << theStep 204 } 205 else { 206 G4cerr << " - defined by : not available 207 } 208 G4cerr << " *** Note: Step information mig 209 } 210 } 211