CMS 3D CMS Logo

ExceptionHandler.cc
Go to the documentation of this file.
3 
5 
6 #include "G4EventManager.hh"
7 #include "G4TrackingManager.hh"
8 #include "G4Track.hh"
9 #include "globals.hh"
10 #include <sstream>
11 
12 ExceptionHandler::ExceptionHandler(double th) : m_eth(th) {}
13 
15 
16 bool ExceptionHandler::Notify(const char* exceptionOrigin,
17  const char* exceptionCode,
18  G4ExceptionSeverity severity,
19  const char* description) {
20  static const G4String es_banner = "\n-------- EEEE ------- G4Exception-START -------- EEEE -------\n";
21  static const G4String ee_banner = "\n-------- EEEE -------- G4Exception-END --------- EEEE -------\n";
22  static const G4String ws_banner = "\n-------- WWWW ------- G4Exception-START -------- WWWW -------\n";
23  static const G4String we_banner = "\n-------- WWWW -------- G4Exception-END --------- WWWW -------\n";
24 
25  const G4Track* track = G4EventManager::GetEventManager()->GetTrackingManager()->GetTrack();
26  double ekin = m_eth;
27 
28  std::stringstream message;
29  message << "*** G4Exception : " << exceptionCode << "\n"
30  << " issued by : " << exceptionOrigin << "\n"
31  << description;
32 
33  // part of exception happens outside tracking loop
34  if (nullptr != track) {
35  ekin = track->GetKineticEnergy();
36  message << "\n"
37  << "TrackID=" << track->GetTrackID() << " ParentID=" << track->GetParentID() << " "
38  << track->GetParticleDefinition()->GetParticleName() << "; Ekin(MeV)=" << ekin / CLHEP::MeV
39  << "; time(ns)=" << track->GetGlobalTime() / CLHEP::ns << "; status=" << track->GetTrackStatus()
40  << "\n position(mm): " << track->GetPosition() << "; direction: " << track->GetMomentumDirection();
41  const G4VPhysicalVolume* vol = track->GetVolume();
42  if (nullptr != vol) {
43  message << "\n PhysicalVolume: " << vol->GetName() << "; material: " << track->GetMaterial()->GetName();
44  }
45  message << "\n stepNumber=" << track->GetCurrentStepNumber()
46  << "; stepLength(mm)=" << track->GetStepLength() / CLHEP::mm << "; weight=" << track->GetWeight();
47  const G4VProcess* proc = track->GetCreatorProcess();
48  if (nullptr != proc) {
49  message << "; creatorProcess: " << proc->GetProcessName() << "; modelID=" << track->GetCreatorModelID();
50  }
51  }
52  message << "\n";
53 
54  G4ExceptionSeverity localSeverity = severity;
55  G4String code = G4String(*exceptionCode);
56  if (ekin < m_eth && code == "GeomNav0003") {
57  localSeverity = JustWarning;
58  }
59 
60  std::stringstream ss;
61  switch (localSeverity) {
62  case FatalException:
63  case FatalErrorInArgument:
64  case RunMustBeAborted:
65  case EventMustBeAborted:
66  ss << es_banner << message.str() << ee_banner;
67  throw SimG4Exception(ss.str());
68  break;
69 
70  case JustWarning:
71  edm::LogWarning("SimG4CoreApplication")
72  << ws_banner << message.str() << "*** This is just a warning message. ***" << we_banner;
73  break;
74  }
75  return false;
76 }
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11724
MessageLogger.h
ExceptionHandler::ExceptionHandler
ExceptionHandler(double th)
Definition: ExceptionHandler.cc:12
ExceptionHandler::m_eth
double m_eth
Definition: ExceptionHandler.h:36
edmLumisInFiles.description
description
Definition: edmLumisInFiles.py:11
SimG4Exception
Definition: SimG4Exception.h:13
MeV
const double MeV
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
ExceptionHandler::~ExceptionHandler
~ExceptionHandler() override
Definition: ExceptionHandler.cc:14
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
SimG4Exception.h
ValidateTausOnZEEFastSim_cff.proc
proc
Definition: ValidateTausOnZEEFastSim_cff.py:6
ExceptionHandler.h
ErrorSummaryFilter_cfi.severity
severity
Definition: ErrorSummaryFilter_cfi.py:5
ExceptionHandler::Notify
bool Notify(const char *exceptionOrigin, const char *exceptionCode, G4ExceptionSeverity severity, const char *description) override
Definition: ExceptionHandler.cc:16