ATLAS Offline Software
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 
13 #include "StoreGate/ReadHandle.h"
14 #include "StoreGate/WriteHandle.h"
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
35 {
36  // Retrieve truth collections
37  SG::ReadHandle<xAOD::TruthEventContainer> importedTruthEvents{m_eventsKey, ctx};
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
44  SG::WriteHandle<xAOD::TruthVertexContainer> writeHandleVtx{m_outVtxKey, ctx};
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 }
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
TRT::Track::event
@ event
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:74
xAOD::TruthVertex_v1::setT
void setT(float value)
Set the vertex time.
DerivationFramework::TruthPVCollectionMaker::addBranches
virtual StatusCode addBranches(const EventContext &ctx) const override final
Definition: TruthPVCollectionMaker.cxx:34
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.
xAOD::TruthVertex_v1::t
float t() const
Vertex time.
WriteHandle.h
Handle class for recording to StoreGate.
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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:117
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework::TruthPVCollectionMaker::initialize
virtual StatusCode initialize() override final
Definition: TruthPVCollectionMaker.cxx:19
xAOD::TruthVertex
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition: TruthVertex.h:15
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
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::m_outVtxKey
SG::WriteHandleKey< xAOD::TruthVertexContainer > m_outVtxKey
Output collection name.
Definition: TruthPVCollectionMaker.h:28
TruthPVCollectionMaker.h
ReadHandle.h
Handle class for reading from StoreGate.
HepMC::status
int status(const T &p)
Definition: MagicNumbers.h:144
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.
DerivationFramework::TruthPVCollectionMaker::m_eventsKey
SG::ReadHandleKey< xAOD::TruthEventContainer > m_eventsKey
Input event collection (navigates to the vertices)
Definition: TruthPVCollectionMaker.h:27