ATLAS Offline Software
Loading...
Searching...
No Matches
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
14const std::vector<std::string> HIEventShapeSummaryTool::s_SubCaloNames {"EMBarrel", "EMEC", "HEC", "TileBarrel", "TileGap", "TileExt", "FCal", "EMCal", "Tile","HCal", "PreSampler","ALL"};
15const std::vector<std::initializer_list<int> > HIEventShapeSummaryTool::s_SubCaloLists{HI::SubCalo::Lists::EMBarrel,
27
29{
30 declareProperty("Samplings",m_samp_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
126float 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
137float 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
148int 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
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Helper class to provide constant type-safe access to aux data.
static Double_t ss
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
static std::string getSamplingName(CaloSample theSample)
Returns a string (name) for each CaloSampling.
static constexpr unsigned int getNumberOfSamplings()
Get number of available samplings.
float getRangeMax(int layer) const
Definition HICaloRange.h:20
static const HICaloRange & getRange()
float getRangeMin(int layer) const
Definition HICaloRange.h:19
int getSubCaloLayer(const std::vector< int > &samps) const
HIEventShapeSummaryTool(const std::string &n)
std::vector< std::string > m_samp_names
static const std::vector< std::string > s_SubCaloNames
static const std::vector< std::initializer_list< int > > s_SubCaloLists
float getSubCaloEtaMin(const std::vector< int > &samps) const
StatusCode summarize(const xAOD::HIEventShapeContainer *in, xAOD::HIEventShapeContainer *out) const override
std::map< std::string, summary_info_t > m_summary_list
std::vector< std::string > m_subcalo_names
float getSubCaloEtaMax(const std::vector< int > &samps) const
StatusCode initialize() override
Dummy implementation of the initialisation function.
std::string dumpList() const override
Helper class to provide type-safe access to aux data.
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58
void setEtaMin(float value)
set eta slice "left" edge
void setLayer(int value)
set layer information
void setEtaMax(float value)
set eta slice "right" edge
constexpr std::initializer_list< int > EMBarrel
Definition HIEventDefs.h:60
constexpr std::initializer_list< int > ALL
Definition HIEventDefs.h:79
constexpr std::initializer_list< int > Tile
Definition HIEventDefs.h:70
constexpr std::initializer_list< int > HEC
Definition HIEventDefs.h:62
constexpr std::initializer_list< int > EMCal
Definition HIEventDefs.h:68
constexpr std::initializer_list< int > PreSampler
Definition HIEventDefs.h:77
constexpr std::initializer_list< int > TileGap
Definition HIEventDefs.h:64
constexpr std::initializer_list< int > TileBarrel
Definition HIEventDefs.h:63
constexpr std::initializer_list< int > FCal
Definition HIEventDefs.h:66
constexpr std::initializer_list< int > EMEC
Definition HIEventDefs.h:61
constexpr std::initializer_list< int > TileExt
Definition HIEventDefs.h:65
constexpr std::initializer_list< int > HCal
Definition HIEventDefs.h:73
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)
HIEventShapeContainer_v2 HIEventShapeContainer
Define the latest version of the container.
HIEventShape_v2 HIEventShape
Definition of the latest event info version.