20 void tprofile2polyRealistic(Int_t numEvents=100000)
 
   23    TCanvas *c1 = 
new TCanvas(
"c1", 
"moving charge", 900, 400);
 
   24    TCanvas *c2 = 
new TCanvas(
"c2", 
"Merge Individual moving charge plots", 800, 400);
 
   26    c1->Divide(NUM_LS, 3);
 
   30    auto new_avg = 
new TProfile2Poly();
 
   32    auto tot_avg_ls = 
new TProfile2Poly[NUM_LS];
 
   33    auto det_avg_ls = 
new TProfile2Poly[NUM_LS];
 
   34    auto det_err_ls = 
new TProfile2Poly[NUM_LS];
 
   35    auto tot_merge = 
new TProfile2Poly();
 
   36    auto det_avg_merge = 
new TProfile2Poly();
 
   37    auto det_err_merge = 
new TProfile2Poly();
 
   45    for (
float i = minx; i < maxx; i += binsz) {
 
   46       for (
float j = miny; j < maxy; j += binsz) {
 
   47         tot_merge->AddBin(i, j, i + binsz, j + binsz);
 
   48         for (
int l=0; l<NUM_LS; ++l) {
 
   49           tot_avg_ls[l].AddBin(i, j, i + binsz, j + binsz);
 
   55    auto h2p = 
new TH2Poly();
 
   56    auto tp2p = 
new TProfile2Poly();
 
   58    TString dir = gROOT->GetTutorialDir();
 
   59    dir.Append(
"/hist/data/tprofile2poly_tutorial.data");
 
   60    infile.open(dir.Data());
 
   64       std::cerr << dir.Data() << std::endl; 
 
   65       std::cerr << 
"Error code: " << strerror(errno) << std::endl; 
 
   68    std::cout << 
" WE ARE AFTER LOADING DATA " << std::endl;
 
   70    vector<pair<Double_t, Double_t>> allCoords;
 
   72    while (infile >> a >> b) {
 
   73       pair<Double_t, Double_t> coord(a, b);
 
   74       allCoords.push_back(coord);
 
   77    if (allCoords.size() % 3 != 0) {
 
   78       cout << 
"[ERROR] Bad file" << endl;
 
   83    for (Int_t i = 0; i < allCoords.size(); i += 3) {
 
   84       x[0] = allCoords[i + 0].first;
 
   85       y[0] = allCoords[i + 0].second;
 
   86       x[1] = allCoords[i + 1].first;
 
   87       y[1] = allCoords[i + 1].second;
 
   88       x[2] = allCoords[i + 2].first;
 
   89       y[2] = allCoords[i + 2].second;
 
   91       det_avg_merge->AddBin(3, x, y);
 
   92       det_err_merge->AddBin(3, x, y);
 
   94       for (
int l=0; l<NUM_LS; ++l) {
 
   95         det_avg_ls[l].AddBin(3, x, y);
 
   99    std::cout << 
" WE ARE AFTER ADDING BINS " << std::endl;
 
  105    Double_t xoffset1 = 0;
 
  106    Double_t yoffset1 = 0;
 
  107    Double_t xoffset2 = 0;
 
  108    Double_t yoffset2 = 0;
 
  110    for (
int i = 0; i <= NUM_LS-1; ++i) { 
 
  111      std::cout << 
"[In Progress] LumiSection " << i << std::endl;
 
  112       for (
int j = 0; j < numEvents; ++j) {   
 
  113          Double_t r1 = ran.Gaus(0, 10);
 
  114          Double_t r2 = ran.Gaus(0, 8);
 
  115          Double_t rok = ran.Gaus(10, 1);
 
  116          Double_t rbad1 = ran.Gaus(8, 5);
 
  117          Double_t rbad2 = ran.Gaus(-8, 5);
 
  127          if (r2 > 3. - yoffset1 && r2 < 8. - yoffset1 &&
 
  128              r1 > 1. + xoffset1 && r1 < 5. + xoffset1 ) {
 
  132          if (r2 > -10 + yoffset2 && r2 < -8 + yoffset2 &&
 
  133              r1 > -6 + xoffset2 && r1 < 8 + xoffset2 ) {
 
  137          tot_avg_ls[i].Fill(r1, r2, val);
 
  138          det_avg_ls[i].Fill(r1, r2, val);
 
  145       title = 
"Global View: Avg in LS  " + to_string(i);
 
  146       tot_avg_ls[i].SetTitle(title.c_str());
 
  147       tot_avg_ls[i].SetStats(
false);
 
  148       tot_avg_ls[i].Draw(
"COLZ");
 
  151       c1->cd((i+1)+NUM_LS);
 
  152       title = 
"Detector View: Avg in LS  " + to_string(i);
 
  153       det_avg_ls[i].SetTitle(title.c_str());
 
  154       det_avg_ls[i].SetStats(
false);
 
  155       det_avg_ls[i].Draw(
"COLZ");
 
  159       c1->cd((i+1)+(NUM_LS*2));
 
  160       title = 
"Detector View: Error in LS  " + to_string(i);
 
  161       det_avg_ls[i].SetTitle(title.c_str());
 
  162       det_avg_ls[i].SetStats(
false);
 
  163       det_avg_ls[i].SetContentToError();
 
  164       det_avg_ls[i].Draw(
"COLZ");
 
  168    std::vector<TProfile2Poly*> tot_avg_v;
 
  169    std::vector<TProfile2Poly*> det_avg_v;
 
  170    for (Int_t t=0; t<NUM_LS; t++){
 
  171      tot_avg_v.push_back(&tot_avg_ls[t]);
 
  172      det_avg_v.push_back(&det_avg_ls[t]);
 
  175    std::cout << 
"[In Progress] Merging" << std::endl;
 
  179    tot_merge->Merge(tot_avg_v);
 
  181    title = 
"Total average merge";
 
  182    tot_merge->SetTitle(title.c_str());
 
  183    tot_merge->Draw(
"COLZ");
 
  185    det_avg_merge->Merge(det_avg_v);
 
  187    title = 
"Detector average merge";
 
  188    det_avg_merge->SetTitle(title.c_str());
 
  189    det_avg_merge->SetContentToAverage(); 
 
  190    det_avg_merge->Draw(
"COLZ");
 
  192    det_err_merge->Merge(det_avg_v);
 
  194    title = 
"Detector error merge";
 
  195    det_err_merge->SetTitle(title.c_str());
 
  196    det_err_merge->SetContentToError();
 
  197    det_err_merge->Draw(
"COLZ");