diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx index 83be1e2bdaabe716119311ce3b780e931e39a69c..062e934643cbdde8c33b452d0ad27e0d32c8c055 100644 --- a/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx +++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx @@ -29,9 +29,11 @@ using ROOT::RDataFrame; using namespace ROOT::VecOps; using json = nlohmann::json; -void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_barrel_pi0.root") +void emcal_barrel_pi0_analysis( + const char* input_fname = "sim_output/sim_emcal_barrel_pi0.root" + //const char* input_fname = "../sim_output/sim_emcal_barrel_uniform_pi0.root" + ) { - //input_fname = "../sim_output/sim_emcal_barrel_pi0.root"; // Setting for graphs gROOT->SetStyle("Plain"); gStyle->SetOptFit(1); @@ -54,7 +56,6 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b double samp_frac = j["electron"]["sampling_fraction"]; // Thrown Energy [GeV] - //double meanE = 5; // Calculated later auto Ethr = [](std::vector<dd4pod::Geant4ParticleData> const& input) { return TMath::Sqrt(input[2].ps.x*input[2].ps.x + input[2].ps.y*input[2].ps.y + input[2].ps.z*input[2].ps.z + input[2].mass*input[2].mass); }; @@ -97,146 +98,111 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b }; // Define variables - auto d1 = d0.Define("Ethr", Ethr, {"mcparticles"}) - .Define("nhits", nhits, {"EcalBarrelHits"}) - .Define("EsimImg", Esim, {"EcalBarrelHits"}) - .Define("EsimScFi", Esim, {"EcalBarrelScFiHits"}) - .Define("Esim", "EsimImg+EsimScFi") - .Define("fsam", fsam, {"Esim","Ethr"}) - .Define("pid", getpid, {"mcparticles"}) - .Define("dau", getdau, {"mcparticles"}) - .Define("dE", eResol, {"Esim","Ethr"}) - .Define("dE_rel", eResol_rel, {"Esim","Ethr"}) + auto d1 = d0.Define("Ethr", Ethr, {"mcparticles"}) + .Define("nhits", nhits, {"EcalBarrelHits"}) + .Define("EsimImg", Esim, {"EcalBarrelHits"}) + .Define("EsimScFi", Esim, {"EcalBarrelScFiHits"}) + .Define("Esim", "EsimImg+EsimScFi") + .Define("fsam", fsam, {"Esim","Ethr"}) + .Define("pid", getpid, {"mcparticles"}) + .Define("dau", getdau, {"mcparticles"}) + .Define("dE", eResol, {"Esim","Ethr"}) + .Define("dE_rel", eResol_rel, {"Esim","Ethr"}) ; // Define Histograms - auto hEthr = d1.Histo1D({"hEthr", "Thrown Energy; Thrown Energy [GeV]; Events", 100, 0.0, 7.5}, "Ethr"); - auto hNhits = d1.Histo1D({"hNhits", "Number of hits per events; Number of hits; Events", 100, 0.0, 2000.0}, "nhits"); - auto hEsim = d1.Histo1D({"hEsim", "Energy Deposit; Energy Deposit [GeV]; Events", 100, 0.0, 2.0}, "Esim"); - auto hfsam = d1.Histo1D({"hfsam", "Sampling Fraction; Sampling Fraction; Events", 150, 0.0, 0.15}, "fsam"); - auto hpid = d1.Histo1D({"hpid", "PID; PID; Count", 100, -220, 220}, "pid"); - auto hdau = d1.Histo1D({"hdau", "Number of Daughters; Number of Daughters; Count", 10, 0, 10}, "dau"); - - // put this line above GetMean below so it can be lazily evaluated with the histgorams. - auto nevents_thrown = d1.Count(); - - const double meanE = hEthr->GetMean(); + std::vector <std::string> titleStr = { + "Thrown Energy; Thrown Energy [GeV]; Events", + "Number of hits per events; Number of hits; Events", + "Energy Deposit; Energy Deposit [GeV]; Events", + "dE Relative; dE Relative; Events" + }; - // Event Counts - std::cout << "Number of Thrown Events: " << (*nevents_thrown) << "\n"; + std::vector<std::vector<double>> range = {{0, 7.5}, {0, 2000}, {0, 2}, {-3, 3}}; + std::vector<std::string> col = {"Ethr", "nhits", "Esim", "dE_rel"}; - // Draw Histograms - TCanvas *c1 = new TCanvas("c1", "c1", 700, 500); + double meanE = 5; + int nCol = range.size(); + for (int i = 0; i < nCol; i++){ + int binNum = 100; + auto h = d1.Histo1D({"hist", titleStr[i].c_str(), binNum, range[i][0], range[i][1]}, col[i].c_str()); + if (col[i] == "Ethr"){ + meanE = h->GetMean(); + } + auto *c = new TCanvas("c", "c", 700, 500); + c->SetLogy(1); + auto h1 = h->DrawCopy(); + h1->GetYaxis()->SetTitleOffset(1.4); + h1->SetLineWidth(2); + h1->SetLineColor(kBlue); + c->SaveAs((fmt::format("results/emcal_barrel_pi0_{}.png", col[i])).c_str()); + c->SaveAs((fmt::format("results/emcal_barrel_pi0_{}.pdf", col[i])).c_str()); + //std::printf("Generic %d\n", i); + } + + // Resolution Plots + titleStr = { + "Sampling Fraction; Sampling Fraction; Events", + "dE; dE[GeV]; Events" + }; + range = {{0,0.15}, {-3, 3}}; + col = {"fsam", "dE"}; + nCol = range.size(); + std::printf("Here %d\n", 10); + std::vector<std::vector<double>> fitRange = {{0.005, 0.1}, {-3, 3}}; + double sigmaOverE = 0; + + auto hr = d1.Histo1D({"histr", titleStr[0].c_str(), 150, range[0][0], range[0][1]}, col[0].c_str()); + auto *c = new TCanvas("c", "c", 700, 500); + c->SetLogy(1); + auto h2 = hr->DrawCopy(); + h2->GetYaxis()->SetTitleOffset(1.4); + h2->SetLineWidth(2); + h2->SetLineColor(kBlue); + h2->Fit("gaus","","", fitRange[0][0], fitRange[0][1]); + h2->GetFunction("gaus")->SetLineWidth(2); + h2->GetFunction("gaus")->SetLineColor(kRed); + + c->SaveAs((fmt::format("results/emcal_barrel_pi0_{}.png", col[0])).c_str()); + c->SaveAs((fmt::format("results/emcal_barrel_pi0_{}.pdf", col[0])).c_str()); + std::printf("Resolution %d\n", 0); + + + auto hs = d1.Histo1D({"hists", titleStr[1].c_str(), 100, range[1][0], range[1][1]}, col[1].c_str()); + auto *c1 = new TCanvas("c1", "c1", 700, 500); c1->SetLogy(1); - fmt::print("0\n"); - auto h1 = hEthr->DrawCopy(); - //h1->GetYaxis()->SetTitleOffset(1.4); - h1->SetLineWidth(2); - h1->SetLineColor(kBlue); - c1->SaveAs("results/emcal_barrel_pi0_Ethr.png"); - c1->SaveAs("results/emcal_barrel_pi0_Ethr.pdf"); - - fmt::print("1\n"); - - //TCanvas *c2 = new TCanvas("c2", "c2", 700, 500); - //c2->SetLogy(1); - //h1 = hNhits->DrawCopy(); - //h1->GetYaxis()->SetTitleOffset(1.4); - //h1->SetLineWidth(2); - //h1->SetLineColor(kBlue); - //c2->SaveAs("results/emcal_barrel_pi0_nhits.png"); - //c2->SaveAs("results/emcal_barrel_pi0_nhits.pdf"); - - //TCanvas *c3 = new TCanvas("c3", "c3", 700, 500); - //c3->SetLogy(1); - //h1 = hEsim->DrawCopy(); - //h1->GetYaxis()->SetTitleOffset(1.4); - //h1->SetLineWidth(2); - //h1->SetLineColor(kBlue); - //c3->SaveAs("results/emcal_barrel_pi0_Esim.png"); - //c3->SaveAs("results/emcal_barrel_pi0_Esim.pdf"); - - //TCanvas *c4 = new TCanvas("c4", "c4", 700, 500); - //c4->SetLogy(1); - //h1 = hfsam->DrawCopy(); - //h1->GetYaxis()->SetTitleOffset(1.4); - //h1->SetLineWidth(2); - //h1->SetLineColor(kBlue); - //h1->Fit("gaus","","",0.005,0.1); - //h1->GetFunction("gaus")->SetLineWidth(2); - //h1->GetFunction("gaus")->SetLineColor(kRed); - //c4->SaveAs("results/emcal_barrel_pi0_fsam.png"); - //c4->SaveAs("results/emcal_barrel_pi0_fsam.pdf"); - - //TCanvas *c5 = new TCanvas("c5", "c5", 700, 500); - //c5->SetLogy(1); - //h1 = hpid->DrawCopy(); - //h1->GetYaxis()->SetTitleOffset(1.4); - //h1->SetLineWidth(2); - //h1->SetLineColor(kBlue); - //c5->SaveAs("results/emcal_barrel_pi0_pid.png"); - //c5->SaveAs("results/emcal_barrel_pi0_pid.pdf"); - - //TCanvas *c6 = new TCanvas("c6", "c6", 700, 500); - //c5->SetLogy(1); - //h1 = hdau->DrawCopy(); - //h1->GetYaxis()->SetTitleOffset(1.4); - //h1->SetLineWidth(2); - //h1->SetLineColor(kBlue); - //c6->SaveAs("results/emcal_barrel_pi0_dau.png"); - //c6->SaveAs("results/emcal_barrel_pi0_dau.pdf"); - - //// Energy Resolution Calculation - //std::string test_tag = "Barrel_emcal_pi0";// TODO: Change test_tag to something else - //std:string detEle = "Barrel_emcal"; - - //// Energy resolution in the barrel region (-1 < eta < 1) - //// Taken from : Initial considerations for EMCal of the EIC detector by A. Bazilevsky - //// sigma_E / E = 12% / E^0.5 convoluted with 2% - //// sigma_E / E = [ (0.12/E^0.5)^2 + 0.02^2]^0.5, with E in [GeV] - // - //double resolutionTarget = TMath::Sqrt(0.12 * 0.12 / meanE + 0.02 * 0.02); - - //common_bench::Test pi0_energy_resolution{ - // {{"name", fmt::format("{}_energy_resolution", test_tag)}, - // {"title", "Pi0 Energy resolution"}, - // {"description", - // fmt::format("Pi0 energy resolution for {}, estimated using a Gaussian fit.", detEle)}, - // {"quantity", "resolution (in %)"}, - // {"target", std::to_string(resolutionTarget)}} - //}; - - //// Histograms and Fitting - //auto hdE = d1.Histo1D({"hdE", "dE; dE[GeV]; Events", 100, -3.0, 3.0}, "dE"); - //auto hdE_rel = d1.Histo1D({"hdE_rel", "dE Relative; dE Relative; Events", 100, -3.0, 3.0}, "dE_rel"); - //auto hdEcopy = hdE->DrawCopy(); - //hdEcopy->Fit("gaus", "", "", -3.0, 3.0); - //double* res = hdEcopy->GetFunction("gaus")->GetParameters(); - //double sigmaOverE = res[2] / meanE; + auto h3 = hs->DrawCopy(); + h3->GetYaxis()->SetTitleOffset(1.4); + h3->SetLineWidth(2); + h3->SetLineColor(kBlue); + auto fit = h3->Fit("gaus","","", fitRange[1][0], fitRange[1][1]); + double* res = h3->GetFunction("gaus")->GetParameters(); + sigmaOverE = res[2] / meanE; + + c1->SaveAs((fmt::format("results/emcal_barrel_pi0_{}.png", col[1])).c_str()); + c1->SaveAs((fmt::format("results/emcal_barrel_pi0_{}.pdf", col[1])).c_str()); + std::printf("Resolution %d\n", 1); + + // Energy Resolution Calculation + std::string test_tag = "Barrel_emcal_pi0";// TODO: Change test_tag to something else + std:string detEle = "Barrel_emcal"; + + // Energy resolution in the barrel region (-1 < eta < 1) + // Taken from : Initial considerations for EMCal of the EIC detector by A. Bazilevsky + // sigma_E / E = 12% / E^0.5 convoluted with 2% + // sigma_E / E = [ (0.12/E^0.5)^2 + 0.02^2]^0.5, with E in [GeV] + double resolutionTarget = TMath::Sqrt(0.12 * 0.12 / meanE + 0.02 * 0.02); + + common_bench::Test pi0_energy_resolution{ + {{"name", fmt::format("{}_energy_resolution", test_tag)}, + {"title", "Pi0 Energy resolution"}, + {"description", + fmt::format("Pi0 energy resolution for {}, estimated using a Gaussian fit.", detEle)}, + {"quantity", "resolution (in %)"}, + {"target", std::to_string(resolutionTarget)}} + }; //// Pass/Fail - //sigmaOverE <= resolutionTarget ? pi0_energy_resolution.pass(sigmaOverE) : pi0_energy_resolution.fail(sigmaOverE); - //std::printf("Energy Resolution is %f\n", res[2]); - - //// Energy Resolution Histogram Plotting - //auto *cdE = new TCanvas("cdE", "cdE", 700, 500); - //cdE->SetLogy(1); - //h1 = hdEcopy->DrawCopy(); - //hdEcopy->GetYaxis()->SetTitleOffset(1.4); - //hdEcopy->SetLineWidth(2); - //hdEcopy->SetLineColor(kBlue); - //hdEcopy->GetFunction("gaus")->SetLineWidth(2); - //hdEcopy->GetFunction("gaus")->SetLineColor(kRed); - //cdE->SaveAs("results/emcal_barrel_pi0_dE.png"); - //cdE->SaveAs("results/emcal_barrel_pi0_dE.pdf"); - - //auto *cdE_rel = new TCanvas("cdE_rel", "cdE_rel", 700, 500); - //h1 = hdE_rel->DrawCopy(); - //hdE_rel->GetYaxis()->SetTitleOffset(1.4); - //hdE_rel->SetLineWidth(2); - //hdE_rel->SetLineColor(kBlue); - //cdE_rel->SaveAs("results/emcal_barrel_pi0_dE_rel.png"); - //cdE_rel->SaveAs("results/emcal_barrel_pi0_dE_rel.pdf"); - - //common_bench::write_test({pi0_energy_resolution}, fmt::format("results/{}_pi0.json", detEle)); + sigmaOverE <= resolutionTarget ? pi0_energy_resolution.pass(sigmaOverE) : pi0_energy_resolution.fail(sigmaOverE); + common_bench::write_test({pi0_energy_resolution}, fmt::format("results/{}_pi0.json", detEle)); }