From f8eba5d4f56f164846a20532b86c0d9ab7a4f771 Mon Sep 17 00:00:00 2001
From: Sylvester Joosten <sylvester.joosten@gmail.com>
Date: Sat, 30 Jan 2021 18:01:13 -0600
Subject: [PATCH] Update the CI scripts for the DIS stub to be consistent with
 the more generic DVMP scripts. Also did some more restructuring of the
 benchmark to make it easier to split off a generic benchmark library in the
 future.

---
 .clang-format                                 |   2 +-
 .gitlab-ci.yml                                |   6 +-
 .rootlogon.C                                  |  12 +-
 accelerator                                   |   1 +
 benchmarks.json => benchmarks/benchmarks.json |   0
 {dis => benchmarks/dis}/.gitignore            |   0
 {dis => benchmarks/dis}/README.md             |   0
 benchmarks/dis/analysis/dis.h                 |  26 +++
 benchmarks/dis/analysis/dis_electrons.cxx     | 116 ++++++++++
 benchmarks/dis/benchmark.json                 |   6 +
 benchmarks/dis/config.yml                     |  50 +++++
 benchmarks/dis/dis.sh                         | 141 +++++++++++++
 benchmarks/dis/env.sh                         |  50 +++++
 benchmarks/dis/gen.sh                         |  96 +++++++++
 .../dis}/generator/gen_central_electrons.cxx  |   0
 .../dis/generator/pythia_dis.cxx              |  24 +--
 {dvcs => benchmarks/dvcs}/config.yml          |   4 +-
 {dvcs => benchmarks/dvcs}/dvcs.sh             |  10 +-
 .../dvcs}/scripts/dvcs_tests.cxx              |   0
 .../dvcs}/scripts/merge_results.py            |   0
 benchmarks/dvmp/analysis/dvmp.h               |  56 +++++
 .../dvmp}/analysis/vm_invar.cxx               | 139 ++++++------
 .../dvmp}/analysis/vm_mass.cxx                | 176 ++++++++--------
 {dvmp => benchmarks/dvmp}/benchmark.json      |   0
 {dvmp => benchmarks/dvmp}/config.yml          |  22 +-
 {dvmp => benchmarks/dvmp}/dvmp.sh             |  23 +-
 {dvmp => benchmarks/dvmp}/env.sh              |   0
 {dvmp => benchmarks/dvmp}/gen.sh              |  13 +-
 .../dvmp}/generator/jpsi_barrel.json.in       |   0
 .../dvmp}/generator/jpsi_central.json.in      |   0
 dis/analysis/rec_dis_electrons.cxx            | 113 ----------
 dis/config.yml                                |  26 ---
 dis/dis.sh                                    | 100 ---------
 dis/gen.sh                                    |  65 ------
 dis/generator/placeholder                     |   0
 dis/util/placeholder                          |   0
 dvcs/tests/report.xml                         |  10 -
 dvcs/tests/report2.xml                        |  12 --
 dvmp/.gitignore                               |   0
 dvmp/analysis/benchmark.hh                    |   1 -
 dvmp/analysis/exception.hh                    |   1 -
 dvmp/analysis/plot.h                          |  40 ----
 dvmp/analysis/util.h                          | 198 ------------------
 include/benchmark.h                           | 124 +++++++++++
 include/exception.h                           |  22 ++
 {dvmp/analysis => include}/mt.h               |   0
 include/plot.h                                |  42 ++++
 include/util.h                                | 159 ++++++++++++++
 {config => options}/env.sh                    |   4 +
 pythia_dis                                    | Bin 0 -> 304896 bytes
 tools/{start_dev_shell.sh => dev-shell}       |   0
 util/benchmark.hh                             | 117 -----------
 util/build_detector.sh                        |   4 +-
 util/collect_benchmarks.py                    |   2 +-
 util/collect_tests.py                         |   2 +-
 util/compile_analyses.py                      | 119 +++++++++++
 util/exception.hh                             |  23 --
 util/parse_cmd.sh                             |   6 +-
 58 files changed, 1237 insertions(+), 926 deletions(-)
 create mode 160000 accelerator
 rename benchmarks.json => benchmarks/benchmarks.json (100%)
 rename {dis => benchmarks/dis}/.gitignore (100%)
 rename {dis => benchmarks/dis}/README.md (100%)
 create mode 100644 benchmarks/dis/analysis/dis.h
 create mode 100644 benchmarks/dis/analysis/dis_electrons.cxx
 create mode 100644 benchmarks/dis/benchmark.json
 create mode 100644 benchmarks/dis/config.yml
 create mode 100755 benchmarks/dis/dis.sh
 create mode 100644 benchmarks/dis/env.sh
 create mode 100755 benchmarks/dis/gen.sh
 rename {dis => benchmarks/dis}/generator/gen_central_electrons.cxx (100%)
 rename dis/src/pythia_dis.cc => benchmarks/dis/generator/pythia_dis.cxx (94%)
 rename {dvcs => benchmarks/dvcs}/config.yml (80%)
 rename {dvcs => benchmarks/dvcs}/dvcs.sh (87%)
 rename {dvcs => benchmarks/dvcs}/scripts/dvcs_tests.cxx (100%)
 rename {dvcs => benchmarks/dvcs}/scripts/merge_results.py (100%)
 create mode 100644 benchmarks/dvmp/analysis/dvmp.h
 rename {dvmp => benchmarks/dvmp}/analysis/vm_invar.cxx (54%)
 rename {dvmp => benchmarks/dvmp}/analysis/vm_mass.cxx (56%)
 rename {dvmp => benchmarks/dvmp}/benchmark.json (100%)
 rename {dvmp => benchmarks/dvmp}/config.yml (62%)
 rename {dvmp => benchmarks/dvmp}/dvmp.sh (91%)
 rename {dvmp => benchmarks/dvmp}/env.sh (100%)
 rename {dvmp => benchmarks/dvmp}/gen.sh (91%)
 rename {dvmp => benchmarks/dvmp}/generator/jpsi_barrel.json.in (100%)
 rename {dvmp => benchmarks/dvmp}/generator/jpsi_central.json.in (100%)
 delete mode 100644 dis/analysis/rec_dis_electrons.cxx
 delete mode 100644 dis/config.yml
 delete mode 100644 dis/dis.sh
 delete mode 100644 dis/gen.sh
 delete mode 100644 dis/generator/placeholder
 delete mode 100644 dis/util/placeholder
 delete mode 100644 dvcs/tests/report.xml
 delete mode 100644 dvcs/tests/report2.xml
 delete mode 100644 dvmp/.gitignore
 delete mode 120000 dvmp/analysis/benchmark.hh
 delete mode 120000 dvmp/analysis/exception.hh
 delete mode 100644 dvmp/analysis/plot.h
 delete mode 100644 dvmp/analysis/util.h
 create mode 100644 include/benchmark.h
 create mode 100644 include/exception.h
 rename {dvmp/analysis => include}/mt.h (100%)
 create mode 100644 include/plot.h
 create mode 100644 include/util.h
 rename {config => options}/env.sh (96%)
 create mode 100755 pythia_dis
 rename tools/{start_dev_shell.sh => dev-shell} (100%)
 delete mode 100644 util/benchmark.hh
 create mode 100755 util/compile_analyses.py
 delete mode 100644 util/exception.hh

diff --git a/.clang-format b/.clang-format
index 05b10dc8..c43c6165 100644
--- a/.clang-format
+++ b/.clang-format
@@ -44,7 +44,7 @@ BreakConstructorInitializersBeforeComma: false
 BreakConstructorInitializers: BeforeColon
 BreakAfterJavaFieldAnnotations: false
 BreakStringLiterals: true
-ColumnLimit:     120
+ColumnLimit:     100
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
 ConstructorInitializerAllOnOneLineOrOnePerLine: false
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4f819023..d522499b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,9 +33,9 @@ detector:
     - ./util/build_detector.sh
 
 include:
-  - local: 'dis/config.yml'
-  - local: 'dvmp/config.yml'
-  - local: 'dvcs/config.yml'
+  - local: 'benchmarks/dis/config.yml'
+  - local: 'benchmarks/dvmp/config.yml'
+  - local: 'benchmarks/dvcs/config.yml'
 
 summary:
   stage: finish
diff --git a/.rootlogon.C b/.rootlogon.C
index 0be78dd3..9c11c3a4 100644
--- a/.rootlogon.C
+++ b/.rootlogon.C
@@ -1,10 +1,16 @@
 {
   // Ensure fmt is loaded
   R__LOAD_LIBRARY(libfmt);
+  //
+  // top-level include-dir
+  gROOT->ProcessLine(".include include");
 
   // setup a local build directory so we don't polute our source code with
-  // ROOT dictionaries etc.
-  gSystem->SetBuildDir("/tmp/root_build");
+  // ROOT dictionaries etc. if desired
+  const char* build_dir = gSystem->Getenv("ROOT_BUILD_DIR");
+  if (build_dir) {
+    gSystem->SetBuildDir(build_dir);
+  }
 
   // style definition based off the ATLAS style
   TStyle* s = gStyle;
@@ -37,7 +43,7 @@
 
   // use large fonts
   // Int_t font=72; // Helvetica italics
-  Int_t font = 43; // Helvetica
+  Int_t    font  = 43; // Helvetica
   Double_t tsize = 26;
   s->SetTextFont(font);
 
diff --git a/accelerator b/accelerator
new file mode 160000
index 00000000..f3ff428e
--- /dev/null
+++ b/accelerator
@@ -0,0 +1 @@
+Subproject commit f3ff428e3b926a41e95beaa984d8dc05cec37cc7
diff --git a/benchmarks.json b/benchmarks/benchmarks.json
similarity index 100%
rename from benchmarks.json
rename to benchmarks/benchmarks.json
diff --git a/dis/.gitignore b/benchmarks/dis/.gitignore
similarity index 100%
rename from dis/.gitignore
rename to benchmarks/dis/.gitignore
diff --git a/dis/README.md b/benchmarks/dis/README.md
similarity index 100%
rename from dis/README.md
rename to benchmarks/dis/README.md
diff --git a/benchmarks/dis/analysis/dis.h b/benchmarks/dis/analysis/dis.h
new file mode 100644
index 00000000..0e88a01a
--- /dev/null
+++ b/benchmarks/dis/analysis/dis.h
@@ -0,0 +1,26 @@
+#ifndef DVMP_H
+#define DVMP_H
+
+#include <util.h>
+
+#include <algorithm>
+#include <cmath>
+#include <exception>
+#include <fmt/core.h>
+#include <limits>
+#include <string>
+#include <vector>
+
+#include <Math/Vector4D.h>
+
+// Additional utility functions for DVMP benchmarks. Where useful, these can be
+// promoted to the top-level util library
+namespace util {
+
+  // ADD EXTRA DIS UTILTIY FUNCTIONS HERE
+
+  //=========================================================================================================
+
+} // namespace util
+
+#endif
diff --git a/benchmarks/dis/analysis/dis_electrons.cxx b/benchmarks/dis/analysis/dis_electrons.cxx
new file mode 100644
index 00000000..02dc7b0d
--- /dev/null
+++ b/benchmarks/dis/analysis/dis_electrons.cxx
@@ -0,0 +1,116 @@
+#include "dis.h"
+#include "plot.h"
+
+#include <benchmark.h>
+#include <mt.h>
+#include <util.h>
+
+#include "ROOT/RDataFrame.hxx"
+#include <cmath>
+#include <fmt/color.h>
+#include <fmt/core.h>
+#include <fstream>
+#include <iostream>
+#include <nlohmann/json.hpp>
+#include <string>
+#include <vector>
+
+int dis_electrons(const std::string& config_name)
+{
+  // read our configuration
+  std::ifstream  config_file{config_name};
+  nlohmann::json config;
+  config_file >> config;
+
+  const std::string rec_file      = config["rec_file"];
+  const std::string detector      = config["detector"];
+  std::string       output_prefix = config["output_prefix"];
+  const std::string test_tag      = config["test_tag"];
+
+  fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green),
+             "Running DIS electron analysis...\n");
+  fmt::print(" - Detector package: {}\n", detector);
+  fmt::print(" - input file: {}\n", rec_file);
+  fmt::print(" - output prefix: {}\n", output_prefix);
+  fmt::print(" - test tag: {}\n", test_tag);
+
+  // create our test definition
+  // test_tag
+  eic::util::Test dis_Q2_resolution{
+      {{"name", fmt::format("{}_Q2_resolution", test_tag)},
+       {"title", "DIS Q2 resolution"},
+       {"description",
+        fmt::format("DIS Q2 resolution with {}, estimated using a Gaussian fit.", detector)},
+       {"quantity", "resolution (in %)"},
+       {"target", "0.1"}}};
+
+  // Run this in multi-threaded mode if desired
+  ROOT::EnableImplicitMT(kNumThreads);
+
+  const double electron_mass = util::get_pdg_mass("electron");
+
+  // Ensure our output prefix always ends on a dot, a slash or a dash
+  // Necessary when generating output plots
+  if (output_prefix.back() != '.' && output_prefix.back() != '/' && output_prefix.back() != '-') {
+    output_prefix += "-";
+  }
+
+  ROOT::RDataFrame d("events", rec_file);
+
+  // utility lambda functions to bind the reconstructed particle type
+  // (as we have no PID yet)
+  auto momenta_from_tracking =
+      [electron_mass](const std::vector<eic::TrackParametersData>& tracks) {
+        return util::momenta_from_tracking(tracks, electron_mass);
+      };
+
+  auto d0 = d.Define("p_rec", momenta_from_tracking, {"outputTrackParameters"})
+                .Define("N", "p_rec.size()")
+                .Define("p_sim", util::momenta_from_simulation, {"mcparticles2"})
+                .Define("mom_sim", util::mom, {"p_sim"})
+                .Define("mom_rec", util::mom, {"p_rec"});
+
+  auto h_mom_sim = d0.Histo1D({"h_mom_sim", "; GeV; counts", 100, 0, 50}, "mom_sim");
+  auto h_mom_rec = d0.Histo1D({"h_mom_rec", "; GeV; counts", 100, 0, 50}, "mom_rec");
+
+  auto c = new TCanvas();
+
+  // Plot our histograms.
+  // TODO: to start I'm explicitly plotting the histograms, but want to
+  // factorize out the plotting code moving forward.
+  {
+    TCanvas c{"canvas", "canvas", 1200, 1200};
+    c.cd();
+    // gPad->SetLogx(false);
+    gPad->SetLogy(true);
+    auto& h1 = *h_mom_sim;
+    auto& h2 = *h_mom_rec;
+    // histogram style
+    h1.SetLineColor(plot::kMpBlue);
+    h1.SetLineWidth(2);
+    h2.SetLineColor(plot::kMpOrange);
+    h2.SetLineWidth(2);
+    // axes
+    h1.GetXaxis()->CenterTitle();
+    h1.GetYaxis()->CenterTitle();
+    // draw everything
+    h1.DrawClone("hist");
+    h2.DrawClone("hist same");
+    // FIXME hardcoded beam configuration
+    plot::draw_label(18, 275, detector);
+    TText* tptr1;
+    auto   t1 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    t1->SetFillColorAlpha(kWhite, 0);
+    t1->SetTextFont(43);
+    t1->SetTextSize(25);
+    tptr1 = t1->AddText("simulated");
+    tptr1->SetTextColor(plot::kMpBlue);
+    tptr1 = t1->AddText("reconstructed");
+    tptr1->SetTextColor(plot::kMpOrange);
+    t1->Draw();
+
+    c.Print(fmt::format("{}momentum.png", output_prefix).c_str());
+  }
+
+  return 0;
+}
diff --git a/benchmarks/dis/benchmark.json b/benchmarks/dis/benchmark.json
new file mode 100644
index 00000000..1754f81a
--- /dev/null
+++ b/benchmarks/dis/benchmark.json
@@ -0,0 +1,6 @@
+{
+  "name": "DIS/SIDIS",
+  "title": "DIS/SIDIS Benchmarks",
+  "description": "Benchmark for (Semi-inclusive) DIS",
+  "target": "0.8"
+}
diff --git a/benchmarks/dis/config.yml b/benchmarks/dis/config.yml
new file mode 100644
index 00000000..6331fd56
--- /dev/null
+++ b/benchmarks/dis/config.yml
@@ -0,0 +1,50 @@
+dis:generate:
+  stage: initialize
+  needs: []
+  timeout: 1 hours
+  cache:
+    key:
+      files:
+        - benchmarks/dis/generator/pythia_dis.cxx
+      prefix: "$CI_COMMIT_REF_SLUG"
+    paths:
+      - input/dis
+  artifacts:
+    paths:
+      - input
+  script:
+    - bash benchmarks/dis/gen.sh --config barrel --ebeam 18 --pbeam 275
+
+dis:process:
+  stage: process
+  needs: ["detector", "dis:generate"]
+  timeout: 1 hour
+  script:
+    - source options/env.sh
+    - ./util/compile_analyses.py dis
+    - ./benchmarks/dis/dis.sh --config barrel --ebeam 18 --pbeam 275
+  artifacts:
+    paths:
+      - results
+  retry:
+    max: 2
+    when:
+      - runner_system_failure
+  cache:
+    key:
+      files:
+        - .rootlogon.C
+        - util/compile_analyses.py
+      prefix: "$CI_COMMIT_REF_SLUG"
+    paths:
+      - .local/root_build
+
+dis:results:
+  stage: collect
+  needs: ["dis:process"]
+  script:
+    - ./util/collect_tests.py dis
+  artifacts:
+    paths:
+      - results/dis.json
+      - results/dis
diff --git a/benchmarks/dis/dis.sh b/benchmarks/dis/dis.sh
new file mode 100755
index 00000000..77fb85a5
--- /dev/null
+++ b/benchmarks/dis/dis.sh
@@ -0,0 +1,141 @@
+#!/bin/bash
+
+## =============================================================================
+## Run the DIS benchmarks in 5 steps:
+## 1. Parse the command line and setup environment
+## 2. Detector simulation through npsim
+## 3. Digitization and reconstruction through Juggler
+## 4. Root-based Physics analyses
+## 5. Finalize
+## =============================================================================
+
+## make sure we launch this script from the project root directory
+PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/../..
+pushd ${PROJECT_ROOT}
+
+echo "Running the DIS benchmarks"
+
+## =============================================================================
+## Step 1: Setup the environment variables
+##
+## First parse the command line flags.
+## This sets the following environment variables:
+## - CONFIG:   The specific generator configuration
+## - EBEAM:    The electron beam energy
+## - PBEAM:    The ion beam energy
+source util/parse_cmd.sh $@
+
+## To run the reconstruction, we need the following global variables:
+## - JUGGLER_INSTALL_PREFIX: Install prefix for Juggler (simu/recon)
+## - JUGGLER_DETECTOR:       the detector package we want to use for this benchmark
+## - DETECTOR_PATH:          full path to the detector definitions
+##
+## You can ready options/env.sh for more in-depth explanations of the variables
+## and how they can be controlled.
+source options/env.sh
+
+## We also need the following benchmark-specific variables:
+##
+## - BENCHMARK_TAG: Unique identified for this benchmark process.
+## - BEAM_TAG:      Identifier for the chosen beam configuration
+## - INPUT_PATH:    Path for generator-level input to the benchmarks
+## - TMP_PATH:      Path for temporary data (not exported as artifacts)
+## - RESULTS_PATH:  Path for benchmark output figures and files
+##
+## You can read dvmp/env.sh for more in-depth explanations of the variables.
+source benchmarks/dis/env.sh
+
+## Get a unique file names based on the configuration options
+GEN_FILE=${INPUT_PATH}/gen-${CONFIG}_${JUGGLER_N_EVENTS}.hepmc
+
+SIM_FILE=${TMP_PATH}/sim-${CONFIG}.root
+SIM_LOG=${TMP_PATH}/sim-${CONFIG}.log
+
+
+REC_FILE=${TMP_PATH}/rec-${CONFIG}.root
+REC_LOG=${TMP_PATH}/sim-${CONFIG}.log
+
+PLOT_TAG=${CONFIG}
+
+## =============================================================================
+## Step 2: Run the simulation
+echo "Running Geant4 simulation"
+npsim --runType batch \
+      --part.minimalKineticEnergy 1000*GeV  \
+      -v WARNING \
+      --numberOfEvents ${JUGGLER_N_EVENTS} \
+      --compactFile ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml \
+      --inputFiles ${GEN_FILE} \
+      --outputFile ${SIM_FILE}
+if [ "$?" -ne "0" ] ; then
+  echo "ERROR running npsim"
+  exit 1
+fi
+
+## =============================================================================
+## Step 3: Run digitization & reconstruction
+echo "Running the digitization and reconstruction"
+## FIXME Need to figure out how to pass file name to juggler from the commandline
+## the tracker_reconstruction.py options file uses the following environment
+## variables:
+## - JUGGLER_SIM_FILE:    input detector simulation
+## - JUGGLER_REC_FILE:    output reconstructed data
+## - JUGGLER_DETECTOR_PATH: Location of the detector geometry
+## - JUGGLER_N_EVENTS:    number of events to process (part of global environment)
+## - JUGGLER_DETECTOR:    detector package (part of global environment)
+export JUGGLER_SIM_FILE=${SIM_FILE}
+export JUGGLER_REC_FILE=${REC_FILE}
+export JUGGLER_DETECTOR_PATH=${DETECTOR_PATH}
+xenv -x ${JUGGLER_INSTALL_PREFIX}/Juggler.xenv \
+  gaudirun.py options/tracker_reconstruction.py \
+  2>&1 > ${REC_LOG}
+## on-error, first retry running juggler again as there is still a random
+## crash we need to address FIXME
+if [ "$?" -ne "0" ] ; then
+  echo "Juggler crashed, retrying..."
+  xenv -x ${JUGGLER_INSTALL_PREFIX}/Juggler.xenv \
+    gaudirun.py options/tracker_reconstruction.py \
+    2>&1 > ${REC_LOG}
+  if [ "$?" -ne "0" ] ; then
+    echo "ERROR running juggler, both attempts failed"
+    exit 1
+  fi
+fi
+
+## =============================================================================
+## Step 4: Analysis
+## write a temporary configuration file for the analysis script
+echo "Running analysis"
+CONFIG="${TMP_PATH}/${PLOT_TAG}.json"
+cat << EOF > ${CONFIG}
+{
+  "rec_file": "${REC_FILE}",
+  "detector": "${JUGGLER_DETECTOR}",
+  "output_prefix": "${RESULTS_PATH}/${PLOT_TAG}",
+  "test_tag": "${BEAM_TAG}"
+}
+EOF
+#cat ${CONFIG}
+root -b -q "benchmarks/dis/analysis/dis_electrons.cxx+(\"${CONFIG}\")"
+#root -b -q "benchmarks/dis/analysis/dis_electrons.cxx(\"${CONFIG}\")"
+if [[ "$?" -ne "0" ]] ; then
+  echo "ERROR running rec_dis_electron script"
+  exit 1
+fi
+
+## =============================================================================
+## Step 5: finalize
+echo "Finalizing DIS benchmark"
+
+## Move over reconsturction artifacts as long as we don't have
+## too many events
+if [ "${JUGGLER_N_EVENTS}" -lt "500" ] ; then 
+  cp ${REC_FILE} ${RESULTS_PATH}
+fi
+
+## Always move over log files to the results path
+cp ${REC_LOG} ${RESULTS_PATH}
+
+## =============================================================================
+## All done!
+echo "DIS benchmarks complete"
diff --git a/benchmarks/dis/env.sh b/benchmarks/dis/env.sh
new file mode 100644
index 00000000..1a5b153f
--- /dev/null
+++ b/benchmarks/dis/env.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+## =============================================================================
+## Local configuration variables for this particular benchmark 
+## It defines the following additional variables: 
+##
+##  - BENCHMARK_TAG:          Tag to identify this particular benchmark
+##  - BEAM_TAG                Tag to identify the beam configuration
+##  - INPUT_PATH:             Path for generator-level input to the benchmarks
+##  - TMP_PATH:               Path for temporary data (not exported as artifacts)
+##  - RESULTS_PATH:           Path for benchmark output figures and files
+##
+## This script assumes that EBEAM and PBEAM are set as part of the
+## calling script (usually as command line argument).
+##
+## =============================================================================
+
+## Tag for the local benchmark. Should be the same as the directory name for
+## this particular benchmark set (for clarity). 
+## This tag is used for the output artifacts directory (results/${JUGGLER_TAG}) 
+## and a tag in some of the output files.
+export BENCHMARK_TAG="dis"
+echo "Setting up the local environment for the ${BENCHMARK_TAG^^} benchmarks"
+
+## Extra beam tag to identify the desired beam configuration
+export BEAM_TAG="${EBEAM}on${PBEAM}"
+
+## Data path for input data (generator-level hepmc file)
+INPUT_PATH="input/${BENCHMARK_TAG}/${BEAM_TAG}"
+mkdir -p ${INPUT_PATH}
+export INPUT_PATH=`realpath ${INPUT_PATH}`
+echo "INPUT_PATH:             ${INPUT_PATH}"
+
+
+## Data path for temporary data (not exported as artifacts)
+TMP_PATH=${LOCAL_PREFIX}/tmp/${BEAM_TAG}
+mkdir -p ${TMP_PATH}
+export TMP_PATH=`realpath ${TMP_PATH}`
+echo "TMP_PATH:               ${TMP_PATH}"
+
+## Data path for benchmark output (plots and reconstructed files
+## if not too big).
+RESULTS_PATH="results/${BENCHMARK_TAG}/${BEAM_TAG}"
+mkdir -p ${RESULTS_PATH}
+export RESULTS_PATH=`realpath ${RESULTS_PATH}`
+echo "RESULTS_PATH:           ${RESULTS_PATH}"
+
+## =============================================================================
+## That's all!
+echo "Local environment setup complete."
diff --git a/benchmarks/dis/gen.sh b/benchmarks/dis/gen.sh
new file mode 100755
index 00000000..4a42081a
--- /dev/null
+++ b/benchmarks/dis/gen.sh
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+## =============================================================================
+## Standin for a proper pythia generation process, similar to how we
+## generate events for DVMP
+## Runs in 5 steps:
+##   1. Parse the command line and setup the environment
+##   2. Check if we can load the requested file from the cache
+##   3. Build generator exe 
+##   4. Run the actual generator
+##   5. Finalize
+## =============================================================================
+## =============================================================================
+
+## make sure we launch this script from the project root directory
+PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/../..
+pushd ${PROJECT_ROOT}
+
+## =============================================================================
+## Step 1: Setup the environment variables
+## First parse the command line flags.
+## This sets the following environment variables:
+## - CONFIG:   The specific generator configuration --> not currenlty used FIXME
+## - EBEAM:    The electron beam energy --> not currently used FIXME
+## - PBEAM:    The ion beam energy --> not currently used FIXME
+source util/parse_cmd.sh $@
+
+## To run the generator, we need the following global variables:
+##
+## - LOCAL_PREFIX:      Place to cache local packages and data
+## - JUGGLER_N_EVENTS:  Number of events to process
+## - JUGGLER_RNG_SEED:  Random seed for event generation.
+##
+## You can read options/env.sh for more in-depth explanations of the variables
+## and how they can be controlled.
+source options/env.sh
+
+## We also need the following benchmark-specific variables:
+##
+## - BENCHMARK_TAG: Unique identified for this benchmark process.
+## - INPUT_PATH:    Path for generator-level input to the benchmarks
+## - TMP_PATH:      Path for temporary data (not exported as artifacts)
+##
+## You can read dvmp/env.sh for more in-depth explanations of the variables.
+source benchmarks/dis/env.sh
+
+## Get a unique file name prefix based on the configuration options
+GEN_TAG=gen-${CONFIG}_${JUGGLER_N_EVENTS} ## Generic file prefix
+
+## =============================================================================
+## Step 2: Check if we really need to run, or can use the cache.
+if [ -f "${INPUT_PATH}/${GEN_TAG}.hepmc" ]; then
+  echo "Found cached generator output for $GEN_TAG, no need to rerun"
+  exit 0
+fi
+
+echo "Generator output for $GEN_TAG not found in cache, need to run generator"
+
+## =============================================================================
+## Step 3: Build generator exe 
+##         TODO: need to configurability to the generator exe 
+
+echo "Compiling   benchmarks/dis/generator/pythia_dis.cxx ..."
+g++ benchmarks/dis/generator/pythia_dis.cxx -o pythia_dis  \
+   -I/usr/local/include  -Iinclude \
+   -O2 -std=c++11 -pedantic -W -Wall -Wshadow -fPIC  \
+   -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lpythia8 -ldl \
+   -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lHepMC3
+if [[ "$?" -ne "0" ]] ; then
+  echo "ERROR compiling pythia"
+  exit 1
+fi
+echo "done"
+
+## =============================================================================
+## Step 4: Run the event generator
+echo "Running the generator"
+./pythia_dis ${TMP_PATH}/${GEN_TAG}.hepmc
+if [[ "$?" -ne "0" ]] ; then
+  echo "ERROR running pythia"
+  exit 1
+fi
+
+
+## =============================================================================
+## Step 5: Finally, move relevant output into the artifacts directory and clean up
+## =============================================================================
+echo "Moving generator output into ${INPUT_PATH}"
+mv ${TMP_PATH}/${GEN_TAG}.hepmc ${INPUT_PATH}/${GEN_TAG}.hepmc
+## this step only matters for local execution
+echo "Cleaning up"
+## does nothing
+
+## =============================================================================
+## All done!
+echo "$BENCHMARK_TAG event generation complete"
diff --git a/dis/generator/gen_central_electrons.cxx b/benchmarks/dis/generator/gen_central_electrons.cxx
similarity index 100%
rename from dis/generator/gen_central_electrons.cxx
rename to benchmarks/dis/generator/gen_central_electrons.cxx
diff --git a/dis/src/pythia_dis.cc b/benchmarks/dis/generator/pythia_dis.cxx
similarity index 94%
rename from dis/src/pythia_dis.cc
rename to benchmarks/dis/generator/pythia_dis.cxx
index ff819a7e..a4867968 100644
--- a/dis/src/pythia_dis.cc
+++ b/benchmarks/dis/generator/pythia_dis.cxx
@@ -1,7 +1,7 @@
 #include "Pythia8/Pythia.h"
 #include "Pythia8Plugins/HepMC3.h"
-#include <unistd.h>
 #include <cassert>
+#include <unistd.h>
 
 using namespace Pythia8;
 
@@ -13,7 +13,7 @@ using std::string;
 enum class mode { none, help, list, part };
 
 struct settings {
-  double      E_electron   = 10.0;  // GeV
+  double      E_electron   = 18.0;  // GeV
   double      E_ion        = 275.0; // GeV
   std::string outfile      = "dis.hepmc";
   int         ion_PID      = 2212;
@@ -22,7 +22,7 @@ struct settings {
   bool        success      = false;
   double      Q2_min       = 4.0;
   int         N_events     = 1000;
-  mode    selected       = mode::none;
+  mode        selected     = mode::none;
 };
 
 template <typename T>
@@ -63,16 +63,15 @@ void print_man_page(T cli, const char* argv0)
 }
 //______________________________________________________________________________
 
-settings cmdline_settings(int argc, char* argv[]) {
+settings cmdline_settings(int argc, char* argv[])
+{
   settings s;
-  auto     lastOpt =
-      " options:" % (option("-h", "--help").set(s.selected, mode::help) % "show help",
-                     value("file", s.outfile).if_missing([] {
-                       std::cout << "You need to provide an output filename argument!\n";
-                     }) % "output file");
+  auto     lastOpt = " options:" % (option("-h", "--help").set(s.selected, mode::help) % "show help",
+                                value("file", s.outfile).if_missing([] {
+                                  std::cout << "You need to provide an output filename argument!\n";
+                                }) % "output file");
 
-  auto cli =
-      (command("help").set(s.selected, mode::help) | lastOpt);
+  auto cli = (command("help").set(s.selected, mode::help) | lastOpt);
 
   assert(cli.flags_are_prefix_free());
 
@@ -95,7 +94,8 @@ settings cmdline_settings(int argc, char* argv[]) {
 }
 //______________________________________________________________________________
 
-int main(int argc, char* argv[]) {
+int main(int argc, char* argv[])
+{
 
   settings s = cmdline_settings(argc, argv);
   if (!s.success) {
diff --git a/dvcs/config.yml b/benchmarks/dvcs/config.yml
similarity index 80%
rename from dvcs/config.yml
rename to benchmarks/dvcs/config.yml
index 0f63429f..d2c1a447 100644
--- a/dvcs/config.yml
+++ b/benchmarks/dvcs/config.yml
@@ -3,7 +3,7 @@ dvcs:process:
   timeout: 1 hour
   needs: ["detector"]
   script:
-    - bash dvcs/dvcs.sh
+    - bash benchmarks/dvcs/dvcs.sh
   artifacts:
     paths:
       - results
@@ -18,5 +18,3 @@ dvcs:results:
     paths:
       - results
         #  reports:
-        #    junit: ["results/dvcs/dvcs_report.xml"]
-
diff --git a/dvcs/dvcs.sh b/benchmarks/dvcs/dvcs.sh
similarity index 87%
rename from dvcs/dvcs.sh
rename to benchmarks/dvcs/dvcs.sh
index 436406f2..35bbcafe 100644
--- a/dvcs/dvcs.sh
+++ b/benchmarks/dvcs/dvcs.sh
@@ -15,9 +15,9 @@ echo "JUGGLER_FILE_NAME_TAG = ${JUGGLER_FILE_NAME_TAG}"
 ## - JUGGLER_DETECTOR:       the detector package we want to use for this benchmark
 ## - DETECTOR_PATH:          full path to the detector definitions
 ##
-## You can ready config/env.sh for more in-depth explanations of the variables
+## You can ready options/env.sh for more in-depth explanations of the variables
 ## and how they can be controlled.
-source config/env.sh
+source options/env.sh
 
 
 curl -o test_proton_dvcs_eic.hepmc "https://eicweb.phy.anl.gov/api/v4/projects/345/jobs/artifacts/master/raw/data/test_proton_dvcs_eic.hepmc?job=compile"
@@ -51,7 +51,7 @@ fi
 
 mkdir -p results/dvcs
 
-root -b -q "dvcs/scripts/dvcs_tests.cxx(\"${JUGGLER_REC_FILE}\")"
+root -b -q "benchmarks/dvcs/scripts/dvcs_tests.cxx(\"${JUGGLER_REC_FILE}\")"
 if [[ "$?" -ne "0" ]] ; then
   echo "ERROR running root script"
   exit 1
@@ -62,10 +62,6 @@ if [[ "${JUGGLER_N_EVENTS}" -lt "500" ]] ; then
 cp ${JUGGLER_REC_FILE} results/dvcs/.
 fi
 
-# Collect the results
-#cp dvcs/report.xml results/dvcs/.
-#cp dvcs/report2.xml results/dvcs/.
-
 
 
 
diff --git a/dvcs/scripts/dvcs_tests.cxx b/benchmarks/dvcs/scripts/dvcs_tests.cxx
similarity index 100%
rename from dvcs/scripts/dvcs_tests.cxx
rename to benchmarks/dvcs/scripts/dvcs_tests.cxx
diff --git a/dvcs/scripts/merge_results.py b/benchmarks/dvcs/scripts/merge_results.py
similarity index 100%
rename from dvcs/scripts/merge_results.py
rename to benchmarks/dvcs/scripts/merge_results.py
diff --git a/benchmarks/dvmp/analysis/dvmp.h b/benchmarks/dvmp/analysis/dvmp.h
new file mode 100644
index 00000000..371b454f
--- /dev/null
+++ b/benchmarks/dvmp/analysis/dvmp.h
@@ -0,0 +1,56 @@
+#ifndef DVMP_H
+#define DVMP_H
+
+#include <util.h>
+
+#include <algorithm>
+#include <cmath>
+#include <exception>
+#include <fmt/core.h>
+#include <limits>
+#include <string>
+#include <vector>
+
+#include <Math/Vector4D.h>
+
+// Additional utility functions for DVMP benchmarks. Where useful, these can be
+// promoted to the top-level util library
+namespace util {
+
+  // Calculate the 4-vector sum of a given pair of particles
+  inline ROOT::Math::PxPyPzMVector
+  get_sum(const std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>& particle_pair)
+  {
+    return (particle_pair.first + particle_pair.second);
+  }
+
+  //========================================================================================================
+  // for structure functions
+
+  struct inv_quant { // add more when needed
+    double nu, Q2, x;
+  };
+
+  // for simu
+  inline inv_quant calc_inv_quant_simu(const std::vector<ROOT::Math::PxPyPzMVector>& parts)
+  {
+    ROOT::Math::PxPyPzMVector q(parts[0] - parts[2]);
+    ROOT::Math::PxPyPzMVector P(parts[3]);
+
+    double    nu         = q.Dot(P) / P.mass();
+    double    Q2         = -q.Dot(q);
+    inv_quant quantities = {nu, Q2, Q2 / 2. / P.mass() / nu};
+    return quantities;
+  }
+
+  inline double get_nu_simu(inv_quant quantities) { return quantities.nu / 1000.; }
+  inline double get_Q2_simu(inv_quant quantities) { return quantities.Q2; }
+  inline double get_x_simu(inv_quant quantities) { return quantities.x; }
+
+  // for tracking, add later
+
+  //=========================================================================================================
+
+} // namespace util
+
+#endif
diff --git a/dvmp/analysis/vm_invar.cxx b/benchmarks/dvmp/analysis/vm_invar.cxx
similarity index 54%
rename from dvmp/analysis/vm_invar.cxx
rename to benchmarks/dvmp/analysis/vm_invar.cxx
index f8723733..03349825 100644
--- a/dvmp/analysis/vm_invar.cxx
+++ b/benchmarks/dvmp/analysis/vm_invar.cxx
@@ -1,7 +1,9 @@
-#include "benchmark.hh"
-#include "mt.h"
+#include "dvmp.h"
 #include "plot.h"
-#include "util.h"
+
+#include <benchmark.h>
+#include <mt.h>
+#include <util.h>
 
 #include <ROOT/RDataFrame.hxx>
 #include <cmath>
@@ -17,36 +19,35 @@
 // a desired vector meson (e.g. jpsi) and a desired decay particle (e.g. muon)
 // Output figures are written to our output prefix (which includes the output
 // file prefix), and labeled with our detector name.
-// TODO: I think it would be better to pass small json configuration file to
-//       the test, instead of this ever-expanding list of function arguments.
 // FIXME: MC does not trace back into particle history. Need to fix that
-int vm_invar(const std::string& config_name) {
+int vm_invar(const std::string& config_name)
+{
   // read our configuration
-  std::ifstream config_file{config_name};
+  std::ifstream  config_file{config_name};
   nlohmann::json config;
   config_file >> config;
 
-  const std::string rec_file = config["rec_file"];
-  const std::string vm_name = config["vm_name"];
-  const std::string decay_name = config["decay"];
-  const std::string detector = config["detector"];
-  std::string output_prefix = config["output_prefix"];
-  const std::string test_tag = config["test_tag"];
+  const std::string rec_file      = config["rec_file"];
+  const std::string vm_name       = config["vm_name"];
+  const std::string decay_name    = config["decay"];
+  const std::string detector      = config["detector"];
+  std::string       output_prefix = config["output_prefix"];
+  const std::string test_tag      = config["test_tag"];
 
   fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green),
              "Running VM invariant mass analysis...\n");
   fmt::print(" - Vector meson: {}\n", vm_name);
   fmt::print(" - Decay particle: {}\n", decay_name);
   fmt::print(" - Detector package: {}\n", detector);
+  fmt::print(" - input file: {}\n", rec_file);
   fmt::print(" - output prefix: {}\n", output_prefix);
 
   // create our test definition
   // test_tag
-  eic::util::Test vm_mass_resolution_test{
-      {{"name",
-        fmt::format("{}_{}_{}_mass_resolution", test_tag, vm_name, decay_name)},
+  eic::util::Test Q2_resolution_test{
+      {{"name", fmt::format("{}_{}_{}_Q2_resolution", test_tag, vm_name, decay_name)},
        {"title",
-        fmt::format("{} -> {} Invariant Mass Resolution", vm_name, decay_name)},
+        fmt::format("Q^2 Resolution for {} -> {} events with {}", vm_name, decay_name, detector)},
        {"description", "Invariant Mass Resolution calculated from raw "
                        "tracking data using a Gaussian fit."},
        {"quantity", "resolution"},
@@ -56,12 +57,11 @@ int vm_invar(const std::string& config_name) {
   ROOT::EnableImplicitMT(kNumThreads);
 
   // The particles we are looking for. E.g. J/psi decaying into e+e-
-  const double vm_mass = util::get_pdg_mass(vm_name);
+  const double vm_mass    = util::get_pdg_mass(vm_name);
   const double decay_mass = util::get_pdg_mass(decay_name);
 
   // Ensure our output prefix always ends on a dot, a slash or a dash
-  if (output_prefix.back() != '.' && output_prefix.back() != '/' &&
-      output_prefix.back() != '-') {
+  if (output_prefix.back() != '.' && output_prefix.back() != '/' && output_prefix.back() != '-') {
     output_prefix += "-";
   }
 
@@ -70,74 +70,68 @@ int vm_invar(const std::string& config_name) {
 
   // utility lambda functions to bind the vector meson and decay particle
   // types
-  auto momenta_from_tracking =
-      [decay_mass](const std::vector<eic::TrackParametersData>& tracks) {
-        return util::momenta_from_tracking(tracks, decay_mass);
-      };
+  auto momenta_from_tracking = [decay_mass](const std::vector<eic::TrackParametersData>& tracks) {
+    return util::momenta_from_tracking(tracks, decay_mass);
+  };
 
   //====================================================================
-    
+
   // Define analysis flow
-  auto d_im =
-      d.Define("p_rec", momenta_from_tracking, {"outputTrackParameters"})
-          .Define("N", "p_rec.size()")
-          .Define("p_sim", util::momenta_from_simulation, {"mcparticles2"})
-          //================================================================
-          .Define("invariant_quantities", util::calc_inv_quant_simu, {"p_sim"})
-          .Define("nu_sim" , util::get_nu_simu, {"invariant_quantities"})
-          .Define("Q2_sim" , util::get_Q2_simu, {"invariant_quantities"})
-          .Define("x_sim" ,  util::get_x_simu, {"invariant_quantities"});
-          //================================================================
+  auto d_im = d.Define("p_rec", momenta_from_tracking, {"outputTrackParameters"})
+                  .Define("N", "p_rec.size()")
+                  .Define("p_sim", util::momenta_from_simulation, {"mcparticles2"})
+                  //================================================================
+                  .Define("invariant_quantities", util::calc_inv_quant_simu, {"p_sim"})
+                  .Define("nu_sim", util::get_nu_simu, {"invariant_quantities"})
+                  .Define("Q2_sim", util::get_Q2_simu, {"invariant_quantities"})
+                  .Define("x_sim", util::get_x_simu, {"invariant_quantities"});
+  //================================================================
 
   // Define output histograms
-  
-  auto h_nu_sim = d_im.Histo1D(
-      {"h_nu_sim", ";#nu/1000;#", 100, 0., 2.}, "nu_sim");
-  auto h_Q2_sim = d_im.Histo1D(
-      {"h_Q2_sim", ";Q^{2};#", 100, 0., 15.}, "Q2_sim");
-  auto h_x_sim = d_im.Histo1D(
-      {"h_x_sim", ";x;#", 100, 0., 0.1}, "x_sim");
 
+  auto h_nu_sim = d_im.Histo1D({"h_nu_sim", ";#nu/1000;#", 100, 0., 2.}, "nu_sim");
+  auto h_Q2_sim = d_im.Histo1D({"h_Q2_sim", ";Q^{2};#", 100, 0., 15.}, "Q2_sim");
+  auto h_x_sim  = d_im.Histo1D({"h_x_sim", ";x;#", 100, 0., 0.1}, "x_sim");
 
   // Plot our histograms.
   // TODO: to start I'm explicitly plotting the histograms, but want to
   // factorize out the plotting code moving forward.
   {
-    
+
     // Print canvas to output file
-    
+
     TCanvas c{"canvas2", "canvas2", 1800, 600};
     c.Divide(3, 1, 0.0001, 0.0001);
-    //pad 1 nu
+    // pad 1 nu
     c.cd(1);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
     auto& hnu = *h_nu_sim;
     // histogram style
     hnu.SetLineColor(plot::kMpBlue);
     hnu.SetLineWidth(2);
     // axes
     hnu.GetXaxis()->CenterTitle();
-    //hnu.GetXaxis()->SetTitle("#times1000");
+    // hnu.GetXaxis()->SetTitle("#times1000");
     // draw everything
     hnu.DrawClone("hist");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "#nu");
+    plot::draw_label(10, 100, detector);
     TText* tptr21;
-    auto t21 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t21 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t21->SetFillColorAlpha(kWhite, 0);
     t21->SetTextFont(43);
     t21->SetTextSize(25);
     tptr21 = t21->AddText("simulated");
     tptr21->SetTextColor(plot::kMpBlue);
-    //tptr1 = t1->AddText("reconstructed");
-    //tptr1->SetTextColor(plot::kMpOrange);
+    // tptr1 = t1->AddText("reconstructed");
+    // tptr1->SetTextColor(plot::kMpOrange);
     t21->Draw();
-    
-    //pad 2 Q2
+
+    // pad 2 Q2
     c.cd(2);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
     auto& hQ2 = *h_Q2_sim;
     // histogram style
     hQ2.SetLineColor(plot::kMpBlue);
@@ -147,22 +141,22 @@ int vm_invar(const std::string& config_name) {
     // draw everything
     hQ2.DrawClone("hist");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "Q^{2}");
+    plot::draw_label(10, 100, detector);
     TText* tptr22;
-    auto t22 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t22 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t22->SetFillColorAlpha(kWhite, 0);
     t22->SetTextFont(43);
     t22->SetTextSize(25);
     tptr22 = t22->AddText("simulated");
     tptr22->SetTextColor(plot::kMpBlue);
-    //tptr1 = t1->AddText("reconstructed");
-    //tptr1->SetTextColor(plot::kMpOrange);
+    // tptr1 = t1->AddText("reconstructed");
+    // tptr1->SetTextColor(plot::kMpOrange);
     t22->Draw();
-    
-    //pad 1 nu
+
+    // pad 1 nu
     c.cd(3);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
     auto& hx = *h_x_sim;
     // histogram style
     hx.SetLineColor(plot::kMpBlue);
@@ -172,28 +166,27 @@ int vm_invar(const std::string& config_name) {
     // draw everything
     hx.DrawClone("hist");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "x");
+    plot::draw_label(10, 100, detector);
     TText* tptr23;
-    auto t23 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t23 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t23->SetFillColorAlpha(kWhite, 0);
     t23->SetTextFont(43);
     t23->SetTextSize(25);
     tptr23 = t23->AddText("simulated");
     tptr23->SetTextColor(plot::kMpBlue);
-    //tptr1 = t1->AddText("reconstructed");
-    //tptr1->SetTextColor(plot::kMpOrange);
+    // tptr1 = t1->AddText("reconstructed");
+    // tptr1->SetTextColor(plot::kMpOrange);
     t23->Draw();
-    
+
     c.Print(fmt::format("{}InvariantQuantities.png", output_prefix).c_str());
   }
 
-  // TODO we're not actually doing an IM fit yet, so for now just return an
+  // TODO we're not actually getting the resolutions yet
   // error for the test result
-  vm_mass_resolution_test.error(-1);
+  Q2_resolution_test.error(-1);
 
   // write out our test data
-  eic::util::write_test(vm_mass_resolution_test,
-                           fmt::format("{}vm_invar.json", output_prefix));
+  eic::util::write_test(Q2_resolution_test, fmt::format("{}vm_invar.json", output_prefix));
 
   // That's all!
   return 0;
diff --git a/dvmp/analysis/vm_mass.cxx b/benchmarks/dvmp/analysis/vm_mass.cxx
similarity index 56%
rename from dvmp/analysis/vm_mass.cxx
rename to benchmarks/dvmp/analysis/vm_mass.cxx
index fb736909..82abba6f 100644
--- a/dvmp/analysis/vm_mass.cxx
+++ b/benchmarks/dvmp/analysis/vm_mass.cxx
@@ -1,7 +1,9 @@
-#include "benchmark.hh"
-#include "mt.h"
+#include "dvmp.h"
 #include "plot.h"
-#include "util.h"
+
+#include <benchmark.h>
+#include <mt.h>
+#include <util.h>
 
 #include <ROOT/RDataFrame.hxx>
 #include <cmath>
@@ -20,33 +22,34 @@
 // TODO: I think it would be better to pass small json configuration file to
 //       the test, instead of this ever-expanding list of function arguments.
 // FIXME: MC does not trace back into particle history. Need to fix that
-int vm_mass(const std::string& config_name) {
+int vm_mass(const std::string& config_name)
+{
   // read our configuration
-  std::ifstream config_file{config_name};
+  std::ifstream  config_file{config_name};
   nlohmann::json config;
   config_file >> config;
 
-  const std::string rec_file = config["rec_file"];
-  const std::string vm_name = config["vm_name"];
-  const std::string decay_name = config["decay"];
-  const std::string detector = config["detector"];
-  std::string output_prefix = config["output_prefix"];
-  const std::string test_tag = config["test_tag"];
+  const std::string rec_file      = config["rec_file"];
+  const std::string vm_name       = config["vm_name"];
+  const std::string decay_name    = config["decay"];
+  const std::string detector      = config["detector"];
+  std::string       output_prefix = config["output_prefix"];
+  const std::string test_tag      = config["test_tag"];
 
   fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green),
              "Running VM invariant mass analysis...\n");
   fmt::print(" - Vector meson: {}\n", vm_name);
   fmt::print(" - Decay particle: {}\n", decay_name);
   fmt::print(" - Detector package: {}\n", detector);
+  fmt::print(" - input file: {}\n", rec_file);
   fmt::print(" - output prefix: {}\n", output_prefix);
 
   // create our test definition
   // test_tag
-  eic::util::Test vm_mass_resolution_test{
-      {{"name",
-        fmt::format("{}_{}_{}_mass_resolution", test_tag, vm_name, decay_name)},
-       {"title",
-        fmt::format("{} -> {} Invariant Mass Resolution", vm_name, decay_name)},
+  eic::util::Test mass_resolution_test{
+      {{"name", fmt::format("{}_{}_{}_mass_resolution", test_tag, vm_name, decay_name)},
+       {"title", fmt::format("{} Invariant Mass Resolution for {} -> {} with {}", vm_name, vm_name,
+                             decay_name, detector)},
        {"description", "Invariant Mass Resolution calculated from raw "
                        "tracking data using a Gaussian fit."},
        {"quantity", "resolution"},
@@ -56,12 +59,11 @@ int vm_mass(const std::string& config_name) {
   ROOT::EnableImplicitMT(kNumThreads);
 
   // The particles we are looking for. E.g. J/psi decaying into e+e-
-  const double vm_mass = util::get_pdg_mass(vm_name);
+  const double vm_mass    = util::get_pdg_mass(vm_name);
   const double decay_mass = util::get_pdg_mass(decay_name);
 
   // Ensure our output prefix always ends on a dot, a slash or a dash
-  if (output_prefix.back() != '.' && output_prefix.back() != '/' &&
-      output_prefix.back() != '-') {
+  if (output_prefix.back() != '.' && output_prefix.back() != '/' && output_prefix.back() != '-') {
     output_prefix += "-";
   }
 
@@ -70,56 +72,46 @@ int vm_mass(const std::string& config_name) {
 
   // utility lambda functions to bind the vector meson and decay particle
   // types
-  auto momenta_from_tracking =
-      [decay_mass](const std::vector<eic::TrackParametersData>& tracks) {
-        return util::momenta_from_tracking(tracks, decay_mass);
-      };
-  auto find_decay_pair =
-      [vm_mass](const std::vector<ROOT::Math::PxPyPzMVector>& parts) {
-        return util::find_decay_pair(parts, vm_mass);
-      };
-  
-      
-    //util::PrintGeant4(mcparticles2);
+  auto momenta_from_tracking = [decay_mass](const std::vector<eic::TrackParametersData>& tracks) {
+    return util::momenta_from_tracking(tracks, decay_mass);
+  };
+  auto find_decay_pair = [vm_mass](const std::vector<ROOT::Math::PxPyPzMVector>& parts) {
+    return util::find_decay_pair(parts, vm_mass);
+  };
+
+  // util::PrintGeant4(mcparticles2);
   // Define analysis flow
-  auto d_im =
-      d.Define("p_rec", momenta_from_tracking, {"outputTrackParameters"})
-          .Define("N", "p_rec.size()")
-          .Define("p_sim", util::momenta_from_simulation, {"mcparticles2"})
-          .Define("decay_pair_rec", find_decay_pair, {"p_rec"})
-          .Define("decay_pair_sim", find_decay_pair, {"p_sim"})
-          .Define("mass_rec", util::get_im, {"decay_pair_rec"})
-          .Define("mass_sim", util::get_im, {"decay_pair_sim"})
-          .Define("pt_rec", util::get_pt, {"decay_pair_rec"})
-          .Define("pt_sim", util::get_pt, {"decay_pair_sim"})
-          .Define("phi_rec" , util::get_phi, {"decay_pair_rec"})
-          .Define("phi_sim" , util::get_phi, {"decay_pair_sim"})
-          .Define("rapidity_rec" , util::get_y, {"decay_pair_rec"})
-          .Define("rapidity_sim" , util::get_y, {"decay_pair_sim"});
-          
+  auto d_im = d.Define("p_rec", momenta_from_tracking, {"outputTrackParameters"})
+                  .Define("N", "p_rec.size()")
+                  .Define("p_sim", util::momenta_from_simulation, {"mcparticles2"})
+                  .Define("decay_pair_rec", find_decay_pair, {"p_rec"})
+                  .Define("decay_pair_sim", find_decay_pair, {"p_sim"})
+                  .Define("p_vm_rec", "decay_pair_rec.first + decay_pair_rec.second")
+                  .Define("p_vm_sim", "decay_pair_sim.first + decay_pair_sim.second")
+                  //.Define("p_vm_sim", util::get_sum, {"decay_pair_sim"})
+                  .Define("mass_rec", "p_vm_rec.M()")
+                  .Define("mass_sim", "p_vm_sim.M()")
+                  .Define("pt_rec", "p_vm_rec.pt()")
+                  .Define("pt_sim", "p_vm_sim.pt()")
+                  .Define("phi_rec", "p_vm_rec.phi()")
+                  .Define("phi_sim", "p_vm_sim.phi()")
+                  .Define("eta_rec", "p_vm_rec.eta()")
+                  .Define("eta_sim", "p_vm_sim.eta()");
 
   // Define output histograms
-  auto h_im_rec = d_im.Histo1D(
-      {"h_im_rec", ";m_{ll'} (GeV/c^{2});#", 100, -1.1, vm_mass + 5}, "mass_rec");
-  auto h_im_sim = d_im.Histo1D(
-      {"h_im_sim", ";m_{ll'} (GeV/c^{2});#", 100, -1.1, vm_mass + 5}, "mass_sim");
-      
-  auto h_pt_rec = d_im.Histo1D(
-      {"h_pt_rec", ";p_{T} (GeV/c);#", 400, 0., 40.}, "pt_rec");
-  auto h_pt_sim = d_im.Histo1D(
-      {"h_pt_sim", ";p_{T} (GeV/c);#", 400, 0., 40.}, "pt_sim"); 
-      
-  auto h_phi_rec = d_im.Histo1D(
-      {"h_phi_rec", ";#phi_{ll'};#", 90, -M_PI, M_PI}, "phi_rec");
-  auto h_phi_sim = d_im.Histo1D(
-      {"h_phi_sim", ";#phi_{ll'};#", 90, -M_PI, M_PI}, "phi_sim");
-      
-  auto h_y_rec = d_im.Histo1D(
-      {"h_y_rec", ";y_{ll'};#", 1000, -5., 5.}, "rapidity_rec");
-  auto h_y_sim = d_im.Histo1D(
-      {"h_y_sim", ";y_{ll'};#", 1000, -5., 5.}, "rapidity_sim");
+  auto h_im_rec =
+      d_im.Histo1D({"h_im_rec", ";m_{ll'} (GeV/c^{2});#", 100, -1.1, vm_mass + 5}, "mass_rec");
+  auto h_im_sim =
+      d_im.Histo1D({"h_im_sim", ";m_{ll'} (GeV/c^{2});#", 100, -1.1, vm_mass + 5}, "mass_sim");
+
+  auto h_pt_rec = d_im.Histo1D({"h_pt_rec", ";p_{T} (GeV/c);#", 400, 0., 40.}, "pt_rec");
+  auto h_pt_sim = d_im.Histo1D({"h_pt_sim", ";p_{T} (GeV/c);#", 400, 0., 40.}, "pt_sim");
 
+  auto h_phi_rec = d_im.Histo1D({"h_phi_rec", ";#phi_{ll'};#", 90, -M_PI, M_PI}, "phi_rec");
+  auto h_phi_sim = d_im.Histo1D({"h_phi_sim", ";#phi_{ll'};#", 90, -M_PI, M_PI}, "phi_sim");
 
+  auto h_eta_rec = d_im.Histo1D({"h_eta_rec", ";#eta_{ll'};#", 1000, -5., 5.}, "eta_rec");
+  auto h_eta_sim = d_im.Histo1D({"h_eta_sim", ";#eta_{ll'};#", 1000, -5., 5.}, "eta_sim");
 
   // Plot our histograms.
   // TODO: to start I'm explicitly plotting the histograms, but want to
@@ -127,10 +119,10 @@ int vm_mass(const std::string& config_name) {
   {
     TCanvas c{"canvas", "canvas", 1200, 1200};
     c.Divide(2, 2, 0.0001, 0.0001);
-    //pad 1 mass
+    // pad 1 mass
     c.cd(1);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
     auto& h11 = *h_im_sim;
     auto& h12 = *h_im_rec;
     // histogram style
@@ -145,9 +137,9 @@ int vm_mass(const std::string& config_name) {
     h11.DrawClone("hist");
     h12.DrawClone("hist same");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "Invariant mass");
+    plot::draw_label(10, 100, detector);
     TText* tptr1;
-    auto t1 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t1 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t1->SetFillColorAlpha(kWhite, 0);
     t1->SetTextFont(43);
     t1->SetTextSize(25);
@@ -156,11 +148,11 @@ int vm_mass(const std::string& config_name) {
     tptr1 = t1->AddText("reconstructed");
     tptr1->SetTextColor(plot::kMpOrange);
     t1->Draw();
-    
-    //pad 2 pt
+
+    // pad 2 pt
     c.cd(2);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
     auto& h21 = *h_pt_sim;
     auto& h22 = *h_pt_rec;
     // histogram style
@@ -175,9 +167,9 @@ int vm_mass(const std::string& config_name) {
     h21.DrawClone("hist");
     h22.DrawClone("hist same");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "Transverse Momentum");
+    plot::draw_label(10, 100, detector);
     TText* tptr2;
-    auto t2 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t2 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t2->SetFillColorAlpha(kWhite, 0);
     t2->SetTextFont(43);
     t2->SetTextSize(25);
@@ -186,11 +178,11 @@ int vm_mass(const std::string& config_name) {
     tptr2 = t2->AddText("reconstructed");
     tptr2->SetTextColor(plot::kMpOrange);
     t2->Draw();
-    
-    //pad 3 phi
+
+    // pad 3 phi
     c.cd(3);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
     auto& h31 = *h_phi_sim;
     auto& h32 = *h_phi_rec;
     // histogram style
@@ -205,9 +197,9 @@ int vm_mass(const std::string& config_name) {
     h31.DrawClone("hist");
     h32.DrawClone("hist same");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "#phi");
+    plot::draw_label(10, 100, detector);
     TText* tptr3;
-    auto t3 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t3 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t3->SetFillColorAlpha(kWhite, 0);
     t3->SetTextFont(43);
     t3->SetTextSize(25);
@@ -216,13 +208,13 @@ int vm_mass(const std::string& config_name) {
     tptr3 = t3->AddText("reconstructed");
     tptr3->SetTextColor(plot::kMpOrange);
     t3->Draw();
-    
-    //pad 4 rapidity
+
+    // pad 4 rapidity
     c.cd(4);
-    //gPad->SetLogx(false);
-    //gPad->SetLogy(false);
-    auto& h41 = *h_y_sim;
-    auto& h42 = *h_y_rec;
+    // gPad->SetLogx(false);
+    // gPad->SetLogy(false);
+    auto& h41 = *h_eta_sim;
+    auto& h42 = *h_eta_rec;
     // histogram style
     h41.SetLineColor(plot::kMpBlue);
     h41.SetLineWidth(2);
@@ -235,9 +227,9 @@ int vm_mass(const std::string& config_name) {
     h41.DrawClone("hist");
     h42.DrawClone("hist same");
     // FIXME hardcoded beam configuration
-    plot::draw_label(10, 100, detector, vm_name, "Rapidity");
+    plot::draw_label(10, 100, detector);
     TText* tptr4;
-    auto t4 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
+    auto   t4 = new TPaveText(.6, .8417, .9, .925, "NB NDC");
     t4->SetFillColorAlpha(kWhite, 0);
     t4->SetTextFont(43);
     t4->SetTextSize(25);
@@ -248,16 +240,14 @@ int vm_mass(const std::string& config_name) {
     t4->Draw();
 
     c.Print(fmt::format("{}vm_mass_pt_phi_rapidity.png", output_prefix).c_str());
-
   }
 
   // TODO we're not actually doing an IM fit yet, so for now just return an
   // error for the test result
-  vm_mass_resolution_test.error(-1);
+  mass_resolution_test.error(-1);
 
   // write out our test data
-  eic::util::write_test(vm_mass_resolution_test,
-                           fmt::format("{}vm_mass.json", output_prefix));
+  eic::util::write_test(mass_resolution_test, fmt::format("{}_mass.json", output_prefix));
 
   // That's all!
   return 0;
diff --git a/dvmp/benchmark.json b/benchmarks/dvmp/benchmark.json
similarity index 100%
rename from dvmp/benchmark.json
rename to benchmarks/dvmp/benchmark.json
diff --git a/dvmp/config.yml b/benchmarks/dvmp/config.yml
similarity index 62%
rename from dvmp/config.yml
rename to benchmarks/dvmp/config.yml
index 5a17fddd..941bafd4 100644
--- a/dvmp/config.yml
+++ b/benchmarks/dvmp/config.yml
@@ -6,8 +6,8 @@ dvmp:generate:
   cache:
     key:
       files:
-        - dvmp/generator/jpsi_central.json
-        - dvmp/scripts/jpsi_central-generate.sh
+        - benchmarks/dvmp/generator/jpsi_central.json
+        - benchmarks/dvmp/scripts/jpsi_central-generate.sh
       prefix: "$CI_COMMIT_REF_SLUG"
     paths:
       - input/dvmp
@@ -15,7 +15,7 @@ dvmp:generate:
     paths:
       - input
   script:
-    - ./util/run_many.py ./dvmp/gen.sh 
+    - ./util/run_many.py ./benchmarks/dvmp/gen.sh 
           -c jpsi_barrel 
           -e 10x100 
           --decay muon --decay electron
@@ -26,7 +26,9 @@ dvmp:process:
   needs: ["detector", "dvmp:generate"]
   timeout: 1 hour
   script:
-    - ./util/run_many.py ./dvmp/dvmp.sh 
+    - source options/env.sh
+    - ./util/compile_analyses.py dvmp
+    - ./util/run_many.py ./benchmarks/dvmp/dvmp.sh 
           -c jpsi_barrel 
           -e 10x100 
           --decay muon --decay electron
@@ -35,6 +37,18 @@ dvmp:process:
   artifacts:
     paths:
       - results
+  retry:
+    max: 2
+    when:
+      - runner_system_failure
+  cache:
+    key:
+      files:
+        - .rootlogon.C
+        - util/compile_analyses.py
+      prefix: "$CI_COMMIT_REF_SLUG"
+    paths:
+      - .local/root_build
 
 dvmp:results:
   stage: collect
diff --git a/dvmp/dvmp.sh b/benchmarks/dvmp/dvmp.sh
similarity index 91%
rename from dvmp/dvmp.sh
rename to benchmarks/dvmp/dvmp.sh
index 0d263a96..1746a860 100755
--- a/dvmp/dvmp.sh
+++ b/benchmarks/dvmp/dvmp.sh
@@ -10,7 +10,7 @@
 ## =============================================================================
 
 ## make sure we launch this script from the project root directory
-PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
+PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/../..
 pushd ${PROJECT_ROOT}
 
 echo "Running the DVMP benchmarks"
@@ -35,9 +35,9 @@ source util/parse_cmd.sh $@
 ## - JUGGLER_DETECTOR:       the detector package we want to use for this benchmark
 ## - DETECTOR_PATH:          full path to the detector definitions
 ##
-## You can ready config/env.sh for more in-depth explanations of the variables
+## You can ready options/env.sh for more in-depth explanations of the variables
 ## and how they can be controlled.
-source config/env.sh
+source options/env.sh
 
 ## We also need the following benchmark-specific variables:
 ##
@@ -48,7 +48,7 @@ source config/env.sh
 ## - RESULTS_PATH:  Path for benchmark output figures and files
 ##
 ## You can read dvmp/env.sh for more in-depth explanations of the variables.
-source dvmp/env.sh
+source benchmarks/dvmp/env.sh
 
 ## Get a unique file names based on the configuration options
 GEN_FILE=${INPUT_PATH}/gen-${CONFIG}_${DECAY}_${JUGGLER_N_EVENTS}.hepmc
@@ -107,7 +107,6 @@ if [ "$?" -ne "0" ] ; then
     exit 1
   fi
 fi
-#ls -l
 
 ## =============================================================================
 ## Step 4: Analysis
@@ -127,10 +126,14 @@ EOF
 #cat ${CONFIG}
 
 ## run the analysis script with this configuration
-root -b -q "dvmp/analysis/vm_mass.cxx(\"${CONFIG}\")"
-root -b -q "dvmp/analysis/vm_invar.cxx(\"${CONFIG}\")"
+root -b -q "benchmarks/dvmp/analysis/vm_mass.cxx+(\"${CONFIG}\")"
 if [ "$?" -ne "0" ] ; then
-  echo "ERROR running root script"
+  echo "ERROR running vm_mass script"
+  exit 1
+fi
+root -b -q "benchmarks/dvmp/analysis/vm_invar.cxx+(\"${CONFIG}\")"
+if [ "$?" -ne "0" ] ; then
+  echo "ERROR running vm_invar script"
   exit 1
 fi
 
@@ -145,11 +148,11 @@ if [ "${JUGGLER_N_EVENTS}" -lt "500" ] ; then
 fi
 
 ## Always move over log files to the results path
-mv ${SIM_LOG} ${REC_LOG} ${RESULTS_PATH}
+mv ${REC_LOG} ${RESULTS_PATH}
 
 
 ## cleanup output files
-rm -f ${REC_FILE} ${SIM_FILE}
+#rm -f ${REC_FILE} ${SIM_FILE} ## --> not needed for CI
 
 ## =============================================================================
 ## All done!
diff --git a/dvmp/env.sh b/benchmarks/dvmp/env.sh
similarity index 100%
rename from dvmp/env.sh
rename to benchmarks/dvmp/env.sh
diff --git a/dvmp/gen.sh b/benchmarks/dvmp/gen.sh
similarity index 91%
rename from dvmp/gen.sh
rename to benchmarks/dvmp/gen.sh
index 0c9544b7..8bef0a11 100755
--- a/dvmp/gen.sh
+++ b/benchmarks/dvmp/gen.sh
@@ -11,9 +11,10 @@
 ## =============================================================================
 
 ## make sure we launch this script from the project root directory
-PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
+PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/../..
 pushd ${PROJECT_ROOT}
 
+
 ## =============================================================================
 ## Step 1: Setup the environment variables
 ##
@@ -32,9 +33,9 @@ source util/parse_cmd.sh $@
 ## - JUGGLER_N_EVENTS:  Number of events to process
 ## - JUGGLER_RNG_SEED:  Random seed for event generation.
 ##
-## You can read config/env.sh for more in-depth explanations of the variables
+## You can read options/env.sh for more in-depth explanations of the variables
 ## and how they can be controlled.
-source config/env.sh
+source options/env.sh
 
 ## We also need the following benchmark-specific variables:
 ##
@@ -43,7 +44,7 @@ source config/env.sh
 ## - TMP_PATH:      Path for temporary data (not exported as artifacts)
 ##
 ## You can read dvmp/env.sh for more in-depth explanations of the variables.
-source dvmp/env.sh
+source benchmarks/dvmp/env.sh
 
 ## Get a unique file name prefix based on the configuration options
 GEN_TAG=gen-${CONFIG}_${DECAY}_${JUGGLER_N_EVENTS} ## Generic file prefix
@@ -72,7 +73,7 @@ elif [ $DECAY = "muon" ]; then
 fi
 
 ## generate the config file for this generator setup
-CONFIG_IN="${BENCHMARK_TAG}/generator/${CONFIG}.json.in"
+CONFIG_IN="benchmarks/${BENCHMARK_TAG}/generator/${CONFIG}.json.in"
 echo "Creating generator configuration file ${GEN_TAG}.json"
 if [ ! -f ${CONFIG_IN} ]; then
   echo "ERROR: cannot find master config file ${CONFIG_IN}"
@@ -106,4 +107,6 @@ done
 echo "Cleaning up"
 rm ${TMP_PATH}/${GEN_TAG}.json
 
+## =============================================================================
 ## All done!
+echo "$BENCHMARK_TAG event generation complete"
diff --git a/dvmp/generator/jpsi_barrel.json.in b/benchmarks/dvmp/generator/jpsi_barrel.json.in
similarity index 100%
rename from dvmp/generator/jpsi_barrel.json.in
rename to benchmarks/dvmp/generator/jpsi_barrel.json.in
diff --git a/dvmp/generator/jpsi_central.json.in b/benchmarks/dvmp/generator/jpsi_central.json.in
similarity index 100%
rename from dvmp/generator/jpsi_central.json.in
rename to benchmarks/dvmp/generator/jpsi_central.json.in
diff --git a/dis/analysis/rec_dis_electrons.cxx b/dis/analysis/rec_dis_electrons.cxx
deleted file mode 100644
index b7227a1d..00000000
--- a/dis/analysis/rec_dis_electrons.cxx
+++ /dev/null
@@ -1,113 +0,0 @@
-#include "ROOT/RDataFrame.hxx"
-#include <iostream>
-
-#include "dd4pod/Geant4ParticleCollection.h"
-#include "eicd/TrackParametersCollection.h"
-#include "eicd/ClusterCollection.h"
-#include "eicd/ClusterData.h"
-
-using ROOT::RDataFrame;
-using namespace ROOT::VecOps;
-
-auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
-  std::vector<double> result;
-  for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::abs(1.0/(in[i].qOverP)));
-  }
-  return result;
-};
-
-std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
-  std::vector<float> result;
-  for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
-  }
-  return result;
-}
-
-auto momentum = [](std::vector<ROOT::Math::PxPyPzMVector> const& in) {
-  std::vector<double> result;
-  for (size_t i = 0; i < in.size(); ++i) {
-   result.push_back(in[i].E());
-  }
-  return result;
-};
-auto theta = [](std::vector<ROOT::Math::PxPyPzMVector> const& in) {
-  std::vector<double> result;
-  for (size_t i = 0; i < in.size(); ++i) {
-   result.push_back(in[i].Theta()*180/M_PI);
-  }
-  return result;
-};
-auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
-  std::vector<ROOT::Math::PxPyPzMVector> result;
-  ROOT::Math::PxPyPzMVector lv;
-  for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
-    result.push_back(lv);
-  }
-  return result;
-};
-
-auto delta_p = [](const std::vector<double>& tracks, const std::vector<double>& thrown) {
-  std::vector<double> res;
-  for (const auto& p1 : thrown) {
-    for (const auto& p2 : tracks) {
-      res.push_back(p1 - p2);
-    }
-  }
-  return res;
-};
-
-int rec_dis_electrons(const char* fname = "topside/rec_central_electrons.root")
-{
-
-  ROOT::EnableImplicitMT();
-  ROOT::RDataFrame df("events", fname);
-
-  auto df0 = df.Define("isThrown", "mcparticles2.genStatus == 1")
-                 .Define("thrownParticles", "mcparticles2[isThrown]")
-                 .Define("thrownP", fourvec, {"thrownParticles"})
-                 .Define("p_thrown", momentum, {"thrownP"})
-                 .Define("nTracks", "outputTrackParameters.size()")
-                 .Define("p_track", p_track, {"outputTrackParameters"})
-                 .Define("p_track1", p_track, {"outputTrackParameters1"})
-                 .Define("p_track2", p_track, {"outputTrackParameters2"})
-                 .Define("delta_p",delta_p, {"p_track", "p_thrown"})
-                 .Define("delta_p1",delta_p, {"p_track1", "p_thrown"})
-                 .Define("delta_p2",delta_p, {"p_track2", "p_thrown"});
-
-  auto h_nTracks = df0.Histo1D({"h_nTracks", "; N tracks ", 10, 0, 10}, "nTracks");
-  auto h_pTracks = df0.Histo1D({"h_pTracks", "; GeV/c ", 100, 0, 10}, "p_track");
-
-  auto h_delta_p  = df0.Histo1D({"h_delta_p", "; GeV/c ",  100, -10, 10}, "delta_p");
-  auto h_delta_p1 = df0.Histo1D({"h_delta_p1", "; GeV/c ", 100, -10, 10}, "delta_p1");
-  auto h_delta_p2 = df0.Histo1D({"h_delta_p2", "; GeV/c ", 100, -10, 10}, "delta_p2");
-
-  auto c = new TCanvas();
-
-  h_nTracks->DrawCopy();
-  c->SaveAs("results/dis/rec_central_electrons_nTracks.png");
-  c->SaveAs("results/dis/rec_central_electrons_nTracks.pdf");
-
-  h_pTracks->DrawCopy();
-  c->SaveAs("results/dis/rec_central_electrons_pTracks.png");
-  c->SaveAs("results/dis/rec_central_electrons_pTracks.pdf");
-
-  THStack * hs = new THStack("hs_delta_p","; GeV/c "); 
-  TH1D* h1 = (TH1D*) h_delta_p->Clone();
-  hs->Add(h1);
-  h1 = (TH1D*) h_delta_p1->Clone();
-  h1->SetLineColor(2);
-  hs->Add(h1);
-  h1 = (TH1D*) h_delta_p2->Clone();
-  h1->SetLineColor(4);
-  h1->SetFillStyle(3001);
-  h1->SetFillColor(4);
-  hs->Add(h1);
-  hs->Draw("nostack");
-  c->SaveAs("results/dis/rec_central_electrons_delta_p.png");
-  c->SaveAs("results/dis/rec_central_electrons_delta_p.pdf");
-
-  return 0;
-}
diff --git a/dis/config.yml b/dis/config.yml
deleted file mode 100644
index 7db7df61..00000000
--- a/dis/config.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-dis:generate:
-  stage: initialize
-  image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:latest
-  needs: []
-  timeout: 1 hours
-  artifacts:
-    paths:
-      - results
-  script:
-    - bash dis/gen.sh
-
-dis:process:
-  stage: process
-  needs: ["detector", "dis:generate"]
-  timeout: 1 hour
-  artifacts:
-    paths:
-      - results
-  script:
-    - echo "DIS benchmarks"
-
-dis:results:
-  stage: collect
-  needs: ["dis:process"]
-  script:
-    - echo "All DIS benchmarks successful"
diff --git a/dis/dis.sh b/dis/dis.sh
deleted file mode 100644
index 7c68e130..00000000
--- a/dis/dis.sh
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/bash
-
-## =============================================================================
-## Run the DVMP benchmarks in 5 steps:
-## 1. Build/install detector package
-## 2. Detector simulation through npsim
-## 3. Digitization and reconstruction through Juggler
-## 4. Root-based Physics analyses
-## 5. Finalize
-## =============================================================================
-
-echo "Running the DIS benchmarks"
-
-## make sure we launch this script from the project root directory
-PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
-pushd ${PROJECT_ROOT}
-
-## =============================================================================
-## Load the environment variables. To build the detector we need the following
-## variables:
-##
-## - JUGGLER_INSTALL_PREFIX: Install prefix for Juggler (simu/recon)
-## - JUGGLER_DETECTOR:       the detector package we want to use for this benchmark
-## - DETECTOR_PATH:          full path to the detector definitions
-##
-## You can ready config/env.sh for more in-depth explanations of the variables
-## and how they can be controlled.
-source config/env.sh
-
-## Extra environment variables for DVMP:
-## file tag for these tests
-JUGGLER_FILE_NAME_TAG="dis"
-# TODO use the input file name, as we will be generating a lot of these
-# in the future...
-# FIXME Generator file hardcoded for now
-## note: these variables need to be exported to be accessible from
-##       the juggler options.py. We should really work on a dedicated
-##       juggler launcher to get rid of these "magic" variables. FIXME
-export JUGGLER_GEN_FILE="results/dis/${JUGGLER_FILE_NAME_TAG}.hepmc"
-export JUGGLER_SIM_FILE="sim_${JUGGLER_FILE_NAME_TAG}.root"
-export JUGGLER_REC_FILE="rec_${JUGGLER_FILE_NAME_TAG}.root"
-
-
-## =============================================================================
-## Step 1: Build/install the desired detector package
-## TODO remove this
-#bash util/build_detector.sh
-
-
-## =============================================================================
-## Step 2: Run the simulation
-echo "Running Geant4 simulation"
-npsim --runType batch \
-      --part.minimalKineticEnergy 1000*GeV  \
-      -v WARNING \
-      --numberOfEvents ${JUGGLER_N_EVENTS} \
-      --compactFile ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml \
-      --inputFiles ${JUGGLER_GEN_FILE} \
-      --outputFile ${JUGGLER_SIM_FILE}
-if [ "$?" -ne "0" ] ; then
-  echo "ERROR running npsim"
-  exit 1
-fi
-
-## =============================================================================
-## Step 3: Run digitization & reconstruction
-echo "Running the digitization and reconstruction"
-# FIXME Need to figure out how to pass file name to juggler from the commandline
-xenv -x ${JUGGLER_INSTALL_PREFIX}/Juggler.xenv \
-  gaudirun.py options/tracker_reconstruction.py
-if [ "$?" -ne "0" ] ; then
-  echo "ERROR running juggler"
-  exit 1
-fi
-ls -l
-
-## =============================================================================
-## Step 4: Analysis
-root -b -q "dis/analysis/rec_dis_electrons.cxx(\"${JUGGLER_DETECTOR}/${JUGGLER_REC_FILE}\")"
-if [[ "$?" -ne "0" ]] ; then
-  echo "ERROR running root script"
-  exit 1
-fi
-
-## =============================================================================
-## Step 5: finalize
-echo "Finalizing ${JUGGLER_FILE_NAME_TAG} benchmark"
-
-## Copy over reconsturction artifacts as long as we don't have
-## too many events
-if [ "${JUGGLER_N_EVENTS}" -lt "500" ] ; then 
-  cp ${JUGGLER_REC_FILE} results/dis/.
-fi
-
-## cleanup output files
-rm ${JUGGLER_REC_FILE} ${JUGGLER_SIM_FILE}
-
-## =============================================================================
-## All done!
-echo "${JUGGLER_FILE_NAME_TAG} benchmarks complete"
diff --git a/dis/gen.sh b/dis/gen.sh
deleted file mode 100644
index e56e4edd..00000000
--- a/dis/gen.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-
-## =============================================================================
-## Standin for a proper pythia generation process, similar to how we
-## generate events for DVMP
-## =============================================================================
-
-## TODO: use JUGGLER_FILE_NAME_TAG instead of explicitly refering to dis
-
-echo "Running the DIS benchmarks"
-
-## make sure we launch this script from the project root directory
-PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
-pushd ${PROJECT_ROOT}
-
-## =============================================================================
-## Load the environment variables. To build the detector we need the following
-## variables:
-##
-## - JUGGLER_INSTALL_PREFIX: Install prefix for Juggler (simu/recon)
-## - JUGGLER_DETECTOR:       the detector package we want to use for this benchmark
-## - DETECTOR_PATH:          full path to the detector definitions
-##
-## You can ready config/env.sh for more in-depth explanations of the variables
-## and how they can be controlled.
-source config/env.sh
-
-## Setup local environment
-export DATA_PATH=results/dis
-
-## Extra environment variables for DVMP:
-## file tag for these tests
-JUGGLER_FILE_NAME_TAG="dis"
-
-## =============================================================================
-## Step 1: Dummy event generator
-## TODO better file name that encodes the actual configuration we're running
-echo "Compiling   dis/src/pythia_dis.cc ..."
-g++ dis/src/pythia_dis.cc -o pythia_dis  \
-   -I/usr/local/include  -Iinclude \
-   -O2 -std=c++11 -pedantic -W -Wall -Wshadow -fPIC  \
-   -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lpythia8 -ldl \
-   -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lHepMC3
-if [[ "$?" -ne "0" ]] ; then
-  echo "ERROR compiling pythia"
-  exit 1
-fi
-echo "done"
-pwd
-ls -lrth
-
-./pythia_dis dis.hepmc
-if [[ "$?" -ne "0" ]] ; then
-  echo "ERROR running pythia"
-  exit 1
-fi
-
-## =============================================================================
-## Step 2: finalize
-echo "Moving event generator output into ${DATA_PATH}"
-#mv .local/${JUGGLER_FILE_NAME_TAG}.hepmc ${DATA_PATH}/${JUGGLER_FILE_NAME_TAG}.hepmc
-
-## =============================================================================
-## All done!
-echo "dis event generation complete"
diff --git a/dis/generator/placeholder b/dis/generator/placeholder
deleted file mode 100644
index e69de29b..00000000
diff --git a/dis/util/placeholder b/dis/util/placeholder
deleted file mode 100644
index e69de29b..00000000
diff --git a/dvcs/tests/report.xml b/dvcs/tests/report.xml
deleted file mode 100644
index 2ba9c6e4..00000000
--- a/dvcs/tests/report.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<testsuites>
-  <testsuite name="DVCS" tests="3" failures="1">
-    <testcase classname="foo1" name="ASuccessfulTest" time="10.0"/>
-    <testcase classname="foo2" name="AnotherSuccessfulTest"  time="20.0"/>
-    <testcase classname="foo3" name="AFailingTest"  time="30.0">
-      <failure type="NotEnoughFoo"> details about failure </failure>
-    </testcase>
-  </testsuite>
-</testsuites>
-
diff --git a/dvcs/tests/report2.xml b/dvcs/tests/report2.xml
deleted file mode 100644
index f437ef44..00000000
--- a/dvcs/tests/report2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<testsuite tests="3">
-    <testcase time="1.00" classname="bar1" name="ASuccessfulTest2"/>
-    <testcase time="2.00" classname="bar2" name="AnotherSuccessfulTest2">
-      <!--
-      <system-out>[[ATTACHMENT|/absolute/path/to/some/file]]</system-out>
-      -->
-    </testcase>
-    <testcase time="3.00" classname="bar3" name="AFailingTest2">
-        <failure type="NotEnoughFoo"> MORE details about failure </failure>
-    </testcase>
-</testsuite>
-
diff --git a/dvmp/.gitignore b/dvmp/.gitignore
deleted file mode 100644
index e69de29b..00000000
diff --git a/dvmp/analysis/benchmark.hh b/dvmp/analysis/benchmark.hh
deleted file mode 120000
index a9677242..00000000
--- a/dvmp/analysis/benchmark.hh
+++ /dev/null
@@ -1 +0,0 @@
-../../util/benchmark.hh
\ No newline at end of file
diff --git a/dvmp/analysis/exception.hh b/dvmp/analysis/exception.hh
deleted file mode 120000
index e50e23b6..00000000
--- a/dvmp/analysis/exception.hh
+++ /dev/null
@@ -1 +0,0 @@
-../../util/exception.hh
\ No newline at end of file
diff --git a/dvmp/analysis/plot.h b/dvmp/analysis/plot.h
deleted file mode 100644
index 69ebba34..00000000
--- a/dvmp/analysis/plot.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef PLOT_H
-#define PLOT_H
-
-#include <TColor.h>
-#include <fmt/core.h>
-#include <vector>
-
-namespace plot {
-
-const int kMpBlue = TColor::GetColor(0x1f, 0x77, 0xb4);
-const int kMpOrange = TColor::GetColor(0xff, 0x7f, 0x0e);
-const int kMpGreen = TColor::GetColor(0x2c, 0xa0, 0x2c);
-const int kMpRed = TColor::GetColor(0xd6, 0x27, 0x28);
-const int kMpPurple = TColor::GetColor(0x94, 0x67, 0xbd);
-const int kMpBrown = TColor::GetColor(0x8c, 0x56, 0x4b);
-const int kMpPink = TColor::GetColor(0xe3, 0x77, 0xc2);
-const int kMpGrey = TColor::GetColor(0x7f, 0x7f, 0x7f);
-const int kMpMoss = TColor::GetColor(0xbc, 0xbd, 0x22);
-const int kMpCyan = TColor::GetColor(0x17, 0xbe, 0xcf);
-
-const std::vector<int> kPalette = {kMpBlue,   kMpOrange, kMpGreen, kMpRed,
-                                   kMpPurple, kMpBrown,  kMpPink,  kMpGrey,
-                                   kMpMoss,   kMpCyan};
-
-void draw_label(int ebeam, int pbeam, const std::string_view detector,
-                std::string_view vm, std::string_view what) {
-  auto t = new TPaveText(.15, 0.800, .7, .925, "NB NDC");
-  t->SetFillColorAlpha(kWhite, 0.4);
-  t->SetTextFont(43);
-  t->SetTextSize(25);
-  t->AddText(fmt::format("#bf{{{} }}SIMULATION", detector).c_str());
-  t->AddText(fmt::format("{} for {} DVMP.", what, vm).c_str());
-  t->AddText(fmt::format("{} GeV on {} GeV", ebeam, pbeam, what).c_str());
-  t->SetTextAlign(12);
-  t->Draw();
-}
-
-} // namespace plot
-
-#endif
diff --git a/dvmp/analysis/util.h b/dvmp/analysis/util.h
deleted file mode 100644
index dad7048e..00000000
--- a/dvmp/analysis/util.h
+++ /dev/null
@@ -1,198 +0,0 @@
-#ifndef UTIL_H
-#define UTIL_H
-
-#include <algorithm>
-#include <cmath>
-#include <exception>
-#include <fmt/core.h>
-#include <limits>
-#include <string>
-#include <vector>
-
-#include <Math/Vector4D.h>
-
-#include "dd4pod/Geant4ParticleCollection.h"
-#include "eicd/TrackParametersCollection.h"
-
-namespace util {
-
-// Exception definition for unknown particle errors
-// FIXME: A utility exception base class should be included in the analysis
-//        utility library, so we can skip most of this boilerplate
-class unknown_particle_error : public std::exception {
-public:
-  unknown_particle_error(std::string_view particle) : m_particle{particle} {}
-  virtual const char* what() const throw() {
-    return fmt::format("Unknown particle type: {}", m_particle).c_str();
-  }
-  virtual const char* type() const throw() { return "unknown_particle_error"; }
-
-private:
-  const std::string m_particle;
-};
-
-// Simple function to return the appropriate PDG mass for the particles
-// we care about for this process.
-// FIXME: consider something more robust (maybe based on hepPDT) to the
-//        analysis utility library
-inline double get_pdg_mass(std::string_view part) {
-  if (part == "electron") {
-    return 0.0005109989461;
-  } else if (part == "muon") {
-    return .1056583745;
-  } else if (part == "jpsi") {
-    return 3.0969;
-  } else if (part == "upsilon") {
-    return 9.49630;
-  } else {
-    throw unknown_particle_error{part};
-  }
-}
-
-// Get a vector of 4-momenta from raw tracking info, using an externally
-// provided particle mass assumption.
-// FIXME: should be part of utility library
-inline auto
-momenta_from_tracking(const std::vector<eic::TrackParametersData>& tracks,
-                      const double mass) {
-  std::vector<ROOT::Math::PxPyPzMVector> momenta{tracks.size()};
-  // transform our raw tracker info into proper 4-momenta
-  std::transform(tracks.begin(), tracks.end(), momenta.begin(),
-                 [mass](const auto& track) {
-                   // make sure we don't divide by zero
-                   if (fabs(track.qOverP) < 1e-9) {
-                     return ROOT::Math::PxPyPzMVector{};
-                   }
-                   const double p = fabs(1. / track.qOverP);
-                   const double px = p * cos(track.phi) * sin(track.theta);
-                   const double py = p * sin(track.phi) * sin(track.theta);
-                   const double pz = p * cos(track.theta);
-                   return ROOT::Math::PxPyPzMVector{px, py, pz, mass};
-                 });
-  return momenta;
-}
-
-// Get a vector of 4-momenta from the simulation data.
-// FIXME: should be part of utility library
-// TODO: Add PID selector (maybe using ranges?)
-inline auto
-momenta_from_simulation(const std::vector<dd4pod::Geant4ParticleData>& parts) {
-  std::vector<ROOT::Math::PxPyPzMVector> momenta{parts.size()};
-  // transform our simulation particle data into 4-momenta
-  std::transform(parts.begin(), parts.end(), momenta.begin(),
-                 [](const auto& part) {
-                   return ROOT::Math::PxPyPzMVector{part.psx, part.psy,
-                                                    part.psz, part.mass};
-                 });
-  return momenta;
-}
-
-// Find the decay pair candidates from a vector of particles (parts),
-// with invariant mass closest to a desired value (pdg_mass)
-// FIXME: not sure if this belongs here, or in the utility library. Probably the
-//        utility library
-inline std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>
-find_decay_pair(const std::vector<ROOT::Math::PxPyPzMVector>& parts,
-                const double pdg_mass) {
-  int first = -1;
-  int second = -1;
-  double best_mass = -1;
-
-  // go through all particle combinatorics, calculate the invariant mass
-  // for each combination, and remember which combination is the closest
-  // to the desired pdg_mass
-  for (int i = 0; i < parts.size(); ++i) {
-    for (int j = i + 1; j < parts.size(); ++j) {
-      const double new_mass{(parts[i] + parts[j]).mass()};
-      if (fabs(new_mass - pdg_mass) < fabs(best_mass - pdg_mass)) {
-        first = i;
-        second = j;
-        best_mass = new_mass;
-      }
-    }
-  }
-  if (first < 0) {
-    return {{}, {}};
-  }
-  return {parts[first], parts[second]};
-}
-
-// Calculate the invariant mass of a given pair of particles
-inline double
-get_im(const std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>&
-           particle_pair) {
-  return (particle_pair.first + particle_pair.second).mass();
-}
-
-// Calculate the transverse momentum of a given pair of particles
-inline double
-get_pt(const std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>&
-           particle_pair) {
-  double px_pair = (particle_pair.first + particle_pair.second).px();
-  double py_pair = (particle_pair.first + particle_pair.second).py();  
-  return sqrt(px_pair*px_pair + py_pair*py_pair);
-}
-
-// Calculate the azimuthal angle of a given pair of particles
-inline double
-get_phi(const std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>&
-           particle_pair) {
-  double px_pair = (particle_pair.first + particle_pair.second).px();
-  double py_pair = (particle_pair.first + particle_pair.second).py();
-  double phi_pair = std::atan2(py_pair,px_pair);
-  //if(py_pair <= 0.) phi_pair = - phi_pair;
-  return phi_pair;
-}
-
-// Calculate the rapidity of a given pair of particles
-inline double
-get_y(const std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>&
-           particle_pair) {
-  double px_pair = (particle_pair.first + particle_pair.second).px();
-  double py_pair = (particle_pair.first + particle_pair.second).py();
-  double pz_pair = (particle_pair.first + particle_pair.second).pz();
-  double mass_pair = (particle_pair.first + particle_pair.second).mass();
-  double energy_pair = sqrt(mass_pair*mass_pair + px_pair*px_pair + py_pair*py_pair + pz_pair*pz_pair);
-  return 0.5*log((energy_pair + pz_pair)/(energy_pair - pz_pair));
-}
-
-//========================================================================================================
-//for structure functions
-
-struct inv_quant{    //add more when needed
-    double nu, Q2, x;
-};
-
-//for simu
-inline inv_quant calc_inv_quant_simu(const std::vector<ROOT::Math::PxPyPzMVector>& parts){
-  ROOT::Math::PxPyPzMVector q(parts[0] - parts[2]);
-  ROOT::Math::PxPyPzMVector P(parts[3]);
-  
-  double nu = q.Dot(P) / P.mass();
-  double Q2 = - q.Dot(q);  
-  inv_quant quantities = {nu, Q2, Q2/2./P.mass()/nu};
-  return quantities;
-}
-
-inline double get_nu_simu(inv_quant quantities) {
-  return quantities.nu/1000.;
-}
-inline double get_Q2_simu(inv_quant quantities) {
-  return quantities.Q2;
-}
-inline double get_x_simu(inv_quant quantities) {
-  return quantities.x;
-}
-
-//for tracking, add later
-
-//=========================================================================================================
-
-
-
-
-
-
-} // namespace util
-
-#endif
diff --git a/include/benchmark.h b/include/benchmark.h
new file mode 100644
index 00000000..0634be0a
--- /dev/null
+++ b/include/benchmark.h
@@ -0,0 +1,124 @@
+#ifndef BENCHMARK_H
+#define BENCHMARK_H
+
+#include "exception.h"
+#include <fmt/core.h>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <nlohmann/json.hpp>
+#include <string>
+
+// Bookkeeping of test data to store data of one or more tests in a json file to
+// facilitate future accounting.
+//
+// Usage Example 1 (single test):
+// ==============================
+// 1. define our test
+//      eic::util::Test test1{
+//        {{"name", "example_test"},
+//        {"title", "Example Test"},
+//        {"description", "This is an example of a test definition"},
+//        {"quantity", "efficiency"},
+//        {"target", "1"}}};
+// 2. set pass/fail/error status and return value (in this case .99)
+//      test1.pass(0.99)
+// 3. write our test data to a json file
+//      eic::util::write_test(test1, "test1.json");
+//
+// Usage Example 2 (multiple tests):
+// =================================
+// 1. define our tests
+//      eic::util::Test test1{
+//        {{"name", "example_test"},
+//        {"title", "Example Test"},
+//        {"description", "This is an example of a test definition"},
+//        {"quantity", "efficiency"},
+//        {"target", "1"}}};
+//      eic::util::Test test2{
+//        {{"name", "another_test"},
+//        {"title", "Another example Test"},
+//        {"description", "This is a second example of a test definition"},
+//        {"quantity", "resolution"},
+//        {"target", "3."}}};
+// 2. set pass/fail/error status and return value (in this case .99)
+//      test1.fail(10)
+// 3. write our test data to a json file
+//      eic::util::write_test({test1, test2}, "test.json");
+
+// Namespace for utility scripts, FIXME this should be part of an independent
+// library
+namespace eic::util {
+
+  struct TestDefinitionError : Exception {
+    TestDefinitionError(std::string_view msg) : Exception(msg, "test_definition_error") {}
+  };
+
+  // Wrapper for our test data json, with three methods to set the status
+  // after test completion (to pass, fail or error). The default value
+  // is error.
+  // The following fields should be defined in the definitions json
+  // for the test to make sense:
+  //  - name: unique identifier for this test
+  //  - title: Slightly more verbose identifier for this test
+  //  - description: Concise description of what is tested
+  //  - quantity: What quantity is tested? Unites of value/target
+  //  - target: Target value of <quantity> that we want to reach
+  //  - value: Actual value of <quantity>
+  //  - weight: Weight for this test (this is defaulted to 1.0 if not specified)
+  //  - result: pass/fail/error
+  struct Test {
+    // note: round braces for the json constructor, as else it will pick the wrong
+    //       initializer-list constructur (it will put everything in an array)
+    Test(const std::map<std::string, std::string>& definition) : json(definition)
+    {
+      // std::cout << json.dump() << std::endl;
+      // initialize with error (as we don't have a value yet)
+      error();
+      // Check that all required fields are present
+      for (const auto& field :
+           {"name", "title", "description", "quantity", "target", "value", "result"}) {
+        if (json.find(field) == json.end()) {
+          throw TestDefinitionError{
+              fmt::format("Error in test definition: field '{}' missing", field)};
+        }
+      }
+      // Default "weight" to 1 if not set
+      if (json.find("weight") == json.end()) {
+        json["weight"] = 1.0;
+      }
+    }
+    // Set this test to pass/fail/error
+    void pass(double value) { update_result("pass", value); }
+    void fail(double value) { update_result("fail", value); }
+    void error(double value = 0) { update_result("error", value); }
+
+    nlohmann::json json;
+
+  private:
+    void update_result(std::string_view status, double value)
+    {
+      json["result"] = status;
+      json["value"]  = value;
+    }
+  };
+
+  void write_test(const std::vector<Test>& data, const std::string& fname)
+  {
+    nlohmann::json test;
+    for (auto& entry : data) {
+      test["tests"].push_back(entry.json);
+    }
+    std::cout << fmt::format("Writing test data to {}\n", fname);
+    std::ofstream output_file(fname);
+    output_file << std::setw(4) << test << "\n";
+  }
+  void write_test(const Test& data, const std::string& fname)
+  {
+    std::vector<Test> vtd{data};
+    write_test(vtd, fname);
+  }
+
+} // namespace eic::util
+
+#endif
diff --git a/include/exception.h b/include/exception.h
new file mode 100644
index 00000000..b630bd00
--- /dev/null
+++ b/include/exception.h
@@ -0,0 +1,22 @@
+#ifndef UTIL_EXCEPTION_H
+#define UTIL_EXCEPTION_H
+
+#include <exception>
+#include <string>
+
+namespace eic::util {
+  class Exception : public std::exception {
+  public:
+    Exception(std::string_view msg, std::string_view type = "exception") : msg_{msg}, type_{type} {}
+
+    virtual const char* what() const throw() { return msg_.c_str(); }
+    virtual const char* type() const throw() { return type_.c_str(); }
+    virtual ~Exception() throw() {}
+
+  private:
+    std::string msg_;
+    std::string type_;
+  };
+} // namespace eic::util
+
+#endif
diff --git a/dvmp/analysis/mt.h b/include/mt.h
similarity index 100%
rename from dvmp/analysis/mt.h
rename to include/mt.h
diff --git a/include/plot.h b/include/plot.h
new file mode 100644
index 00000000..c1986163
--- /dev/null
+++ b/include/plot.h
@@ -0,0 +1,42 @@
+#ifndef PLOT_H
+#define PLOT_H
+
+#include <TCanvas.h>
+#include <TColor.h>
+#include <TPad.h>
+#include <TPaveText.h>
+#include <TStyle.h>
+#include <fmt/core.h>
+#include <vector>
+
+namespace plot {
+
+  const int kMpBlue   = TColor::GetColor(0x1f, 0x77, 0xb4);
+  const int kMpOrange = TColor::GetColor(0xff, 0x7f, 0x0e);
+  const int kMpGreen  = TColor::GetColor(0x2c, 0xa0, 0x2c);
+  const int kMpRed    = TColor::GetColor(0xd6, 0x27, 0x28);
+  const int kMpPurple = TColor::GetColor(0x94, 0x67, 0xbd);
+  const int kMpBrown  = TColor::GetColor(0x8c, 0x56, 0x4b);
+  const int kMpPink   = TColor::GetColor(0xe3, 0x77, 0xc2);
+  const int kMpGrey   = TColor::GetColor(0x7f, 0x7f, 0x7f);
+  const int kMpMoss   = TColor::GetColor(0xbc, 0xbd, 0x22);
+  const int kMpCyan   = TColor::GetColor(0x17, 0xbe, 0xcf);
+
+  const std::vector<int> kPalette = {kMpBlue,  kMpOrange, kMpGreen, kMpRed,  kMpPurple,
+                                     kMpBrown, kMpPink,   kMpGrey,  kMpMoss, kMpCyan};
+
+  void draw_label(int ebeam, int pbeam, const std::string_view detector)
+  {
+    auto t = new TPaveText(.15, 0.800, .7, .925, "NB NDC");
+    t->SetFillColorAlpha(kWhite, 0.4);
+    t->SetTextFont(43);
+    t->SetTextSize(25);
+    t->AddText(fmt::format("#bf{{{} }}SIMULATION", detector).c_str());
+    t->AddText(fmt::format("{} GeV on {} GeV", ebeam, pbeam).c_str());
+    t->SetTextAlign(12);
+    t->Draw();
+  }
+
+} // namespace plot
+
+#endif
diff --git a/include/util.h b/include/util.h
new file mode 100644
index 00000000..56fb1289
--- /dev/null
+++ b/include/util.h
@@ -0,0 +1,159 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+// TODO: should probably be moved to a global benchmark utility library
+
+#include <algorithm>
+#include <cmath>
+#include <exception>
+#include <fmt/core.h>
+#include <limits>
+#include <string>
+#include <vector>
+
+#include <Math/Vector4D.h>
+
+#include "dd4pod/Geant4ParticleCollection.h"
+#include "eicd/TrackParametersCollection.h"
+
+namespace util {
+
+  // Exception definition for unknown particle errors
+  // FIXME: A utility exception base class should be included in the analysis
+  //        utility library, so we can skip most of this boilerplate
+  class unknown_particle_error : public std::exception {
+  public:
+    unknown_particle_error(std::string_view particle) : m_particle{particle} {}
+    virtual const char* what() const throw()
+    {
+      return fmt::format("Unknown particle type: {}", m_particle).c_str();
+    }
+    virtual const char* type() const throw() { return "unknown_particle_error"; }
+
+  private:
+    const std::string m_particle;
+  };
+
+  // Simple function to return the appropriate PDG mass for the particles
+  // we care about for this process.
+  // FIXME: consider something more robust (maybe based on hepPDT) to the
+  //        analysis utility library
+  inline double get_pdg_mass(std::string_view part)
+  {
+    if (part == "electron") {
+      return 0.0005109989461;
+    } else if (part == "muon") {
+      return .1056583745;
+    } else if (part == "jpsi") {
+      return 3.0969;
+    } else if (part == "upsilon") {
+      return 9.49630;
+    } else {
+      throw unknown_particle_error{part};
+    }
+  }
+
+  // Get a vector of 4-momenta from raw tracking info, using an externally
+  // provided particle mass assumption.
+  inline auto momenta_from_tracking(const std::vector<eic::TrackParametersData>& tracks,
+                                    const double                                 mass)
+  {
+    std::vector<ROOT::Math::PxPyPzMVector> momenta{tracks.size()};
+    // transform our raw tracker info into proper 4-momenta
+    std::transform(tracks.begin(), tracks.end(), momenta.begin(), [mass](const auto& track) {
+      // make sure we don't divide by zero
+      if (fabs(track.qOverP) < 1e-9) {
+        return ROOT::Math::PxPyPzMVector{};
+      }
+      const double p  = fabs(1. / track.qOverP);
+      const double px = p * cos(track.phi) * sin(track.theta);
+      const double py = p * sin(track.phi) * sin(track.theta);
+      const double pz = p * cos(track.theta);
+      return ROOT::Math::PxPyPzMVector{px, py, pz, mass};
+    });
+    return momenta;
+  }
+
+  // Get a vector of 4-momenta from the simulation data.
+  // TODO: Add PID selector (maybe using ranges?)
+  inline auto momenta_from_simulation(const std::vector<dd4pod::Geant4ParticleData>& parts)
+  {
+    std::vector<ROOT::Math::PxPyPzMVector> momenta{parts.size()};
+    // transform our simulation particle data into 4-momenta
+    std::transform(parts.begin(), parts.end(), momenta.begin(), [](const auto& part) {
+      return ROOT::Math::PxPyPzMVector{part.psx, part.psy, part.psz, part.mass};
+    });
+    return momenta;
+  }
+
+  // Find the decay pair candidates from a vector of particles (parts),
+  // with invariant mass closest to a desired value (pdg_mass)
+  inline std::pair<ROOT::Math::PxPyPzMVector, ROOT::Math::PxPyPzMVector>
+  find_decay_pair(const std::vector<ROOT::Math::PxPyPzMVector>& parts, const double pdg_mass)
+  {
+    int    first     = -1;
+    int    second    = -1;
+    double best_mass = -1;
+
+    // go through all particle combinatorics, calculate the invariant mass
+    // for each combination, and remember which combination is the closest
+    // to the desired pdg_mass
+    for (size_t i = 0; i < parts.size(); ++i) {
+      for (size_t j = i + 1; j < parts.size(); ++j) {
+        const double new_mass{(parts[i] + parts[j]).mass()};
+        if (fabs(new_mass - pdg_mass) < fabs(best_mass - pdg_mass)) {
+          first     = i;
+          second    = j;
+          best_mass = new_mass;
+        }
+      }
+    }
+    if (first < 0) {
+      return {{}, {}};
+    }
+    return {parts[first], parts[second]};
+  }
+
+  // Calculate the magnitude of the momentum of a vector of 4-vectors
+  inline auto mom(const std::vector<ROOT::Math::PxPyPzMVector>& momenta)
+  {
+    std::vector<double> P(momenta.size());
+    // transform our raw tracker info into proper 4-momenta
+    std::transform(momenta.begin(), momenta.end(), P.begin(),
+                   [](const auto& mom) { return mom.P(); });
+    return P;
+  }
+  // Calculate the transverse momentum of a vector of 4-vectors
+  inline auto pt(const std::vector<ROOT::Math::PxPyPzMVector>& momenta)
+  {
+    std::vector<double> pt(momenta.size());
+    // transform our raw tracker info into proper 4-momenta
+    std::transform(momenta.begin(), momenta.end(), pt.begin(),
+                   [](const auto& mom) { return mom.pt(); });
+    return pt;
+  }
+
+  // Calculate the azimuthal angle phi of a vector of 4-vectors
+  inline auto phi(const std::vector<ROOT::Math::PxPyPzMVector>& momenta)
+  {
+    std::vector<double> phi(momenta.size());
+    // transform our raw tracker info into proper 4-momenta
+    std::transform(momenta.begin(), momenta.end(), phi.begin(),
+                   [](const auto& mom) { return mom.phi(); });
+    return phi;
+  }
+  // Calculate the pseudo-rapidity of a vector of particles
+  inline auto eta(const std::vector<ROOT::Math::PxPyPzMVector>& momenta)
+  {
+    std::vector<double> eta(momenta.size());
+    // transform our raw tracker info into proper 4-momenta
+    std::transform(momenta.begin(), momenta.end(), eta.begin(),
+                   [](const auto& mom) { return mom.eta(); });
+    return eta;
+  }
+
+  //=========================================================================================================
+
+} // namespace util
+
+#endif
diff --git a/config/env.sh b/options/env.sh
similarity index 96%
rename from config/env.sh
rename to options/env.sh
index 5abe4194..542ee7de 100755
--- a/config/env.sh
+++ b/options/env.sh
@@ -87,6 +87,10 @@ echo "DETECTOR_PREFIX:        ${DETECTOR_PREFIX}"
 export DETECTOR_PATH="${DETECTOR_PREFIX}/${JUGGLER_DETECTOR}"
 echo "DETECTOR_PATH:          ${DETECTOR_PATH}"
 
+## build dir for ROOT to put its binaries etc.
+export ROOT_BUILD_DIR=$LOCAL_PREFIX/root_build
+echo "ROOT_BUILD_DIR:         ${ROOT_BUILD_DIR}"
+
 ## =============================================================================
 ## Setup PATH and LD_LIBRARY_PATH to include our prefixes
 echo "Adding JUGGLER_INSTALL_PREFIX and LOCAL_PREFIX to PATH and LD_LIBRARY_PATH"
diff --git a/pythia_dis b/pythia_dis
new file mode 100755
index 0000000000000000000000000000000000000000..91a83f279189632193eaa87181405aaad17b8378
GIT binary patch
literal 304896
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
b4;Dy$F!dTJvA0+GmoC+uet@fh>#O*GQV0;E

literal 0
HcmV?d00001

diff --git a/tools/start_dev_shell.sh b/tools/dev-shell
similarity index 100%
rename from tools/start_dev_shell.sh
rename to tools/dev-shell
diff --git a/util/benchmark.hh b/util/benchmark.hh
deleted file mode 100644
index f8abec06..00000000
--- a/util/benchmark.hh
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef BENCHMARK_LOADED
-#define BENCHMARK_LOADED
-
-#include "exception.hh"
-#include <fmt/core.h>
-#include <fstream>
-#include <iostream>
-#include <nlohmann/json.hpp>
-#include <string>
-
-// Bookkeeping of test data to store data of one or more tests in a json file to
-// facilitate future accounting.
-//
-// Usage Example 1 (single test):
-// ==============================
-// 1. define our test
-//      eic::util::Test test1{
-//        {{"name", "example_test"},
-//        {"title", "Example Test"},
-//        {"description", "This is an example of a test definition"},
-//        {"quantity", "efficiency"},
-//        {"target", "1"}}};
-// 2. set pass/fail/error status and return value (in this case .99)
-//      test1.pass(0.99)
-// 3. write our test data to a json file
-//      eic::util::write_test(test1, "test1.json");
-//
-// Usage Example 2 (multiple tests):
-// =================================
-// 1. define our tests
-//      eic::util::Test test1{
-//        {{"name", "example_test"},
-//        {"title", "Example Test"},
-//        {"description", "This is an example of a test definition"},
-//        {"quantity", "efficiency"},
-//        {"target", "1"}}};
-//      eic::util::Test test2{
-//        {{"name", "another_test"},
-//        {"title", "Another example Test"},
-//        {"description", "This is a second example of a test definition"},
-//        {"quantity", "resolution"},
-//        {"target", "3."}}};
-// 2. set pass/fail/error status and return value (in this case .99)
-//      test1.fail(10)
-// 3. write our test data to a json file
-//      eic::util::write_test({test1, test2}, "test.json");
-
-// Namespace for utility scripts, FIXME this should be part of an independent
-// library
-namespace eic::util {
-
-struct TestDefinitionError : Exception {
-  TestDefinitionError(std::string_view msg)
-      : Exception(msg, "test_definition_error") {}
-};
-
-// Wrapper for our test data json, with three methods to set the status
-// after test completion (to pass, fail or error). The default value
-// is error.
-// The following fields should be defined in the definitions json
-// for the test to make sense:
-//  - name: unique identifier for this test
-//  - title: Slightly more verbose identifier for this test
-//  - description: Concise description of what is tested
-//  - quantity: What quantity is tested? Unites of value/target
-//  - target: Target value of <quantity> that we want to reach
-//  - value: Actual value of <quantity>
-//  - weight: Weight for this test (this is defaulted to 1.0 if not specified)
-//  - result: pass/fail/error
-struct Test {
-  Test(nlohmann::json definition) : json{std::move(definition)} {
-    // initialize with error (as we don't have a value yet)
-    error();
-    // Check that all required fields are present
-    for (const auto& field : {"name", "title", "description", "quantity",
-                              "target", "value", "result"}) {
-      if (json.find(field) == json.end()) {
-        throw TestDefinitionError{
-            fmt::format("Error in test definition: field '{}' missing", field)};
-      }
-    }
-    // Default "weight" to 1 if not set
-    if (json.find("weight") == json.end()) {
-      json["weight"] = 1.0;
-    }
-  }
-  // Set this test to pass/fail/error
-  void pass(double value) { update_result("pass", value); }
-  void fail(double value) { update_result("fail", value); }
-  void error(double value = 0) { update_result("error", value); }
-
-  nlohmann::json json;
-
-private:
-  void update_result(std::string_view status, double value) {
-    json["result"] = status;
-    json["value"] = value;
-  }
-};
-
-void write_test(const std::vector<Test>& data, const std::string& fname) {
-  nlohmann::json test;
-  for (auto& entry : data) {
-    test["tests"].push_back(entry.json);
-  }
-  std::cout << fmt::format("Writing test data to {}\n", fname);
-  std::ofstream output_file(fname);
-  output_file << std::setw(4) << test << "\n";
-}
-void write_test(const Test& data, const std::string& fname) {
-  std::vector<Test> vtd{data};
-  write_test(vtd, fname);
-}
-
-} // namespace eic::util
-
-#endif
diff --git a/util/build_detector.sh b/util/build_detector.sh
index 03641f48..02313585 100755
--- a/util/build_detector.sh
+++ b/util/build_detector.sh
@@ -18,9 +18,9 @@ pushd ${PROJECT_ROOT}
 ## - DETECTOR_PATH:    full path for the detector definitions
 ##                     this is the same as ${DETECTOR_PREFIX}/${JUGGLER_DETECTOR}
 ##
-## You can read config/env.sh for more in-depth explanations of the variables
+## You can read options/env.sh for more in-depth explanations of the variables
 ## and how they can be controlled.
-source config/env.sh
+source options/env.sh
 
 ## =============================================================================
 ## Step 1: download/update the detector definitions (if needed)
diff --git a/util/collect_benchmarks.py b/util/collect_benchmarks.py
index 8f9fd675..0af7e9a1 100755
--- a/util/collect_benchmarks.py
+++ b/util/collect_benchmarks.py
@@ -9,7 +9,7 @@ directory.
 """
 
 ## Our master definition file, the benchmark project directory
-MASTER_FILE=r'benchmarks.json'
+MASTER_FILE=r'benchmarks/benchmarks.json'
 
 ## Our results directory
 RESULTS_PATH=r'results'
diff --git a/util/collect_tests.py b/util/collect_tests.py
index c56d8c8b..4d860ca7 100755
--- a/util/collect_tests.py
+++ b/util/collect_tests.py
@@ -15,7 +15,7 @@ files to identify them as benchmark components.
 """
 
 ## Our benchmark definition file, stored in the benchmark root directory
-BENCHMARK_FILE=r'{}/benchmark.json'
+BENCHMARK_FILE=r'benchmarks/{}/benchmark.json'
 
 ## Our benchmark results directory
 RESULTS_PATH=r'results/{}'
diff --git a/util/compile_analyses.py b/util/compile_analyses.py
new file mode 100755
index 00000000..153f2ea2
--- /dev/null
+++ b/util/compile_analyses.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python3
+
+"""
+Compile all root analysis scripts under
+benchmarks/<BENCHMARK>/analysis/*.cxx
+
+Doing this step here rather than during the main benchmark script has
+multiple advantages:
+    1. Get feedback on syntax errors early on, without wasting compute resources
+    2. Avoid race conditions for large benchmarks run in parallel
+    3. Make it easier to properly handle the root build directory, as
+       this has to exist prior to our attempt to compile, else all will
+       fail (this is probably an old bug in root...)
+
+Analysis scripts are expected to have extension 'cxx' and be located in the analysis
+subdirectory
+"""
+
+## Our analysis path and file extension for glob
+ANALYSIS_PATH=r'benchmarks/{}/analysis'
+ANALYSIS_EXT = r'cxx'
+
+import argparse
+import os
+from pathlib import Path
+
+## Exceptions for this module
+class Error(Exception):
+    '''Base class for exceptions in this module.'''
+    pass
+
+class PathNotFoundError(Exception):
+    '''Path does not exist.
+
+    Attributes:
+        path: the path name
+        message: error message
+    '''
+    def __init__(self, path):
+        self.file = file
+        self.message = 'No such directory: {}'.format(file)
+class NoAnalysesFoundError(Exception):
+    '''Did not find any analysis scripts to complile
+
+    Attributes:
+        path: the analysis path
+        message: error message
+    '''
+    def __init__(self, path):
+        self.file = file
+        self.message = 'No analysis found (extension \'{}\' in path: {}'.format(file,
+                ANALYSIS_EXT)
+
+class CompilationError(Exception):
+    '''Raised when we failed to compile an analysis script
+
+    Attributes:
+        file: analysis file name
+        path: analysis path
+        message: error message
+    '''
+    def __init__(self, file):
+        self.file = file
+        self.message = "Analysis '{}' failed to compile".format(file)
+
+parser = argparse.ArgumentParser()
+parser.add_argument(
+        'benchmark',
+        help='A benchmarks for which to compile the analysis scripts.')
+
+def compile_analyses(benchmark):
+    '''Compile all analysis scripts for a benchmark.'''
+    print("Compiling all analyis scripts for '{}'".format(benchmark))
+
+    ## Ensure our build directory exists
+    _init_build_dir(benchmark)
+
+    ## Get a list of all analysis scripts
+    _compile_all(benchmark)
+
+    ## All done!
+    print('All analyses for', benchmark, 'compiled successfully')
+
+def _init_build_dir(benchmark):
+    '''Initialize our ROOT build directory (if using one).'''
+    print(' --> Initializing ROOT build directory ...')
+    build_prefix = os.getenv('ROOT_BUILD_DIR')
+    if build_prefix is None:
+        print('    --> ROOT_BUILD_DIR not set, no action needed.')
+        return
+    ## deduce the root build directory
+    pwd = os.getenv('PWD')
+    build_dir = '{}/{}/{}'.format(build_prefix, pwd, ANALYSIS_PATH.format(benchmark))
+    print("    --> Ensuring directory '{}' exists".format(build_dir))
+    os.system('mkdir -p {}'.format(build_dir))
+
+def _compile_all(benchmark):
+    '''Compile all analysis for this benchmark.'''
+    print(' --> Compiling analysis scripts')
+    anadir = Path(ANALYSIS_PATH.format(benchmark))
+    if not anadir.exists():
+        raise PathNotFoundError(anadir)
+    ana_list = []
+    for file in anadir.glob('*.{}'.format(ANALYSIS_EXT)):
+        ana_list.append(file)
+        print('    --> Compiling:', file, flush=True)
+        err = os.system(_compile_cmd(file))
+        if err:
+            raise CompilationError(file)
+    if len(ana_list) == 0:
+        raise NoAnalysesFoundError(anadir)
+
+def _compile_cmd(file):
+    '''Return a one-line shell command to compile an analysis script.'''
+    return r'bash -c "root -q -b -e \".L {}+\""'.format(file)
+
+if __name__ == "__main__":
+    args = parser.parse_args()
+    compile_analyses(args.benchmark)
diff --git a/util/exception.hh b/util/exception.hh
deleted file mode 100644
index d97ef27c..00000000
--- a/util/exception.hh
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef UTIL_EXCEPTION
-#define UTIL_EXCEPTION
-
-#include <exception>
-#include <string>
-
-namespace eic::util {
-class Exception : public std::exception {
-public:
-  Exception(std::string_view msg, std::string_view type = "exception")
-      : msg_{msg}, type_{type} {}
-
-  virtual const char* what() const throw() { return msg_.c_str(); }
-  virtual const char* type() const throw() { return type_.c_str(); }
-  virtual ~Exception() throw() {}
-
-private:
-  std::string msg_;
-  std::string type_;
-};
-} // namespace eic::util
-
-#endif
diff --git a/util/parse_cmd.sh b/util/parse_cmd.sh
index 9bf2f553..04028d89 100755
--- a/util/parse_cmd.sh
+++ b/util/parse_cmd.sh
@@ -11,9 +11,11 @@
 ##   - REQUIRE_DECAY:     require the --decay flag to be set
 ## =============================================================================
 
+## Commented out because this should be taken care of by the 
+## calling script to not enforce a fixed directory structure.
 ## make sure we launch this script from the project root directory
-PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
-pushd ${PROJECT_ROOT}
+#PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
+#pushd ${PROJECT_ROOT}
 
 ## =============================================================================
 ## Step 1: Process the command line arguments
-- 
GitLab