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 // G4Exception implementation 26 // G4Exception implementation 27 // 27 // 28 // Authors: G.Cosmo, M.Asai - May 1999 - First 28 // Authors: G.Cosmo, M.Asai - May 1999 - First implementation 29 // ------------------------------------------- 29 // -------------------------------------------------------------------- 30 30 31 #include "G4Exception.hh" 31 #include "G4Exception.hh" 32 #include "G4ios.hh" << 33 #include "G4StateManager.hh" 32 #include "G4StateManager.hh" 34 #include "G4VExceptionHandler.hh" << 35 << 36 namespace { << 37 << 38 inline const G4String G4ExceptionErrBannerStar << 39 { << 40 return "\n-------- EEEE ------- G4Exception- << 41 } << 42 inline const G4String G4ExceptionWarnBannerSta << 43 { << 44 return "\n-------- WWWW ------- G4Exception- << 45 } << 46 << 47 inline const G4String G4ExceptionErrBannerEnd( << 48 { << 49 return "\n-------- EEEE ------- G4Exception- << 50 } << 51 inline const G4String G4ExceptionWarnBannerEnd << 52 { << 53 return "\n-------- WWWW ------- G4Exception- << 54 } << 55 << 56 } // namespace << 57 33 58 // ------------------------------------------- 34 // -------------------------------------------------------------------- 59 void G4Exception(const char* originOfException 35 void G4Exception(const char* originOfException, const char* exceptionCode, 60 G4ExceptionSeverity severity, 36 G4ExceptionSeverity severity, const char* description) 61 { 37 { 62 G4VExceptionHandler* exceptionHandler = 38 G4VExceptionHandler* exceptionHandler = 63 G4StateManager::GetStateManager()->GetExce 39 G4StateManager::GetStateManager()->GetExceptionHandler(); 64 G4bool toBeAborted = true; 40 G4bool toBeAborted = true; 65 if(exceptionHandler != nullptr) 41 if(exceptionHandler != nullptr) 66 { 42 { 67 toBeAborted = exceptionHandler->Notify(ori 43 toBeAborted = exceptionHandler->Notify(originOfException, exceptionCode, 68 sev 44 severity, description); 69 } 45 } 70 else 46 else 71 { 47 { 72 static const G4String& es_banner = G4Excep 48 static const G4String& es_banner = G4ExceptionErrBannerStart(); 73 static const G4String& ee_banner = G4Excep 49 static const G4String& ee_banner = G4ExceptionErrBannerEnd(); 74 static const G4String& ws_banner = G4Excep 50 static const G4String& ws_banner = G4ExceptionWarnBannerStart(); 75 static const G4String& we_banner = G4Excep 51 static const G4String& we_banner = G4ExceptionWarnBannerEnd(); 76 std::ostringstream message; 52 std::ostringstream message; 77 message << "\n*** ExceptionHandler is not 53 message << "\n*** ExceptionHandler is not defined ***\n" 78 << "*** G4Exception : " << excepti 54 << "*** G4Exception : " << exceptionCode << G4endl 79 << " issued by : " << originO 55 << " issued by : " << originOfException << G4endl 80 << description << G4endl; 56 << description << G4endl; 81 switch(severity) 57 switch(severity) 82 { 58 { 83 case FatalException: 59 case FatalException: 84 G4cerr << es_banner << message.str() < 60 G4cerr << es_banner << message.str() << "*** Fatal Exception ***" 85 << ee_banner << G4endl; 61 << ee_banner << G4endl; 86 break; 62 break; 87 case FatalErrorInArgument: 63 case FatalErrorInArgument: 88 G4cerr << es_banner << message.str() 64 G4cerr << es_banner << message.str() 89 << "*** Fatal Error In Argument 65 << "*** Fatal Error In Argument ***" << ee_banner << G4endl; 90 break; 66 break; 91 case RunMustBeAborted: 67 case RunMustBeAborted: 92 G4cerr << es_banner << message.str() < 68 G4cerr << es_banner << message.str() << "*** Run Must Be Aborted ***" 93 << ee_banner << G4endl; 69 << ee_banner << G4endl; 94 break; 70 break; 95 case EventMustBeAborted: 71 case EventMustBeAborted: 96 G4cerr << es_banner << message.str() < 72 G4cerr << es_banner << message.str() << "*** Event Must Be Aborted ***" 97 << ee_banner << G4endl; 73 << ee_banner << G4endl; 98 break; 74 break; 99 case JustWarning: << 75 default: 100 G4cout << ws_banner << message.str() 76 G4cout << ws_banner << message.str() 101 << "*** This is just a warning 77 << "*** This is just a warning message. ***" << we_banner 102 << G4endl; 78 << G4endl; 103 toBeAborted = false; << 104 break; << 105 default: << 106 toBeAborted = false; 79 toBeAborted = false; 107 break; 80 break; 108 } 81 } 109 } 82 } 110 if(toBeAborted) 83 if(toBeAborted) 111 { 84 { 112 if(G4StateManager::GetStateManager()->SetN 85 if(G4StateManager::GetStateManager()->SetNewState(G4State_Abort)) 113 { 86 { 114 G4cerr << G4endl << "*** G4Exception: Ab 87 G4cerr << G4endl << "*** G4Exception: Aborting execution ***" << G4endl; 115 abort(); 88 abort(); 116 } 89 } 117 else 90 else 118 { 91 { 119 G4cerr << G4endl << "*** G4Exception: Ab 92 G4cerr << G4endl << "*** G4Exception: Abortion suppressed ***" << G4endl 120 << "*** No guarantee for further 93 << "*** No guarantee for further execution ***" << G4endl; 121 } 94 } 122 } 95 } 123 } 96 } 124 97 125 // ------------------------------------------- 98 // -------------------------------------------------------------------- 126 void G4Exception(const char* originOfException 99 void G4Exception(const char* originOfException, const char* exceptionCode, 127 G4ExceptionSeverity severity, 100 G4ExceptionSeverity severity, 128 G4ExceptionDescription& descr 101 G4ExceptionDescription& description) 129 { 102 { 130 G4String des = description.str(); 103 G4String des = description.str(); 131 G4Exception(originOfException, exceptionCode 104 G4Exception(originOfException, exceptionCode, severity, des.c_str()); 132 } 105 } 133 106 134 // ------------------------------------------- 107 // -------------------------------------------------------------------- 135 void G4Exception(const char* originOfException 108 void G4Exception(const char* originOfException, const char* exceptionCode, 136 G4ExceptionSeverity severity, 109 G4ExceptionSeverity severity, 137 G4ExceptionDescription& descr 110 G4ExceptionDescription& description, const char* comments) 138 { 111 { 139 description << comments << G4endl; 112 description << comments << G4endl; 140 G4Exception(originOfException, exceptionCode 113 G4Exception(originOfException, exceptionCode, severity, description); 141 } 114 } 142 115