ATLAS Offline Software
xAODPhotonRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include "AthenaKernel/Units.h"
8 
10 
11 namespace JiveXML {
12 
19  xAODPhotonRetriever::xAODPhotonRetriever(const std::string& type,const std::string& name,const IInterface* parent):
21 
22 
24  ATH_CHECK(m_keys.initialize());
25  return StatusCode::SUCCESS;
26  }
27 
28 
33  StatusCode xAODPhotonRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
34 
35  ATH_MSG_DEBUG("In retrieve()");
36 
37  // Loop through the keys and retrieve the corresponding data
38  for (const auto& key : m_keys) {
40  if (cont.isValid()) {
41  DataMap data = getData(&(*cont));
42  if (FormatTool->AddToEvent(dataTypeName(), key.key() + "_xAOD", &data).isFailure()) {
43  ATH_MSG_WARNING("Failed to add collection " << key.key());
44  } else {
45  ATH_MSG_DEBUG(" (" << key.key() << ") retrieved");
46  }
47  } else {
48  ATH_MSG_WARNING("Collection " << key.key() << " not found in SG");
49  }
50  }
51 
52  return StatusCode::SUCCESS;
53  }
54 
55 
61 
62  ATH_MSG_DEBUG("in getData()");
63 
65 
66  DataVect pt; pt.reserve(phCont->size());
67  DataVect phi; phi.reserve(phCont->size());
68  DataVect eta; eta.reserve(phCont->size());
69  DataVect mass; mass.reserve(phCont->size());
70  DataVect energy; energy.reserve(phCont->size());
71 
72  DataVect isEMString; isEMString.reserve(phCont->size());
73  DataVect author; author.reserve(phCont->size());
74  DataVect label; label.reserve(phCont->size());
75 
77  xAOD::PhotonContainer::const_iterator phItrE = phCont->end();
78 
79  int counter = 0;
80 
81  for (; phItr != phItrE; ++phItr) {
82  ATH_MSG_DEBUG(" Photon #" << counter++ << " : eta = " << (*phItr)->eta() << ", phi = "
83  << (*phItr)->phi());
84 
85  std::string photonAuthor = "";
86  std::string photonIsEMString = "none";
87  std::string photonLabel = "";
88 
89  phi.emplace_back(DataType((*phItr)->phi()));
90  eta.emplace_back(DataType((*phItr)->eta()));
91  pt.emplace_back(DataType((*phItr)->pt()/GeV));
92 
93  bool passesTight(false);
94  bool passesMedium(false);
95  bool passesLoose(false);
96  const bool tightSelectionExists = (*phItr)->passSelection(passesTight, "Tight");
97  ATH_MSG_VERBOSE("tight exists " << tightSelectionExists
98  << " and passes? " << passesTight);
99  const bool mediumSelectionExists = (*phItr)->passSelection(passesMedium, "Medium");
100  ATH_MSG_VERBOSE("medium exists " << mediumSelectionExists
101  << " and passes? " << passesMedium);
102  const bool looseSelectionExists = (*phItr)->passSelection(passesLoose, "Loose");
103  ATH_MSG_VERBOSE("loose exists " << looseSelectionExists
104  << " and passes? " << passesLoose);
105 
106  photonAuthor = "author"+DataType( (*phItr)->author() ).toString(); // for odd ones eg FWD
107  photonLabel = photonAuthor;
108  if (( (*phItr)->author()) == 0){ photonAuthor = "unknown"; photonLabel += "_unknown"; }
109  if (( (*phItr)->author()) == 8){ photonAuthor = "forward"; photonLabel += "_forward"; }
110  if (( (*phItr)->author()) == 2){ photonAuthor = "softe"; photonLabel += "_softe"; }
111  if (( (*phItr)->author()) == 1){ photonAuthor = "egamma"; photonLabel += "_egamma"; }
112 
113  if ( passesLoose ){
114  photonLabel += "_Loose";
115  photonIsEMString = "Loose"; // assume that hierarchy is obeyed !
116  }
117  if ( passesMedium ){
118  photonLabel += "_Medium";
119  photonIsEMString = "Medium"; // assume that hierarchy is obeyed !
120  }
121  if ( passesTight ){
122  photonLabel += "_Tight";
123  photonIsEMString = "Tight"; // assume that hierarchy is obeyed !
124  }
125  author.emplace_back( DataType( photonAuthor ) );
126  label.emplace_back( DataType( photonLabel ) );
127  isEMString.emplace_back( DataType( photonIsEMString ) );
128 
129  mass.emplace_back(DataType((*phItr)->m()/GeV));
130  energy.emplace_back( DataType((*phItr)->e()/GeV ) );
131  } // end PhotonIterator
132 
133  // four-vectors
134  DataMap["phi"] = phi;
135  DataMap["eta"] = eta;
136  DataMap["pt"] = pt;
137  DataMap["energy"] = energy;
138  DataMap["mass"] = mass;
139  DataMap["isEMString"] = isEMString;
140  DataMap["label"] = label;
141  DataMap["author"] = author;
142 
143  ATH_MSG_DEBUG(dataTypeName() << " retrieved with " << phi.size() << " entries");
144  return DataMap;
145 
146  }
147 
148 
149 } // JiveXML namespace
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
JiveXML::xAODPhotonRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
For each photon collection retrieve basic parameters.
Definition: xAODPhotonRetriever.cxx:33
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:18
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
JiveXML::xAODPhotonRetriever::getData
const DataMap getData(const xAOD::PhotonContainer *)
Puts the variables into a DataMap.
Definition: xAODPhotonRetriever.cxx:60
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
test_pyathena.pt
pt
Definition: test_pyathena.py:11
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
JiveXML::xAODPhotonRetriever::m_keys
SG::ReadHandleKeyArray< xAOD::PhotonContainer > m_keys
Definition: xAODPhotonRetriever.h:49
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
JiveXML::xAODPhotonRetriever::xAODPhotonRetriever
xAODPhotonRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: xAODPhotonRetriever.cxx:19
JiveXML::xAODPhotonRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type that is generated by this retriever.
Definition: xAODPhotonRetriever.h:42
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
add-xsec-uncert-quadrature-N.label
label
Definition: add-xsec-uncert-quadrature-N.py:104
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:22
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Units.h
Wrapper to avoid constant divisions when using units.
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CaloCondBlobAlgs_fillNoiseFromASCII.author
string author
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:25
JiveXML::xAODPhotonRetriever::initialize
virtual StatusCode initialize()
Definition: xAODPhotonRetriever.cxx:23
xAODPhotonRetriever.h
AthAlgTool
Definition: AthAlgTool.h:26
test_pyathena.counter
counter
Definition: test_pyathena.py:15
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
PhotonContainer.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37