LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
pyG4ExceptionHandler.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // $Id: pyG4ExceptionHandler.cc 66892 2013-01-17 10:57:59Z gunter $
27 // ====================================================================
28 // pyG4ExceptionHandler.cc
29 //
30 // 2005 Q
31 // ====================================================================
32 #include <boost/python.hpp>
33 #include "G4VExceptionHandler.hh"
34 #include "G4StateManager.hh"
35 #include <stdlib.h>
36 
37 using namespace boost::python;
38 
39 // ====================================================================
40 // Python Exception Handler
41 // ====================================================================
42 class PyG4ExceptionHandler : public G4VExceptionHandler {
43 public:
44  PyG4ExceptionHandler():G4VExceptionHandler() {
45  G4StateManager* sm= G4StateManager::GetStateManager();
46  sm-> SetExceptionHandler(this);
47  }
49 
50  G4bool Notify(const char* originOfException,
51  const char* exceptionCode,
52  G4ExceptionSeverity severity,
53  const char* description) {
54 
55  std::ostringstream message;
56  message << "*** G4Exception : " << exceptionCode << G4endl
57  << " issued by : " << originOfException << G4endl
58  << description << G4endl;
59 
60  switch(severity) {
61  case FatalException:
62  PyErr_SetString(PyExc_AssertionError,
63  "*** Fatal Exception ***");
64  PyErr_Print();
65  G4cerr << message.str() << G4endl;
66  break;
67 
68  case FatalErrorInArgument:
69  PyErr_SetString(PyExc_ValueError,
70  "*** Fatal Error In Argument ***");
71  PyErr_Print();
72  G4cerr << message.str() << G4endl;
73  break;
74 
75  case RunMustBeAborted:
76  PyErr_SetString(PyExc_RuntimeError,
77  "*** Run Must Be Aborted ***");
78  PyErr_Print();
79  G4cerr << message.str() << G4endl;
80  break;
81 
82  case EventMustBeAborted:
83  PyErr_SetString(PyExc_RuntimeError,
84  "*** Event Must Be Aborted ***");
85  PyErr_Print();
86  G4cerr << message.str() << G4endl;
87  break;
88 
89  default:
90  PyErr_Warn(PyExc_RuntimeWarning,
91  "*** This is just a warning message. ***");
92  G4cerr << message.str() << G4endl;
93  break;
94  }
95 
96  // anyway, no abort.
97  return false;
98  }
99 };
100 
101 // ====================================================================
102 // module definition
103 // ====================================================================
105 {
106  class_<PyG4ExceptionHandler, boost::noncopyable>
107  ("G4ExceptionHandler", "exception handler")
108  ;
109 }
G4bool Notify(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
void export_G4ExceptionHandler()