G4ExceptionHandler.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 //
00029 // 
00030 // ------------------------------------------------------------
00031 //      GEANT 4 class implementation file 
00032 //
00033 //      ---------------- G4ExceptionHandler ----------------
00034 //             by Makoto Asai (August 2002)
00035 // ------------------------------------------------------------
00036 
00037 #include "G4ExceptionHandler.hh"
00038 #include "G4StateManager.hh"
00039 #include "G4RunManager.hh"
00040 #include "G4ios.hh"
00041 #include <stdlib.h>
00042 #include "G4String.hh"
00043 
00044 G4ExceptionHandler::G4ExceptionHandler() 
00045 {
00046 }
00047 
00048 G4ExceptionHandler::~G4ExceptionHandler()
00049 {
00050 }
00051 
00052 G4ExceptionHandler::G4ExceptionHandler(const G4ExceptionHandler &)
00053 :G4VExceptionHandler()
00054 {
00055 }
00056 
00057 G4ExceptionHandler& G4ExceptionHandler::operator=(const G4ExceptionHandler &)
00058 {
00059    return *this;
00060 }
00061 
00062 G4int G4ExceptionHandler::operator==(const G4ExceptionHandler &right) const
00063 {
00064    return (this == &right);
00065 }
00066 
00067 G4int G4ExceptionHandler::operator!=(const G4ExceptionHandler &right) const
00068 {
00069    return (this != &right);
00070 }
00071 
00072 G4bool G4ExceptionHandler::Notify(const char* originOfException,
00073                         const char* exceptionCode,
00074                         G4ExceptionSeverity severity,
00075                         const char* description)
00076 {
00077   static const G4String es_banner
00078     = "\n-------- EEEE ------- G4Exception-START -------- EEEE -------\n";
00079   static const G4String ee_banner
00080     = "\n-------- EEEE -------- G4Exception-END --------- EEEE -------\n";
00081   static const G4String ws_banner
00082     = "\n-------- WWWW ------- G4Exception-START -------- WWWW -------\n";
00083   static const G4String we_banner
00084     = "\n-------- WWWW -------- G4Exception-END --------- WWWW -------\n";
00085   std::ostringstream message;
00086   message << "*** G4Exception : " << exceptionCode << G4endl
00087           << "      issued by : " << originOfException << G4endl
00088           << description << G4endl;
00089   G4bool abortionForCoreDump = false;
00090   G4ApplicationState aps = G4StateManager::GetStateManager()->GetCurrentState();
00091   switch(severity)
00092   {
00093    case FatalException:
00094     G4cerr << es_banner << message.str() << "*** Fatal Exception *** core dump ***"
00095            << ee_banner << G4endl;
00096     abortionForCoreDump = true;
00097     break;
00098    case FatalErrorInArgument:
00099     G4cerr << es_banner << message.str() << "*** Fatal Error In Argument *** core dump ***"
00100            << ee_banner << G4endl;
00101     abortionForCoreDump = true;
00102     break;
00103    case RunMustBeAborted:
00104     if(aps==G4State_GeomClosed || aps==G4State_EventProc)
00105     {
00106       G4cerr << es_banner << message.str() << "*** Run Must Be Aborted ***"
00107              << ee_banner << G4endl;
00108       G4RunManager::GetRunManager()->AbortRun(false);
00109     }
00110     abortionForCoreDump = false;
00111     break;
00112    case EventMustBeAborted:
00113     if(aps==G4State_EventProc)
00114     {
00115       G4cerr << es_banner << message.str() << "*** Event Must Be Aborted ***"
00116              << ee_banner << G4endl;
00117       G4RunManager::GetRunManager()->AbortEvent();
00118     }
00119     abortionForCoreDump = false;
00120     break;
00121    default:
00122     G4cout << ws_banner << message.str() << "*** This is just a warning message. ***"
00123            << we_banner << G4endl;
00124     abortionForCoreDump = false;
00125     break;
00126   }
00127   return abortionForCoreDump;
00128 }

Generated on Mon May 27 17:48:13 2013 for Geant4 by  doxygen 1.4.7