ATLAS Offline Software
Loading...
Searching...
No Matches
generate.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
9
10#ifndef GENERATE_H
11#define GENERATE_H
12
13
14#include <cmath>
15#include <vector>
16#include <iostream>
17
18#include "TH1D.h"
19
20#include "BasicRandom.h"
21
22
23namespace Resplot::generate {
24
26double get_mean( const std::vector<double>& m );
27double get_rms( const std::vector<double>& m );
28
29
31TH1D* integrate( TH1D* hin );
32
34void ScaleIntegral(TH1D* hin );
35
37TH1D* PDF(TH1D* hin);
38
41TH1D* smooth( TH1D* hin, bool sym=true );
42
43
46public:
47 virtual ~generator_base() { }
48 virtual double generate() const = 0;
49};
50
51
52
55
56public:
57
58 virtual double generate() const {
59 double x = std::tan((r.uniform()-0.5)*M_PI);
60 return x;
61 }
62
63 static inline thread_local BasicRandom r;
64
65};
66
67
68
69
73
74public:
75
76 hist_generator(TH1D* h, bool smooth_=true );
77
78 hist_generator(const hist_generator &) = delete;
80
81 virtual ~hist_generator() { delete m_s; } // if ( m_random ) delete m_random; }
82
84 double generate() const {
85 return invert(s_random.uniform());
86 }
87
88 TH1D* histogram() { return m_s; }
89 TH1D* rawhistogram() { return m_raw; }
90 TH1D* smoothhistogram() { return m_smooth; }
91
92private:
93
94 int getbin( double y ) const {
95 for ( unsigned i=0 ; i<m_y.size() ; i++ ) if ( y<=m_y[i] ) return i;
96 return m_y.size()-1;
97 }
98
99 double invert( double y ) const {
100 int i = getbin(y);
101 if ( i==0 ) return 0;
102 else return (y-m_y[i-1])*m_dxdy[i-1]+m_x[i-1];
103 }
104
105
106private:
107
108 std::vector<double> m_y;
109 std::vector<double> m_x;
110
111
112 std::vector<double> m_dx;
113 std::vector<double> m_dy;
114
115 std::vector<double> m_dxdy;
116
117 TH1D* m_s; // accumated histogram
118 TH1D* m_raw; // raw histogram
119 TH1D* m_smooth; // smoothed raw histogram
120
121 // static BasicRandom* m_random;
122
123 static inline thread_local BasicRandom s_random = BasicRandom(true);
124
125};
126
127
128
129
133
135
136public:
137
138 experiment( TH1D* h, int Nexperiments=10, int fevents=0 );
139 experiment(const experiment& ) = delete;
140 experiment operator=(const experiment& ) = delete;
141
142 double hmean() const { return m_hmean; }
143 double hrms() const { return m_hrms; }
144
145 double mean() const { return m_global_mean; }
146 double mean_error() const { return m_global_mean_error; }
147
148 double rms() const { return m_global_rms; }
149 double rms_error() const { return m_global_rms_error; }
150
151 generator_base* gen() { return m_gen; }
152
153 TH1D* rmshisto() { return m_THrms; }
154
155private:
156
157 int m_N;
158
159 std::vector<double> m_mean;
160 std::vector<double> m_rms;
161
162 double m_hmean;
163 double m_hrms;
164
168
171
173
174 TH1D* m_THrms;
175};
176
177
178
179} // namespace generate
180
181#endif // GENERATE_H
#define M_PI
a Randomnumber generator with a data member TRandom3 so that we can either use a shared generator or ...
#define y
#define x
Header file for AthHistogramAlgorithm.
breit-wigner generator
Definition generate.h:54
virtual double generate() const
Definition generate.h:58
std::vector< double > m_mean
number of experiments
Definition generate.h:159
experiment operator=(const experiment &)=delete
double m_hrms
actual histogram mean95
Definition generate.h:163
std::vector< double > m_rms
means from each experiment
Definition generate.h:160
experiment(TH1D *h, int Nexperiments=10, int fevents=0)
given a distribution, gnerate some number of pseudo experiments to estimate the uncertainties in the ...
Definition generate.cxx:302
experiment(const experiment &)=delete
double m_global_mean
actual histogram rms95
Definition generate.h:166
double m_hmean
rms from each experiment
Definition generate.h:162
generator_base * gen()
Definition generate.h:151
base class for a "generator" class
Definition generate.h:45
virtual double generate() const =0
hist_generator operator=(const hist_generator &)=delete
hist_generator(const hist_generator &)=delete
std::vector< double > m_dx
Definition generate.h:112
hist_generator(TH1D *h, bool smooth_=true)
Definition generate.cxx:231
static BasicRandom s_random
Definition generate.h:123
std::vector< double > m_dy
Definition generate.h:113
std::vector< double > m_dxdy
Definition generate.h:115
double generate() const
actually generate a random number from the distribution
Definition generate.h:84
int getbin(double y) const
Definition generate.h:94
double invert(double y) const
Definition generate.h:99
std::vector< double > m_y
Definition generate.h:108
std::vector< double > m_x
Definition generate.h:109
void ScaleIntegral(TH1D *hin)
scale a distribution by the integral
Definition generate.cxx:92
TH1D * smooth(TH1D *hin, bool sym)
smooth a distribution about the maximum NB: maximum is not smoothed
Definition generate.cxx:158
TH1D * integrate(TH1D *hin)
generate an integrated distribution
Definition generate.cxx:68
double get_rms(const std::vector< double > &m)
Definition generate.cxx:54
double get_mean(const std::vector< double > &m)
mean and rms
Definition generate.cxx:47
TH1D * PDF(TH1D *hin)
generate a (normalised) pdf from a distribution
Definition generate.cxx:112