1 #ifndef __JSUPERNOVA_JL0BACKGROUNDSIMULATOR__
2 #define __JSUPERNOVA_JL0BACKGROUNDSIMULATOR__
42 int n = in->GetNbinsX();
46 for (
int i = 0; i <
n; i++) {
47 out[i] = in->GetBinContent(i + 1);
90 TString rt_tag =
".RT_DET_SUM";
91 TString nc_tag =
".NC_DET_SUM";
92 TString rt2d_tag =
".RT2D_DET";
96 TIter iter(in->GetListOfKeys());
98 for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
100 const TString tag(key->GetName());
103 if (tag.EndsWith(rt_tag)) {
105 TString rt_hist_tag = tag;
106 TString run_tag = TString(tag, tag.Length() - rt_tag.Length());
108 TString nc_hist_tag = run_tag + nc_tag;
110 TH1D* RT = (TH1D*) in->Get(rt_hist_tag);
111 TH1D* NC = (TH1D*) in->Get(nc_hist_tag);
116 int n = nc_buf.size();
123 for (
int i = 0; i <
n; i++) {
126 nc.back().push_back( nc_buf[i] );
127 for (
int j = 100 * i;
j < 100 * (i + 1);
j++) {
128 rt.back().push_back( rt_buf[
j] );
134 TString rt2d_hist_tag = run_tag + rt2d_tag;
135 h2d_t* RT2D = (
h2d_t*) in->Get(rt2d_hist_tag);
138 RT2D->SetDirectory(0);
139 rt2d.push_back(RT2D);
192 genRatio = oSize / iSize;
194 genScale = oSize / (1.0 * iSize * genRatio);
208 int k = rnd->Integer(rt.size());
210 int limit = rt[k].size() - (genRatio * TWindow_ms);
212 int start = rnd->Integer(limit);
214 for (
int i = 0; i < genRatio; i++) {
216 for (
int j = 0;
j < TWindow_ms;
j++) {
218 int bin = start + (i * TWindow_ms) +
j;
220 out[0][
j] += genScale * rt[k].at(bin );
221 out[1][
j] += genScale * nc[k].at(bin / 100);
237 double mu = outputSize * 18 * domRate_Hz * 1.0e-3;
239 for (
unsigned i = 0; i < out[0].size(); i++) {
241 double count = rnd->Poisson(mu);
244 out[1][i] = outputSize * 18 * 31;
262 int nRuns = rt.size();
264 int k = rnd->Integer(nRuns);
269 int offset = rnd->Integer(100);
271 for (
int i = 0; i < genRatio; i++) {
273 int start = 100 * rnd->Integer(nc[k].size() - ceil(TWindow_ms / 100.0)) + offset;
275 for (
int j = 0;
j < TWindow_ms;
j++) {
279 out[0][
j] += genScale * rt[k].at(bin );
280 out[1][
j] += genScale * nc[k].at(bin / 100);
285 k = rnd->Integer(nRuns);
299 h2d_t* proto = rt2d[k];
301 int ny = proto->GetNbinsY();
302 int ymin = proto->GetYaxis()->GetXmin();
303 int ymax = proto->GetYaxis()->GetXmax();
305 h2d_t* out =
new h2d_t(
"sample", NULL, TWindow_ms, 0, TWindow_ms, ny, ymin, ymax);
307 for (
int i = 0; i < genRatio; i++) {
309 for (
int j = 0;
j < TWindow_ms;
j++) {
311 int xbin = 1 + start + (i * TWindow_ms) +
j;
313 for (
int ybin = 1; ybin <= rt2d[k]->GetNbinsY(); ybin++) {
315 double val = rt2d[k]->GetBinContent(xbin, ybin);
317 double bcx = ((TAxis*)out->GetXaxis())->GetBinCenter(
j + 1);
318 double bcy = ((TAxis*)out->GetYaxis())->GetBinCenter(ybin);
320 out->Fill(bcx, bcy, val);
340 for (
int i = 0; i < genRatio; i++) {
342 for (
int j = 0;
j < TWindow_ms;
j++) {
344 int bin = start + (i * TWindow_ms) +
j;
346 out[
j] += genScale * nc[k].at(bin / 100);
360 const int n = in.size();
364 for (
int i = 0; i <
n; i++) {
379 if (rt2d.size() > 0) {
381 int k = rnd->Integer(rt2d.size());
383 int limit = rt2d[k]->GetNbinsX() - (genRatio * TWindow_ms);
385 int start = rnd->Integer(limit);
387 out = build_H2D(k, start);
391 if (rb != 1) { out->RebinX(rb); }
403 int n = in->GetNbinsX();
411 for (
int bin = 1; bin <=
n; bin++) {
413 double sg = 0, bg = 0, er = 0;
415 TH1D* h = in->ProjectionY(
"timeBin", bin, bin);
417 if (h->GetEntries() > 0) {
419 TF1 f(
"f",
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2]))/(TMath::Sqrt(2*TMath::Pi())*[2]) + [3]");
421 f.SetParameter(0, h->GetMaximum());
422 f.SetParameter(1, h->GetMean());
423 f.SetParameter(2, h->GetRMS() * 0.25);
424 f.SetParameter(3, h->GetMinimum());
426 h->Fit(&f,
"Q",
"same");
428 bg = f.GetParameter(3) * h->GetNbinsX();
429 sg = h->GetSumOfWeights() - bg;
430 er = f.GetParError(3) * h->GetNbinsX();
457 int k = rnd->Integer(rt.size());
459 int limit = rt[k].size() - (genRatio * TWindow_ms);
461 int start = rnd->Integer(limit);
463 h2d_t* sample = build_H2D(k, start);
465 if (rb != 1) { sample->RebinX(rb); }
469 out.push_back(fit[0]);
474 out.push_back(build_NC(k, start));
476 out.push_back(rebin(build_NC(k, start), rb));
479 out.push_back(fit[1]);
480 out.push_back(fit[2]);