Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // G4Exception implementation << 27 // 23 // 28 // Authors: G.Cosmo, M.Asai - May 1999 - First << 24 // $Id: G4Exception.cc,v 1.18 2004/11/12 16:25:34 gcosmo Exp $ 29 // ------------------------------------------- << 25 // GEANT4 tag $Name: geant4-07-00-cand-03 $ >> 26 // >> 27 // >> 28 // ---------------------------------------------------------------------- >> 29 // G4Exception >> 30 // >> 31 // Global error function prints string to G4cerr, and aborts >> 32 // program >> 33 // >> 34 // History: >> 35 // 30.06.95 P.Kent 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 40 47 inline const G4String G4ExceptionErrBannerEnd( << 41 void G4Exception(const char* s) 48 { 42 { 49 return "\n-------- EEEE ------- G4Exception- << 43 if(s) 50 } << 44 { 51 inline const G4String G4ExceptionWarnBannerEnd << 45 G4cerr << s << G4endl; 52 { << 46 } 53 return "\n-------- WWWW ------- G4Exception- << 47 if(G4StateManager::GetStateManager()->SetNewState(G4State_Abort,s)) { 54 } << 48 G4cerr << G4endl << "*** G4Exception: Aborting execution ***" << G4endl; 55 << 49 abort(); 56 } // namespace << 50 } else { 57 << 51 G4cerr << G4endl << "*** G4Exception: Abortion suppressed ***" 58 // ------------------------------------------- << 52 << G4endl << "*** No guarantee for further execution ***" << G4endl; 59 void G4Exception(const char* originOfException << 53 } 60 G4ExceptionSeverity severity, << 54 } >> 55 >> 56 void G4Exception(const char* originOfException, >> 57 const char* exceptionCode, >> 58 G4ExceptionSeverity severity, >> 59 const char* description) 61 { 60 { 62 G4VExceptionHandler* exceptionHandler = << 61 G4VExceptionHandler* exceptionHandler 63 G4StateManager::GetStateManager()->GetExce << 62 = G4StateManager::GetStateManager()->GetExceptionHandler(); 64 G4bool toBeAborted = true; 63 G4bool toBeAborted = true; 65 if(exceptionHandler != nullptr) << 64 if(exceptionHandler) 66 { 65 { 67 toBeAborted = exceptionHandler->Notify(ori << 66 toBeAborted = exceptionHandler 68 sev << 67 ->Notify(originOfException,exceptionCode,severity,description); 69 } 68 } 70 else 69 else 71 { 70 { 72 static const G4String& es_banner = G4Excep << 71 G4cerr << G4endl 73 static const G4String& ee_banner = G4Excep << 72 << "*** ExceptionHandler is not defined ***" << G4endl; 74 static const G4String& ws_banner = G4Excep << 73 G4cerr << G4endl; 75 static const G4String& we_banner = G4Excep << 74 G4cerr << "*** G4Exception : " << exceptionCode << G4endl; 76 std::ostringstream message; << 75 G4cerr << " issued by : " << originOfException << G4endl; 77 message << "\n*** ExceptionHandler is not << 76 G4cerr << description << G4endl; 78 << "*** G4Exception : " << excepti << 77 G4cerr << G4endl << "Severity : "; 79 << " issued by : " << originO << 80 << description << G4endl; << 81 switch(severity) 78 switch(severity) 82 { 79 { 83 case FatalException: << 80 case FatalException: 84 G4cerr << es_banner << message.str() < << 81 G4cerr << "*** Fatal Exception ***"; 85 << ee_banner << G4endl; << 82 break; 86 break; << 83 case FatalErrorInArgument: 87 case FatalErrorInArgument: << 84 G4cerr << "*** Fatal Error In Argument ***"; 88 G4cerr << es_banner << message.str() << 85 break; 89 << "*** Fatal Error In Argument << 86 case RunMustBeAborted: 90 break; << 87 G4cerr << "*** Run Must Be Aborted ***"; 91 case RunMustBeAborted: << 88 break; 92 G4cerr << es_banner << message.str() < << 89 case EventMustBeAborted: 93 << ee_banner << G4endl; << 90 G4cerr << "*** Event Must Be Aborted ***"; 94 break; << 91 break; 95 case EventMustBeAborted: << 92 default: 96 G4cerr << es_banner << message.str() < << 93 G4cerr << "*** This is just a warning message. ***"; 97 << ee_banner << G4endl; << 94 toBeAborted = false; 98 break; << 95 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 } 96 } >> 97 G4cerr << G4endl; 109 } 98 } 110 if(toBeAborted) 99 if(toBeAborted) 111 { 100 { 112 if(G4StateManager::GetStateManager()->SetN << 101 if(G4StateManager::GetStateManager()->SetNewState(G4State_Abort)) { 113 { << 102 G4cerr << G4endl << "*** G4Exception: Aborting execution ***" << G4endl; 114 G4cerr << G4endl << "*** G4Exception: Ab << 103 abort(); 115 abort(); << 104 } else { 116 } << 105 G4cerr << G4endl << "*** G4Exception: Abortion suppressed ***" 117 else << 106 << G4endl << "*** No guarantee for further execution ***" << G4endl; 118 { << 107 } 119 G4cerr << G4endl << "*** G4Exception: Ab << 120 << "*** No guarantee for further << 121 } << 122 } 108 } 123 } 109 } 124 110 125 // ------------------------------------------- << 111 void G4Exception(std::string s) 126 void G4Exception(const char* originOfException << 127 G4ExceptionSeverity severity, << 128 G4ExceptionDescription& descr << 129 { 112 { 130 G4String des = description.str(); << 113 G4Exception(s.c_str()); 131 G4Exception(originOfException, exceptionCode << 132 } 114 } 133 115 134 // ------------------------------------------- << 116 void G4Exception(G4String s) 135 void G4Exception(const char* originOfException << 136 G4ExceptionSeverity severity, << 137 G4ExceptionDescription& descr << 138 { 117 { 139 description << comments << G4endl; << 118 G4Exception(s.c_str()); 140 G4Exception(originOfException, exceptionCode << 141 } 119 } 142 120