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]);