diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 79dff3cb2cbf8a0d7a3e704675510136d323343b..5c30b61ea7bc79c3c5cd3f7308db2c725f255a45 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -71,12 +71,11 @@ include:
     #  - local: 'benchmarks/rich/config.yml'
   - local: 'benchmarks/imaging_ecal/config.yml'
   - local: 'benchmarks/imaging_shower_ML/config.yml'
-  - local: 'benchmarks/full/config.yml'
   - local: 'benchmarks/B0/config.yml'
 
 final_report:
   stage: finish
-  needs: ["ecal_collect", "tracking_central_electrons", "clustering:results", "full:results","track_finding:collect","track_fitting:collect"]
+  needs: ["ecal_collect", "tracking_central_electrons", "clustering:results", "track_finding:collect", "track_fitting:collect"]
   script:
     # disabled while we address ACTS issues
     #- mkdir -p results/views && cd results/views && bash ../../bin/download_views
diff --git a/benchmarks/full/config.yml b/benchmarks/full/config.yml
deleted file mode 100644
index 3ad6d6ef0bef04368950c78c4172db4cc69b2638..0000000000000000000000000000000000000000
--- a/benchmarks/full/config.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-full:reco:
-  extends: .rec_benchmark
-  stage: run
-  timeout: 24 hours
-  script:
-    - bash benchmarks/full/full_reconstruction.sh -t full_${REGIONS}_${PARTICLES} -n 100 -p "${PARTICLES}" --pmin 1 --pmax 20 --region "${REGIONS}"
-  parallel:
-    matrix:
-      - REGIONS: ["forward", "barrel", "backward"]
-        PARTICLES: ["electron", "pion+", "pion-", "kaon+", "kaon-", "proton", "neutron", "positron", "photon"]
-        #PARTICLES: ["electron", "pion0", "pion+", "pion-", "kaon0S", "kaon0L", "kaon+", "kaon-", "proton", "neutron", "positron", "photon"]
-
-full:results:
-  extends: .rec_benchmark
-  stage: collect
-  needs: ["full:reco"]
-  script:
-    - ls -lrth
-      #- python dvcs/scripts/merge_results.py
-
diff --git a/benchmarks/full/full_reconstruction.sh b/benchmarks/full/full_reconstruction.sh
deleted file mode 100644
index 3d60204dfdb1bf32e27d317602ed53045878b92a..0000000000000000000000000000000000000000
--- a/benchmarks/full/full_reconstruction.sh
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/bin/bash
-
-print_env.sh
-
-function print_the_help {
-  echo "USAGE: ${0} -n <nevents> -t <nametag> -p <particle> "
-  echo "  OPTIONS: "
-  echo "    -n,--nevents     Number of events"
-  echo "    -t,--nametag     name tag"
-  echo "    -p,--particle    particle type"
-  echo "                     allowed types: pion0, pion+, pion-, kaon0, kaon+, kaon-, proton, neutron, electron, positron, photon"
-  echo "    --pmin           minimum particle momentum (GeV)"
-  echo "    --pmax           maximum particle momentum (GeV)"
-  echo "    --angmin         minimum particle angle (deg)"
-  echo "    --angmax         maximum particle angle (deg)"
-  echo "    --region         detector region"
-  echo "                     allowed regions: farbackward, backward, barrel, forward, farforward"
-  exit
-}
-
-POSITIONAL=()
-while [[ $# -gt 0 ]]
-do
-  key="$1"
-
-  case $key in
-    -h|--help)
-      shift # past argument
-      print_the_help
-      ;;
-    -t|--nametag)
-      nametag="$2"
-      shift # past argument
-      shift # past value
-      ;;
-    -p|--particle)
-      particle="$2"
-      shift # past argument
-      shift # past value
-      ;;
-    -n|--nevents)
-      export JUGGLER_N_EVENTS="$2"
-      shift # past argument
-      shift # past value
-      ;;
-    --pmin)
-      export PMIN="$2"
-      shift
-      shift
-      ;;
-    --pmax)
-      export PMAX="$2"
-      shift
-      shift
-      ;;
-    --angmin)
-      export ANGMIN="$2"
-      shift
-      shift
-      ;;
-    --angmax)
-      export ANGMAX="$2"
-      shift
-      shift
-      ;;
-    --region)
-      export REGION="$2"
-      shift
-      shift
-      ;;
-    *)    # unknown option
-      #POSITIONAL+=("$1") # save it in an array for later
-      echo "unknown option $1"
-      print_the_help
-      shift # past argument
-      ;;
-  esac
-done
-set -- "${POSITIONAL[@]}" # restore positional parameters
-
-if [[ ! -n  "${JUGGLER_N_EVENTS}" ]] ; then
-  export JUGGLER_N_EVENTS=1000
-fi
-
-if [[ ! -n  "${PARTICLE}" ]] ; then
-  export PARTICLE="electron"
-fi
-
-if [[ ! -n  "${PMIN}" ]] ; then
-  export PMIN=1.0
-fi
-
-if [[ ! -n  "${PMAX}" ]] ; then
-  export PMAX=10.0
-fi
-
-if [[ ! -n  "${ANGMIN}" ]] ; then
-  export ANGMIN=3
-fi
-
-if [[ ! -n  "${ANGMAX}" ]] ; then
-  export ANGMAX=177
-fi
-
-if [[ ! -n  "${REGION}" ]] ; then
-  export REGION="ignore"
-fi
-
-if [[ ! -n "${JUGGLER_DETECTOR}" ]] ; then
-  export JUGGLER_DETECTOR="athena"
-fi
-
-if [[ ! -n "${JUGGLER_INSTALL_PREFIX}" ]] ; then
-  export JUGGLER_INSTALL_PREFIX="/usr/local"
-fi
-
-compact_path=${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml
-export JUGGLER_FILE_NAME_TAG="${nametag}"
-export JUGGLER_GEN_FILE="gen_${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"
-
-echo "JUGGLER_N_EVENTS = ${JUGGLER_N_EVENTS}"
-echo "DETECTOR_PATH = ${DETECTOR_PATH}"
-echo "JUGGLER_DETECTOR = ${JUGGLER_DETECTOR}"
-
-# Generate the input events
-if [ ! -f ${JUGGLER_GEN_FILE} ] ; then
-  python benchmarks/full/scripts/gen_particles.py ${JUGGLER_GEN_FILE} -n ${JUGGLER_N_EVENTS}\
-    --angmin ${ANGMIN} --angmax ${ANGMAX} --phmin 0 --phmax 360 --pmin ${PMIN} --pmax ${PMAX}\
-    --regions="${REGION}" --particles="${particle}"
-fi
-
-if [[ "$?" -ne "0" ]] ; then
-  echo "ERROR running script: generating input events"
-  exit 1
-fi
-
-ls -lh ${JUGGLER_GEN_FILE}
-
-# Run geant4 simulations
-if [ ! -f ${JUGGLER_SIM_FILE} ] ; then
-  npsim --runType batch \
-        -v WARNING \
-        --part.minimalKineticEnergy "1*TeV" \
-        --numberOfEvents ${JUGGLER_N_EVENTS} \
-        --compactFile ${compact_path} \
-        --inputFiles ${JUGGLER_GEN_FILE} \
-        --outputFile ${JUGGLER_SIM_FILE}
-fi
-
-if [[ "$?" -ne "0" ]] ; then
-  echo "ERROR running npdet"
-  exit 1
-fi
-
-rootls -t "${JUGGLER_SIM_FILE}"
-
-# Directory for results
-mkdir -p results
-
-OPTION_DIR=benchmarks/full/options
-SCRIPT_DIR=benchmarks/full/scripts
-
-# Run Juggler
-gaudirun.py ${OPTION_DIR}/full_reconstruction.py
-if [[ "$?" -ne "0" ]] ; then
-  echo "ERROR running reconstruction (juggler)"
-  exit 1
-fi
-
-rootls -t "${JUGGLER_REC_FILE}"
-
-# Run analysis scripts
-#python ${SCRIPT_DIR}/full_reconstruction.py ${JUGGLER_SIM_FILE} ${JUGGLER_REC_FILE} -o results
-
-root_filesize=$(stat --format=%s "${JUGGLER_REC_FILE}")
-if [[ "${JUGGLER_N_EVENTS}" -lt "500" ]] ; then
-  # file must be less than 10 MB to upload
-  if [[ "${root_filesize}" -lt "10000000" ]] ; then
-    cp ${JUGGLER_REC_FILE} results/.
-  fi
-fi
-
diff --git a/benchmarks/full/options/full_reconstruction.py b/benchmarks/full/options/full_reconstruction.py
deleted file mode 100644
index ac1173277ccac65a720903e46e01e6827cc8d88f..0000000000000000000000000000000000000000
--- a/benchmarks/full/options/full_reconstruction.py
+++ /dev/null
@@ -1,602 +0,0 @@
-from Gaudi.Configuration import *
-
-from Configurables import ApplicationMgr, EICDataSvc, PodioOutput, GeoSvc
-from GaudiKernel import SystemOfUnits as units
-from GaudiKernel.SystemOfUnits import MeV, GeV, mm, cm, mrad
-
-import json
-
-detector_name = "athena"
-if "JUGGLER_DETECTOR" in os.environ :
-  detector_name = str(os.environ["JUGGLER_DETECTOR"])
-
-detector_path = ""
-if "DETECTOR_PATH" in os.environ :
-  detector_path = str(os.environ["DETECTOR_PATH"])
-
-compact_path = os.path.join(detector_path, detector_name)
-
-# RICH reconstruction
-qe_data = [(1.0, 0.25), (7.5, 0.25),]
-
-# CAL reconstruction
-# get sampling fractions from system environment variable
-ci_ecal_sf = float(os.environ.get("CI_ECAL_SAMP_FRAC", 0.253))
-cb_hcal_sf = float(os.environ.get("CB_HCAL_SAMP_FRAC", 0.038))
-ci_hcal_sf = float(os.environ.get("CI_HCAL_SAMP_FRAC", 0.025))
-ce_hcal_sf = float(os.environ.get("CE_HCAL_SAMP_FRAC", 0.025))
-
-# input arguments from calibration file
-with open('config/emcal_barrel_calibration.json') as f:
-    calib_data = json.load(f)['electron']
-
-print(calib_data)
-
-img_barrel_sf = float(calib_data['sampling_fraction_img'])
-scifi_barrel_sf = float(calib_data['sampling_fraction_scfi'])
-
-# input and output
-input_sims = [f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip()]
-output_rec = str(os.environ["JUGGLER_REC_FILE"])
-n_events = int(os.environ["JUGGLER_N_EVENTS"])
-
-# geometry service
-geo_service = GeoSvc("GeoSvc", detectors=["{}.xml".format(compact_path)], OutputLevel=WARNING)
-# data service
-podioevent = EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)
-
-# juggler components
-from Configurables import PodioInput
-from Configurables import Jug__Base__InputCopier_dd4pod__Geant4ParticleCollection_dd4pod__Geant4ParticleCollection_ as MCCopier
-from Configurables import Jug__Base__InputCopier_dd4pod__CalorimeterHitCollection_dd4pod__CalorimeterHitCollection_ as CalCopier
-from Configurables import Jug__Base__InputCopier_dd4pod__TrackerHitCollection_dd4pod__TrackerHitCollection_ as TrkCopier
-from Configurables import Jug__Base__InputCopier_dd4pod__PhotoMultiplierHitCollection_dd4pod__PhotoMultiplierHitCollection_ as PMTCopier
-
-from Configurables import Jug__Base__MC2DummyParticle as MC2DummyParticle
-
-from Configurables import Jug__Digi__PhotoMultiplierDigi as PhotoMultiplierDigi
-from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi
-from Configurables import Jug__Digi__UFSDTrackerDigi as TrackerDigi
-
-from Configurables import Jug__Reco__TrackerHitReconstruction as TrackerHitReconstruction
-from Configurables import Jug__Reco__TrackingHitsCollector2 as TrackingHitsCollector
-from Configurables import Jug__Reco__TrackerSourceLinker as TrackerSourceLinker
-from Configurables import Jug__Reco__TrackerSourcesLinker as TrackerSourcesLinker
-#from Configurables import Jug__Reco__TrackingHitsSourceLinker as TrackingHitsSourceLinker
-from Configurables import Jug__Reco__TrackParamTruthInit as TrackParamTruthInit
-from Configurables import Jug__Reco__TrackParamClusterInit as TrackParamClusterInit
-from Configurables import Jug__Reco__TrackParamVertexClusterInit as TrackParamVertexClusterInit
-from Configurables import Jug__Reco__TrackFindingAlgorithm as TrackFindingAlgorithm
-from Configurables import Jug__Reco__ParticlesFromTrackFit as ParticlesFromTrackFit
-from Configurables import Jug__Reco__ParticlesWithTruthPID as ParticlesWithTruthPID
-
-from Configurables import Jug__Reco__CalorimeterHitReco as CalHitReco
-from Configurables import Jug__Reco__CalorimeterHitsMerger as CalHitsMerger
-from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster
-
-from Configurables import Jug__Reco__ImagingPixelReco as ImCalPixelReco
-from Configurables import Jug__Reco__ImagingTopoCluster as ImagingCluster
-
-from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG
-from Configurables import Jug__Reco__ImagingClusterReco as ImagingClusterReco
-
-from Configurables import Jug__Reco__PhotoMultiplierReco as PhotoMultiplierReco
-from Configurables import Jug__Reco__PhotoRingClusters as PhotoRingClusters
-
-from Configurables import Jug__Reco__EMCalReconstruction as EMCalReconstruction
-
-# branches needed from simulation root file
-sim_coll = [
-    "mcparticles",
-    "EcalEndcapNHits",
-    "EcalEndcapPHits",
-    "EcalBarrelHits",
-    "EcalBarrelScFiHits",
-    "HcalBarrelHits",
-    "HcalEndcapPHits",
-    "HcalEndcapNHits",
-    "TrackerEndcapHits",
-    "TrackerBarrelHits",
-    "GEMTrackerEndcapHits",
-    "VertexBarrelHits",
-    "VertexEndcapHits",
-    "DRICHHits",
-    "MRICHHits"
-]
-
-# list of algorithms
-algorithms = []
-
-# input
-podin = PodioInput("PodioReader", collections=sim_coll)
-algorithms.append(podin)
-
-## copiers to get around input --> output copy bug. Note the "2" appended to the output collection.
-copier = MCCopier("MCCopier",
-        inputCollection="mcparticles",
-        outputCollection="mcparticles2")
-algorithms.append(copier)
-
-# Generated particles
-dummy = MC2DummyParticle("dummy",
-        inputCollection="mcparticles",
-        outputCollection="GeneratedParticles",
-        smearing=0)
-algorithms.append(dummy)
-
-# Crystal Endcap Ecal
-ce_ecal_daq = dict(
-        dynamicRangeADC=5.*units.GeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=3)
-
-ce_ecal_digi = CalHitDigi("ce_ecal_digi",
-        inputHitCollection="EcalEndcapNHits",
-        outputHitCollection="EcalEndcapNRawHits",
-        energyResolutions=[0., 0.02, 0.],
-        **ce_ecal_daq)
-algorithms.append(ce_ecal_digi)
-
-ce_ecal_reco = CalHitReco("ce_ecal_reco",
-        inputHitCollection=ce_ecal_digi.outputHitCollection,
-        outputHitCollection="EcalEndcapNRecHits",
-        thresholdFactor=4,          # 4 sigma cut on pedestal sigma
-        readoutClass="EcalEndcapNHits",
-        sectorField="sector",
-        **ce_ecal_daq)
-algorithms.append(ce_ecal_reco)
-
-ce_ecal_cl = IslandCluster("ce_ecal_cl",
-        inputHitCollection=ce_ecal_reco.outputHitCollection,
-        outputProtoClusterCollection="EcalEndcapNProtoClusters",
-        splitCluster=False,
-        minClusterHitEdep=1.0*units.MeV,  # discard low energy hits
-        minClusterCenterEdep=30*units.MeV,
-        sectorDist=5.0*units.cm,
-        dimScaledLocalDistXY=[1.8, 1.8]) # dimension scaled dist is good for hybrid sectors with different module size
-algorithms.append(ce_ecal_cl)
-
-ce_ecal_clreco = RecoCoG("ce_ecal_clreco",
-        inputHitCollection=ce_ecal_cl.inputHitCollection,
-        inputProtoClusterCollection=ce_ecal_cl.outputProtoClusterCollection,
-        outputClusterCollection="EcalEndcapNClusters",
-        outputInfoCollection="EcalEndcapNClusterInfo",
-        samplingFraction=0.998,      # this accounts for a small fraction of leakage
-        logWeightBase=4.6)
-algorithms.append(ce_ecal_clreco)
-
-# Endcap Sampling Ecal
-ci_ecal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
-
-ci_ecal_digi = CalHitDigi("ci_ecal_digi",
-        inputHitCollection="EcalEndcapPHits",
-        outputHitCollection="EcalEndcapPRawHits",
-        **ci_ecal_daq)
-algorithms.append(ci_ecal_digi)
-
-ci_ecal_reco = CalHitReco("ci_ecal_reco",
-        inputHitCollection=ci_ecal_digi.outputHitCollection,
-        outputHitCollection="EcalEndcapPRecHits",
-        thresholdFactor=5.0,
-        **ci_ecal_daq)
-algorithms.append(ci_ecal_reco)
-
-# merge hits in different layer (projection to local x-y plane)
-ci_ecal_merger = CalHitsMerger("ci_ecal_merger",
-        inputHitCollection=ci_ecal_reco.outputHitCollection,
-        outputHitCollection="EcalEndcapPRecMergedHits",
-        fields=["layer", "slice"],
-        fieldRefNumbers=[1, 0],
-        readoutClass="EcalEndcapPHits")
-algorithms.append(ci_ecal_merger)
-
-ci_ecal_cl = IslandCluster("ci_ecal_cl",
-        inputHitCollection=ci_ecal_merger.outputHitCollection,
-        outputProtoClusterCollection="EcalEndcapPProtoClusters",
-        splitCluster=False,
-        minClusterCenterEdep=10.*units.MeV,
-        localDistXY=[10*units.mm, 10*units.mm])
-algorithms.append(ci_ecal_cl)
-
-ci_ecal_clreco = RecoCoG("ci_ecal_clreco",
-        inputHitCollection=ci_ecal_cl.inputHitCollection,
-        inputProtoClusterCollection=ci_ecal_cl.outputProtoClusterCollection,
-        outputClusterCollection="EcalEndcapPClusters",
-        outputInfoCollection="EcalEndcapPClustersInfo",
-        logWeightBase=6.2,
-        samplingFraction=ci_ecal_sf)
-algorithms.append(ci_ecal_clreco)
-
-# Central Barrel Ecal (Imaging Cal.)
-img_barrel_daq = dict(
-        dynamicRangeADC=3*units.MeV,
-        capacityADC=8192,
-        pedestalMean=400,
-        pedestalSigma=20)   # about 6 keV
-
-img_barrel_digi = CalHitDigi("img_barrel_digi",
-        inputHitCollection="EcalBarrelHits",
-        outputHitCollection="EcalBarrelImagingRawHits",
-        energyResolutions=[0., 0.02, 0.],   # 2% flat resolution
-        **img_barrel_daq)
-algorithms.append(img_barrel_digi)
-
-img_barrel_reco = ImCalPixelReco("img_barrel_reco",
-        inputHitCollection=img_barrel_digi.outputHitCollection,
-        outputHitCollection="EcalBarrelImagingRecHits",
-        thresholdFactor=3,  # about 20 keV
-        readoutClass="EcalBarrelHits",  # readout class
-        layerField="layer",             # field to get layer id
-        sectorField="module",           # field to get sector id
-        **img_barrel_daq)
-algorithms.append(img_barrel_reco)
-
-img_barrel_cl = ImagingCluster("img_barrel_cl",
-        inputHitCollection=img_barrel_reco.outputHitCollection,
-        outputProtoClusterCollection="EcalBarrelImagingProtoClusters",
-        localDistXY=[2.*units.mm, 2*units.mm],  # same layer
-        layerDistEtaPhi=[10*units.mrad, 10*units.mrad],     # adjacent layer
-        neighbourLayersRange=2,                 # id diff for adjacent layer
-        sectorDist=3.*units.cm)                       # different sector
-algorithms.append(img_barrel_cl)
-
-img_barrel_clreco = ImagingClusterReco("img_barrel_clreco",
-        samplingFraction=img_barrel_sf,
-        inputHitCollection=img_barrel_cl.inputHitCollection,
-        inputProtoClusterCollection=img_barrel_cl.outputProtoClusterCollection,
-        outputClusterCollection="EcalBarrelImagingClusters",
-        outputInfoCollection="EcalBarrelImagingClustersInfo",
-        outputLayerCollection="EcalBarrelImagingLayers")
-algorithms.append(img_barrel_clreco)
-
-# Central ECAL SciFi
-scfi_barrel_daq = dict(
-        dynamicRangeADC=50.*MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
-
-scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
-        inputHitCollection="EcalBarrelScFiHits",
-        outputHitCollection="EcalBarrelScFiRawHits",
-        **scfi_barrel_daq)
-algorithms.append(scfi_barrel_digi)
-
-scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
-        inputHitCollection=scfi_barrel_digi.outputHitCollection,
-        outputHitCollection="EcalBarrelScFiRecHits",
-        thresholdFactor=5.0,
-        readoutClass="EcalBarrelScFiHits",
-        layerField="layer",
-        sectorField="module",
-        localDetFields=["system", "module"], # use local coordinates in each module (stave)
-        **scfi_barrel_daq)
-algorithms.append(scfi_barrel_reco)
-
-# merge hits in different layer (projection to local x-y plane)
-scfi_barrel_merger = CalHitsMerger("scfi_barrel_merger",
-         inputHitCollection=scfi_barrel_reco.outputHitCollection,
-         outputHitCollection="EcalBarrelScFiMergedHits",
-         fields=["fiber"],
-         fieldRefNumbers=[1],
-         readoutClass="EcalBarrelScFiHits")
-algorithms.append(scfi_barrel_merger)
-
-scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
-         inputHitCollection=scfi_barrel_merger.outputHitCollection,
-         outputProtoClusterCollection="EcalBarrelScFiProtoClusters",
-         splitCluster=False,
-         minClusterCenterEdep=10.*MeV,
-         localDistXZ=[30*mm, 30*mm])
-algorithms.append(scfi_barrel_cl)
-
-scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
-         inputHitCollection=scfi_barrel_cl.inputHitCollection,
-         inputProtoClusterCollection=scfi_barrel_cl.outputProtoClusterCollection,
-         outputClusterCollection="EcalBarrelScFiClusters",
-         outputInfoCollection="EcalBarrelScFiClustersInfo",
-         logWeightBase=6.2,
-         samplingFraction= scifi_barrel_sf)
-algorithms.append(scfi_barrel_clreco)
-
-# Central Barrel Hcal
-cb_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
-
-cb_hcal_digi = CalHitDigi("cb_hcal_digi",
-         inputHitCollection="HcalBarrelHits",
-         outputHitCollection="HcalBarrelRawHits",
-         **cb_hcal_daq)
-algorithms.append(cb_hcal_digi)
-
-cb_hcal_reco = CalHitReco("cb_hcal_reco",
-        inputHitCollection=cb_hcal_digi.outputHitCollection,
-        outputHitCollection="HcalBarrelRecHits",
-        thresholdFactor=5.0,
-        readoutClass="HcalBarrelHits",
-        layerField="layer",
-        sectorField="module",
-        **cb_hcal_daq)
-algorithms.append(cb_hcal_reco)
-
-cb_hcal_merger = CalHitsMerger("cb_hcal_merger",
-        inputHitCollection=cb_hcal_reco.outputHitCollection,
-        outputHitCollection="HcalBarrelMergedHits",
-        readoutClass="HcalBarrelHits",
-        fields=["layer", "slice"],
-        fieldRefNumbers=[1, 0])
-algorithms.append(cb_hcal_merger)
-
-cb_hcal_cl = IslandCluster("cb_hcal_cl",
-        inputHitCollection=cb_hcal_merger.outputHitCollection,
-        outputProtoClusterCollection="HcalBarrelProtoClusters",
-        splitCluster=False,
-        minClusterCenterEdep=30.*units.MeV,
-        localDistXY=[15.*units.cm, 15.*units.cm])
-algorithms.append(cb_hcal_cl)
-
-cb_hcal_clreco = RecoCoG("cb_hcal_clreco",
-        inputHitCollection=cb_hcal_cl.inputHitCollection,
-        inputProtoClusterCollection=cb_hcal_cl.outputProtoClusterCollection,
-        outputClusterCollection="HcalBarrelClusters",
-        outputInfoCollection="HcalBarrelClustersInfo",
-        logWeightBase=6.2,
-        samplingFraction=cb_hcal_sf)
-algorithms.append(cb_hcal_clreco)
-
-# Hcal Hadron Endcap
-ci_hcal_daq = dict(
-         dynamicRangeADC=50.*units.MeV,
-         capacityADC=32768,
-         pedestalMean=400,
-         pedestalSigma=10)
-
-ci_hcal_digi = CalHitDigi("ci_hcal_digi",
-         inputHitCollection="HcalEndcapPHits",
-         outputHitCollection="HcalEndcapPRawHits",
-         **ci_hcal_daq)
-algorithms.append(ci_hcal_digi)
-
-ci_hcal_reco = CalHitReco("ci_hcal_reco",
-        inputHitCollection=ci_hcal_digi.outputHitCollection,
-        outputHitCollection="HcalEndcapPRecHits",
-        thresholdFactor=5.0,
-        **ci_hcal_daq)
-algorithms.append(ci_hcal_reco)
-
-ci_hcal_merger = CalHitsMerger("ci_hcal_merger",
-        inputHitCollection=ci_hcal_reco.outputHitCollection,
-        outputHitCollection="HcalEndcapPMergedHits",
-        readoutClass="HcalEndcapPHits",
-        fields=["layer", "slice"],
-        fieldRefNumbers=[1, 0])
-algorithms.append(ci_hcal_merger)
-
-ci_hcal_cl = IslandCluster("ci_hcal_cl",
-        inputHitCollection=ci_hcal_merger.outputHitCollection,
-        outputProtoClusterCollection="HcalEndcapPProtoClusters",
-        splitCluster=False,
-        minClusterCenterEdep=30.*units.MeV,
-        localDistXY=[15.*units.cm, 15.*units.cm])
-algorithms.append(ci_hcal_cl)
-
-ci_hcal_clreco = RecoCoG("ci_hcal_clreco",
-        inputHitCollection=ci_hcal_cl.inputHitCollection,
-        inputProtoClusterCollection=ci_hcal_cl.outputProtoClusterCollection,
-        outputClusterCollection="HcalEndcapPClusters",
-        outputInfoCollection="HcalEndcapPClustersInfo",
-        logWeightBase=6.2,
-        samplingFraction=ci_hcal_sf)
-algorithms.append(ci_hcal_clreco)
-
-# Hcal Electron Endcap
-ce_hcal_daq = dict(
-        dynamicRangeADC=50.*units.MeV,
-        capacityADC=32768,
-        pedestalMean=400,
-        pedestalSigma=10)
-
-ce_hcal_digi = CalHitDigi("ce_hcal_digi",
-        inputHitCollection="HcalEndcapNHits",
-        outputHitCollection="HcalEndcapNRawHits",
-        **ce_hcal_daq)
-algorithms.append(ce_hcal_digi)
-
-ce_hcal_reco = CalHitReco("ce_hcal_reco",
-        inputHitCollection=ce_hcal_digi.outputHitCollection,
-        outputHitCollection="HcalEndcapNRecHits",
-        thresholdFactor=5.0,
-        **ce_hcal_daq)
-algorithms.append(ce_hcal_reco)
-
-ce_hcal_merger = CalHitsMerger("ce_hcal_merger",
-        inputHitCollection=ce_hcal_reco.outputHitCollection,
-        outputHitCollection="HcalEndcapNMergedHits",
-        readoutClass="HcalEndcapNHits",
-        fields=["layer", "slice"],
-        fieldRefNumbers=[1, 0])
-algorithms.append(ce_hcal_merger)
-
-ce_hcal_cl = IslandCluster("ce_hcal_cl",
-        inputHitCollection=ce_hcal_merger.outputHitCollection,
-        outputProtoClusterCollection="HcalEndcapNProtoClusters",
-        splitCluster=False,
-        minClusterCenterEdep=30.*units.MeV,
-        localDistXY=[15.*units.cm, 15.*units.cm])
-algorithms.append(ce_hcal_cl)
-
-ce_hcal_clreco = RecoCoG("ce_hcal_clreco",
-        inputHitCollection=ce_hcal_cl.inputHitCollection,
-        inputProtoClusterCollection=ce_hcal_cl.outputProtoClusterCollection,
-        outputClusterCollection="HcalEndcapNClusters",
-        outputInfoCollection="HcalEndcapNClustersInfo",
-        logWeightBase=6.2,
-        samplingFraction=ce_hcal_sf)
-algorithms.append(ce_hcal_clreco)
-
-# Tracking
-trk_b_digi = TrackerDigi("trk_b_digi",
-        inputHitCollection="TrackerBarrelHits",
-        outputHitCollection="TrackerBarrelRawHits",
-        timeResolution=8)
-algorithms.append(trk_b_digi)
-
-trk_ec_digi = TrackerDigi("trk_ec_digi",
-        inputHitCollection="TrackerEndcapHits",
-        outputHitCollection="TrackerEndcapRawHits",
-        timeResolution=8)
-algorithms.append(trk_ec_digi)
-
-vtx_b_digi = TrackerDigi("vtx_b_digi",
-        inputHitCollection="VertexBarrelHits",
-        outputHitCollection="VertexBarrelRawHits",
-        timeResolution=8)
-algorithms.append(vtx_b_digi)
-
-vtx_ec_digi = TrackerDigi("vtx_ec_digi",
-        inputHitCollection="VertexEndcapHits",
-        outputHitCollection="VertexEndcapRawHits",
-        timeResolution=8)
-algorithms.append(vtx_ec_digi)
-
-gem_ec_digi = TrackerDigi("gem_ec_digi",
-        inputHitCollection="GEMTrackerEndcapHits",
-        outputHitCollection="GEMTrackerEndcapRawHits",
-        timeResolution=10)
-algorithms.append(gem_ec_digi)
-
-# Tracker and vertex reconstruction
-trk_b_reco = TrackerHitReconstruction("trk_b_reco",
-        inputHitCollection = trk_b_digi.outputHitCollection,
-        outputHitCollection="TrackerBarrelRecHits")
-algorithms.append(trk_b_reco)
-
-trk_ec_reco = TrackerHitReconstruction("trk_ec_reco",
-        inputHitCollection = trk_ec_digi.outputHitCollection,
-        outputHitCollection="TrackerEndcapRecHits")
-algorithms.append(trk_ec_reco)
-
-vtx_b_reco = TrackerHitReconstruction("vtx_b_reco",
-        inputHitCollection = vtx_b_digi.outputHitCollection,
-        outputHitCollection="VertexBarrelRecHits")
-algorithms.append(vtx_b_reco)
-
-vtx_ec_reco = TrackerHitReconstruction("vtx_ec_reco",
-        inputHitCollection = vtx_ec_digi.outputHitCollection,
-        outputHitCollection="VertexEndcapRecHits")
-algorithms.append(vtx_ec_reco)
-
-gem_ec_reco = TrackerHitReconstruction("gem_ec_reco",
-        inputHitCollection=gem_ec_digi.outputHitCollection,
-        outputHitCollection="GEMTrackerEndcapRecHits")
-algorithms.append(gem_ec_reco)
-
-# Tracking hit collector
-trk_hit_col = TrackingHitsCollector("trk_hit_col",
-        inputTrackingHits=[
-            str(trk_b_reco.outputHitCollection),
-            str(trk_ec_reco.outputHitCollection),
-            str(vtx_b_reco.outputHitCollection),
-            str(vtx_ec_reco.outputHitCollection),
-            str(gem_ec_reco.outputHitCollection) ],
-        trackingHits="trackingHits")
-algorithms.append(trk_hit_col)
-
-# Hit Source linker
-sourcelinker = TrackerSourceLinker("trk_srcslnkr",
-        inputHitCollection = trk_hit_col.trackingHits,
-        outputSourceLinks = "TrackSourceLinks",
-        outputMeasurements = "TrackMeasurements")
-algorithms.append(sourcelinker)
-
-## Track param init
-truth_trk_init = TrackParamTruthInit("truth_trk_init",
-        inputMCParticles="mcparticles",
-        outputInitialTrackParameters="InitTrackParams")
-algorithms.append(truth_trk_init)
-
-# Tracking algorithms
-trk_find_alg = TrackFindingAlgorithm("trk_find_alg",
-        inputSourceLinks = sourcelinker.outputSourceLinks,
-        inputMeasurements = sourcelinker.outputMeasurements,
-        inputInitialTrackParameters = truth_trk_init.outputInitialTrackParameters,
-        outputTrajectories = "trajectories")
-algorithms.append(trk_find_alg)
-
-parts_from_fit = ParticlesFromTrackFit("parts_from_fit",
-        inputTrajectories = trk_find_alg.outputTrajectories,
-        outputParticles = "outputParticles",
-        outputTrackParameters = "outputTrackParameters")
-algorithms.append(parts_from_fit)
-
-# Event building
-parts_with_truth_pid = ParticlesWithTruthPID("parts_with_truth_pid",
-        inputMCParticles = "mcparticles",
-        inputTrackParameters = parts_from_fit.outputTrackParameters,
-        outputParticles = "ReconstructedParticles")
-algorithms.append(parts_with_truth_pid)
-
-# DRICH
-drich_digi = PhotoMultiplierDigi("drich_digi",
-        inputHitCollection="DRICHHits",
-        outputHitCollection="DRICHRawHits",
-        quantumEfficiency=[(a*units.eV, b) for a, b in qe_data])
-algorithms.append(drich_digi)
-
-drich_reco = PhotoMultiplierReco("drich_reco",
-        inputHitCollection=drich_digi.outputHitCollection,
-        outputHitCollection="DRICHRecHits")
-algorithms.append(drich_reco)
-
-# FIXME
-#drich_cluster = PhotoRingClusters("drich_cluster",
-#        inputHitCollection=pmtreco.outputHitCollection,
-#        #inputTrackCollection="ReconstructedParticles",
-#        outputClusterCollection="ForwardRICHClusters")
-
-# MRICH
-mrich_digi = PhotoMultiplierDigi("mrich_digi",
-        inputHitCollection="MRICHHits",
-        outputHitCollection="MRICHRawHits",
-        quantumEfficiency=[(a*units.eV, b) for a, b in qe_data])
-algorithms.append(mrich_digi)
-
-mrich_reco = PhotoMultiplierReco("mrich_reco",
-        inputHitCollection=mrich_digi.outputHitCollection,
-        outputHitCollection="MRICHRecHits")
-algorithms.append(mrich_reco)
-
-# FIXME
-#mrich_cluster = PhotoRingClusters("drich_cluster",
-#        inputHitCollection=pmtreco.outputHitCollection,
-#        #inputTrackCollection="ReconstructedParticles",
-#        outputClusterCollection="ForwardRICHClusters")
-
-# Output
-podout = PodioOutput("out", filename=output_rec)
-podout.outputCommands = [
-        "keep *",
-        "drop *Hits",
-        "keep *Layers",
-        "keep *Clusters",
-        "drop *ProtoClusters",
-        "drop outputParticles",
-        "drop InitTrackParams",
-        ] + [ "drop " + c for c in sim_coll]
-algorithms.append(podout)
-
-ApplicationMgr(
-    TopAlg = algorithms,
-    EvtSel = 'NONE',
-    EvtMax   = n_events,
-    ExtSvc = [podioevent,geo_service],
-    OutputLevel=WARNING
- )
diff --git a/benchmarks/full/scripts/gen_particles.py b/benchmarks/full/scripts/gen_particles.py
deleted file mode 100644
index 0609714c5bd10b38230e82c6de12be6768be7b08..0000000000000000000000000000000000000000
--- a/benchmarks/full/scripts/gen_particles.py
+++ /dev/null
@@ -1,124 +0,0 @@
-import os
-from pyHepMC3 import HepMC3 as hm
-import numpy as np
-import argparse
-
-
-PARTICLES = {
-    "pion0": (111, 0.1349766),       # pi0
-    "pion+": (211, 0.13957018),      # pi+
-    "pion-": (-211, 0.13957018),     # pi-
-    "kaon0L": (130, 0.497648),       # K0L
-    "kaon0S": (310, 0.497648),       # K0S
-    "kaon0": (311, 0.497648),        # K0
-    "kaon+": (321, 0.493677),        # K+
-    "kaon-": (-321, 0.493677),       # K-
-    "proton": (2212, 0.938272),      # proton
-    "neutron": (2112, 0.939565),     # neutron
-    "electron": (11, 0.51099895e-3), # electron
-    "positron": (-11, 0.51099895e-3),# positron
-    "photon": (22, 0),               # photon
-}
-
-REGIONS = {
-    "farforward":  (1, 4),
-    "forward":     (3, 50),
-    "barrel":      (45, 135),
-    "backward":    (130, 177),
-    "farbackward": (176, 179),
-}
-
-def gen_event(p, theta, phi, pid, mass):
-    evt = hm.GenEvent(momentum_unit=hm.Units.MomentumUnit.GEV, length_unit=hm.Units.LengthUnit.MM)
-    # final state
-    state = 1
-    e0 = np.sqrt(p*p + mass*mass)
-    px = np.cos(phi)*np.sin(theta)
-    py = np.sin(phi)*np.sin(theta)
-    pz = np.cos(theta)
-
-    # beam
-    pbeam = hm.GenParticle(hm.FourVector(0, 0, 0, 0.938272), 2212, 4)
-    ebeam = hm.GenParticle(hm.FourVector(0, 0, e0, np.sqrt(e0*e0 + 0.511e-3*0.511e-3)), 11, 4)
-
-    # out particle
-    hout = hm.GenParticle(hm.FourVector(px*p, py*p, pz*p, e0), pid, state)
-
-    # vertex
-    vert = hm.GenVertex()
-    vert.add_particle_in(ebeam)
-    vert.add_particle_in(pbeam)
-    vert.add_particle_out(hout)
-    evt.add_vertex(vert)
-    return evt
-
-
-if __name__ == "__main__":
-    parser = argparse.ArgumentParser()
-
-    parser.add_argument('output', help='path to the output file')
-    parser.add_argument('-n', type=int, default=1000, dest='nev', help='number of events to generate')
-    parser.add_argument('-s', type=int, default=-1, dest='seed', help='seed for random generator')
-    parser.add_argument('--parray', type=str, default="", dest='parray',
-                        help='an array of momenta in GeV, separated by \",\"')
-    parser.add_argument('--pmin', type=float, default=8.0, dest='pmin', help='minimum momentum in GeV')
-    parser.add_argument('--pmax', type=float, default=100.0, dest='pmax', help='maximum momentum in GeV')
-    parser.add_argument('--angmin', type=float, default=0.0, dest='angmin', help='minimum angle in degree')
-    parser.add_argument('--angmax', type=float, default=20.0, dest='angmax', help='maximum angle in degree')
-    parser.add_argument('--phmin', type=float, default=0.0, dest='phmin', help='minimum angle in degree')
-    parser.add_argument('--phmax', type=float, default=360.0, dest='phmax', help='maximum angle in degree')
-    parser.add_argument('--particles', type=str, default='electron', dest='particles',
-                        help='particle names, support {}'.format(list(PARTICLES.keys())))
-    parser.add_argument('--regions', type=str, default='ignored', dest='regions',
-                        help='detector regions, support {}'.format(list(REGIONS.keys())))
-
-    args = parser.parse_args()
-
-    # random seed (< 0 will get it from enviroment variable 'SEED', or a system random number)
-    if args.seed < 0:
-        args.seed = os.environ.get('SEED', int.from_bytes(os.urandom(4), byteorder='big', signed=False))
-    print("Random seed is {}".format(args.seed))
-    np.random.seed(args.seed)
-
-    output = hm.WriterAscii(args.output);
-    if output.failed():
-        print("Cannot open file \"{}\"".format(args.output))
-        sys.exit(2)
-
-    # build particle info
-    parts = []
-    for pid in args.particles.split(','):
-        pid = pid.strip()
-        if pid not in PARTICLES.keys():
-            print('pid {:d} not found in dictionary, ignored.'.format(pid))
-            continue
-        parts.append(PARTICLES[pid])
-
-    # interpret region
-    (angmin, angmax) = (args.angmin, args.angmax)
-    for region in args.regions.split(','):
-        region = region.strip()
-        if region not in REGIONS.keys():
-            print('region {:d} not found in dictionary, ignored.'.format(pid))
-            continue
-        (angmin, angmax) = REGIONS[region]
-
-    # p values
-    pvals = np.random.uniform(args.pmin, args.pmax, args.nev) if not args.parray else \
-            np.random.choice([float(p.strip()) for p in args.parray.split(',')], args.nev)
-    thvals = np.random.uniform(angmin, angmax, args.nev)/180.*np.pi
-    phivals = np.random.uniform(args.phmin, args.phmax, args.nev)/180.*np.pi
-    partvals = [parts[i] for i in np.random.choice(len(parts), args.nev)]
-
-    count = 0
-    for p, theta, phi, (pid, mass) in zip(pvals, thvals, phivals, partvals):
-        if (count % 1000 == 0):
-            print("Generated {} events".format(count), end='\r')
-        evt = gen_event(p, theta, phi, pid, mass)
-        output.write_event(evt)
-        evt.clear()
-        count += 1
-
-    print("Generated {} events".format(args.nev))
-    output.close()
-