Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
xAODCaloClusterRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "CaloGeoHelpers/CaloSampling.h"
7 #include "AthenaKernel/Units.h"
8 
10 
11 namespace JiveXML {
12 
19  xAODCaloClusterRetriever::xAODCaloClusterRetriever(const std::string& type,const std::string& name,const IInterface* parent):
21  {}
22 
28  StatusCode xAODCaloClusterRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
29 
30  ATH_MSG_DEBUG("In retrieve()");
31 
32  std::vector<std::string> keys = getKeys();
33 
34  if(keys.empty()){
35  ATH_MSG_WARNING("No StoreGate keys found");
36  return StatusCode::SUCCESS;
37  }
38 
39  // Loop through the keys and retrieve the corresponding data
40  for (const std::string& key : keys) {
42  if (cont.isValid()) {
43  DataMap data = getData(&(*cont));
44  if (FormatTool->AddToEvent(dataTypeName(), key + "_xAOD", &data).isFailure()) {
45  ATH_MSG_WARNING("Failed to retrieve Collection " << key);
46  } else {
47  ATH_MSG_DEBUG(" (" << key << ") retrieved");
48  }
49  } else {
50  ATH_MSG_WARNING("Collection " << key << " not found in SG");
51  }
52  }
53  return StatusCode::SUCCESS;
54  }
55 
56 
64 
65  ATH_MSG_DEBUG("in getData()");
66 
68 
69  DataVect phi; phi.reserve(ccc->size());
70  DataVect eta; eta.reserve(ccc->size());
71  DataVect et; et.reserve(ccc->size());
72  DataVect cells; cells.reserve(ccc->size());
73  DataVect numCells; numCells.reserve(ccc->size());
74  DataVect idVec; idVec.reserve(ccc->size());
75  DataVect emfracVec; emfracVec.reserve(ccc->size());
76  DataVect labelVec; labelVec.reserve(ccc->size());
77 
78  std::string label="";
79  int id = 0;
80  int s = 0;
81  float eInSample = 0.;
82  float eInSampleFull = 0.;
83  float emfrac = 0.;
84  float rawemfrac = 0.;
85 
86  // cells n/a in AOD, but keep this for compatibility
87  // with 'full' clusters in AtlantisJava
88  std::string tagCells;
89  tagCells = "cells multiple=\"1.0\"";
90 
92  for (; itr != ccc->end(); ++itr) {
93 
94  // sum over samplings to get EMfraction:
96  // full sum:
97  for (s=0;s<CaloSampling::Unknown; s++){
98  eInSampleFull += (*itr)->eSample(CaloSampling::CaloSample(s));
99  }
100  // Now only EMB1-3, EME1-3 and FCAL1:
101  eInSample += (*itr)->eSample(CaloSampling::EMB1);
102  eInSample += (*itr)->eSample(CaloSampling::EMB2);
103  eInSample += (*itr)->eSample(CaloSampling::EMB3);
104  eInSample += (*itr)->eSample(CaloSampling::EME1);
105  eInSample += (*itr)->eSample(CaloSampling::EME2);
106  eInSample += (*itr)->eSample(CaloSampling::EME3);
107  eInSample += (*itr)->eSample(CaloSampling::FCAL1);
108 
109  emfrac = eInSample/eInSampleFull;
110  rawemfrac = emfrac;
111  // sanity cut: emfrac should be within [0,1]
112  if ( emfrac > 1.0 ) emfrac = 1.;
113  if ( emfrac < 0.0 ) emfrac = 0.;
114  emfracVec.emplace_back( DataType(emfrac).toString() );
115 
116  if ( DataType( eInSample ).toString() != "0." ){
117  label = "AllMeV_SumEMSampl=" + DataType( eInSample ).toString() +
118  "_SumAllSampl=" + DataType( eInSampleFull ).toString() +
119  "_calcEMFrac=" + DataType( rawemfrac ).toString()+
120  "_outEMFrac=" + DataType( emfrac ).toString();
121  }else{ label = "n_a"; }
122  eInSample = 0.;
123  eInSampleFull = 0.;
124 
125  labelVec.emplace_back( label );
126  ATH_MSG_VERBOSE("label is " << label);
127 
128  // now the standard variables
129  // getBasicEnergy n/a in xAOD !
130 
131  phi.emplace_back(DataType((*itr)->phi()));
132  eta.emplace_back(DataType((*itr)->eta()));
133  et.emplace_back(DataType((*itr)->et()/GeV));
134  numCells.emplace_back(DataType( "0" ));
135  cells.emplace_back(DataType( "0" ));
136  idVec.emplace_back(DataType( ++id ));
137 
138  ATH_MSG_VERBOSE( dataTypeName() << " cluster #" << id
139  << " ,e=" << (*itr)->e()/GeV << ", et="
140  << (*itr)->et()/GeV << ", eta=" << (*itr)->eta()
141  << ", phi=" << (*itr)->phi());
142  }
143  // Start with mandatory entries
144  DataMap["phi"] = phi;
145  DataMap["eta"] = eta;
146  DataMap["et"] = et;
147  DataMap[tagCells] = cells;
148  DataMap["numCells"] = numCells;
149  DataMap["id"] = idVec;
150  DataMap["emfrac"] = emfracVec; // not in Atlantis yet ! Could be used in legoplot
151  DataMap["label"] = labelVec; // not in Atlantis yet !
152 
153  ATH_MSG_DEBUG(dataTypeName() << " (AOD, no cells), collection: " << dataTypeName()
154  << " retrieved with " << phi.size() << " entries");
155  return DataMap;
156  }
157 
158 
159  const std::vector<std::string> xAODCaloClusterRetriever::getKeys() {
160 
161  ATH_MSG_DEBUG("in getKeys()");
162 
163  std::vector<std::string> keys = {};
164 
165  // Remove m_priorityKey from m_otherKeys if it exists, we don't want to write it twice
166  auto it = std::find(m_otherKeys.begin(), m_otherKeys.end(), m_priorityKey);
167  if(it != m_otherKeys.end()){
168  m_otherKeys.erase(it);
169  }
170 
171  // Add m_priorityKey as the first element if it is not ""
172  if(m_priorityKey!=""){
173  keys.push_back(m_priorityKey);
174  }
175 
176  if(!m_otherKeys.empty()){
177  keys.insert(keys.end(), m_otherKeys.begin(), m_otherKeys.end());
178  }
179 
180  // If all collections are requested, obtain all available keys from StoreGate
181  std::vector<std::string> allKeys;
183  evtStore()->keys<xAOD::CaloClusterContainer>(allKeys);
184  // Add keys that are not the priority key and do not add containers with "HLT" in their name if requested
185  for(const std::string& key : allKeys){
186  // Don't include key if it's already in keys
187  auto it2 = std::find(keys.begin(), keys.end(), key);
188  if(it2 != keys.end())continue;
189  if(key.find("HLT") == std::string::npos || m_doWriteHLT){
190  keys.emplace_back(key);
191  }
192  }
193  }
194  return keys;
195  }
196 } // JiveXML namespace
xAODCaloClusterRetriever.h
RunTileCalibRec.cells
cells
Definition: RunTileCalibRec.py:271
GetLCDefs::Unknown
@ Unknown
Definition: GetLCDefs.h:21
JiveXML::xAODCaloClusterRetriever::m_doWriteAllCollections
Gaudi::Property< bool > m_doWriteAllCollections
Definition: xAODCaloClusterRetriever.h:59
JiveXML::xAODCaloClusterRetriever::xAODCaloClusterRetriever
xAODCaloClusterRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: xAODCaloClusterRetriever.cxx:19
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
JiveXML::xAODCaloClusterRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
For each cluster collection retrieve basic parameters.
Definition: xAODCaloClusterRetriever.cxx:28
et
Extra patterns decribing particle interation process.
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAOD::et
et
Definition: TrigEMCluster_v1.cxx:25
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
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
JiveXML::xAODCaloClusterRetriever::getKeys
const std::vector< std::string > getKeys()
Gets the StoreGate keys for the desired containers.
Definition: xAODCaloClusterRetriever.cxx:159
skel.it
it
Definition: skel.GENtoEVGEN.py:407
JiveXML::xAODCaloClusterRetriever::m_doWriteHLT
Gaudi::Property< bool > m_doWriteHLT
Definition: xAODCaloClusterRetriever.h:58
CaloCell_ID_FCS::FCAL1
@ FCAL1
Definition: FastCaloSim_CaloCell_ID.h:41
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
JiveXML::xAODCaloClusterRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type that is generated by this retriever.
Definition: xAODCaloClusterRetriever.h:51
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
JiveXML::xAODCaloClusterRetriever::getData
const DataMap getData(const xAOD::CaloClusterContainer *)
Puts the variables into a DataMap.
Definition: xAODCaloClusterRetriever.cxx:63
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
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
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
JiveXML::xAODCaloClusterRetriever::m_otherKeys
Gaudi::Property< std::vector< std::string > > m_otherKeys
Definition: xAODCaloClusterRetriever.h:60
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:228
CaloCell_ID_FCS::EME3
@ EME3
Definition: FastCaloSim_CaloCell_ID.h:26
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.
xAOD::TauJetParameters::numCells
@ numCells
Definition: TauDefs.h:171
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
AthAlgTool
Definition: AthAlgTool.h:26
JiveXML::xAODCaloClusterRetriever::m_priorityKey
Gaudi::Property< std::string > m_priorityKey
Definition: xAODCaloClusterRetriever.h:61
CaloCell_ID_FCS::EMB3
@ EMB3
Definition: FastCaloSim_CaloCell_ID.h:22
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
constants.EME2
int EME2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:56
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