File indexing completed on 2023-10-25 10:04:20
0001 #include "SimG4Core/Application/interface/EventAction.h"
0002 #include "SimG4Core/Application/interface/SimRunInterface.h"
0003 #include "SimG4Core/Notification/interface/TmpSimEvent.h"
0004 #include "SimG4Core/Notification/interface/TmpSimVertex.h"
0005 #include "SimG4Core/Notification/interface/TmpSimTrack.h"
0006 #include "SimG4Core/Notification/interface/BeginOfEvent.h"
0007 #include "SimG4Core/Notification/interface/EndOfEvent.h"
0008 #include "SimG4Core/Notification/interface/CMSSteppingVerbose.h"
0009
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011
0012 #include "Randomize.hh"
0013
0014 EventAction::EventAction(const edm::ParameterSet& p,
0015 SimRunInterface* rm,
0016 SimTrackManager* iManager,
0017 CMSSteppingVerbose* sv)
0018 : m_runInterface(rm),
0019 m_trackManager(iManager),
0020 m_SteppingVerbose(sv),
0021 m_stopFile(p.getParameter<std::string>("StopFile")),
0022 m_printRandom(p.getParameter<bool>("PrintRandomSeed")),
0023 m_debug(p.getUntrackedParameter<bool>("debug", false)) {}
0024
0025 void EventAction::BeginOfEventAction(const G4Event* anEvent) {
0026 m_trackManager->reset();
0027
0028 BeginOfEvent e(anEvent);
0029 m_beginOfEventSignal(&e);
0030
0031 if (m_printRandom) {
0032 edm::LogVerbatim("SimG4CoreApplication")
0033 << "BeginOfEvent " << anEvent->GetEventID() << " Random number: " << G4UniformRand();
0034 }
0035
0036 if (nullptr != m_SteppingVerbose) {
0037 m_SteppingVerbose->beginOfEvent(anEvent);
0038 }
0039 }
0040
0041 void EventAction::EndOfEventAction(const G4Event* anEvent) {
0042 if (m_printRandom) {
0043 edm::LogVerbatim("SimG4CoreApplication")
0044 << " EndOfEvent " << anEvent->GetEventID() << " Random number: " << G4UniformRand();
0045 }
0046 if (!m_stopFile.empty() && std::ifstream(m_stopFile.c_str())) {
0047 edm::LogWarning("SimG4CoreApplication")
0048 << "EndOfEventAction: termination signal received at event " << anEvent->GetEventID();
0049
0050 m_runInterface->abortRun(true);
0051 }
0052 if (anEvent->GetNumberOfPrimaryVertex() == 0) {
0053 edm::LogWarning("SimG4CoreApplication") << "EndOfEventAction: event " << anEvent->GetEventID()
0054 << " must have failed (no G4PrimaryVertices found) and will be skipped ";
0055 return;
0056 }
0057
0058 m_trackManager->storeTracks();
0059
0060
0061 EndOfEvent e(anEvent);
0062 m_endOfEventSignal(&e);
0063
0064
0065 m_trackManager->reset();
0066 }
0067
0068 void EventAction::abortEvent() { m_runInterface->abortEvent(); }