36 for (Int_t ix = 1; ix <= h1->GetXaxis()->GetNbins(); ++ix){
38 const double x = h1->GetXaxis()->GetBinCenter(ix);
40 h1->SetBinContent(ix, gRandom->Poisson(f1(x)));
42 if (h1->GetSumw2N() != 0) {
43 h1->SetBinError(ix, sqrt(h1->GetBinContent(ix)));
58 for (Int_t ix = 1; ix <= h2->GetXaxis()->GetNbins(); ++ix){
59 for (Int_t iy = 1; iy <= h2->GetYaxis()->GetNbins(); ++iy){
61 const double x = h2->GetXaxis()->GetBinCenter(ix);
62 const double y = h2->GetYaxis()->GetBinCenter(iy);
64 h2->SetBinContent(ix, iy, gRandom->Poisson(f2(x,y)));
66 if (h2->GetSumw2N() != 0) {
67 h2->SetBinError(ix, iy, sqrt(h2->GetBinContent(ix,iy)));
83 for (Int_t ix = 1; ix <= h3->GetXaxis()->GetNbins(); ++ix){
84 for (Int_t iy = 1; iy <= h3->GetYaxis()->GetNbins(); ++iy){
85 for (Int_t iz = 1; iz <= h3->GetZaxis()->GetNbins(); ++iz){
87 const double x = h3->GetXaxis()->GetBinCenter(ix);
88 const double y = h3->GetYaxis()->GetBinCenter(iy);
89 const double z = h3->GetZaxis()->GetBinCenter(iz);
91 h3->SetBinContent(ix, iy, iz, gRandom->Poisson(
f3(x,y,z)));
93 if (h3->GetSumw2N() != 0) {
94 h3->SetBinError(ix, iy, iy, sqrt(h3->GetBinContent(ix,iy,iz)));
110 inline void FillRandom(TH1* h1,
const T& f1,
const size_t ns)
119 inline bool operator<(
const double W)
const {
return this->W < W; }
126 for (Int_t ix = 1; ix <= h1->GetXaxis()->GetNbins(); ++ix){
128 const Double_t x = h1->GetXaxis()->GetBinCenter(ix);
132 buffer.push_back({x, W});
135 for (
size_t i = 0; i != ns; ++i) {
137 typename vector<tuple_t>::const_iterator p = lower_bound(buffer.begin(), buffer.end(), W * gRandom->Rndm());
152 inline void FillRandom(TH2* h2,
const T& f2,
const size_t ns)
162 inline bool operator<(
const double W)
const {
return this->W < W; }
169 for (Int_t ix = 1; ix <= h2->GetXaxis()->GetNbins(); ++ix){
170 for (Int_t iy = 1; iy <= h2->GetYaxis()->GetNbins(); ++iy){
172 const Double_t x = h2->GetXaxis()->GetBinCenter(ix);
173 const Double_t y = h2->GetYaxis()->GetBinCenter(iy);
177 buffer.push_back({x, y, W});
181 for (
size_t i = 0; i != ns; ++i) {
183 typename vector<tuple_t>::const_iterator p = lower_bound(buffer.begin(), buffer.end(), W * gRandom->Rndm());
185 h2->Fill(p->x, p->y);
209 inline bool operator<(
const double W)
const {
return this->W < W; }
216 for (Int_t ix = 1; ix <= h3->GetXaxis()->GetNbins(); ++ix){
217 for (Int_t iy = 1; iy <= h3->GetYaxis()->GetNbins(); ++iy){
218 for (Int_t iz = 1; iz <= h3->GetYaxis()->GetNbins(); ++iz){
220 const Double_t x = h3->GetXaxis()->GetBinCenter(ix);
221 const Double_t y = h3->GetYaxis()->GetBinCenter(iy);
222 const Double_t z = h3->GetZaxis()->GetBinCenter(iz);
226 buffer.push_back({x, y, z, W});
231 for (
size_t i = 0; i != ns; ++i) {
233 typename vector<tuple_t>::const_iterator p = lower_bound(buffer.begin(), buffer.end(), W * gRandom->Rndm());
235 h3->Fill(p->x, p->y, p->z);