diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons.cxx
index 12a78da363d28a2725f022685a8306aa8532ec2f..217b2f55af9e452112d8b720d6c47993c4dc89cf 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons.cxx
@@ -78,3 +78,4 @@ void emcal_barrel_electrons(int n_events = 1e6, double e_start = 0.0, double e_e
   hepmc_output.close();
   std::cout << "Events parsed and written: " << events_parsed << std::endl;
 }
+
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_analysis.cxx
deleted file mode 100644
index 22cb118ce62847bd6ebef8e313537edbd04e3f80..0000000000000000000000000000000000000000
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_analysis.cxx
+++ /dev/null
@@ -1,153 +0,0 @@
-////////////////////////////////////////
-// Read reconstruction ROOT output file
-// Plot variables
-////////////////////////////////////////
-
-#include "ROOT/RDataFrame.hxx"
-#include <iostream>
-
-#include "dd4pod/Geant4ParticleCollection.h"
-#include "dd4pod/CalorimeterHitCollection.h"
-
-#include "TCanvas.h"
-#include "TStyle.h"
-#include "TMath.h"
-#include "TH1.h"
-#include "TF1.h"
-#include "TH1D.h"
-
-#include "emcal_barrel_common_functions.h"
-#include <cctype>
-
-using ROOT::RDataFrame;
-using namespace ROOT::VecOps;
-
-void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/sim_emcal_barrel_uniform_electrons.root")
-{
-  input_fname = "temp_pions_electrons.root";
-  // Setting for graphs
-  gROOT->SetStyle("Plain");
-  gStyle->SetOptFit(1);
-  gStyle->SetLineWidth(2);
-  gStyle->SetPadTickX(1);
-  gStyle->SetPadTickY(1);
-  gStyle->SetPadGridX(1);
-  gStyle->SetPadGridY(1);
-  gStyle->SetPadLeftMargin(0.14);
-  gStyle->SetPadRightMargin(0.14);
-
-  ROOT::EnableImplicitMT();
-  ROOT::RDataFrame d0("events", input_fname);
-
-  // Environment Variables
-  std::string detector_path = "";
-  std::string detector_name = "topside";
-  if(std::getenv("DETECTOR_PATH")) {
-    detector_path = std::getenv("DETECTOR_PATH");
-  }
-  if(std::getenv("JUGGLER_DETECTOR")) {
-    detector_name = std::getenv("JUGGLER_DETECTOR");
-  }
-
-  // Thrown Energy [GeV]
-  auto Ethr = [](std::vector<dd4pod::Geant4ParticleData> const& input) {
-    auto p = input[2];
-    auto energy = TMath::Sqrt(p.psx * p.psx + p.psy * p.psy + p.psz * p.psz + p.mass * p.mass);
-    return energy;
-  };
-
-  // Number of hits
-  auto nhits = [] (const std::vector<dd4pod::CalorimeterHitData>& evt) {return (int) evt.size(); };
-
-  // Energy deposition [GeV]
-  auto Esim = [](const std::vector<dd4pod::CalorimeterHitData>& evt) {
-    auto total_edep = 0.0;
-    for (const auto& i: evt)
-      total_edep += i.energyDeposit;
-    return total_edep;
-  };
-
-  // Sampling fraction = Esampling / Ethrown
-  auto fsam = [](const double sampled, const double thrown) {
-    return sampled / thrown;
-  };
-
-  // Define variables
-  auto d1 = d0.Define("Ethr", Ethr, {"mcparticles"})
-                .Define("nhits", nhits, {"EcalBarrelHits"})
-                .Define("Esim", Esim, {"EcalBarrelHits"})
-                .Define("fsam", fsam, {"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, 1.0},
-      "Esim");
-  auto hfsam = d1.Histo1D(
-      {"hfsam", "Sampling Fraction; Sampling Fraction; Events", 100, 0.0, 0.1},
-      "fsam");
-
-  addDetectorName(detector_name, hEthr.GetPtr());
-  addDetectorName(detector_name, hEsim.GetPtr());
-  addDetectorName(detector_name, hfsam.GetPtr());
-
-  // Event Counts
-  auto nevents_thrown = d1.Count();
-  std::cout << "Number of Thrown Events: " << (*nevents_thrown) << "\n";
-
-  // Draw Histograms
-  {
-    TCanvas* c1 = new TCanvas("c1", "c1", 700, 500);
-    c1->SetLogy(1);
-    auto h = hEthr->DrawCopy();
-    //h->GetYaxis()->SetTitleOffset(1.4);
-    h->SetLineWidth(2);
-    h->SetLineColor(kBlue);
-    c1->SaveAs("results/emcal_barrel_electrons_Ethr.png");
-    c1->SaveAs("results/emcal_barrel_electrons_Ethr.pdf");
-  }
-  std::cout << "derp1\n";
-
-  {
-    TCanvas* c2 = new TCanvas("c2", "c2", 700, 500);
-    c2->SetLogy(1);
-    auto h = hNhits->DrawCopy();
-    //h->GetYaxis()->SetTitleOffset(1.4);
-    h->SetLineWidth(2);
-    h->SetLineColor(kBlue);
-    c2->SaveAs("results/emcal_barrel_electrons_nhits.png");
-    c2->SaveAs("results/emcal_barrel_electrons_nhits.pdf");
-  }
-
-  {
-    TCanvas* c3 = new TCanvas("c3", "c3", 700, 500);
-    c3->SetLogy(1);
-    auto h = hEsim->DrawCopy();
-    //h->GetYaxis()->SetTitleOffset(1.4);
-    h->SetLineWidth(2);
-    h->SetLineColor(kBlue);
-    c3->SaveAs("results/emcal_barrel_electrons_Esim.png");
-    c3->SaveAs("results/emcal_barrel_electrons_Esim.pdf");
-  }
-
-  std::cout << "derp4\n";
-  {
-    TCanvas* c4 = new TCanvas("c4", "c4", 700, 500);
-    c4->SetLogy(1);
-    auto h = hfsam->DrawCopy();
-    //h->GetYaxis()->SetTitleOffset(1.4);
-    h->SetLineWidth(2);
-    h->SetLineColor(kBlue);
-    //h->Fit("gaus", "", "", 0.01, 0.1);
-    //h->GetFunction("gaus")->SetLineWidth(2);
-    //h->GetFunction("gaus")->SetLineColor(kRed);
-    c4->SaveAs("results/emcal_barrel_electrons_fsam.png");
-    c4->SaveAs("results/emcal_barrel_electrons_fsam.pdf");
-  }
-}
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_reader.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_reader.cxx
index 75c2dae9c9218f036bbca7dd65f65e85bd67eca2..90622139975845b45f359fada3d2debf79145254 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_reader.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_electrons_reader.cxx
@@ -123,3 +123,4 @@ void emcal_barrel_electrons_reader(double e_start = 0.0, double e_end = 30.0, co
   c6->SaveAs("results/input_emcal_barrel_electrons_p.png");
   c6->SaveAs("results/input_emcal_barrel_electrons_p.pdf");
 }
+
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_energy_scan_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_energy_scan_analysis.cxx
index 04fc024fdb8eb4652c8b8011d9c7d41871f3287b..61041363041ba8f110bb09f22eef3cf987db00ec 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_energy_scan_analysis.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_energy_scan_analysis.cxx
@@ -86,7 +86,9 @@ std::tuple <double, double, double, double> extract_sampling_fraction_parameters
   // Define variables
   auto d1 = d0.Define("Ethr", Ethr, {"mcparticles"})
                 .Define("nhits", nhits, {"EcalBarrelHits"})
-                .Define("Esim", Esim, {"EcalBarrelHits"})
+                .Define("EsimImg", Esim, {"EcalBarrelHits"})
+                .Define("EsimScFi", Esim, {"EcalBarrelScFiHits"})
+                .Define("Esim", "EsimImg+EsimScFi")
                 .Define("fsam", fsam, {"Esim", "Ethr"});
 
   // Define Histograms
@@ -105,7 +107,7 @@ std::tuple <double, double, double, double> extract_sampling_fraction_parameters
       "fsam");
 
   // Number of layers to read the edep from
-  int nlayers = 20;
+  int nlayers = 7;
 
   TGraphErrors gr_no_edep(nlayers);
   TGraphErrors gr_edep_mean(nlayers);
@@ -125,10 +127,12 @@ std::tuple <double, double, double, double> extract_sampling_fraction_parameters
       return layer_edep;
     };
 
-    auto d2 = d0.Define(fmt::format("Esim_layer_{}",layer).c_str(), Esim_layer, {"EcalBarrelHits"});
+    auto d2 = d0.Define(fmt::format("EsimImg_layer_{}",layer).c_str(), Esim_layer, {"EcalBarrelHits"})
+                  .Define(fmt::format("EsimScFi_layer_{}",layer).c_str(), Esim_layer, {"EcalBarrelScFiHits"})
+                  .Define(fmt::format("Esim_layer_{}",layer).c_str(), fmt::format("EsimImg_layer_{}+EsimScFi_layer_{}",layer,layer).c_str());
     std::cout << "Layer to process: " << layer << std::endl;
 
-    auto hEsim_layer = d2.Histo1D({fmt::format("hEsim_layer_{}",layer).c_str(),fmt::format("Energy Deposit in layer {}; Energy Deposit [Gev]; Events",layer).c_str(), 800, 0.0, 0.04}, fmt::format("Esim_layer_{}",layer));
+    auto hEsim_layer = d2.Histo1D({fmt::format("hEsim_layer_{}",layer).c_str(),fmt::format("Energy Deposit in layer {}; Energy Deposit [Gev]; Events",layer).c_str(), 200, 0.0, 0.04}, fmt::format("Esim_layer_{}",layer));
 
     clayer->cd(layer);
     gPad->SetLogy();
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_particles_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_particles_analysis.cxx
index 4d52a6e5e8ddd47e0c24747591d529bc50070b3c..0e35ac33bc6c380d0ebc69df2dd6c113e0f337a5 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_particles_analysis.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_particles_analysis.cxx
@@ -94,7 +94,9 @@ void emcal_barrel_particles_analysis(std::string particle_name = "electron", boo
   // Define variables
   auto d1 = d0.Define("Ethr", Ethr, {"mcparticles"})
                 .Define("nhits", nhits, {"EcalBarrelHits"})
-                .Define("Esim", Esim, {"EcalBarrelHits"})
+                .Define("EsimImg", Esim, {"EcalBarrelHits"})
+                .Define("EsimScFi", Esim, {"EcalBarrelScFiHits"})
+                .Define("Esim", "EsimImg+EsimScFi")
                 .Define("fsam", fsam, {"Esim", "Ethr"});
 
   // Define Histograms
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx
index 5034c1b2791a19f3b759a0974ff9e59b19a01979..b60a0eed282d40c74131268ce2ae1ea6d5e4983c 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx
@@ -99,7 +99,9 @@ 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("Esim",   Esim,       {"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"})
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_analysis.cxx
index a171175e5a7dea65f792ba6362401a0ae3075d37..343eb26cc918d9c178a9be9f807ab6892fc3821a 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_analysis.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_analysis.cxx
@@ -45,9 +45,9 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/sim_emcal
 
   // Thrown Energy [GeV]
   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;
+    auto p = input[2];
+    auto energy = TMath::Sqrt(p.psx * p.psx + p.psy * p.psy + p.psz * p.psz + p.mass * p.mass);
+    return energy;
   };
 
   // Number of hits
@@ -55,45 +55,25 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/sim_emcal
 
   // 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)
       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 = [samp_frac](double sampled, 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 = [samp_frac](double sampled, double thrown) {
+      return (sampled / samp_frac - thrown) / thrown;
   };
 
   // Returns the pdgID of the particle
@@ -107,12 +87,13 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/sim_emcal
   };
 
   // Define variables
-  auto d1 = d0.Define("Ethr",   Ethr,       {"mcparticles"})
-              .Define("nhits",  nhits,      {"EcalBarrelHits"})
-              .Define("Esim",   Esim,       {"EcalBarrelHits"})
-              .Define("fsam",   fsam,       {"Esim","Ethr"})
-              .Define("pid",    getpid,     {"mcparticles"})
-              ;
+  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 Histograms
   auto hEthr  = d1.Histo1D({"hEthr",  "Thrown Energy; Thrown Energy [GeV]; Events",        100,  0.0,    7.5}, "Ethr");
diff --git a/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_electrons_analysis.cxx b/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_electrons_analysis.cxx
index 3bf036cde29b3900cee9465c9e51b2cd178046ae..e38a5c207415ea7f1e631c06616158016bb2c21c 100644
--- a/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_electrons_analysis.cxx
+++ b/benchmarks/barrel_ecal/scripts/emcal_barrel_pions_electrons_analysis.cxx
@@ -140,7 +140,9 @@ void emcal_barrel_pions_electrons_analysis(const char* input_fname1 = "sim_outpu
   auto d1 = d0.Define("Ethr",       Ethr,       {"mcparticles"})
               .Define("Pthr",       Pthr,       {"mcparticles"})
               .Define("nhits",      nhits,      {"EcalBarrelHits"})
-              .Define("Esim",       Esim,       {"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"})