ATLAS Offline Software
Loading...
Searching...
No Matches
PixelHistoConverter Class Reference

#include <PixelHistoConverter.h>

Collaboration diagram for PixelHistoConverter:

Classes

struct  Axis

Public Member Functions

 PixelHistoConverter ()
virtual ~PixelHistoConverter ()=default
StatusCode setHisto1D (const TH1 *histo)
StatusCode setHisto2D (const TH2 *histo)
StatusCode setHisto3D (const TH3 *histo)
float getContent (std::size_t x) 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
bool isFirstZ (const float value) const
template<typename... Args>
std::size_t getBinX (Args &&...args) const
template<typename... Args>
std::size_t getBinY (Args &&...args) const
template<typename... Args>
std::size_t getBinZ (Args &&...args) const

Private Member Functions

std::size_t findBin (const Axis &axis, const float value) const

Static Private Member Functions

static bool setAxis (Axis &axis, const TAxis *rootAxis)

Private Attributes

Axis m_xAxis {}
Axis m_yAxis {}
Axis m_zAxis {}
std::vector< float > m_content

Detailed Description

Definition at line 25 of file PixelHistoConverter.h.

Constructor & Destructor Documentation

◆ PixelHistoConverter()

PixelHistoConverter::PixelHistoConverter ( )
default

◆ ~PixelHistoConverter()

virtual PixelHistoConverter::~PixelHistoConverter ( )
virtualdefault

Member Function Documentation

◆ findBin()

std::size_t PixelHistoConverter::findBin ( const Axis & axis,
const float value ) const
inlineprivate

Definition at line 65 of file PixelHistoConverter.h.

65 {
66 if (value <= axis.min) return 0;
67 if (value >= axis.max) return (axis.nBins - 1);
68 return ((value - axis.min) * axis.width);
69 }

◆ getBinX()

template<typename... Args>
std::size_t PixelHistoConverter::getBinX ( Args &&... args) const
inline

Definition at line 74 of file PixelHistoConverter.h.

74 {
75 return findBin(m_xAxis, std::forward<Args>(args)...);
76 }
std::size_t findBin(const Axis &axis, const float value) const

◆ getBinY()

template<typename... Args>
std::size_t PixelHistoConverter::getBinY ( Args &&... args) const
inline

Definition at line 79 of file PixelHistoConverter.h.

79 {
80 return findBin(m_yAxis, std::forward<Args>(args)...);
81 }

◆ getBinZ()

template<typename... Args>
std::size_t PixelHistoConverter::getBinZ ( Args &&... args) const
inline

Definition at line 84 of file PixelHistoConverter.h.

84 {
85 return findBin(m_zAxis, std::forward<Args>(args)...);
86 }

◆ getContent() [1/3]

float PixelHistoConverter::getContent ( std::size_t x) const
inline

Definition at line 34 of file PixelHistoConverter.h.

34 {
35 return m_content[x];
36 }
#define x
std::vector< float > m_content

◆ getContent() [2/3]

float PixelHistoConverter::getContent ( std::size_t x,
std::size_t y ) const
inline

Definition at line 37 of file PixelHistoConverter.h.

37 {
38 return m_content[x + y*(m_xAxis.nBins)];
39 }
#define y

◆ getContent() [3/3]

float PixelHistoConverter::getContent ( std::size_t x,
std::size_t y,
std::size_t z ) const
inline

Definition at line 40 of file PixelHistoConverter.h.

40 {
41 return m_content[x + m_xAxis.nBins*(y + (m_yAxis.nBins * z))];
42 }
#define z

◆ isFirstZ()

bool PixelHistoConverter::isFirstZ ( const float value) const

Definition at line 101 of file PixelHistoConverter.cxx.

101 {
102 return (getBinZ(value) == 0);
103}
std::size_t getBinZ(Args &&...args) const

◆ isOverflowZ()

bool PixelHistoConverter::isOverflowZ ( const float value) const
inline

Definition at line 44 of file PixelHistoConverter.h.

44 {
45 return (value >= m_zAxis.max);
46 }

◆ setAxis()

bool PixelHistoConverter::setAxis ( Axis & axis,
const TAxis * rootAxis )
staticprivate

check if the histogram has equidistant bins

use a threshold for imperfect binning

storing as 1/width to avoid (slow) division in retrieving

Definition at line 105 of file PixelHistoConverter.cxx.

105 {
106
107 if (!rootAxis) {
108 return false;
109 }
110
111 axis.nBins = rootAxis->GetNbins();
112 axis.min = rootAxis->GetXmin();
113 axis.max = rootAxis->GetXmax();
114
115 if (axis.nBins < 1) {
116 return false;
117 }
118
120 const float width = rootAxis->GetBinWidth(1);
121 for (std::size_t ibin = 2; ibin <= axis.nBins; ++ibin) {
123 if (std::abs(rootAxis->GetBinWidth(ibin) - width) > 0.01*width) {
124 return false;
125 }
126 }
127
129 axis.width = 1.*axis.nBins/(axis.max - axis.min);
130
131 return true;
132}
const double width

◆ setHisto1D()

StatusCode PixelHistoConverter::setHisto1D ( const TH1 * histo)

fill the content

Definition at line 20 of file PixelHistoConverter.cxx.

20 {
21
22 if (!histo) {
23 return StatusCode::FAILURE;
24 }
25
26 if (!setAxis(m_xAxis, histo->GetXaxis())) {
27 return StatusCode::FAILURE;
28 }
29
31 const std::size_t xSize = m_xAxis.nBins;
32 m_content.resize(xSize);
33
34 for (std::size_t x = 0; x < xSize; ++x) {
35 m_content.at(x) = histo->GetBinContent(x+1);
36 }
37
38 return StatusCode::SUCCESS;
39}
static bool setAxis(Axis &axis, const TAxis *rootAxis)

◆ setHisto2D()

StatusCode PixelHistoConverter::setHisto2D ( const TH2 * histo)

fill the content use linearized version for performance reasons

Definition at line 41 of file PixelHistoConverter.cxx.

41 {
42 if (!histo) {
43 return StatusCode::FAILURE;
44 }
45
46 if (!setAxis(m_xAxis, histo->GetXaxis())) {
47 return StatusCode::FAILURE;
48 }
49 if (!setAxis(m_yAxis, histo->GetYaxis())) {
50 return StatusCode::FAILURE;
51 }
52
54 const std::size_t xSize = m_xAxis.nBins;
55 const std::size_t ySize = m_yAxis.nBins;
56 m_content.resize(xSize*ySize);
57
58 for (std::size_t x = 0; x < xSize; ++x) {
59 for (std::size_t y = 0; y < ySize; ++y) {
60 const std::size_t position = x + y*xSize;
61 m_content.at(position) = histo->GetBinContent(x+1,y+1);
62 }
63 }
64
65 return StatusCode::SUCCESS;
66}

◆ setHisto3D()

StatusCode PixelHistoConverter::setHisto3D ( const TH3 * histo)

fill the content use linearized version for performance reasons

Definition at line 68 of file PixelHistoConverter.cxx.

68 {
69 if (!histo) {
70 return StatusCode::FAILURE;
71 }
72
73 if (!setAxis(m_xAxis, histo->GetXaxis())) {
74 return StatusCode::FAILURE;
75 }
76 if (!setAxis(m_yAxis, histo->GetYaxis())) {
77 return StatusCode::FAILURE;
78 }
79 if (!setAxis(m_zAxis, histo->GetZaxis())) {
80 return StatusCode::FAILURE;
81 }
82
84 const std::size_t xSize = m_xAxis.nBins;
85 const std::size_t ySize = m_yAxis.nBins;
86 const std::size_t zSize = m_zAxis.nBins;
87 m_content.resize(xSize*ySize*zSize);
88
89 for (std::size_t x = 0; x < xSize; ++x) {
90 for (std::size_t y = 0; y < ySize; ++y) {
91 for (std::size_t z = 0; z < zSize; ++z) {
92 const std::size_t position = x + xSize*(y + (ySize * z));
93 m_content.at(position) = histo->GetBinContent(x+1,y+1,z+1);
94 }
95 }
96 }
97
98 return StatusCode::SUCCESS;
99}

Member Data Documentation

◆ m_content

std::vector<float> PixelHistoConverter::m_content
private

Definition at line 61 of file PixelHistoConverter.h.

◆ m_xAxis

Axis PixelHistoConverter::m_xAxis {}
private

Definition at line 57 of file PixelHistoConverter.h.

57{};

◆ m_yAxis

Axis PixelHistoConverter::m_yAxis {}
private

Definition at line 58 of file PixelHistoConverter.h.

58{};

◆ m_zAxis

Axis PixelHistoConverter::m_zAxis {}
private

Definition at line 59 of file PixelHistoConverter.h.

59{};

The documentation for this class was generated from the following files: