60 using Counter =
struct {
unsigned int n_detector_elements, n_missing_detector_elements, n_wrong_type,
61 n_no_matching_pattern, n_detector_elements_of_correct_type; };
62 Counter counter {0u,0u,0u,0u,0u};
63 tracking_geometry->visitSurfaces([&counter, &module_data, &module_pattern_idx,
this](
const Acts::Surface *surface_ptr) {
64 if (!surface_ptr)
return;
65 const Acts::Surface &surface = *surface_ptr;
66 const Acts::DetectorElementBase*detector_element = surface.associatedDetectorElement();
67 if (detector_element) {
69 if (acts_detector_element) {
72 if (module_pattern_idx.empty()) {
73 ++counter.n_no_matching_pattern;
78 ++
counter.n_detector_elements_of_correct_type;
87 ++
counter.n_missing_detector_elements;
91 << (
counter.n_missing_detector_elements +
counter.n_detector_elements)
92 <<
" (wrong type " <<
counter.n_wrong_type <<
")"
93 <<
" expected detector type " <<
counter.n_detector_elements_of_correct_type
94 <<
" without match " <<
counter.n_no_matching_pattern);
95 if (
counter.n_missing_detector_elements ||
counter.n_wrong_type>0) {
96 ATH_MSG_ERROR(
"Encountered " <<
counter.n_wrong_type <<
" associated detector elements with wrong type and "
97 <<
counter.n_missing_detector_elements <<
" surfaces without detector element.");
102 unsigned int pattern_i=0;
103 for (
const std::vector<double> &shape :
m_noiseShape.value()) {
105 double scale=std::accumulate(shape.begin(), shape.end(),0.);
106 if (std::abs(scale-1.)>1e-5) {
107 ATH_MSG_FATAL(
"Noise shape integral for pattern " << pattern_i <<
" not 1. but " << scale);
108 return StatusCode::FAILURE;
112 for (
double value : shape) {
125 constexpr unsigned int n_different_pixel_matrices_max=6;
126 m_dimPerHist.reserve(n_different_pixel_matrices_max);
127 for (
unsigned int hist_type_i=0; hist_type_i<
kNHistTypes; ++hist_type_i) {
128 m_hist[hist_type_i].reserve(n_different_pixel_matrices_max);
132 m_noiseShapeHist.reserve(n_different_pixel_matrices_max);
134 unsigned int max_y_axis = (((wafer_hash_max+99)/100+9)/10)*10;
135 for (
unsigned int hist_type_i=0; hist_type_i<
kNHistTypes; ++hist_type_i) {
137 HistUtil::StringCat hist_name;
138 hist_name <<
s_histNames.at(hist_type_i) <<
"_hits_per_module";
139 HistUtil::StringCat hist_title;
140 hist_title <<
s_histTitles.at(hist_type_i) <<
" hits per module";
142 HistUtil::ProtectHistogramCreation
protect;
143 m_moduleHist.at(hist_type_i) =
new TH2F(hist_name.
str().c_str(), hist_title.
str().c_str(),
145 max_y_axis, -0.5, max_y_axis-0.5
148 m_moduleHist[hist_type_i]->GetXaxis()->SetTitle(
"ID hash % 100");
149 m_moduleHist[hist_type_i]->GetYaxis()->SetTitle(
"ID hash / 100");
151 return StatusCode::FAILURE;
156 return StatusCode::SUCCESS;
162 return StatusCode::SUCCESS;
166 unsigned int key=(n_rows << 16) | n_cols;
167 std::vector<unsigned int>::const_iterator iter = std::find(m_dimPerHist.begin(),m_dimPerHist.end(), key );
168 if (iter == m_dimPerHist.end()) {
169 if (m_dimPerHist.size() == m_dimPerHist.capacity()) {
170 if (m_dimPerHist.capacity()==0) {
171 return std::make_tuple(
nullptr,
nullptr,
nullptr);
176 m_noiseShapeHist.empty() ?
nullptr : m_noiseShapeHist.back());
182 for (
unsigned int hist_type_i=0; hist_type_i<
kNHistTypes; ++hist_type_i) {
184 name <<
s_histNames.at(hist_type_i) <<
"_hits_" << n_rows <<
"_" << n_cols;
186 title <<
s_histTitles.at(hist_type_i) <<
"hits for " << n_rows <<
"(rows) #times " << n_cols <<
" (columns)";
189 m_hist.at(hist_type_i).push_back(
new TH2F(name.str().c_str(), title.str().c_str(),
190 n_cols, -0.5, n_cols-0.5,
191 n_rows, -0.5, n_rows-0.5
194 m_hist[hist_type_i].back()->GetXaxis()->SetTitle(
"offline column");
195 m_hist[hist_type_i].back()->GetYaxis()->SetTitle(
"offline row");
197 throw std::runtime_error(
"Failed to register histogram.");
201 std::stringstream name;
202 name <<
"noise_shape_" << n_rows <<
"_" << n_cols;
203 std::stringstream title;
204 title <<
"Noise shape for " << n_rows <<
"(rows) #times " << n_cols <<
" (columns)";
205 m_noiseShapeHist.push_back(
new TH1F(name.str().c_str(), title.str().c_str(),
m_maxNShape+1, -0.5,
m_maxNShape+.5));
206 m_noiseShapeHist.back()->GetXaxis()->SetTitle(
"offline column");
207 m_noiseShapeHist.back()->GetYaxis()->SetTitle(
"offline row");
209 throw std::runtime_error(
"Failed to register histogram.");
212 m_dimPerHist.push_back(key);
215 m_noiseShapeHist.empty() ?
nullptr : m_noiseShapeHist.back()
220 return std::make_tuple(m_hist[
kRejectedHits].at(iter-m_dimPerHist.begin()),
222 m_noiseShapeHist.empty() ?
nullptr : m_noiseShapeHist.at(iter-m_dimPerHist.begin()));