18#include "CLHEP/Vector/LorentzVector.h"
40 return StatusCode::SUCCESS;
48 if(!h_inputMcEventCollection.
isValid()) {
49 ATH_MSG_FATAL(
"No input McEventCollection called " << h_inputMcEventCollection.
name() <<
" in " << h_inputMcEventCollection.
store());
50 return StatusCode::FAILURE;
52 auto outputMcEventCollection = std::make_unique<McEventCollection>(*h_inputMcEventCollection);
53 ATH_CHECK( h_outputMcEventCollection.
record ( std::move (outputMcEventCollection)) );
57 if ( !currentGenEvent )
continue;
62 ATH_CHECK(manipulator->manipulate(*currentGenEvent, ctx));
66 return StatusCode::SUCCESS;
74 ATH_MSG_DEBUG(
"No signal_process_vertex found - creating a dummy GenVertex.");
81 if (!ge.vertices().empty()) {
82 ATH_MSG_DEBUG(
"No signal_process_vertex found - using the first GenVertex in the event.");
88 if (!ge.vertices().empty()) {
89 ATH_MSG_ERROR(
"Failed to set signal_process_vertex for GenEvent!!");
90 return StatusCode::FAILURE;
98 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
An algorithm that can be simultaneously executed in multiple threads.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::string store() const
Return the name of the store holding the object we are proxying.
const std::string & name() const
Return the StoreGate ID for the referenced object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Gaudi::Property< bool > m_ISFRun
Temporary property so that we don't change the output in the initial switch to this code.
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
virtual StatusCode initialize() override final
Athena algorithm's interface method initialize().
virtual StatusCode execute(const EventContext &ctx) const override final
Athena algorithm's interface method execute().
ToolHandleArray< IGenEventManipulator > m_genEventManipulators
Event manipulator tools (executed in given order).
StatusCode patchSignalProcessVertex(HepMC::GenEvent &ge) const
Ensure that the GenEvent::signal_process_vertex has been set.
SG::ReadHandleKey< McEventCollection > m_inputMcEventCollection
SG::WriteHandleKey< McEventCollection > m_outputMcEventCollection
BeamEffectsAlg(const std::string &name, ISvcLocator *pSvcLocator)
HepMC3::FourVector FourVector
void set_signal_process_vertex(GenEvent *e, T &v)
ConstGenVertexPtr signal_process_vertex(const GenEvent *e)
GenVertexPtr newGenVertexPtr(const HepMC3::FourVector &pos=HepMC3::FourVector::ZERO_VECTOR(), const int i=0)
HepMC3::GenVertexPtr GenVertexPtr
HepMC3::GenEvent GenEvent