ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
BeamEffects
src
BeamEffectsAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// class header
6
#include "
BeamEffectsAlg.h
"
7
8
// Athena headers
9
#include "
GeneratorObjects/McEventCollection.h
"
10
#include "
StoreGate/ReadHandle.h
"
11
#include "
StoreGate/WriteHandle.h
"
12
13
// HepMC includes
14
#include "
AtlasHepMC/GenEvent.h
"
15
#include "
AtlasHepMC/GenVertex.h
"
16
17
// CLHEP includes
18
#include "CLHEP/Vector/LorentzVector.h"
19
20
namespace
Simulation
21
{
22
23
BeamEffectsAlg::BeamEffectsAlg
(
const
std::string& name, ISvcLocator* pSvcLocator )
24
:
AthReentrantAlgorithm
( name, pSvcLocator )
25
{
26
}
27
29
StatusCode
BeamEffectsAlg::initialize
()
30
{
31
// the Tools for event manipulation
32
if
(!
m_genEventManipulators
.empty()) {
33
ATH_CHECK
(
m_genEventManipulators
.retrieve() );
34
}
35
// This will check that the properties were initialized
36
// properly by job configuration.
37
ATH_CHECK
(
m_inputMcEventCollection
.initialize() );
38
ATH_CHECK
(
m_outputMcEventCollection
.initialize() );
39
ATH_CHECK
(
m_eventInfoKey
.initialize() );
40
return
StatusCode::SUCCESS;
41
}
42
43
StatusCode
BeamEffectsAlg::execute
(
const
EventContext& ctx)
const
44
{
45
// Construct handles from the keys.
46
SG::ReadHandle<McEventCollection>
h_inputMcEventCollection (
m_inputMcEventCollection
, ctx);
47
SG::WriteHandle<McEventCollection>
h_outputMcEventCollection (
m_outputMcEventCollection
, ctx);
48
if
(!h_inputMcEventCollection.
isValid
()) {
49
ATH_MSG_FATAL
(
"No input McEventCollection called "
<< h_inputMcEventCollection.
name
() <<
" in "
<< h_inputMcEventCollection.
store
());
50
return
StatusCode::FAILURE;
51
}
52
auto
outputMcEventCollection = std::make_unique<McEventCollection>(*h_inputMcEventCollection);
53
ATH_CHECK
( h_outputMcEventCollection.
record
( std::move (outputMcEventCollection)) );
54
// loop over the events in the mc collection
55
for
(
HepMC::GenEvent
* currentGenEvent : *h_outputMcEventCollection) {
56
// skip empty events
57
if
( !currentGenEvent )
continue
;
58
ATH_CHECK
(this->
patchSignalProcessVertex
(*currentGenEvent));
59
// manipulate the GenEvent if needed : validating, filtering, smearing, dispersion, ...
60
for
(
const
auto
& manipulator :
m_genEventManipulators
) {
61
// call manipulate(..) in the current GenEventManipulator
62
ATH_CHECK
(manipulator->manipulate(*currentGenEvent, ctx));
63
}
64
}
65
66
return
StatusCode::SUCCESS;
67
}
68
69
StatusCode
BeamEffectsAlg::patchSignalProcessVertex
(
HepMC::GenEvent
& ge)
const
70
{
71
//Ensure that we have a valid signal_process_vertex
72
if
( !
HepMC::signal_process_vertex
(&ge) ) {
73
if
(
m_ISFRun
) {
74
ATH_MSG_DEBUG
(
"No signal_process_vertex found - creating a dummy GenVertex."
);
75
HepMC::FourVector
signalPos( 0.0, 0.0, 0.0, 0.0);
76
HepMC::GenVertexPtr
signalVertex =
HepMC::newGenVertexPtr
( signalPos );
77
// ge will now take ownership of the signal process vertex
78
HepMC::set_signal_process_vertex
(&ge, signalVertex );
79
}
80
else
{
81
if
(!ge.vertices().empty()) {
82
ATH_MSG_DEBUG
(
"No signal_process_vertex found - using the first GenVertex in the event."
);
83
HepMC::GenVertexPtr
signalVertex = ge.vertices().front();
84
HepMC::set_signal_process_vertex
(&ge,signalVertex );
85
}
86
}
87
if
( !
HepMC::signal_process_vertex
(&ge) ) {
// Insanity check
88
if
(!ge.vertices().empty()) {
89
ATH_MSG_ERROR
(
"Failed to set signal_process_vertex for GenEvent!!"
);
90
return
StatusCode::FAILURE;
91
}
92
ATH_MSG_WARNING
(
"No signal_process_vertex found. Empty GenEvent!"
);
93
}
94
}
95
else
{
96
ATH_MSG_DEBUG
(
"signal_process_vertex set by Generator."
);
97
}
98
return
StatusCode::SUCCESS;
99
}
100
101
}
// namespace Simulation
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition
AthMsgStreamMacros.h:34
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
BeamEffectsAlg.h
GenEvent.h
GenVertex.h
McEventCollection.h
ReadHandle.h
Handle class for reading from StoreGate.
WriteHandle.h
Handle class for recording to StoreGate.
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::VarHandleBase::store
std::string store() const
Return the name of the store holding the object we are proxying.
Definition
StoreGate/src/VarHandleBase.cxx:382
SG::VarHandleBase::name
const std::string & name() const
Return the StoreGate ID for the referenced object.
Definition
AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:75
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Simulation::BeamEffectsAlg::m_ISFRun
Gaudi::Property< bool > m_ISFRun
Temporary property so that we don't change the output in the initial switch to this code.
Definition
BeamEffectsAlg.h:75
Simulation::BeamEffectsAlg::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition
BeamEffectsAlg.h:69
Simulation::BeamEffectsAlg::initialize
virtual StatusCode initialize() override final
Athena algorithm's interface method initialize().
Definition
BeamEffectsAlg.cxx:29
Simulation::BeamEffectsAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Athena algorithm's interface method execute().
Definition
BeamEffectsAlg.cxx:43
Simulation::BeamEffectsAlg::m_genEventManipulators
ToolHandleArray< IGenEventManipulator > m_genEventManipulators
Event manipulator tools (executed in given order).
Definition
BeamEffectsAlg.h:72
Simulation::BeamEffectsAlg::patchSignalProcessVertex
StatusCode patchSignalProcessVertex(HepMC::GenEvent &ge) const
Ensure that the GenEvent::signal_process_vertex has been set.
Definition
BeamEffectsAlg.cxx:69
Simulation::BeamEffectsAlg::m_inputMcEventCollection
SG::ReadHandleKey< McEventCollection > m_inputMcEventCollection
Definition
BeamEffectsAlg.h:65
Simulation::BeamEffectsAlg::m_outputMcEventCollection
SG::WriteHandleKey< McEventCollection > m_outputMcEventCollection
Definition
BeamEffectsAlg.h:66
Simulation::BeamEffectsAlg::BeamEffectsAlg
BeamEffectsAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition
BeamEffectsAlg.cxx:23
HepMC::FourVector
HepMC3::FourVector FourVector
Definition
SimpleVector.h:11
HepMC::set_signal_process_vertex
void set_signal_process_vertex(GenEvent *e, T &v)
Definition
GenEvent.h:591
HepMC::signal_process_vertex
ConstGenVertexPtr signal_process_vertex(const GenEvent *e)
Definition
GenEvent.h:597
HepMC::newGenVertexPtr
GenVertexPtr newGenVertexPtr(const HepMC3::FourVector &pos=HepMC3::FourVector::ZERO_VECTOR(), const int i=0)
Definition
GenVertex.h:25
HepMC::GenVertexPtr
HepMC3::GenVertexPtr GenVertexPtr
Definition
GenVertex.h:23
HepMC::GenEvent
HepMC3::GenEvent GenEvent
Definition
GenEvent.h:39
Simulation
Definition
BeamEffectsAlg.cxx:21
Generated on
for ATLAS Offline Software by
1.17.0