Back to home page

Project CMSSW displayed by LXR

 
 

    


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     // soft abort run
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   // dispatch now end of event
0061   EndOfEvent e(anEvent);
0062   m_endOfEventSignal(&e);
0063 
0064   // delete transient objects
0065   m_trackManager->reset();
0066 }
0067 
0068 void EventAction::abortEvent() { m_runInterface->abortEvent(); }