ATLAS Offline Software
Loading...
Searching...
No Matches
generate.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
10
11#ifndef GENERATE_H
12#define GENERATE_H
13
14
15#include <cmath>
16#include <vector>
17#include <iostream>
18
19#include "TH1D.h"
20
21#include "BasicRandom.h"
22
23
24namespace generate {
25
27double get_mean( const std::vector<double>& m );
28double get_rms( const std::vector<double>& m );
29
30
32TH1D* integrate( TH1D* hin );
33
35void ScaleIntegral(TH1D* hin );
36
38TH1D* PDF(TH1D* hin);
39
42TH1D* smooth( TH1D* hin, bool sym=true );
43
44
47public:
48 virtual ~generator_base() { }
49 virtual double generate() const = 0;
50};
51
52
53
56
57 public:
58
59 virtual double generate() const {
60 static BasicRandom r;
61 double x = std::tan((r.uniform()-0.5)*M_PI);
62 return x;
63 }
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(m_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
122
123};
124
125
126
127
131
133
134public:
135
136 experiment( TH1D* h, int Nexperiments=10, int fevents=0 );
137 experiment(const experiment& ) = delete;
138 experiment operator=(const experiment& ) = delete;
139
140 double hmean() const { return m_hmean; }
141 double hrms() const { return m_hrms; }
142
143 double mean() const { return m_global_mean; }
144 double mean_error() const { return m_global_mean_error; }
145
146 double rms() const { return m_global_rms; }
147 double rms_error() const { return m_global_rms_error; }
148
149 generator_base* gen() { return m_gen; }
150
151 TH1D* rmshisto() { return m_THrms; }
152
153private:
154
155 int m_N;
156
157 std::vector<double> m_mean;
158 std::vector<double> m_rms;
159
160 double m_hmean;
161 double m_hrms;
162
166
169
171
172 TH1D* m_THrms;
173};
174
175
176
177} // namespace generate
178
179#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:55
virtual double generate() const
Definition generate.h:59
generator_base * gen()
Definition generate.h:149
double mean_error() const
Definition generate.h:144
double mean() const
Definition generate.h:143
experiment(const experiment &)=delete
experiment operator=(const experiment &)=delete
double rms() const
Definition generate.h:146
std::vector< double > m_mean
number of experiments
Definition generate.h:157
double m_global_mean_error
Definition generate.h:165
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
double hmean() const
Definition generate.h:140
double hrms() const
Definition generate.h:141
double m_hmean
rms from each experiment
Definition generate.h:160
generator_base * m_gen
Definition generate.h:170
double m_global_rms_error
Definition generate.h:168
double rms_error() const
Definition generate.h:147
double m_hrms
actual histogram mean95
Definition generate.h:161
double m_global_mean
actual histogram rms95
Definition generate.h:164
std::vector< double > m_rms
means from each experiment
Definition generate.h:158
base class for a "generator" class
Definition generate.h:46
virtual double generate() const =0
virtual ~generator_base()
Definition generate.h:48
double generate() const
actually generate a random number from the distribution
Definition generate.h:84
hist_generator(const hist_generator &)=delete
std::vector< double > m_y
Definition generate.h:108
std::vector< double > m_x
Definition generate.h:109
hist_generator operator=(const hist_generator &)=delete
BasicRandom * m_random
Definition generate.h:121
std::vector< double > m_dy
Definition generate.h:113
hist_generator(TH1D *h, bool smooth_=true)
Definition generate.cxx:231
virtual ~hist_generator()
Definition generate.h:81
std::vector< double > m_dxdy
Definition generate.h:115
std::vector< double > m_dx
Definition generate.h:112
double invert(double y) const
Definition generate.h:99
int getbin(double y) const
Definition generate.h:94
int r
Definition globals.cxx:22
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
void ScaleIntegral(TH1D *hin)
scale a distribution by the integral
Definition generate.cxx:92
TH1D * PDF(TH1D *hin)
generate a (normalised) pdf from a distribution
Definition generate.cxx:112
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