ATLAS Offline Software
PhotonsDirectionTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // PhotonsDirectionTool.cxx, (c) ATLAS Detector software
7 // compute photon et = E(cluster)/cosh(eta of 2nd sampling)
8 // eventually E will be after recalibration
10 // Author: Giovanni Marchiori (giovanni.marchiori@cern.ch)
11 //
12 
16 
17 namespace DerivationFramework {
18 
20  const std::string& n,
21  const IInterface* p)
22  : base_class(t, n, p)
23 {
24 }
25 
28 {
29  ATH_CHECK(m_collName.initialize());
30 
31  m_doEta = !(m_sgEta.key().empty());
32  m_doPhi = !(m_sgPhi.key().empty());
33  m_doEt = !(m_sgEt.key().empty());
34  m_doE = !(m_sgE.key().empty());
35  if (!m_doEta && !m_doPhi && !m_doE && !m_doEt) {
36  ATH_MSG_ERROR("You are requesting the PhotonsDirectionTool but have "
37  "provided no SG names for any of the results");
38  return StatusCode::FAILURE;
39  }
44  return StatusCode::SUCCESS;
45 }
46 
49 {
50  const EventContext& ctx = Gaudi::Hive::currentContext();
51  // Retrieve photon container
53  // define the pointers to vectors which will hold the additional payloads
54  auto recEta = std::make_unique<std::vector<float>>();
55  auto recPhi = std::make_unique<std::vector<float>>();
56  auto recEt = std::make_unique<std::vector<float>>();
57  auto recE = std::make_unique<std::vector<float>>();
58 
59  // Loop over electrons and fill the vectors
60  for (const xAOD::Photon* ph : *photons) {
61  // Prepare variables
62  float eta(0.0), phi(0.0), e(0.0), et(0.0);
63 
64  if (ph->nCaloClusters() > 0) {
65  const xAOD::CaloCluster* gCluster = ph->caloCluster(0);
66  eta = gCluster->etaBE(2);
67  phi = gCluster->phi();
68  e = gCluster->e();
69  et = e / cosh(eta);
70  } else {
72  "Couldn't retrieve photon cluster, will use photon 4-momentum");
73  eta = ph->eta();
74  phi = ph->phi();
75  e = ph->e();
76  et = ph->pt();
77  }
78  recEta->push_back(eta);
79  recPhi->push_back(phi);
80  recEt->push_back(et);
81  recE->push_back(e);
82  } // end of loop over photons
83 
84  // Write payload to StoreGate for downstream client access
85  if (m_doEta) {
87  ATH_CHECK(etas.record(std::move(recEta)));
88  }
89  if (m_doPhi) {
91  ATH_CHECK(phis.record(std::move(recPhi)));
92  }
93  if (m_doEt) {
95  ATH_CHECK(ets.record(std::move(recEt)));
96  }
97  if (m_doE) {
99  ATH_CHECK(es.record(std::move(recE)));
100  }
101  return StatusCode::SUCCESS;
102 }
103 
104 } // end of namespace
xAOD::CaloCluster_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition: CaloCluster_v1.cxx:256
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
et
Extra patterns decribing particle interation process.
DerivationFramework::PhotonsDirectionTool::m_doE
bool m_doE
Definition: PhotonsDirectionTool.h:61
DerivationFramework::PhotonsDirectionTool::m_sgE
SG::WriteHandleKey< std::vector< float > > m_sgE
Definition: PhotonsDirectionTool.h:53
xAOD::et
et
Definition: TrigEMCluster_v1.cxx:25
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
DerivationFramework::PhotonsDirectionTool::m_doEt
bool m_doEt
Definition: PhotonsDirectionTool.h:60
DerivationFramework::PhotonsDirectionTool::m_sgEta
SG::WriteHandleKey< std::vector< float > > m_sgEta
Definition: PhotonsDirectionTool.h:38
DerivationFramework::PhotonsDirectionTool::m_sgEt
SG::WriteHandleKey< std::vector< float > > m_sgEt
Definition: PhotonsDirectionTool.h:48
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
DerivationFramework::PhotonsDirectionTool::addBranches
virtual StatusCode addBranches() const override final
Definition: PhotonsDirectionTool.cxx:48
DerivationFramework::PhotonsDirectionTool::m_collName
SG::ReadHandleKey< xAOD::PhotonContainer > m_collName
Definition: PhotonsDirectionTool.h:33
DerivationFramework::PhotonsDirectionTool::m_doPhi
bool m_doPhi
Definition: PhotonsDirectionTool.h:59
xAOD::CaloCluster_v1::etaBE
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.
Definition: CaloCluster_v1.cxx:628
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
DerivationFramework::PhotonsDirectionTool::m_sgPhi
SG::WriteHandleKey< std::vector< float > > m_sgPhi
Definition: PhotonsDirectionTool.h:43
CaloCluster.h
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_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DerivationFramework::PhotonsDirectionTool::m_doEta
bool m_doEta
Definition: PhotonsDirectionTool.h:58
PhotonsDirectionTool.h
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
DerivationFramework::PhotonsDirectionTool::PhotonsDirectionTool
PhotonsDirectionTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: PhotonsDirectionTool.cxx:19
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
xAOD::Photon_v1
Definition: Photon_v1.h:37
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DerivationFramework::PhotonsDirectionTool::initialize
virtual StatusCode initialize() override final
Definition: PhotonsDirectionTool.cxx:27
PhotonContainer.h
xAOD::CaloCluster_v1::e
virtual double e() const
The total energy of the particle.
Definition: CaloCluster_v1.cxx:265
EgEfficiencyCorr_testFixedInput.etas
list etas
Definition: EgEfficiencyCorr_testFixedInput.py:9