ATLAS Offline Software
Loading...
Searching...
No Matches
TruthPVCollectionMaker.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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
15
17
18// Athena initialize
20{
21 ATH_MSG_VERBOSE("initialize() ...");
22
23 // Check configuration, print errors, warning, and information for the user
24 ATH_CHECK(m_eventsKey.initialize());
25 ATH_MSG_INFO("Using " << m_eventsKey.fullKey() << " as the source collections for new truth collections");
26 ATH_CHECK(m_outVtxKey.initialize());
27 ATH_MSG_INFO("New truth vertex collection key: " << m_outVtxKey.fullKey() );
28
29 return StatusCode::SUCCESS;
30}
31
32
33// Selection and collection creation
34StatusCode DerivationFramework::TruthPVCollectionMaker::addBranches(const EventContext& ctx) const
35{
36 // Retrieve truth collections
38 if (!importedTruthEvents.isValid()) {
39 ATH_MSG_ERROR("No TruthEvent collection with name " << m_eventsKey.fullKey() << " found in StoreGate!");
40 return StatusCode::FAILURE;
41 }
42
43 // Create the new vertex containers
45 ATH_CHECK(writeHandleVtx.record(std::make_unique<xAOD::TruthVertexContainer>(),
46 std::make_unique<xAOD::TruthVertexAuxContainer>()));
47 xAOD::TruthVertexContainer* newVertexCollection = writeHandleVtx.ptr();
48 ATH_MSG_DEBUG( "Recorded new TruthVertexContainer with key: " << m_outVtxKey.fullKey());
49
50 // Go through the events, add one vertex for each event
51 for (const auto * event : *importedTruthEvents){
52 // Just in case there is a place-holder
53 if (!event) continue;
54 // Try with the signal process vertex
55 const xAOD::TruthVertex* old_vert(event->signalProcessVertex());
56 // If that's not there, grab the first vertex
57 if (!old_vert && event->nTruthVertices()>0){
58 old_vert = event->truthVertex(0);
59 }
60 if (old_vert){
61 // Hit -- copy it!
62 // Make a new vertex and add it to the container
63 xAOD::TruthVertex* xTruthVertex = new xAOD::TruthVertex();
64 newVertexCollection->push_back( xTruthVertex );
65 // Set properties
66 xTruthVertex->setStatus(HepMC::status(old_vert));
67 xTruthVertex->setUid(HepMC::uniqueID(old_vert));
68 xTruthVertex->setX(old_vert->x());
69 xTruthVertex->setY(old_vert->y());
70 xTruthVertex->setZ(old_vert->z());
71 xTruthVertex->setT(old_vert->t());
72 } else {
73 ATH_MSG_WARNING("No signal vertex or vertices associated to an input event!");
74 }
75 }
76 return StatusCode::SUCCESS;
77}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
ATLAS-specific HepMC functions.
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
virtual StatusCode addBranches(const EventContext &ctx) const override final
SG::WriteHandleKey< xAOD::TruthVertexContainer > m_outVtxKey
Output collection name.
virtual StatusCode initialize() override final
SG::ReadHandleKey< xAOD::TruthEventContainer > m_eventsKey
Input event collection (navigates to the vertices)
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
float z() const
Vertex longitudinal distance along the beam line form the origin.
void setStatus(int value)
Set the vertex status.
void setZ(float value)
Set the vertex's longitudinal distance from the origin.
float y() const
Vertex y displacement.
void setUid(int value)
Set the vertex unique ID.
float t() const
Vertex time.
void setT(float value)
Set the vertex time.
float x() const
Vertex x displacement.
void setX(float value)
Set the x displacement of the vertex.
void setY(float value)
Set the y displacement of the vertex.
int uniqueID(const T &p)
int status(const T &p)
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition TruthVertex.h:15
TruthVertexContainer_v1 TruthVertexContainer
Declare the latest version of the truth vertex container.