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