ATLAS Offline Software
TGC_HitsTruthRelink.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TGC_HitsTruthRelink.h"
6 
7 
8 TGC_HitsTruthRelink::TGC_HitsTruthRelink(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 TGC_HitsTruthRelink::execute(const EventContext &ctx) const
28 {
29  ATH_MSG_DEBUG("Doing truth relinking");
30 
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<TGCSimHitCollection>()));
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 TGCSimHit &hit : *inputCollection) {
51  HepMcParticleLink particleLink = updatedLink(ctx, hit.particleLink(), referenceId);
52  int id = hit.TGCid();
53  double time = hit.globalTime();
54  Amg::Vector3D position = hit.localPosition();
55  Amg::Vector3D direction = hit.localDireCos();
56  double energyDeposit = hit.energyDeposit();
57  double stepLength = hit.stepLength();
58  int pdgID = hit.particleEncoding();
59  double kineticEnergy = hit.kineticEnergy();
60 
61  outputCollection->Emplace(id, time, position, direction, particleLink, energyDeposit, stepLength, pdgID, kineticEnergy);
62  }
63 
64  return StatusCode::SUCCESS;
65 }
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
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
Trk::energyDeposit
@ energyDeposit
Definition: MeasurementType.h:32
HitsTruthRelinkBase::initialize
virtual StatusCode initialize() override
Definition: HitsTruthRelinkBase.cxx:14
PhysDESDM_SmpCaloId.inputCollection
inputCollection
Definition: PhysDESDM_SmpCaloId.py:95
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
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
postInclude.outputCollection
outputCollection
Definition: postInclude.SortInput.py:27
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
TGCSimHit
Definition: TGCSimHit.h:19
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
HitsTruthRelinkBase
Definition: HitsTruthRelinkBase.h:15