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

#include <TFCS2DFunctionHistogram.h>

Inheritance diagram for TFCS2DFunctionHistogram:
Collaboration diagram for TFCS2DFunctionHistogram:

Public Member Functions

 TFCS2DFunctionHistogram (TH2 *hist=nullptr)
 ~TFCS2DFunctionHistogram ()
void Initialize (TH2 *hist)
virtual void rnd_to_fct (float &valuex, float &valuey, float rnd0, float rnd1) const
const std::vector< float > & get_HistoBordersx () const
std::vector< float > & get_HistoBordersx ()
const std::vector< float > & get_HistoBordersy () const
std::vector< float > & get_HistoBordersy ()
const std::vector< float > & get_HistoContents () const
std::vector< float > & get_HistoContents ()
virtual void rnd_to_fct (float value[], const float rnd[]) const
 Function gets array of random numbers rnd[] in the range [0,1) as arguments and returns function value in array value.
virtual int ndim () const
 Return the number of dimensions for the function.
virtual std::size_t MemorySize () const
 Gives the total memory size, including the size of additional memory allocated inside the class.
bool msgLvl (const MSG::Level lvl) const
 Check whether the logging system is active at the provided verbosity level.
MsgStream & msg () const
 Return a stream for sending messages directly (no decoration)
MsgStream & msg (const MSG::Level lvl) const
 Return a decorated starting stream for sending messages.
MSG::Level level () const
 Retrieve output level.
virtual void setLevel (MSG::Level lvl)
 Update outputlevel.

Static Public Member Functions

static void unit_test ATLAS_NOT_THREAD_SAFE (TH2 *hist=nullptr)
static double CheckAndIntegrate2DHistogram (const TH2 *hist, std::vector< double > &integral_vec, int &first, int &last)
static void unit_test ATLAS_NOT_THREAD_SAFE (TH2 *hist=nullptr, TFCS2DFunction *rtof=nullptr, const char *outfilename="TFCS2DFunction_unit_test.root", int nrnd=10000000)
static void unit_tests ATLAS_NOT_THREAD_SAFE (TH2 *hist=nullptr, const char *outfilename="TFCS2DFunction_unit_test.root", int nrnd=10000000)
static std::string startMsg (MSG::Level lvl, const std::string &file, int line)
 Make a message to decorate the start of logging.

Protected Attributes

std::vector< float > m_HistoBorders
std::vector< float > m_HistoBordersy
std::vector< float > m_HistoContents

Private Attributes

std::string m_nm
 Message source name.

Static Private Attributes

static boost::thread_specific_ptr< MsgStream > m_msg_tls ATLAS_THREAD_SAFE
 Do not persistify!

Detailed Description

Definition at line 15 of file TFCS2DFunctionHistogram.h.

Constructor & Destructor Documentation

◆ TFCS2DFunctionHistogram()

TFCS2DFunctionHistogram::TFCS2DFunctionHistogram ( TH2 * hist = nullptr)
inline

Definition at line 17 of file TFCS2DFunctionHistogram.h.

17 {
18 if (hist)
19 Initialize(hist);
20 };

◆ ~TFCS2DFunctionHistogram()

TFCS2DFunctionHistogram::~TFCS2DFunctionHistogram ( )
inline

Definition at line 21 of file TFCS2DFunctionHistogram.h.

21{};

Member Function Documentation

◆ ATLAS_NOT_THREAD_SAFE() [1/3]

void unit_tests TFCS2DFunction::ATLAS_NOT_THREAD_SAFE ( TH2 * hist = nullptr,
const char * outfilename = "TFCS2DFunction_unit_test.root",
int nrnd = 10000000 )
staticinherited

◆ ATLAS_NOT_THREAD_SAFE() [2/3]

void unit_test TFCS2DFunction::ATLAS_NOT_THREAD_SAFE ( TH2 * hist = nullptr,
TFCS2DFunction * rtof = nullptr,
const char * outfilename = "TFCS2DFunction_unit_test.root",
int nrnd = 10000000 )
staticinherited

◆ ATLAS_NOT_THREAD_SAFE() [3/3]

void unit_test TFCS2DFunctionHistogram::ATLAS_NOT_THREAD_SAFE ( TH2 * hist = nullptr)
static

◆ CheckAndIntegrate2DHistogram()

double TFCS2DFunction::CheckAndIntegrate2DHistogram ( const TH2 * hist,
std::vector< double > & integral_vec,
int & first,
int & last )
staticinherited

Definition at line 26 of file TFCS2DFunction.cxx.

27 {
28 ISF_FCS::MLogging logger;
29 Int_t nbinsx = hist->GetNbinsX();
30 Int_t nbinsy = hist->GetNbinsY();
31 Int_t nbins = nbinsx * nbinsy;
32
33 float integral = 0.0;
34 float hint = hist->Integral();
35 integral_vec.resize(nbins);
36
37 for (int ix = 1; ix <= nbinsx; ix++) {
38 for (int iy = 1; iy <= nbinsy; iy++) {
39 int globalbin = (ix - 1) * nbinsy + iy - 1;
40 float binval = hist->GetBinContent(ix, iy);
41 if (binval < 0) {
42 // Can't work if a bin is negative, forcing bins to 0 in this case
43 double fraction = binval / hint;
44 if (std::abs(fraction) > 1e-5) {
46 "Warning: bin content is negative in histogram "
47 << hist->GetName() << " : " << hist->GetTitle()
48 << " binval=" << binval << " " << fraction * 100
49 << "% of integral=" << hist->Integral()
50 << ". Forcing bin to 0.");
51 }
52 binval = 0;
53 }
54 integral += binval;
55 integral_vec[globalbin] = integral;
56 }
57 }
58
59 for (first = 0; first < nbins; first++)
60 if (integral_vec[first] != 0)
61 break;
62 for (last = nbins - 1; last > 0; last--)
63 if (integral_vec[last] != integral)
64 break;
65 last++;
66
67 if (integral <= 0) {
68 ATH_MSG_NOCLASS(logger, "Error: histogram "
69 << hist->GetName() << " : " << hist->GetTitle()
70 << " integral=" << integral << " is <=0");
71 }
72
73 return integral;
74}
#define ATH_MSG_NOCLASS(logger_name, x)
Definition MLogging.h:52
double integral(TH1 *h)
Definition computils.cxx:59
static Root::TMsgLogger logger("iLumiCalc")
bool first
Definition DeMoScan.py:534

◆ get_HistoBordersx() [1/2]

std::vector< float > & TFCS2DFunctionHistogram::get_HistoBordersx ( )
inline

Definition at line 32 of file TFCS2DFunctionHistogram.h.

32{ return m_HistoBorders; };
std::vector< float > m_HistoBorders

◆ get_HistoBordersx() [2/2]

const std::vector< float > & TFCS2DFunctionHistogram::get_HistoBordersx ( ) const
inline

Definition at line 29 of file TFCS2DFunctionHistogram.h.

29 {
30 return m_HistoBorders;
31 };

◆ get_HistoBordersy() [1/2]

std::vector< float > & TFCS2DFunctionHistogram::get_HistoBordersy ( )
inline

Definition at line 36 of file TFCS2DFunctionHistogram.h.

36{ return m_HistoBordersy; };
std::vector< float > m_HistoBordersy

◆ get_HistoBordersy() [2/2]

const std::vector< float > & TFCS2DFunctionHistogram::get_HistoBordersy ( ) const
inline

Definition at line 33 of file TFCS2DFunctionHistogram.h.

33 {
34 return m_HistoBordersy;
35 };

◆ get_HistoContents() [1/2]

std::vector< float > & TFCS2DFunctionHistogram::get_HistoContents ( )
inline

Definition at line 40 of file TFCS2DFunctionHistogram.h.

40{ return m_HistoContents; };
std::vector< float > m_HistoContents

◆ get_HistoContents() [2/2]

const std::vector< float > & TFCS2DFunctionHistogram::get_HistoContents ( ) const
inline

Definition at line 37 of file TFCS2DFunctionHistogram.h.

37 {
38 return m_HistoContents;
39 };

◆ Initialize()

void TFCS2DFunctionHistogram::Initialize ( TH2 * hist)

Definition at line 18 of file TFCS2DFunctionHistogram.cxx.

18 {
19 Int_t nbinsx = hist->GetNbinsX();
20 Int_t nbinsy = hist->GetNbinsY();
21 Int_t nbins = nbinsx * nbinsy;
22
23 float integral = 0;
24 m_HistoBorders.resize(nbinsx + 1);
25 m_HistoBordersy.resize(nbinsy + 1);
26 m_HistoContents.resize(nbins);
27 int ibin = 0;
28 for (int iy = 1; iy <= nbinsy; iy++) {
29 for (int ix = 1; ix <= nbinsx; ix++) {
30 float binval = hist->GetBinContent(ix, iy);
31 if (binval < 0) {
32 // Can't work if a bin is negative, forcing bins to 0 in this case
33 double fraction = binval / hist->Integral();
34 if (TMath::Abs(fraction) > 1e-5) {
35 ATH_MSG_WARNING("bin content is negative in histogram "
36 << hist->GetName() << " : " << hist->GetTitle()
37 << " binval=" << binval << " " << fraction * 100
38 << "% of integral=" << hist->Integral()
39 << ". Forcing bin to 0.");
40 }
41 binval = 0;
42 }
43 integral += binval;
45 ++ibin;
46 }
47 }
48 if (integral <= 0) {
49 ATH_MSG_ERROR("histogram " << hist->GetName() << " : " << hist->GetTitle()
50 << " integral=" << integral << " is <=0");
51 m_HistoBorders.resize(0);
52 m_HistoBordersy.resize(0);
53 m_HistoContents.resize(0);
54 return;
55 }
56
57 for (int ix = 1; ix <= nbinsx; ix++)
58 m_HistoBorders[ix - 1] = hist->GetXaxis()->GetBinLowEdge(ix);
59 m_HistoBorders[nbinsx] = hist->GetXaxis()->GetXmax();
60
61 for (int iy = 1; iy <= nbinsy; iy++)
62 m_HistoBordersy[iy - 1] = hist->GetYaxis()->GetBinLowEdge(iy);
63 m_HistoBordersy[nbinsy] = hist->GetYaxis()->GetXmax();
64
65 for (ibin = 0; ibin < nbins; ++ibin)
67}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)

◆ level()

MSG::Level ISF_FCS::MLogging::level ( ) const
inlineinherited

Retrieve output level.

Definition at line 201 of file MLogging.h.

201{ return msg().level(); }
MsgStream & msg() const
Return a stream for sending messages directly (no decoration)
Definition MLogging.h:231

◆ MemorySize()

virtual std::size_t TFCSFunction::MemorySize ( ) const
inlinevirtualinherited

Gives the total memory size, including the size of additional memory allocated inside the class.

Reimplemented in TFCS1DFunctionTemplateHistogram< Txvec, Ty, Trandom >, TFCS1DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float >, TFCS1DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float >, TFCS1DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float >, TFCS1DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float >, TFCS1DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float >, TFCS1DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float >, TFCS1DFunctionTemplateHistogram< Txvec, Ty, float >, TFCS2DFunctionTemplateHistogram< Txvec, Tyvec, Tz, Trandom >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float >, TFCS2DFunctionTemplateHistogram< TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float >, and TFCS2DFunctionTemplateHistogram< Txvec, Tyvec, Tz, float >.

Definition at line 19 of file TFCSFunction.h.

19{ return sizeof(*this); };

◆ msg() [1/2]

MsgStream & ISF_FCS::MLogging::msg ( ) const
inlineinherited

Return a stream for sending messages directly (no decoration)

Definition at line 231 of file MLogging.h.

231 {
232 MsgStream *ms = m_msg_tls.get();
233 if (!ms) {
234 ms = new MsgStream(Athena::getMessageSvc(), m_nm);
235 m_msg_tls.reset(ms);
236 }
237 return *ms;
238}
std::string m_nm
Message source name.
Definition MLogging.h:211
IMessageSvc * getMessageSvc(bool quiet=false)

◆ msg() [2/2]

MsgStream & ISF_FCS::MLogging::msg ( const MSG::Level lvl) const
inlineinherited

Return a decorated starting stream for sending messages.

Definition at line 240 of file MLogging.h.

240 {
241 return msg() << lvl;
242}

◆ msgLvl()

bool ISF_FCS::MLogging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Check whether the logging system is active at the provided verbosity level.

Definition at line 222 of file MLogging.h.

222 {
223 if (msg().level() <= lvl) {
224 msg() << lvl;
225 return true;
226 } else {
227 return false;
228 }
229}
MSG::Level level() const
Retrieve output level.
Definition MLogging.h:201

◆ ndim()

virtual int TFCS2DFunction::ndim ( ) const
inlinevirtualinherited

Return the number of dimensions for the function.

Reimplemented from TFCSFunction.

Definition at line 20 of file TFCS2DFunction.h.

20{ return 2; };

◆ rnd_to_fct() [1/2]

void TFCS2DFunctionHistogram::rnd_to_fct ( float & valuex,
float & valuey,
float rnd0,
float rnd1 ) const
virtual

Implements TFCS2DFunction.

Definition at line 69 of file TFCS2DFunctionHistogram.cxx.

70 {
71 if (m_HistoContents.empty()) {
72 valuex = 0;
73 valuey = 0;
74 return;
75 }
76 auto it =
77 std::upper_bound(m_HistoContents.begin(), m_HistoContents.end(), rnd0);
78 int ibin = std::distance(m_HistoContents.begin(), it);
79 if (ibin >= (int)m_HistoContents.size())
80 ibin = m_HistoContents.size() - 1;
81 Int_t nbinsx = m_HistoBorders.size() - 1;
82 Int_t biny = ibin / nbinsx;
83 Int_t binx = ibin - nbinsx * biny;
84
85 float basecont = 0;
86 if (ibin > 0)
87 basecont = m_HistoContents[ibin - 1];
88
89 float dcont = m_HistoContents[ibin] - basecont;
90 if (dcont > 0) {
91 valuex = m_HistoBorders[binx] +
92 (m_HistoBorders[binx + 1] - m_HistoBorders[binx]) *
93 (rnd0 - basecont) / dcont;
94 } else {
95 valuex = m_HistoBorders[binx] +
96 (m_HistoBorders[binx + 1] - m_HistoBorders[binx]) / 2;
97 }
98 valuey = m_HistoBordersy[biny] +
99 (m_HistoBordersy[biny + 1] - m_HistoBordersy[biny]) * rnd1;
100}

◆ rnd_to_fct() [2/2]

void TFCS2DFunction::rnd_to_fct ( float value[],
const float rnd[] ) const
virtual

Function gets array of random numbers rnd[] in the range [0,1) as arguments and returns function value in array value.

For a n-dimensional function, value and rnd should both have n elements.

Reimplemented from TFCS2DFunction.

Definition at line 24 of file TFCS2DFunction.cxx.

20 {
21 rnd_to_fct(value[0], value[1], rnd[0], rnd[1]);
22}
static TRandom * rnd
virtual void rnd_to_fct(float &valuex, float &valuey, float rnd0, float rnd1) const

◆ setLevel()

void ISF_FCS::MLogging::setLevel ( MSG::Level lvl)
virtualinherited

Update outputlevel.

Definition at line 105 of file MLogging.cxx.

105 {
106 lvl = (lvl >= MSG::NUM_LEVELS) ? MSG::ALWAYS
107 : (lvl < MSG::NIL) ? MSG::NIL
108 : lvl;
109 msg().setLevel(lvl);
110}

◆ startMsg()

std::string ISF_FCS::MLogging::startMsg ( MSG::Level lvl,
const std::string & file,
int line )
staticinherited

Make a message to decorate the start of logging.

Print a message for the start of logging.

Definition at line 116 of file MLogging.cxx.

116 {
117 int col1_len = 20;
118 int col2_len = 5;
119 int col3_len = 10;
120 auto last_slash = file.find_last_of('/');
121 int path_len = last_slash == std::string::npos ? 0 : last_slash;
122 int trim_point = path_len;
123 int total_len = file.length();
124 if (total_len - path_len > col1_len)
125 trim_point = total_len - col1_len;
126 std::string trimmed_name = file.substr(trim_point);
127 const char *LevelNames[MSG::NUM_LEVELS] = {
128 "NIL", "VERBOSE", "DEBUG", "INFO", "WARNING", "ERROR", "FATAL", "ALWAYS"};
129 std::string level = LevelNames[lvl];
130 std::string level_string = std::string("(") + level + ") ";
131 std::stringstream output;
132 output << std::setw(col1_len) << std::right << trimmed_name << ":"
133 << std::setw(col2_len) << std::left << line << std::setw(col3_len)
134 << std::right << level_string;
135 return output.str();
136}
output
Definition merge.py:16
TFile * file

Member Data Documentation

◆ ATLAS_THREAD_SAFE

boost::thread_specific_ptr<MsgStream> m_msg_tls ISF_FCS::MLogging::ATLAS_THREAD_SAFE
inlinestaticprivateinherited

Do not persistify!

MsgStream instance (a std::cout like with print-out levels)

Definition at line 215 of file MLogging.h.

◆ m_HistoBorders

std::vector<float> TFCS2DFunctionHistogram::m_HistoBorders
protected

Definition at line 45 of file TFCS2DFunctionHistogram.h.

◆ m_HistoBordersy

std::vector<float> TFCS2DFunctionHistogram::m_HistoBordersy
protected

Definition at line 46 of file TFCS2DFunctionHistogram.h.

◆ m_HistoContents

std::vector<float> TFCS2DFunctionHistogram::m_HistoContents
protected

Definition at line 47 of file TFCS2DFunctionHistogram.h.

◆ m_nm

std::string ISF_FCS::MLogging::m_nm
privateinherited

Message source name.

Definition at line 211 of file MLogging.h.


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