ATLAS Offline Software
HIEventShapeSummaryTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 #include <sstream>
11 #include <iostream>
12 #include <iomanip>
13 
14 const std::vector<std::string> HIEventShapeSummaryTool::s_SubCaloNames {"EMBarrel", "EMEC", "HEC", "TileBarrel", "TileGap", "TileExt", "FCal", "EMCal", "Tile","HCal", "PreSampler","ALL"};
15 const std::vector<std::initializer_list<int> > HIEventShapeSummaryTool::s_SubCaloLists{HI::SubCalo::Lists::EMBarrel,
27 
29 {
30  declareProperty("Samplings",m_samp_names );
31  declareProperty("SubCalos",m_subcalo_names);
32  declareProperty("DoPositiveNegativeSides",m_do_sides=false);
33 
34 }
35 
37 {
38  out->reserve(m_summary_list.size());
39  for(const auto& itr : m_summary_list)
40  {
42  out->push_back(es);
43  HI::fillSummary(in,es,itr.second.func);
44  es->setEtaMin(roundToTenth(itr.second.eta_min));
45  es->setEtaMax(roundToTenth(itr.second.eta_max));
46  es->setLayer(itr.second.layer);
47  static const SG::Accessor<std::string> SummaryAcc("Summary");
48  SummaryAcc(*es)=itr.second.name;
49  }
50  return StatusCode::SUCCESS;
51 }
52 
54 {
55  //not optimal, but minimal code re-use, gets called only at initialization
56  ATH_MSG_INFO("Configuring for summary");
57  for(const auto& s : m_samp_names)
58  {
59  auto mItr=m_summary_list.find(s);
60  if(mItr!=m_summary_list.end()) continue;
62  for(unsigned int j=0; j<CaloSampling::getNumberOfSamplings(); j++)
63  {
64  if(s.compare(CaloSampling::getSamplingName(j))==0)
65  {
66  samp=j;
67  break;
68  }
69  }
70  if(samp == static_cast<int>(CaloSampling::getNumberOfSamplings()))
71  {
72  ATH_MSG_WARNING("Sampling with name " << s << " not defined in standard list, skipping.");
73  break;
74  }
75  float emin=HICaloRange::getRange().getRangeMin(samp);
76  float emax=HICaloRange::getRange().getRangeMax(samp);
77  m_summary_list.emplace(s,summary_info_t(s,emin,emax,samp,HI::ByLayer(samp)));
78  if(m_do_sides)
79  {
80  m_summary_list.emplace(s+"_pos",summary_info_t(s+"_pos",emin,emax,samp,HI::ByLayer(samp)));
81  m_summary_list.emplace(s+"_neg",summary_info_t(s+"_neg",-emax,-emin,samp,HI::ByLayer(samp)));
82  }
83  }
84 
85  for(const auto& s : m_subcalo_names)
86  {
87  auto mItr=m_summary_list.find(s);
88  if(mItr!=m_summary_list.end()) continue;
89 
90  unsigned int isub=s_SubCaloNames.size();
91  for(unsigned int i=0; i < s_SubCaloNames.size(); i++)
92  {
93  if(s_SubCaloNames.at(i)==s)
94  {
95  isub=i;
96  break;
97  }
98  }
99 
100  if(isub==s_SubCaloNames.size())
101  {
102  ATH_MSG_WARNING("Subcalo with name " << s << " not defined in standard list, skipping." );
103  break;
104  }
105 
106 
107  const std::vector<int> layer_list=s_SubCaloLists.at(isub);
108  int samp=getSubCaloLayer(layer_list);
109  float emin=getSubCaloEtaMin(layer_list);
110  float emax=getSubCaloEtaMax(layer_list);
111 
112  m_summary_list.emplace(s,summary_info_t(s,emin,emax,samp,HI::ByLayers(s_SubCaloLists.at(isub))));
113  if(m_do_sides)
114  {
115  m_summary_list.emplace(s+"_pos",summary_info_t(s+"_pos",emin,emax,samp,HI::ByLayersP(s_SubCaloLists.at(isub))));
116  m_summary_list.emplace(s+"_neg",summary_info_t(s+"_neg",-emax,-emin,samp,HI::ByLayersN(s_SubCaloLists.at(isub))));
117  }
118 
119  }
120 
122  return StatusCode::SUCCESS;
123 }
124 
125 
126 float HIEventShapeSummaryTool::getSubCaloEtaMin(const std::vector<int>& samps) const
127 {
128  float min=10;
129  for(const auto i : samps)
130  {
131  float min_c=HICaloRange::getRange().getRangeMin(i);
132  if(min_c < min) min=min_c;
133  }
134  return min;
135 }
136 
137 float HIEventShapeSummaryTool::getSubCaloEtaMax(const std::vector<int>& samps) const
138 {
139  float max=0.;
140  for(const auto i : samps)
141  {
142  float max_c=HICaloRange::getRange().getRangeMax(i);
143  if(max_c > max) max=max_c;
144  }
145  return max;
146 }
147 
148 int HIEventShapeSummaryTool::getSubCaloLayer(const std::vector<int>& samps) const
149 {
150  int outlayer=0;
151  for(const auto i : samps) outlayer |= 0x1 << i;
152  return outlayer;
153 }
154 
156 {
157  std::stringstream ss;
158  ss << "========= Dumping HIEventShapeSummaryTool ========" << std::endl;
159  ss << std::setw(15) << "Name"
160  << std::setw(15) << "eta min"
161  << std::setw(15) << "eta max"
162  << std::setw(15) << "layer"
163  << std::endl;
164  for(const auto& itr : m_summary_list)
165  {
166  ss << std::setw(15) << itr.second.name
167  << std::setw(15) << itr.second.eta_min
168  << std::setw(15) << itr.second.eta_max
169  << std::setw(15) << itr.second.layer
170  << std::endl;
171  }
172  return ss.str();
173 }
174 
176 {
177  return std::floor(v*10.)/10.;
178 }
179 
HI::SubCalo::Lists::TileExt
constexpr std::initializer_list< int > TileExt
Definition: HIEventDefs.h:65
HI::SubCalo::Lists::FCal
constexpr std::initializer_list< int > FCal
Definition: HIEventDefs.h:66
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
max
#define max(a, b)
Definition: cfImp.cxx:41
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
HI::SubCalo::Lists::EMBarrel
constexpr std::initializer_list< int > EMBarrel
Definition: HIEventDefs.h:60
HIEventShapeSummaryTool::m_summary_list
std::map< std::string, summary_info_t > m_summary_list
Definition: HIEventShapeSummaryTool.h:46
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
HICaloRange::getRangeMax
float getRangeMax(int layer) const
Definition: HICaloRange.h:20
xAOD::HIEventShape_v2::setEtaMin
void setEtaMin(float value)
HICaloRange::getRangeMin
float getRangeMin(int layer) const
Definition: HICaloRange.h:19
HICaloRange::getRange
static const HICaloRange & getRange()
Definition: HICaloRange.cxx:13
HIEventShapeSummaryTool::roundToTenth
float roundToTenth(float v) const
Definition: HIEventShapeSummaryTool.cxx:175
asg
Definition: DataHandleTestTool.h:28
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
HIEventShapeSummaryTool::getSubCaloEtaMin
float getSubCaloEtaMin(const std::vector< int > &samps) const
Definition: HIEventShapeSummaryTool.cxx:126
xAOD::HIEventShape
HIEventShape_v2 HIEventShape
Definition of the latest event info version.
Definition: HIEventShape.h:16
HI::SubCalo::Lists::HEC
constexpr std::initializer_list< int > HEC
Definition: HIEventDefs.h:62
HIEventDefs.h
HICaloRange.h
HIEventShapeSummaryTool::s_SubCaloNames
static const std::vector< std::string > s_SubCaloNames
Definition: HIEventShapeSummaryTool.h:53
HIEventShapeSummaryTool::HIEventShapeSummaryTool
HIEventShapeSummaryTool(const std::string &n)
Definition: HIEventShapeSummaryTool.cxx:28
xAOD::HIEventShape_v2
Interface class for the HI reconstruction EDM.
Definition: HIEventShape_v2.h:31
HIEventShapeSummaryTool::getSubCaloEtaMax
float getSubCaloEtaMax(const std::vector< int > &samps) const
Definition: HIEventShapeSummaryTool.cxx:137
lumiFormat.i
int i
Definition: lumiFormat.py:92
HIEventShapeSummaryTool::getSubCaloLayer
int getSubCaloLayer(const std::vector< int > &samps) const
Definition: HIEventShapeSummaryTool.cxx:148
beamspotman.n
n
Definition: beamspotman.py:731
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
HIEventShapeSummaryTool::summarize
StatusCode summarize(const xAOD::HIEventShapeContainer *in, xAOD::HIEventShapeContainer *out) const override
Definition: HIEventShapeSummaryTool.cxx:36
HIEventShapeSummaryTool::dumpList
std::string dumpList() const override
Definition: HIEventShapeSummaryTool.cxx:155
HIEventShapeSummaryTool::summary_info_t
Definition: HIEventShapeSummaryTool.h:30
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
min
#define min(a, b)
Definition: cfImp.cxx:40
HIEventShapeSummaryTool::m_samp_names
std::vector< std::string > m_samp_names
Definition: HIEventShapeSummaryTool.h:41
HIEventShapeSummaryTool::s_SubCaloLists
static const std::vector< std::initializer_list< int > > s_SubCaloLists
Definition: HIEventShapeSummaryTool.h:54
HI::SubCalo::Lists::ALL
constexpr std::initializer_list< int > ALL
Definition: HIEventDefs.h:79
HI::fillSummary
void fillSummary(const xAOD::HIEventShapeContainer *in, xAOD::HIEventShape *out, const std::function< bool(const xAOD::HIEventShape *)> &incFunction, const std::function< void(xAOD::HIEventShape *, const xAOD::HIEventShape *)> &addFunction)
Definition: HIEventShapeSummaryUtils.cxx:53
HI::ByLayersN
Definition: HIEventShapeSummaryUtils.h:94
CaloSampling::getNumberOfSamplings
static constexpr unsigned int getNumberOfSamplings()
Get number of available samplings.
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:30
HI::SubCalo::Lists::PreSampler
constexpr std::initializer_list< int > PreSampler
Definition: HIEventDefs.h:77
HI::ByLayer
Definition: HIEventShapeSummaryUtils.h:48
python.PyAthena.v
v
Definition: PyAthena.py:157
HIEventShapeSummaryTool.h
HI::SubCalo::Lists::TileBarrel
constexpr std::initializer_list< int > TileBarrel
Definition: HIEventDefs.h:63
HI::SubCalo::Lists::EMCal
constexpr std::initializer_list< int > EMCal
Definition: HIEventDefs.h:68
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
HI::ByLayers
Definition: HIEventShapeSummaryUtils.h:55
HIEventShapeSummaryTool::initialize
StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: HIEventShapeSummaryTool.cxx:53
HIEventShapeSummaryTool::m_subcalo_names
std::vector< std::string > m_subcalo_names
Definition: HIEventShapeSummaryTool.h:42
xAOD::HIEventShape_v2::setEtaMax
void setEtaMax(float value)
HIEventShapeSummaryTool::m_do_sides
bool m_do_sides
Definition: HIEventShapeSummaryTool.h:43
HI::ByLayersP
Definition: HIEventShapeSummaryUtils.h:86
CaloSampling::getSamplingName
static std::string getSamplingName(CaloSample theSample)
Returns a string (name) for each CaloSampling.
Definition: Calorimeter/CaloGeoHelpers/Root/CaloSampling.cxx:18
HI::SubCalo::Lists::TileGap
constexpr std::initializer_list< int > TileGap
Definition: HIEventDefs.h:64
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
HI::SubCalo::Lists::HCal
constexpr std::initializer_list< int > HCal
Definition: HIEventDefs.h:73
xAOD::HIEventShape_v2::setLayer
void setLayer(int value)
HI::SubCalo::Lists::EMEC
constexpr std::initializer_list< int > EMEC
Definition: HIEventDefs.h:61
HI::SubCalo::Lists::Tile
constexpr std::initializer_list< int > Tile
Definition: HIEventDefs.h:70