ATLAS Offline Software
Loading...
Searching...
No Matches
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
8
9using Athena::Units::GeV;
10
11namespace JiveXML {
12
19 xAODPhotonRetriever::xAODPhotonRetriever(const std::string& type,const std::string& name,const IInterface* parent):
20 AthAlgTool(type,name,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
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
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
Wrapper to avoid constant divisions when using units.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
const DataMap getData(const xAOD::PhotonContainer *)
Puts the variables into a DataMap.
virtual std::string dataTypeName() const
Return the name of the data type that is generated by this retriever.
SG::ReadHandleKeyArray< xAOD::PhotonContainer > m_keys
xAODPhotonRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
For each photon collection retrieve basic parameters.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::string label(const std::string &format, int i)
Definition label.h:19
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
std::map< std::string, DataVect > DataMap
Definition DataType.h:59
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition DataType.h:58
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".