102 {
104 int nbinsx;
105 int nbinsy;
106 if (hist == nullptr) {
107
108 nbinsx = 64;
109 nbinsy = 64;
110 hist =
new TH2F(
"test2D",
"test2D", nbinsx, 0, 1, nbinsy, 0, 1);
112 for (int ix = 1; ix <= nbinsx; ++ix) {
113 for (int iy = 1; iy <= nbinsy; ++iy) {
114 hist->SetBinContent(ix, iy,
115 (0.5 + gRandom->Rndm()) * (nbinsx + ix) *
116 (nbinsy * nbinsy / 2 + iy * iy));
117 if (gRandom->Rndm() < 0.1)
118 hist->SetBinContent(ix, iy, 0);
119 hist->SetBinError(ix, iy, 0);
120 }
121 }
122 }
124 nbinsx =
hist->GetNbinsX();
125 nbinsy =
hist->GetNbinsY();
126
129
130 for (
rnd[0] = 0;
rnd[0] < 0.9999;
rnd[0] += 0.25) {
131 for (
rnd[1] = 0;
rnd[1] < 0.9999;
rnd[1] += 0.25) {
132 rtof.rnd_to_fct(value,
rnd);
134 << " -> x=" << value[0]
135 << " y=" << value[1]);
136 }
137 }
138
139
140
141
143 hist_val->Reset();
144 int nrnd = 100000000;
146 hist_val->Sumw2();
147 for (
int i = 0;
i < nrnd; ++
i) {
148 rnd[0] = gRandom->Rndm();
149 rnd[1] = gRandom->Rndm();
150 rtof.rnd_to_fct(value,
rnd);
151 hist_val->Fill(value[0], value[1], weight);
152 }
153 hist_val->Add(hist, -1);
154
155 TH1F *hist_pull =
new TH1F(
"pull",
"pull", 80, -4, 4);
156 for (int ix = 1; ix <= nbinsx; ++ix) {
157 for (int iy = 1; iy <= nbinsy; ++iy) {
158 float val = hist_val->GetBinContent(ix, iy);
159 float err = hist_val->GetBinError(ix, iy);
160 if (err > 0)
161 hist_pull->Fill(val / err);
163 }
164 }
165
167 TFile::Open("TFCS2DFunctionHistogram_unit_test.root", "RECREATE"));
170 hist_val->Write();
171 hist_pull->Write();
174 }
175
176
177
178#if defined(__FastCaloSimStandAlone__)
179 new TCanvas("input", "Input");
181
182 new TCanvas("validation", "Validation");
183 hist_val->Draw("colz");
184
185 new TCanvas("pull", "Pull");
186 hist_pull->Draw();
187#endif
188}
#define ATH_MSG_NOCLASS(logger_name, x)
static Root::TMsgLogger logger("iLumiCalc")
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)