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