ATLAS Offline Software
Loading...
Searching...
No Matches
PixelHistoConverter.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
10
11#ifndef PIXELCONDITIONSDATA_PIXELHISTOCONVRTER_H
12#define PIXELCONDITIONSDATA_PIXELHISTOCONVRTER_H
13
15#include "GaudiKernel/StatusCode.h"
16
17#include <vector>
18
20class TAxis;
21class TH1;
22class TH2;
23class TH3;
24
26public:
28 virtual ~PixelHistoConverter() = default;
29
30 StatusCode setHisto1D(const TH1* histo);
31 StatusCode setHisto2D(const TH2* histo);
32 StatusCode setHisto3D(const TH3* histo);
33
34 inline float getContent(std::size_t x) const {
35 return m_content[x];
36 }
37 inline float getContent(std::size_t x, std::size_t y) const {
38 return m_content[x + y*(m_xAxis.nBins)];
39 }
40 inline float getContent(std::size_t x, std::size_t y, std::size_t z) const {
41 return m_content[x + m_xAxis.nBins*(y + (m_yAxis.nBins * z))];
42 }
43
44 inline bool isOverflowZ(const float value) const {
45 return (value >= m_zAxis.max);
46 }
47 bool isFirstZ(const float value) const;
48
49private:
50 struct Axis {
51 std::size_t nBins;
52 float min;
53 float max;
54 float width;
55 };
56
60
61 std::vector<float> m_content;
62
63 static bool setAxis(Axis& axis, const TAxis* rootAxis);
64
65 inline std::size_t findBin(const Axis& axis, const float value) const {
66 if (value <= axis.min) return 0;
67 if (value >= axis.max) return (axis.nBins - 1);
68 return ((value - axis.min) * axis.width);
69 }
70
71public:
72
73 template<typename... Args>
74 std::size_t getBinX(Args&& ...args) const {
75 return findBin(m_xAxis, std::forward<Args>(args)...);
76 }
77
78 template<typename... Args>
79 std::size_t getBinY(Args&& ...args) const {
80 return findBin(m_yAxis, std::forward<Args>(args)...);
81 }
82
83 template<typename... Args>
84 std::size_t getBinZ(Args&& ...args) const {
85 return findBin(m_zAxis, std::forward<Args>(args)...);
86 }
87};
88
89#endif
#define y
#define x
#define z
float getContent(std::size_t x) const
virtual ~PixelHistoConverter()=default
bool isFirstZ(const float value) const
StatusCode setHisto2D(const TH2 *histo)
StatusCode setHisto3D(const TH3 *histo)
std::vector< float > m_content
StatusCode setHisto1D(const TH1 *histo)
static bool setAxis(Axis &axis, const TAxis *rootAxis)
std::size_t findBin(const Axis &axis, const float value) const
std::size_t getBinY(Args &&...args) const
std::size_t getBinZ(Args &&...args) const
float getContent(std::size_t x, std::size_t y) const
float getContent(std::size_t x, std::size_t y, std::size_t z) const
bool isOverflowZ(const float value) const
std::size_t getBinX(Args &&...args) const