ATLAS Offline Software
TruthPVCollectionMaker.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // TruthPVCollectionMaker.cxx
7 // Makes a small collection of 'primary' vertices, one per event
8 // A bit like a collection of 'reconstructable' vertices
9 // Future option: try to add b-decay vertices, or LLP vertices?
10 
13 #include "StoreGate/ReadHandle.h"
14 #include "StoreGate/WriteHandle.h"
15 
17 
18 // Constructor
20  const std::string& n,
21  const IInterface* p)
22  : base_class(t,n,p)
23  {
24 }
25 
26 // Destructor
28 // Athena initialize
30 {
31  ATH_MSG_VERBOSE("initialize() ...");
32 
33  // Check configuration, print errors, warning, and information for the user
34  ATH_CHECK(m_eventsKey.initialize());
35  ATH_MSG_INFO("Using " << m_eventsKey.fullKey() << " as the source collections for new truth collections");
36  ATH_CHECK(m_outVtxKey.initialize());
37  ATH_MSG_INFO("New truth vertex collection key: " << m_outVtxKey.fullKey() );
38 
39  return StatusCode::SUCCESS;
40 }
41 
42 
43 // Selection and collection creation
45 {
46  const EventContext& ctx{Gaudi::Hive::currentContext()};
47  // Retrieve truth collections
48  SG::ReadHandle<xAOD::TruthEventContainer> importedTruthEvents{m_eventsKey, ctx};
49  if (!importedTruthEvents.isValid()) {
50  ATH_MSG_ERROR("No TruthEvent collection with name " << m_eventsKey.fullKey() << " found in StoreGate!");
51  return StatusCode::FAILURE;
52  }
53 
54  // Create the new vertex containers
55  SG::WriteHandle<xAOD::TruthVertexContainer> writeHandleVtx{m_outVtxKey, ctx};
56  ATH_CHECK(writeHandleVtx.record(std::make_unique<xAOD::TruthVertexContainer>(),
57  std::make_unique<xAOD::TruthVertexAuxContainer>()));
58  xAOD::TruthVertexContainer* newVertexCollection = writeHandleVtx.ptr();
59  ATH_MSG_DEBUG( "Recorded new TruthVertexContainer with key: " << m_outVtxKey.fullKey());
60 
61  // Go through the events, add one vertex for each event
62  for (const auto * event : *importedTruthEvents){
63  // Just in case there is a place-holder
64  if (!event) continue;
65  // Try with the signal process vertex
66  const xAOD::TruthVertex* old_vert(event->signalProcessVertex());
67  // If that's not there, grab the first vertex
68  if (!old_vert && event->nTruthVertices()>0){
69  old_vert = event->truthVertex(0);
70  }
71  if (old_vert){
72  // Hit -- copy it!
73  // Make a new vertex and add it to the container
74  xAOD::TruthVertex* xTruthVertex = new xAOD::TruthVertex();
75  newVertexCollection->push_back( xTruthVertex );
76  // Set properties
77  xTruthVertex->setStatus(HepMC::status(old_vert));
78  xTruthVertex->setUid(HepMC::uniqueID(old_vert));
79  xTruthVertex->setX(old_vert->x());
80  xTruthVertex->setY(old_vert->y());
81  xTruthVertex->setZ(old_vert->z());
82  xTruthVertex->setT(old_vert->t());
83  } else {
84  ATH_MSG_WARNING("No signal vertex or vertices associated to an input event!");
85  }
86  }
87  return StatusCode::SUCCESS;
88 }
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
DerivationFramework::TruthPVCollectionMaker::addBranches
virtual StatusCode addBranches() const
Definition: TruthPVCollectionMaker.cxx:44
xAOD::TruthVertex_v1::setT
void setT(float value)
Set the vertex time.
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAOD::TruthVertex_v1::setY
void setY(float value)
Set the y displacement of the vertex.
xAOD::TruthVertex_v1::y
float y() const
Vertex y displacement.
DerivationFramework::TruthPVCollectionMaker::initialize
StatusCode initialize()
Definition: TruthPVCollectionMaker.cxx:29
xAOD::TruthVertex_v1::t
float t() const
Vertex time.
WriteHandle.h
Handle class for recording to StoreGate.
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
beamspotman.n
n
Definition: beamspotman.py:729
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HepMC::uniqueID
int uniqueID(const T &p)
Definition: MagicNumbers.h:116
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::TruthVertex
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition: TruthVertex.h:15
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
TruthVertexAuxContainer.h
xAOD::TruthVertex_v1
Class describing a truth vertex in the MC record.
Definition: TruthVertex_v1.h:37
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
xAOD::TruthVertex_v1::x
float x() const
Vertex x displacement.
xAOD::TruthVertex_v1::setZ
void setZ(float value)
Set the vertex's longitudinal distance from the origin.
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
xAOD::TruthVertex_v1::setUid
void setUid(int value)
Set the vertex unique ID.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::TruthVertex_v1::z
float z() const
Vertex longitudinal distance along the beam line form the origin.
DerivationFramework::TruthPVCollectionMaker::TruthPVCollectionMaker
TruthPVCollectionMaker(const std::string &t, const std::string &n, const IInterface *p)
Definition: TruthPVCollectionMaker.cxx:19
DerivationFramework::TruthPVCollectionMaker::~TruthPVCollectionMaker
~TruthPVCollectionMaker()
TruthPVCollectionMaker.h
ReadHandle.h
Handle class for reading from StoreGate.
HepMC::status
int status(const T &p)
Definition: MagicNumbers.h:143
xAOD::TruthVertex_v1::setStatus
void setStatus(int value)
Set the vertex status.
HepMCHelpers.h
xAOD::TruthVertex_v1::setX
void setX(float value)
Set the x displacement of the vertex.