diff --git a/Simulation/G4Atlas/G4AtlasAlg/G4AtlasAlg/G4AtlasActionInitialization.h b/Simulation/G4Atlas/G4AtlasAlg/G4AtlasAlg/G4AtlasActionInitialization.h new file mode 100644 index 0000000000000000000000000000000000000000..490a11962a7a95a42011e4f498288f5d35b6db2d --- /dev/null +++ b/Simulation/G4Atlas/G4AtlasAlg/G4AtlasAlg/G4AtlasActionInitialization.h @@ -0,0 +1,27 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef G4ATLASALG_G4ATLASACTIONINITIALIZATION_H +#define G4ATLASALG_G4ATLASACTIONINITIALIZATION_H 1 + +#include "G4VUserActionInitialization.hh" +#include "G4AtlasInterfaces/IUserActionSvc.h" + +/// Action initialization class. +/// + +class G4AtlasActionInitialization : public G4VUserActionInitialization +{ +public: + G4AtlasActionInitialization(G4UA::IUserActionSvc* userActionSvc); + virtual ~G4AtlasActionInitialization(); + + virtual void BuildForMaster() const; + virtual void Build() const; + +private: + G4UA::IUserActionSvc* m_userActionSvc{}; +}; + +#endif //G4ATLASALG_G4ATLASACTIONINITIALIZATION_H diff --git a/Simulation/G4Atlas/G4AtlasAlg/src/G4AtlasActionInitialization.cxx b/Simulation/G4Atlas/G4AtlasAlg/src/G4AtlasActionInitialization.cxx new file mode 100644 index 0000000000000000000000000000000000000000..cf1a6dd3a56ee9d4e2bfb5a2fc096929a432e8b7 --- /dev/null +++ b/Simulation/G4Atlas/G4AtlasAlg/src/G4AtlasActionInitialization.cxx @@ -0,0 +1,45 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "G4AtlasAlg/G4AtlasActionInitialization.h" +#if G4VERSION_NUMBER >= 1070 +#include "G4Exception.hh" +#else +#include "globals.hh" +#endif + +G4AtlasActionInitialization::G4AtlasActionInitialization(G4UA::IUserActionSvc* userActionSvc) + : G4VUserActionInitialization() + , m_userActionSvc(userActionSvc) +{} + + +G4AtlasActionInitialization::~G4AtlasActionInitialization() +{} + + +void G4AtlasActionInitialization::BuildForMaster() const +{ + G4VUserActionInitialization::BuildForMaster(); + // TODO Ideally separate "master" versions of the G4RunActions would + // be created, but this will require a larger redesign. See + // https://gitlab.cern.ch/geant4/geant4/-/blob/master/examples/basic/B4/B4a/src/B4aActionInitialization.cc#L52 +} + + +void G4AtlasActionInitialization::Build() const +{ + if (!m_userActionSvc) { + G4ExceptionDescription description; + description << "Build: UserActionSvc is NULL."; + G4Exception("G4AtlasActionInitialization", "NoUserActionSvc", FatalException, description); + abort(); // to keep Coverity happy + } + if (m_userActionSvc->initializeActions().isFailure()) { //Consider renaming to buildActions()? + G4ExceptionDescription description; + description << "Build: Failed to create UserActions."; + G4Exception("G4AtlasActionInitialization", "CouldNotBuildActions", FatalException, description); + abort(); // to keep Coverity happy + } +}