6 #include "G4EventManager.hh"
7 #include "G4TrackingManager.hh"
17 const char* exceptionCode,
18 G4ExceptionSeverity severity,
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";
25 G4Track*
track = G4EventManager::GetEventManager()->GetTrackingManager()->GetTrack();
28 std::stringstream message;
29 message <<
"*** G4Exception : " << exceptionCode <<
"\n"
30 <<
" issued by : " << exceptionOrigin <<
"\n"
34 if (
nullptr != track) {
35 ekin = track->GetKineticEnergy();
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();
43 message <<
"\n PhysicalVolume: " << vol->GetName() <<
";";
44 const G4LogicalVolume* lv = vol->GetLogicalVolume();
46 message <<
" material: " << lv->GetMaterial()->GetName();
49 message <<
"\n stepNumber=" << track->GetCurrentStepNumber()
50 <<
"; stepLength(mm)=" << track->GetStepLength() / CLHEP::mm <<
"; weight=" << track->GetWeight();
51 const G4VProcess*
proc = track->GetCreatorProcess();
52 if (
nullptr != proc) {
53 message <<
"; creatorProcess: " << proc->GetProcessName() <<
"; modelID=" << track->GetCreatorModelID();
58 G4ExceptionSeverity localSeverity = severity;
59 std::stringstream mescode;
60 mescode << exceptionCode <<
"\n";
65 if (ekin <
m_eth && code ==
"GeomNav0003") {
66 localSeverity = JustWarning;
67 track->SetTrackStatus(fStopAndKill);
71 switch (localSeverity) {
73 case FatalErrorInArgument:
74 case RunMustBeAborted:
75 case EventMustBeAborted:
76 edm::LogWarning(
"SimG4CoreApplication") << es_banner << message.str() << ee_banner;
83 << ws_banner << message.str() <<
"*** This is just a warning message. ***" << we_banner;
~ExceptionHandler() override
bool Notify(const char *exceptionOrigin, const char *exceptionCode, G4ExceptionSeverity severity, const char *description) override
ExceptionHandler(double th, bool tr)
Log< level::Warning, false > LogWarning