diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx
index a63d15d76c57b0605cc0fcde3b5a6243a9227456..5034c1b2791a19f3b759a0974ff9e59b19a01979 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx
@@ -13,6 +13,9 @@
 #include "mt.h"
 #include "util.h"
 
+R__LOAD_LIBRARY(libfmt.so)
+#include "fmt/core.h"
+
 #include "TCanvas.h"
 #include "TStyle.h"
 #include "TMath.h"
@@ -28,6 +31,7 @@ using json = nlohmann::json;
 
 void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_barrel_pi0.root")
 {
+  //input_fname = "../sim_output/sim_emcal_barrel_pi0.root";
   // Setting for graphs
   gROOT->SetStyle("Plain");
   gStyle->SetOptFit(1);
@@ -39,40 +43,20 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b
   gStyle->SetPadLeftMargin(0.14);
   gStyle->SetPadRightMargin(0.14);
 
-  //Tests
-  std::string test_tag = "Barrel_emcal_pi0";
-  //TODO: Change test_tag to something else
-  std:string detector = "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 thrown_energy = 5; // Current thrown energy, will need to grab from json file
-  double resolutionTarget = TMath::Sqrt(0.12 * 0.12 / thrown_energy + 0.02 * 0.02);
-
-  eic::util::Test pi0_energy_resolution{
-      {{"name", fmt::format("{}_energy_resolution", test_tag)},
-       {"title", "Pion0 Energy resolution"},
-       {"description",
-        fmt::format("Pion0 energy resolution with {}, estimated using a Gaussian fit.", detector)},
-       {"quantity", "resolution (in %)"},
-       {"target", std::to_string(resolutionTarget)}}};
+  ROOT::EnableImplicitMT();
+  ROOT::RDataFrame d0("events", input_fname);
 
+  // Sampling Fraction grabbed from json file
+  // Note that this value is derived from electrons
   json j;
   std::ifstream prev_steps_ifstream("results/emcal_barrel_calibration.json");
   prev_steps_ifstream >> j;
-
-  ROOT::EnableImplicitMT();
-  ROOT::RDataFrame d0("events", input_fname);
-
-  // Sampling Fraction
   double samp_frac = j["electron"]["sampling_fraction"];
 
   // Thrown Energy [GeV]
+  //double meanE = 5; // Calculated later
   auto Ethr = [](std::vector<dd4pod::Geant4ParticleData> const& input) {
-    std::vector<double> result;
-    result.push_back(TMath::Sqrt(input[2].psx*input[2].psx + input[2].psy*input[2].psy + input[2].psz*input[2].psz + input[2].mass*input[2].mass));
-  return result;
+    return TMath::Sqrt(input[2].psx*input[2].psx + input[2].psy*input[2].psy + input[2].psz*input[2].psz + input[2].mass*input[2].mass);
   };
 
   // Number of hits
@@ -80,45 +64,26 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b
 
   // Energy deposition [GeV]
   auto Esim = [](const std::vector<dd4pod::CalorimeterHitData>& evt) {
-    std::vector<double> result;
     auto total_edep = 0.0;
-    for (const auto& i: evt)
+    for (const auto& i: evt){
       total_edep += i.energyDeposit;
-    result.push_back(total_edep);
-  return result;
+    }
+    return total_edep;
   };
 
   // Sampling fraction = Esampling / Ethrown
-  auto fsam = [](const std::vector<double>& sampled, const std::vector<double>& thrown) {
-    std::vector<double> result;
-    auto it_sam = sampled.cbegin();
-    auto it_thr = thrown.cbegin();
-    for (; it_sam != sampled.end() && it_thr != thrown.end(); ++it_sam, ++it_thr) {
-        result.push_back(*it_sam / *it_thr);
-    }
-    return result;
+  auto fsam = [](const double& sampled, const double& thrown) {
+    return sampled / thrown;
   };
 
   // Energy Resolution = Esampling/Sampling_fraction - Ethrown
-  auto eResol = [samp_frac](const std::vector<double>& sampled, const std::vector<double>& thrown) {
-    std::vector<double> result;
-    auto it_sam = sampled.cbegin();
-    auto it_thr = thrown.cbegin();
-    for (; it_sam != sampled.end() && it_thr != thrown.end(); ++it_sam, ++it_thr) {
-        result.push_back(*it_sam / samp_frac - *it_thr);
-    }
-    return result;
+  auto eResol = [&](const double& sampled, const double& thrown){
+    return sampled / samp_frac - thrown;
   };
 
   // Relative Energy Resolution = (Esampling/Sampling fraction - Ethrown)/Ethrown
-  auto eResol_rel = [samp_frac](const std::vector<double>& sampled, const std::vector<double>& thrown) {
-    std::vector<double> result;
-    auto it_sam = sampled.cbegin();
-    auto it_thr = thrown.cbegin();
-    for (; it_sam != sampled.end() && it_thr != thrown.end(); ++it_sam, ++it_thr) {
-        result.push_back((*it_sam / samp_frac - *it_thr) / *it_thr);
-    }
-    return result;
+  auto eResol_rel = [&](const double& sampled, const double& thrown){
+    return (sampled / samp_frac - thrown) / thrown;
   };
 
   // Returns the pdgID of the particle
@@ -138,6 +103,8 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b
               .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
@@ -148,15 +115,12 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b
   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");
 
-  // Set sampling Fraction, ideally this will be taken from a json file 
-  samp_frac = hfsam -> GetMean();
-
-  auto d2 = d1.Define("dE",     eResol,     {"Esim","Ethr"})
-              .Define("dE_rel", eResol_rel, {"Esim","Ethr"})
-              ;
+  // Gather Sampling fraction and mean Energy, ideally this will be taken from a json file 
+  samp_frac = hfsam->GetMean();
+  const double meanE     = hEthr->GetMean(); 
 
   // Event Counts
-  auto nevents_thrown      = d1.Count();
+  auto nevents_thrown = d1.Count();
   std::cout << "Number of Thrown Events: " << (*nevents_thrown) << "\n";
 
   // Draw Histograms
@@ -217,30 +181,47 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b
   c6->SaveAs("results/emcal_barrel_pi0_dau.png");
   c6->SaveAs("results/emcal_barrel_pi0_dau.pdf");
 
-  //Energy Resolution Calculation
-  auto hdE          = d2.Histo1D({"hdE",      "dE; dE[GeV]; Events",              100, -3.0, 3.0}, "dE");
-  auto hdE_rel      = d2.Histo1D({"hdE_rel",  "dE Relative; dE Relative; Events", 100, -3.0, 3.0}, "dE_rel");
-  hdE->Fit("gaus", "", "", -3.0,  3.0);
-  double* res       = hdE->GetFunction("gaus")->GetParameters();
-  double sigmaOverE = res[2] / thrown_energy;
-
-  //Pass/Fail
-  if (sigmaOverE <= resolutionTarget) {
-    pi0_energy_resolution.pass(sigmaOverE);
-  } else {
-    pi0_energy_resolution.fail(sigmaOverE);
-  }
-  //std::printf("Energy Resolution is %f\n", res[2]);
-
-  //Energy Resolution Histogram Plotting
+  // 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);
+
+  eic::util::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;
+
+  // 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);
-  hdE->GetYaxis()->SetTitleOffset(1.4);
-  hdE->SetLineWidth(2);
-  hdE->SetLineColor(kBlue);
-  hdE->GetFunction("gaus")->SetLineWidth(2);
-  hdE->GetFunction("gaus")->SetLineColor(kRed);
-  hdE->DrawClone();
+  hdEcopy->GetYaxis()->SetTitleOffset(1.4);
+  hdEcopy->SetLineWidth(2);
+  hdEcopy->SetLineColor(kBlue);
+  hdEcopy->GetFunction("gaus")->SetLineWidth(2);
+  hdEcopy->GetFunction("gaus")->SetLineColor(kRed);
+  hdEcopy->DrawClone();
   cdE->SaveAs("results/emcal_barrel_pi0_dE.png");
   cdE->SaveAs("results/emcal_barrel_pi0_dE.pdf");
 
@@ -252,7 +233,5 @@ void emcal_barrel_pi0_analysis(const char* input_fname = "sim_output/sim_emcal_b
   cdE_rel->SaveAs("results/emcal_barrel_pi0_dE_rel.png");
   cdE_rel->SaveAs("results/emcal_barrel_pi0_dE_rel.pdf");
 
-  eic::util::write_test({pi0_energy_resolution}, fmt::format("{}_pi0.json", detector));
-
-
+  eic::util::write_test({pi0_energy_resolution}, fmt::format("results/{}_pi0.json", detEle));
 }