ATLAS Offline Software
xAODPhotonRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
9 #include "AthenaKernel/Units.h"
10 using Athena::Units::GeV;
11 
12 namespace JiveXML {
13 
28  xAODPhotonRetriever::xAODPhotonRetriever(const std::string& type,const std::string& name,const IInterface* parent):
29  AthAlgTool(type,name,parent), m_typeName("Photon"),
30  m_sgKey("Photons") // is xAOD name
31 
32  {
33  //Only declare the interface
34  declareInterface<IDataRetriever>(this);
35 
36  declareProperty("StoreGateKey", m_sgKey,
37  "Collection to be first in output, shown in Atlantis without switching");
38  declareProperty("OtherCollections" ,m_otherKeys,
39  "Other collections to be retrieved. If list left empty, all available retrieved");
40  declareProperty("DoWriteHLT" , m_doWriteHLT = false, "Wether to write HLTAutoKey objects");
41  }
42 
47  StatusCode xAODPhotonRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
48 
49  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "in retrieveAll()" << endmsg;
50 
52  const xAOD::PhotonContainer* photons;
53 
54  //obtain the default collection first
55  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve " << dataTypeName() << " (" << m_sgKey << ")" << endmsg;
56  StatusCode sc = evtStore()->retrieve(photons, m_sgKey);
57  if (sc.isFailure() ) {
58  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << m_sgKey << " not found in SG " << endmsg;
59  }else{
60  DataMap data = getData(photons);
61  if ( FormatTool->AddToEvent(dataTypeName(), m_sgKey+"_xAOD", &data).isFailure()){ //suffix can be removed later
62  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << m_sgKey << " not found in SG " << endmsg;
63  }else{
64  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << m_sgKey << ") Photon retrieved" << endmsg;
65  }
66  }
67 
68  if ( m_otherKeys.empty() ) {
69  //obtain all other collections from StoreGate
70  if (( evtStore()->retrieve(iterator, end)).isFailure()){
71  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) <<
72  "Unable to retrieve iterator for xAOD Muon collection" << endmsg;
73 // return false;
74  }
75 
76  for (; iterator!=end; ++iterator) {
77  if (iterator.key()!=m_sgKey) {
78  if ((iterator.key().find("HLT",0) != std::string::npos) && (!m_doWriteHLT)){
79  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Ignoring HLT-AutoKey collection " << iterator.key() << endmsg;
80  continue; }
81  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve all. Current collection: " << dataTypeName() << " (" << iterator.key() << ")" << endmsg;
83  if ( FormatTool->AddToEvent(dataTypeName(), iterator.key()+"_xAOD", &data).isFailure()){
84  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << iterator.key() << " not found in SG " << endmsg;
85  }else{
86  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << iterator.key() << ") xAOD Photon retrieved" << endmsg;
87  }
88  }
89  }
90  }else {
91  //obtain all collections with the given keys
92  std::vector<std::string>::const_iterator keyIter;
93  for ( keyIter=m_otherKeys.begin(); keyIter!=m_otherKeys.end(); ++keyIter ){
94  StatusCode sc = evtStore()->retrieve( photons, (*keyIter) );
95  if (!sc.isFailure()) {
96  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trying to retrieve selected " << dataTypeName() << " (" << (*keyIter) << ")" << endmsg;
97  DataMap data = getData(photons);
98  if ( FormatTool->AddToEvent(dataTypeName(), (*keyIter), &data).isFailure()){
99  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Collection " << (*keyIter) << " not found in SG " << endmsg;
100  }else{
101  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << " (" << (*keyIter) << ") retrieved" << endmsg;
102  }
103  }
104  }
105  }
106 
107  //All collections retrieved okay
108  return StatusCode::SUCCESS;
109  }
110 
111 
117 
118  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "in getData()" << endmsg;
119 
121 
122  DataVect pt; pt.reserve(phCont->size());
123  DataVect phi; phi.reserve(phCont->size());
124  DataVect eta; eta.reserve(phCont->size());
125  DataVect mass; mass.reserve(phCont->size());
126  DataVect energy; energy.reserve(phCont->size());
127 
128  DataVect isEMString; isEMString.reserve(phCont->size());
129  DataVect author; author.reserve(phCont->size());
130  DataVect label; label.reserve(phCont->size());
131 
133  xAOD::PhotonContainer::const_iterator phItrE = phCont->end();
134 
135  int counter = 0;
136 
137  for (; phItr != phItrE; ++phItr) {
138 
139  if (msgLvl(MSG::DEBUG)) {
140  msg(MSG::DEBUG) << " Photon #" << counter++ << " : eta = " << (*phItr)->eta() << ", phi = "
141  << (*phItr)->phi() << endmsg;
142  }
143 
144  std::string photonAuthor = "";
145  std::string photonIsEMString = "none";
146  std::string photonLabel = "";
147 
148  phi.push_back(DataType((*phItr)->phi()));
149  eta.push_back(DataType((*phItr)->eta()));
150  pt.push_back(DataType((*phItr)->pt()/GeV));
151 
152  bool passesTight(false);
153  bool passesMedium(false);
154  bool passesLoose(false);
155  const bool tightSelectionExists = (*phItr)->passSelection(passesTight, "Tight");
156  msg(MSG::VERBOSE) << "tight exists " << tightSelectionExists
157  << " and passes? " << passesTight << endmsg;
158  const bool mediumSelectionExists = (*phItr)->passSelection(passesMedium, "Medium");
159  msg(MSG::VERBOSE) << "medium exists " << mediumSelectionExists
160  << " and passes? " << passesMedium << endmsg;
161  const bool looseSelectionExists = (*phItr)->passSelection(passesLoose, "Loose");
162  msg(MSG::VERBOSE) << "loose exists " << looseSelectionExists
163  << " and passes? " << passesLoose << endmsg;
164 
165  photonAuthor = "author"+DataType( (*phItr)->author() ).toString(); // for odd ones eg FWD
166  photonLabel = photonAuthor;
167  if (( (*phItr)->author()) == 0){ photonAuthor = "unknown"; photonLabel += "_unknown"; }
168  if (( (*phItr)->author()) == 8){ photonAuthor = "forward"; photonLabel += "_forward"; }
169  if (( (*phItr)->author()) == 2){ photonAuthor = "softe"; photonLabel += "_softe"; }
170  if (( (*phItr)->author()) == 1){ photonAuthor = "egamma"; photonLabel += "_egamma"; }
171 
172  if ( passesLoose ){
173  photonLabel += "_Loose";
174  photonIsEMString = "Loose"; // assume that hierarchy is obeyed !
175  }
176  if ( passesMedium ){
177  photonLabel += "_Medium";
178  photonIsEMString = "Medium"; // assume that hierarchy is obeyed !
179  }
180  if ( passesTight ){
181  photonLabel += "_Tight";
182  photonIsEMString = "Tight"; // assume that hierarchy is obeyed !
183  }
184  author.push_back( DataType( photonAuthor ) );
185  label.push_back( DataType( photonLabel ) );
186  isEMString.push_back( DataType( photonIsEMString ) );
187 
188  mass.push_back(DataType((*phItr)->m()/GeV));
189  energy.push_back( DataType((*phItr)->e()/GeV ) );
190  } // end PhotonIterator
191 
192  // four-vectors
193  DataMap["phi"] = phi;
194  DataMap["eta"] = eta;
195  DataMap["pt"] = pt;
196  DataMap["energy"] = energy;
197  DataMap["mass"] = mass;
198  DataMap["isEMString"] = isEMString;
199  DataMap["label"] = label;
200  DataMap["author"] = author;
201 
202  if (msgLvl(MSG::DEBUG)) {
203  msg(MSG::DEBUG) << dataTypeName() << " retrieved with " << phi.size() << " entries"<< endmsg;
204  }
205 
206  //All collections retrieved okay
207  return DataMap;
208 
209  } // retrieve
210 
211  //--------------------------------------------------------------------------
212 
213 } // JiveXML namespace
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
JiveXML::xAODPhotonRetriever::m_sgKey
std::string m_sgKey
Definition: xAODPhotonRetriever.h:51
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
JiveXML::xAODPhotonRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: xAODPhotonRetriever.cxx:47
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
JiveXML::xAODPhotonRetriever::getData
const DataMap getData(const xAOD::PhotonContainer *)
Retrieve basic parameters, mainly four-vectors, for each collection.
Definition: xAODPhotonRetriever.cxx:116
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
PlotCalibFromCool.label
label
Definition: PlotCalibFromCool.py:78
JiveXML::xAODPhotonRetriever::m_otherKeys
std::vector< std::string > m_otherKeys
Definition: xAODPhotonRetriever.h:52
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
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
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:28
JiveXML::xAODPhotonRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: xAODPhotonRetriever.h:45
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
test_pyathena.parent
parent
Definition: test_pyathena.py:15
JiveXML::xAODPhotonRetriever::m_doWriteHLT
bool m_doWriteHLT
Whether to write HLTAutoKey objects.
Definition: xAODPhotonRetriever.h:54
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:21
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
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.
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
CaloCondBlobAlgs_fillNoiseFromASCII.author
string author
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:26
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
xAODPhotonRetriever.h
AthAlgTool
Definition: AthAlgTool.h:26
test_pyathena.counter
counter
Definition: test_pyathena.py:15
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
SG::ConstIterator
Definition: SGIterator.h:163
PhotonContainer.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.