diff --git a/benchmarks/dis/analysis/rec_analysis_raw.cxx b/benchmarks/dis/analysis/rec_analysis_raw.cxx
index 19c6d9111a4e89da66c7c9abae250cc8ea95cf0a..16347a6cc2159b1afea3e9254b34305f0ed7536c 100644
--- a/benchmarks/dis/analysis/rec_analysis_raw.cxx
+++ b/benchmarks/dis/analysis/rec_analysis_raw.cxx
@@ -50,60 +50,85 @@ int rec_analysis_raw(const std::string& config_name)
   ROOT::EnableImplicitMT(kNumThreads);
   ROOT::RDataFrame d("events", rec_file);
 
-
-  auto d0 = d.Define("n_EcalEndcapPRawHits",       "EcalEndcapPRawHits.size()")
-             .Define("n_EcalBarrelImagingRawHits", "EcalBarrelImagingRawHits.size()")
-             .Define("n_EcalBarrelScFiRawHits",    "EcalBarrelScFiRawHits.size()")
-             .Define("n_EcalEndcapNRawHits",       "EcalEndcapNRawHits.size()")
-             .Define("n_HcalEndcapPRawHits",       "HcalEndcapPRawHits.size()")
-             .Define("n_HcalBarrelRawHits",        "HcalBarrelRawHits.size()")
-             .Define("n_HcalEndcapNRawHits",       "HcalEndcapNRawHits.size()")
-//             .Define("n_B0PreshowerRawHits", "B0TrackerRawHits.size()")
-//             .Define("n_B0TrackerRawHits",         "B0TrackerRawHits.size()")
-             .Define("n_DRICHRawHits",             "DRICHRawHits.size()")
-//             .Define("n_ERICHRawHits",             "ERICHRawHits.size()")
-//             .Define("n_FakeDIRCRawHits",          "FakeDIRCRawHits.size()")
-//             .Define("n_ffi_ZDC_ECALRawHits",      "ffi_ZDC_ECALRawHits.size()")
-//            .Define("n_ffi_ZDC_HCALRawHits",      "ffi_ZDC_HCALRawHits.size()")
-//             .Define("n_ForwardOffMTracker_station_1RawHits", "ForwardOffMTracker_station_1RawHits.size()")
-//             .Define("n_ForwardOffMTracker_station_2RawHits", "ForwardOffMTracker_station_2RawHits.size()")
-//             .Define("n_ForwardOffMTracker_station_3RawHits", "ForwardOffMTracker_station_3RawHits.size()")
- //            .Define("n_ForwardOffMTracker_station_4RawHits", "ForwardOffMTracker_station_4RawHits.size()")
- //            .Define("n_ForwardRomanPot_Station_1RawHits", "ForwardRomanPot_Status_1RawHits.size()")
- //            .Define("n_ForwardRomanPot_Station_2RawHits", "ForwardRomanPot_Status_2RawHits.size()")
- //            .Define("n_GEMEndcapNRawHits", "GEMEndcapNRawHits.size()")
- //            .Define("n_GEMEndcapPRawHits", "GEMEndcapPRawHits.size()")
- //            .Define("n_InnerTrackerBarrelRawHits", "InnerTrackerBarrelRawHits.size()")
-//             .Define("n_InnerTrackerEndcapNRawHits", "InnerTrackerEndcapNRawHits.size()")
- //            .Define("n_InnerTrackerEndcapPRawHits", "InnerTrackerEndcapPRawHits.size()")
- //            .Define("n_MedialTrackerBarrelRawHits", "MedialTrackerBarrelRawHits.size()")
- //            .Define("n_MedialTrackerEndcapNRawHits", "MedialTrackerEndcapNRawHits.size()")
-//             .Define("n_MedialTrackerEndcapPRawHits", "MedialTrackerEndcapPRawHits.size()")
- //            .Define("n_OuterTrackerBarrelRawHits", "OuterTrackerBarrelRawHits.size()")
- //            .Define("n_OuterTrackerEndcapNRawHits", "OuterTrackerEndcapNRawHits.size()")
- //            .Define("n_OuterTrackerEndcapPRawHits", "OuterTrackerEndcapPRawHits.size()")
-             .Define("n_VertexBarrelRawHits", "VertexBarrelRawHits.size()")
-             ;
+  auto d0 = ROOT::RDF::RNode(d
+    .Define("n_EcalEndcapPRawHits",       "EcalEndcapPRawHits.size()")
+    .Define("n_EcalEndcapNRawHits",       "EcalEndcapNRawHits.size()")
+    .Define("n_HcalEndcapPRawHits",       "HcalEndcapPRawHits.size()")
+    .Define("n_HcalBarrelRawHits",        "HcalBarrelRawHits.size()")
+    .Define("n_HcalEndcapNRawHits",       "HcalEndcapNRawHits.size()")
+//    .Define("n_B0PreshowerRawHits",       "B0TrackerRawHits.size()")
+//    .Define("n_B0TrackerRawHits",         "B0TrackerRawHits.size()")
+    .Define("n_DRICHRawHits",             "DRICHRawHits.size()")
+//    .Define("n_ERICHRawHits",             "ERICHRawHits.size()")
+//    .Define("n_FakeDIRCRawHits",          "FakeDIRCRawHits.size()")
+//    .Define("n_ffi_ZDC_ECALRawHits",      "ffi_ZDC_ECALRawHits.size()")
+//    .Define("n_ffi_ZDC_HCALRawHits",      "ffi_ZDC_HCALRawHits.size()")
+//    .Define("n_ForwardOffMTracker_station_1RawHits", "ForwardOffMTracker_station_1RawHits.size()")
+//    .Define("n_ForwardOffMTracker_station_2RawHits", "ForwardOffMTracker_station_2RawHits.size()")
+//    .Define("n_ForwardOffMTracker_station_3RawHits", "ForwardOffMTracker_station_3RawHits.size()")
+//    .Define("n_ForwardOffMTracker_station_4RawHits", "ForwardOffMTracker_station_4RawHits.size()")
+//    .Define("n_ForwardRomanPot_Station_1RawHits", "ForwardRomanPot_Status_1RawHits.size()")
+//    .Define("n_ForwardRomanPot_Station_2RawHits", "ForwardRomanPot_Status_2RawHits.size()")
+//    .Define("n_GEMEndcapNRawHits", "GEMEndcapNRawHits.size()")
+//    .Define("n_GEMEndcapPRawHits", "GEMEndcapPRawHits.size()")
+//    .Define("n_InnerTrackerBarrelRawHits", "InnerTrackerBarrelRawHits.size()")
+//    .Define("n_InnerTrackerEndcapNRawHits", "InnerTrackerEndcapNRawHits.size()")
+//    .Define("n_InnerTrackerEndcapPRawHits", "InnerTrackerEndcapPRawHits.size()")
+//    .Define("n_MedialTrackerBarrelRawHits", "MedialTrackerBarrelRawHits.size()")
+//    .Define("n_MedialTrackerEndcapNRawHits", "MedialTrackerEndcapNRawHits.size()")
+//    .Define("n_MedialTrackerEndcapPRawHits", "MedialTrackerEndcapPRawHits.size()")
+//    .Define("n_OuterTrackerBarrelRawHits", "OuterTrackerBarrelRawHits.size()")
+//    .Define("n_OuterTrackerEndcapNRawHits", "OuterTrackerEndcapNRawHits.size()")
+//    .Define("n_OuterTrackerEndcapPRawHits", "OuterTrackerEndcapPRawHits.size()")
+    .Define("n_VertexBarrelRawHits", "VertexBarrelRawHits.size()")
+  );
+
+  if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+    d0 = d0.Define("n_EcalBarrelImagingRawHits", "EcalBarrelImagingRawHits.size()")
+           .Define("n_EcalBarrelScFiRawHits",    "EcalBarrelScFiRawHits.size()");
+  } else {
+    d0 = d0.Define("n_EcalBarrelRawHits", "EcalBarrelRawHits.size()");
+  }
 
   // Ecal hits
   auto h_n_EcalEndcapPRawHits = d0.Histo1D({"h_n_EcalEndcapPRawHits", "EcalEndcapP; hits; counts", 100, 0, 1000}, "n_EcalEndcapPRawHits");
-  auto h_n_EcalBarrelImagingRawHits = d0.Histo1D({"h_n_EcalBarrelImagingRawHits", "EcalBarrelImaging; hits; counts", 100, 0, 1000}, "n_EcalBarrelImagingRawHits");
-  auto h_n_EcalBarrelScFiRawHits = d0.Histo1D({"h_n_EcalBarrelScFiRawHits", "EcalBarrelScFi; hits; counts", 100, 0, 10000}, "n_EcalBarrelScFiRawHits");
+  ROOT::RDF::RResultPtr<TH1D> h_n_EcalBarrelImagingRawHits, h_n_EcalBarrelScFiRawHits, h_n_EcalBarrelRawHits;
+  if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+    h_n_EcalBarrelImagingRawHits = d0.Histo1D({"h_n_EcalBarrelImagingRawHits", "EcalBarrelImaging; hits; counts", 100, 0, 1000}, "n_EcalBarrelImagingRawHits");
+    h_n_EcalBarrelScFiRawHits = d0.Histo1D({"h_n_EcalBarrelScFiRawHits", "EcalBarrelScFi; hits; counts", 100, 0, 10000}, "n_EcalBarrelScFiRawHits");
+  } else {
+    h_n_EcalBarrelRawHits = d0.Histo1D({"h_n_EcalBarrelRawHits", "EcalBarrel; hits; counts", 100, 0, 1000}, "n_EcalBarrelRawHits");
+  }
   auto h_n_EcalEndcapNRawHits = d0.Histo1D({"h_n_EcalEndcapNRawHits", "EcalEndcapN; hits; counts", 100, 0, 1000}, "n_EcalEndcapNRawHits");
   // Ecal stats
   auto stats_n_EcalEndcapPRawHits = d0.Stats("n_EcalEndcapPRawHits");
-  auto stats_n_EcalBarrelImagingRawHits = d0.Stats("n_EcalBarrelImagingRawHits");
-  auto stats_n_EcalBarrelScFiRawHits = d0.Stats("n_EcalBarrelScFiRawHits");
+  ROOT::RDF::RResultPtr<TStatistic> stats_n_EcalBarrelImagingRawHits, stats_n_EcalBarrelScFiRawHits, stats_n_EcalBarrelRawHits;
+  if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+    stats_n_EcalBarrelImagingRawHits = d0.Stats("n_EcalBarrelImagingRawHits");
+    stats_n_EcalBarrelScFiRawHits = d0.Stats("n_EcalBarrelScFiRawHits");
+  } else {
+    stats_n_EcalBarrelRawHits = d0.Stats("n_EcalBarrelRawHits");
+  }
   auto stats_n_EcalEndcapNRawHits = d0.Stats("n_EcalEndcapNRawHits");
   // Ecal adc
   auto h_adc_EcalEndcapPRawHits = d0.Histo1D({"h_adc_EcalEndcapPRawHits", "EcalEndcapP; amplitude; counts", 1024, 0, 32768}, "EcalEndcapPRawHits.amplitude");
-  auto h_adc_EcalBarrelImagingRawHits = d0.Histo1D({"h_adc_EcalBarrelImagingRawHits", "EcalBarrelImaging; amplitude; counts", 1024, 0, 8192}, "EcalBarrelImagingRawHits.amplitude");
-  auto h_adc_EcalBarrelScFiRawHits = d0.Histo1D({"h_adc_EcalBarrelScFiRawHits", "EcalBarrelScFi; amplitude; counts", 1024, 0, 32768}, "EcalBarrelScFiRawHits.amplitude");
+  ROOT::RDF::RResultPtr<TH1D> h_adc_EcalBarrelImagingRawHits, h_adc_EcalBarrelScFiRawHits, h_adc_EcalBarrelRawHits;
+  if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+    h_adc_EcalBarrelImagingRawHits = d0.Histo1D({"h_adc_EcalBarrelImagingRawHits", "EcalBarrelImaging; amplitude; counts", 1024, 0, 8192}, "EcalBarrelImagingRawHits.amplitude");
+    h_adc_EcalBarrelScFiRawHits = d0.Histo1D({"h_adc_EcalBarrelScFiRawHits", "EcalBarrelScFi; amplitude; counts", 1024, 0, 32768}, "EcalBarrelScFiRawHits.amplitude");
+  } else {
+    h_adc_EcalBarrelRawHits = d0.Histo1D({"h_adc_EcalBarrelRawHits", "EcalBarrel; amplitude; counts", 1024, 0, 32768}, "EcalBarrelRawHits.amplitude");
+  }
   auto h_adc_EcalEndcapNRawHits = d0.Histo1D({"h_adc_EcalEndcapNRawHits", "EcalEndcapN; amplitude; counts", 1024, 0, 32768}, "EcalEndcapNRawHits.amplitude");
   // Ecal tdc
   auto h_tdc_EcalEndcapPRawHits = d0.Histo1D({"h_tdc_EcalEndcapPRawHits", "EcalEndcapP; TDC channel; counts", 1024, 0, 32768}, "EcalEndcapPRawHits.timeStamp");
-  auto h_tdc_EcalBarrelImagingRawHits = d0.Histo1D({"h_tdc_EcalBarrelImagingRawHits", "EcalBarrelImaging; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelImagingRawHits.timeStamp");
-  auto h_tdc_EcalBarrelScFiRawHits = d0.Histo1D({"h_tdc_EcalBarrelScFiRawHits", "EcalBarrelScFi; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelScFiRawHits.timeStamp");
+  ROOT::RDF::RResultPtr<TH1D> h_tdc_EcalBarrelImagingRawHits, h_tdc_EcalBarrelScFiRawHits, h_tdc_EcalBarrelRawHits;
+  if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+    h_tdc_EcalBarrelImagingRawHits = d0.Histo1D({"h_tdc_EcalBarrelImagingRawHits", "EcalBarrelImaging; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelImagingRawHits.timeStamp");
+    h_tdc_EcalBarrelScFiRawHits = d0.Histo1D({"h_tdc_EcalBarrelScFiRawHits", "EcalBarrelScFi; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelScFiRawHits.timeStamp");
+  } else {
+    h_tdc_EcalBarrelRawHits = d0.Histo1D({"h_tdc_EcalBarrelRawHits", "EcalBarrel; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelRawHits.timeStamp");
+  }
   auto h_tdc_EcalEndcapNRawHits = d0.Histo1D({"h_tdc_EcalEndcapNRawHits", "EcalEndcapN; TDC channel; counts", 1024, 0, 32768}, "EcalEndcapNRawHits.timeStamp");
   // Hcal hits
   auto h_n_HcalEndcapPRawHits = d0.Histo1D({"h_n_HcalEndcapPRawHits", "HcalEndcapP; hits; counts", 100, 0, 1000}, "n_HcalEndcapPRawHits");
@@ -151,10 +176,15 @@ int rec_analysis_raw(const std::string& config_name)
 
   fmt::print("EcalEndcapPRawHits:");
   stats_n_EcalEndcapPRawHits->Print();
-  fmt::print("EcalBarrelImagingRawHits:");
-  stats_n_EcalBarrelImagingRawHits->Print();
-  fmt::print("EcalBarrelScFiRawHits:");
-  stats_n_EcalBarrelScFiRawHits->Print();
+  if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+    fmt::print("EcalBarrelImagingRawHits:");
+    stats_n_EcalBarrelImagingRawHits->Print();
+    fmt::print("EcalBarrelScFiRawHits:");
+    stats_n_EcalBarrelScFiRawHits->Print();
+  } else {
+    fmt::print("EcalBarrelRawHits:");
+    stats_n_EcalBarrelRawHits->Print();
+  }
   fmt::print("EcalEndcapNRawHits:");
   stats_n_EcalEndcapNRawHits->Print();
   fmt::print("HcalEndcapPRawHits:");
@@ -248,29 +278,44 @@ int rec_analysis_raw(const std::string& config_name)
     h2.DrawClone("hist");
     common_bench::plot::draw_label(ebeam, pbeam, detector);
 
-    c.cd(3);
-    gPad->SetLogy(true);
-    auto& h3 = *h_n_EcalBarrelImagingRawHits;
-    // histogram style
-    h3.SetLineColor(common_bench::plot::kMpBlue);
-    h3.SetLineWidth(2);
-    // axes
-    h3.GetXaxis()->CenterTitle();
-    h3.GetYaxis()->CenterTitle();
-    // draw everything
-    h3.DrawClone("hist");
-
-    c.cd(4);
-    gPad->SetLogy(true);
-    auto& h4 = *h_n_EcalBarrelScFiRawHits;
-    // histogram style
-    h4.SetLineColor(common_bench::plot::kMpBlue);
-    h4.SetLineWidth(2);
-    // axes
-    h4.GetXaxis()->CenterTitle();
-    h4.GetYaxis()->CenterTitle();
-    // draw everything
-    h4.DrawClone("hist");
+    if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+      c.cd(3);
+      gPad->SetLogy(true);
+      auto& h3 = *h_n_EcalBarrelImagingRawHits;
+      // histogram style
+      h3.SetLineColor(common_bench::plot::kMpBlue);
+      h3.SetLineWidth(2);
+      // axes
+      h3.GetXaxis()->CenterTitle();
+      h3.GetYaxis()->CenterTitle();
+      // draw everything
+      h3.DrawClone("hist");
+
+      c.cd(4);
+      gPad->SetLogy(true);
+      auto& h4 = *h_n_EcalBarrelScFiRawHits;
+      // histogram style
+      h4.SetLineColor(common_bench::plot::kMpBlue);
+      h4.SetLineWidth(2);
+      // axes
+      h4.GetXaxis()->CenterTitle();
+      h4.GetYaxis()->CenterTitle();
+      // draw everything
+      h4.DrawClone("hist");
+
+    } else {
+      c.cd(3);
+      gPad->SetLogy(true);
+      auto& h3 = *h_n_EcalBarrelRawHits;
+      // histogram style
+      h3.SetLineColor(common_bench::plot::kMpBlue);
+      h3.SetLineWidth(2);
+      // axes
+      h3.GetXaxis()->CenterTitle();
+      h3.GetYaxis()->CenterTitle();
+      // draw everything
+      h3.DrawClone("hist");
+    }
 
     c.Print(fmt::format("{}_EcalRawHits_n.png", output_prefix).c_str());
   }
@@ -305,29 +350,44 @@ int rec_analysis_raw(const std::string& config_name)
     h2.DrawClone("hist");
     common_bench::plot::draw_label(ebeam, pbeam, detector);
 
-    c.cd(3);
-    gPad->SetLogy(true);
-    auto& h3 = *h_adc_EcalBarrelImagingRawHits;
-    // histogram style
-    h3.SetLineColor(common_bench::plot::kMpBlue);
-    h3.SetLineWidth(2);
-    // axes
-    h3.GetXaxis()->CenterTitle();
-    h3.GetYaxis()->CenterTitle();
-    // draw everything
-    h3.DrawClone("hist");
-
-    c.cd(4);
-    gPad->SetLogy(true);
-    auto& h4 = *h_adc_EcalBarrelScFiRawHits;
-    // histogram style
-    h4.SetLineColor(common_bench::plot::kMpBlue);
-    h4.SetLineWidth(2);
-    // axes
-    h4.GetXaxis()->CenterTitle();
-    h4.GetYaxis()->CenterTitle();
-    // draw everything
-    h4.DrawClone("hist");
+    if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+      c.cd(3);
+      gPad->SetLogy(true);
+      auto& h3 = *h_adc_EcalBarrelImagingRawHits;
+      // histogram style
+      h3.SetLineColor(common_bench::plot::kMpBlue);
+      h3.SetLineWidth(2);
+      // axes
+      h3.GetXaxis()->CenterTitle();
+      h3.GetYaxis()->CenterTitle();
+      // draw everything
+      h3.DrawClone("hist");
+
+      c.cd(4);
+      gPad->SetLogy(true);
+      auto& h4 = *h_adc_EcalBarrelScFiRawHits;
+      // histogram style
+      h4.SetLineColor(common_bench::plot::kMpBlue);
+      h4.SetLineWidth(2);
+      // axes
+      h4.GetXaxis()->CenterTitle();
+      h4.GetYaxis()->CenterTitle();
+      // draw everything
+      h4.DrawClone("hist");
+
+    } else {
+      c.cd(3);
+      gPad->SetLogy(true);
+      auto& h3 = *h_adc_EcalBarrelRawHits;
+      // histogram style
+      h3.SetLineColor(common_bench::plot::kMpBlue);
+      h3.SetLineWidth(2);
+      // axes
+      h3.GetXaxis()->CenterTitle();
+      h3.GetYaxis()->CenterTitle();
+      // draw everything
+      h3.DrawClone("hist");
+    }
 
     c.Print(fmt::format("{}_EcalRawHits_adc.png", output_prefix).c_str());
   }
@@ -363,29 +423,44 @@ int rec_analysis_raw(const std::string& config_name)
     h2.DrawClone("hist");
     common_bench::plot::draw_label(ebeam, pbeam, detector);
 
-    c.cd(3);
-    gPad->SetLogy(true);
-    auto& h3 = *h_tdc_EcalBarrelImagingRawHits;
-    // histogram style
-    h3.SetLineColor(common_bench::plot::kMpBlue);
-    h3.SetLineWidth(2);
-    // axes
-    h3.GetXaxis()->CenterTitle();
-    h3.GetYaxis()->CenterTitle();
-    // draw everything
-    h3.DrawClone("hist");
-
-    c.cd(4);
-    gPad->SetLogy(true);
-    auto& h4 = *h_tdc_EcalBarrelScFiRawHits;
-    // histogram style
-    h4.SetLineColor(common_bench::plot::kMpBlue);
-    h4.SetLineWidth(2);
-    // axes
-    h4.GetXaxis()->CenterTitle();
-    h4.GetYaxis()->CenterTitle();
-    // draw everything
-    h4.DrawClone("hist");
+    if (d0.HasColumn("EcalBarrelScFiRawHits")) {
+      c.cd(3);
+      gPad->SetLogy(true);
+      auto& h3 = *h_tdc_EcalBarrelImagingRawHits;
+      // histogram style
+      h3.SetLineColor(common_bench::plot::kMpBlue);
+      h3.SetLineWidth(2);
+      // axes
+      h3.GetXaxis()->CenterTitle();
+      h3.GetYaxis()->CenterTitle();
+      // draw everything
+      h3.DrawClone("hist");
+
+      c.cd(4);
+      gPad->SetLogy(true);
+      auto& h4 = *h_tdc_EcalBarrelScFiRawHits;
+      // histogram style
+      h4.SetLineColor(common_bench::plot::kMpBlue);
+      h4.SetLineWidth(2);
+      // axes
+      h4.GetXaxis()->CenterTitle();
+      h4.GetYaxis()->CenterTitle();
+      // draw everything
+      h4.DrawClone("hist");
+
+    } else {
+      c.cd(3);
+      gPad->SetLogy(true);
+      auto& h3 = *h_tdc_EcalBarrelRawHits;
+      // histogram style
+      h3.SetLineColor(common_bench::plot::kMpBlue);
+      h3.SetLineWidth(2);
+      // axes
+      h3.GetXaxis()->CenterTitle();
+      h3.GetYaxis()->CenterTitle();
+      // draw everything
+      h3.DrawClone("hist");
+    }
 
     c.Print(fmt::format("{}_EcalRawHits_tdc.png", output_prefix).c_str());
   }
@@ -527,8 +602,19 @@ int rec_analysis_raw(const std::string& config_name)
 
   if (
     stats_n_EcalEndcapPRawHits->GetMean() < 0.8 ||
-    stats_n_EcalBarrelImagingRawHits->GetMean() < 0.8 ||
-    stats_n_EcalBarrelScFiRawHits->GetMean() < 0.8 ||
+    (
+      d0.HasColumn("EcalBarrelScFiRawHits") && 
+      (
+        stats_n_EcalBarrelImagingRawHits->GetMean() < 0.8 ||
+        stats_n_EcalBarrelScFiRawHits->GetMean() < 0.8
+      )
+    ) ||
+    (
+      ! d0.HasColumn("EcalBarrelScFiRawHits") && 
+      (
+        stats_n_EcalBarrelRawHits->GetMean() < 0.8
+      )
+    ) ||
     stats_n_EcalEndcapNRawHits->GetMean() < 0.8 ||
     stats_n_HcalEndcapPRawHits->GetMean() < 0.8 ||
     stats_n_HcalBarrelRawHits->GetMean() < 0.8 ||
diff --git a/options/reconstruction.ecal.py b/options/reconstruction.ecal.py
index de9279179f4cc50e577994c392bd0be84b42bb5f..03622bec30995759ca5770f68bdda3fca0731dc5 100644
--- a/options/reconstruction.ecal.py
+++ b/options/reconstruction.ecal.py
@@ -7,8 +7,12 @@ from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad
 import json
 
 detector_name = "athena"
+if "JUGGLER_DETECTOR" in os.environ :
+    detector_name = str(os.environ["JUGGLER_DETECTOR"])
+
+detector_config = detector_name
 if "JUGGLER_DETECTOR_CONFIG" in os.environ :
-  detector_name = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
+    detector_config = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
 
 detector_path = ""
 if "DETECTOR_PATH" in os.environ :
@@ -19,8 +23,13 @@ if "JUGGLER_DETECTOR_VERSION" in os.environ:
     env_version = str(os.environ["JUGGLER_DETECTOR_VERSION"])
     if 'acadia' in env_version:
         detector_version = 'acadia'
-compact_path = os.path.join(detector_path, detector_name)
 
+# Detector features that affect reconstruction
+has_ecal_barrel_scfi = False
+if 'athena' in detector_name:
+    has_ecal_barrel_scfi = True
+if 'ecce' in detector_name and 'imaging' in detector_config:
+    has_ecal_barrel_scfi = True
 
 # CAL reconstruction
 # get sampling fractions from system environment variable
@@ -49,7 +58,7 @@ n_events = int(os.environ["JUGGLER_N_EVENTS"])
 # services
 services = []
 # geometry service
-services.append(GeoSvc("GeoSvc", detectors=["{}.xml".format(compact_path)], OutputLevel=WARNING))
+services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_config)], OutputLevel=WARNING))
 # data service
 services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING))
 
diff --git a/options/reconstruction.hcal.py b/options/reconstruction.hcal.py
index 7b4c03948dde5f606398f06978ebf1934efb2c5a..79babb7a2b949aacf4f12f108c71cbf865b535f2 100644
--- a/options/reconstruction.hcal.py
+++ b/options/reconstruction.hcal.py
@@ -7,8 +7,12 @@ from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad
 import json
 
 detector_name = "athena"
+if "JUGGLER_DETECTOR" in os.environ :
+    detector_name = str(os.environ["JUGGLER_DETECTOR"])
+
+detector_config = detector_name
 if "JUGGLER_DETECTOR_CONFIG" in os.environ :
-  detector_name = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
+    detector_config = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
 
 detector_path = ""
 if "DETECTOR_PATH" in os.environ :
@@ -20,7 +24,12 @@ if "JUGGLER_DETECTOR_VERSION" in os.environ:
     if 'acadia' in env_version:
         detector_version = 'acadia'
 
-compact_path = os.path.join(detector_path, detector_name)
+# Detector features that affect reconstruction
+has_ecal_barrel_scfi = False
+if 'athena' in detector_name:
+    has_ecal_barrel_scfi = True
+if 'ecce' in detector_name and 'imaging' in detector_config:
+    has_ecal_barrel_scfi = True
 
 # CAL reconstruction
 # get sampling fractions from system environment variable
@@ -51,7 +60,7 @@ n_events = int(os.environ["JUGGLER_N_EVENTS"])
 # services
 services = []
 # geometry service
-services.append(GeoSvc("GeoSvc", detectors=["{}.xml".format(compact_path)], OutputLevel=WARNING))
+services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_config)], OutputLevel=WARNING))
 # data service
 services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING))
 
diff --git a/options/reconstruction.py b/options/reconstruction.py
index b0cb6425f95db142ef491142b69a5acac3e5e0ce..bb47ab6d93e16c8f5cff237cd5f99164a210cf6a 100644
--- a/options/reconstruction.py
+++ b/options/reconstruction.py
@@ -5,11 +5,14 @@ from Configurables import ApplicationMgr, AuditorSvc, EICDataSvc, PodioOutput, G
 from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad
 
 import json
-from math import sqrt
 
 detector_name = "athena"
+if "JUGGLER_DETECTOR" in os.environ :
+    detector_name = str(os.environ["JUGGLER_DETECTOR"])
+
+detector_config = detector_name
 if "JUGGLER_DETECTOR_CONFIG" in os.environ :
-    detector_name = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
+    detector_config = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
 
 detector_path = ""
 if "DETECTOR_PATH" in os.environ :
@@ -21,7 +24,12 @@ if "JUGGLER_DETECTOR_VERSION" in os.environ:
     if 'acadia' in env_version:
         detector_version = 'acadia'
 
-compact_path = os.path.join(detector_path, detector_name)
+# Detector features that affect reconstruction
+has_ecal_barrel_scfi = False
+if 'athena' in detector_name:
+    has_ecal_barrel_scfi = True
+if 'ecce' in detector_name and 'imaging' in detector_config:
+    has_ecal_barrel_scfi = True
 
 if "PBEAM" in os.environ:
     ionBeamEnergy = str(os.environ["PBEAM"])
@@ -100,11 +108,11 @@ services.append(AuditorSvc("AuditorSvc", Auditors=['ChronoAuditor', 'MemStatAudi
 ##       these names are somewhat inconsistent, and should probably all be renamed to 'material-map.XXX'
 ##       FIXME
 if detector_version == 'acadia':
-    services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_name)],
+    services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_config)],
                                      materials="config/material-maps.json",
                                      OutputLevel=WARNING))
 else:
-    services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_name)],
+    services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_config)],
                                     materials="calibrations/materials-map.cbor",
                                     OutputLevel=WARNING))
 # data service
@@ -185,12 +193,11 @@ sim_coll = [
     'ZDCHcalHits',
     'ZDCHcalHitsContributions',
 ]
-
 ecal_barrel_scfi_collections = [
     'EcalBarrelScFiHits',
     'EcalBarrelScFiHitsContributions'
 ]
-if 'athena' in detector_name:
+if has_ecal_barrel_scfi:
     sim_coll += ecal_barrel_scfi_collections
 
 forward_romanpot_collections = [
@@ -468,7 +475,7 @@ algorithms.append(ci_ecal_clreco)
 #algorithms.append(ci_ecal_clmerger)
 
 # Central Barrel Ecal
-if 'athena' in detector_name:
+if has_ecal_barrel_scfi:
     # Central ECAL Imaging Calorimeter
     img_barrel_daq = calo_daq['ecal_barrel_imaging']
 
diff --git a/options/reconstruction.raw.py b/options/reconstruction.raw.py
index 7c4fc45051b2a76f397787819e7495ad0619df77..de8412c3ec80c3c5f71b276cdb14e21b9e2b44f9 100644
--- a/options/reconstruction.raw.py
+++ b/options/reconstruction.raw.py
@@ -7,8 +7,12 @@ from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad
 import json
 
 detector_name = "athena"
+if "JUGGLER_DETECTOR" in os.environ :
+    detector_name = str(os.environ["JUGGLER_DETECTOR"])
+
+detector_config = detector_name
 if "JUGGLER_DETECTOR_CONFIG" in os.environ :
-    detector_name = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
+    detector_config = str(os.environ["JUGGLER_DETECTOR_CONFIG"])
 
 detector_path = ""
 if "DETECTOR_PATH" in os.environ :
@@ -20,7 +24,12 @@ if "JUGGLER_DETECTOR_VERSION" in os.environ:
     if 'acadia' in env_version:
         detector_version = 'acadia'
 
-compact_path = os.path.join(detector_path, detector_name)
+# Detector features that affect reconstruction
+has_ecal_barrel_scfi = False
+if 'athena' in detector_name:
+    has_ecal_barrel_scfi = True
+if 'ecce' in detector_name and 'imaging' in detector_config:
+    has_ecal_barrel_scfi = True
 
 # RICH reconstruction
 qe_data = [(1.0, 0.25), (7.5, 0.25),]
@@ -50,7 +59,7 @@ services = []
 # auditor service
 services.append(AuditorSvc("AuditorSvc", Auditors=['ChronoAuditor', 'MemStatAuditor']))
 # geometry service
-services.append(GeoSvc("GeoSvc", detectors=["{}.xml".format(compact_path)], OutputLevel=WARNING))
+services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_config)], OutputLevel=WARNING))
 # data service
 services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING))
 
@@ -80,12 +89,11 @@ sim_coll = [
     'HcalEndcapNHitsContributions',
     'DRICHHits',
 ]
-
 ecal_barrel_scfi_collections = [
     'EcalBarrelScFiHits',
     'EcalBarrelScFiHitsContributions'
 ]
-if 'athena' in detector_name:
+if has_ecal_barrel_scfi:
     sim_coll += ecal_barrel_scfi_collections
 
 forward_romanpot_collections = [
@@ -192,7 +200,7 @@ ci_ecal_digi = CalHitDigi("ci_ecal_digi",
 algorithms.append(ci_ecal_digi)
 
 # Central Barrel Ecal
-if 'athena' in detector_name:
+if has_ecal_barrel_scfi:
     # Central ECAL Imaging Calorimeter
     img_barrel_daq = calo_daq['ecal_barrel_imaging']
 
@@ -217,7 +225,7 @@ else:
 
     sciglass_ecal_digi = CalHitDigi("sciglass_ecal_digi",
         inputHitCollection="EcalBarrelHits",
-        outputHitCollection="EcalBarrelHitsDigi",
+        outputHitCollection="EcalBarrelRawHits",
         energyResolutions=[0., 0.02, 0.],   # 2% flat resolution
         **sciglass_ecal_daq)
     algorithms.append(sciglass_ecal_digi)