ATLAS Offline Software
SiliconHitsTruthRelink.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 
7 
8 SiliconHitsTruthRelink::SiliconHitsTruthRelink(const std::string &name, ISvcLocator *pSvcLocator)
9  : HitsTruthRelinkBase(name, pSvcLocator)
10 {
11 }
12 
13 
15 {
17 
18  // Check and initialize keys
19  ATH_CHECK( m_inputHitsKey.initialize() );
20  ATH_MSG_VERBOSE("Initialized ReadHandleKey: " << m_inputHitsKey);
21  ATH_CHECK( m_outputHitsKey.initialize() );
22  ATH_MSG_VERBOSE("Initialized WriteHandleKey: " << m_outputHitsKey);
23  return StatusCode::SUCCESS;
24 }
25 
26 
27 StatusCode SiliconHitsTruthRelink::execute(const EventContext &ctx) const
28 {
29  ATH_MSG_DEBUG("Doing truth relinking");
30 
31  SG::ReadHandle<SiHitCollection> inputCollection(m_inputHitsKey, ctx);
32  if (!inputCollection.isValid()) {
33  ATH_MSG_ERROR("Could not get input hits collection " << inputCollection.name() << " from store " << inputCollection.store());
34  return StatusCode::FAILURE;
35  }
36  ATH_MSG_DEBUG("Found input hits collection " << inputCollection.name() << " in store " << inputCollection.store());
37 
39  ATH_CHECK(outputCollection.record(std::make_unique<SiHitCollection>()));
40  if (!outputCollection.isValid()) {
41  ATH_MSG_ERROR("Could not record output hits collection " << outputCollection.name() << " to store " << outputCollection.store());
42  return StatusCode::FAILURE;
43  }
44  ATH_MSG_DEBUG("Recorded output hits collection " << outputCollection.name() << " in store " << outputCollection.store());
45 
46  // Do relinking
47  int referenceId{};
48  ATH_CHECK(getReferenceId(ctx, &referenceId));
49 
50  for (const SiHit &hit : *inputCollection) {
51  HepMcParticleLink particleLink = updatedLink(ctx, hit.particleLink(), referenceId);
52  HepGeom::Point3D<double> lP1 = hit.localStartPosition();
53  HepGeom::Point3D<double> lP2 = hit.localEndPosition();
54  double energyLoss = hit.energyLoss();
55  double meanTime = hit.meanTime();
56  unsigned int id = hit.identify();
57  outputCollection->Emplace(lP1, lP2, energyLoss, meanTime, particleLink, id);
58  }
59 
60  return StatusCode::SUCCESS;
61 }
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
SG::VarHandleBase::name
const std::string & name() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:75
HitsTruthRelinkBase::getReferenceId
StatusCode getReferenceId(const EventContext &ctx, int *id) const
Definition: HitsTruthRelinkBase.cxx:64
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
HitsTruthRelinkBase::initialize
virtual StatusCode initialize() override
Definition: HitsTruthRelinkBase.cxx:14
SiHit
Definition: SiHit.h:19
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
SG::VarHandleBase::store
std::string store() const
Return the name of the store holding the object we are proxying.
Definition: StoreGate/src/VarHandleBase.cxx:376
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
HitsTruthRelinkBase::updatedLink
virtual HepMcParticleLink updatedLink(const EventContext &ctx, const HepMcParticleLink &oldLink, int referenceId, int pdgID=0) const
Definition: HitsTruthRelinkBase.cxx:107
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
postInclude.outputCollection
outputCollection
Definition: postInclude.SortInput.py:27
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
HitsTruthRelinkBase
Definition: HitsTruthRelinkBase.h:15