diff --git a/benchmarks/femc_electron/Snakefile b/benchmarks/femc_electron/Snakefile
index 13e8b7371e6a355c21eb3819eef1465b89878966..90a0c40fba576b03999a4ddcb55593cf03a28373 100644
--- a/benchmarks/femc_electron/Snakefile
+++ b/benchmarks/femc_electron/Snakefile
@@ -8,12 +8,12 @@ def get_n_events(wildcards):
 rule femc_electron_generate:
     input:
         script="benchmarks/femc_electron/analysis/gen_particles.cxx",
+    output:
+        GEN_FILE="sim_output/femc_electron/e-_{P}GeV.hepmc",
     params:
         N_EVENTS=get_n_events,
         th_max=28,
-        th_min=2.0
-    output:
-        GEN_FILE="sim_output/femc_electron/e-_{P}GeV.hepmc"
+        th_min=2.0,
     shell:
         """
 mkdir -p sim_output/femc_electron
@@ -22,17 +22,24 @@ root -l -b -q '{input.script}({params.N_EVENTS},"{output.GEN_FILE}", "e-", {para
 
 rule femc_electron_simulate:
     input:
-        GEN_FILE="sim_output/femc_electron/e-_{P}GeV.hepmc"
+        GEN_FILE="sim_output/femc_electron/e-_{P}GeV.hepmc",
+        warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
+        geometry_lib=find_epic_libraries(),
+    output:
+        SIM_FILE="sim_output/femc_electron/{DETECTOR_CONFIG}_sim_e-_{P}GeV.edm4hep.root",
     params:
         N_EVENTS=get_n_events,
-        PHYSICS_LIST="FTFP_BERT"
-    output:
-        SIM_FILE="sim_output/femc_electron/{DETECTOR_CONFIG}_sim_e-_{P}GeV.edm4hep.root"
+        PHYSICS_LIST="FTFP_BERT",
+        DETECTOR_PATH=os.environ["DETECTOR_PATH"],
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        DD4HEP_HASH=get_spack_package_hash("dd4hep"),
+        NPSIM_HASH=get_spack_package_hash("npsim"),
+    cache: True
     shell:
         """
 # Running simulation
 npsim \
-   --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
+   --compactFile {params.DETECTOR_PATH}/{params.DETECTOR_CONFIG}.xml \
    --numberOfEvents {params.N_EVENTS} \
    --physicsList {params.PHYSICS_LIST} \
    --inputFiles {input.GEN_FILE} \
@@ -41,14 +48,18 @@ npsim \
 
 rule femc_electron_recon:
     input:
-        SIM_FILE="sim_output/femc_electron/{DETECTOR_CONFIG}_sim_e-_{P}GeV.edm4hep.root"
+        SIM_FILE="sim_output/femc_electron/{DETECTOR_CONFIG}_sim_e-_{P}GeV.edm4hep.root",
     output:
-        REC_FILE="sim_output/femc_electron/{DETECTOR_CONFIG}_rec_e-_{P}GeV.edm4eic.root"
+        REC_FILE="sim_output/femc_electron/{DETECTOR_CONFIG}_rec_e-_{P}GeV.edm4eic.root",
     params:
         N_EVENTS=get_n_events,
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        EICRECON_HASH=get_spack_package_hash("eicrecon"),
+    cache: True
     shell:
         """
-eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Pdd4hep:xml_files=$DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPInsertRecHits,EcalEndcapPClusters -Pjana:nevents={params.N_EVENTS}
+env DETECTOR_CONFIG={params.DETECTOR_CONFIG} \
+  eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPInsertRecHits,EcalEndcapPClusters -Pjana:nevents={params.N_EVENTS}
 """
 
 rule femc_electron_analysis:
diff --git a/benchmarks/femc_photon/Snakefile b/benchmarks/femc_photon/Snakefile
index d92a3cd1fde6ff20253071ef709a0c9125572a5f..d85b8132e4f9dff2c06f61ea8c6e8b4a1ca7758a 100644
--- a/benchmarks/femc_photon/Snakefile
+++ b/benchmarks/femc_photon/Snakefile
@@ -8,12 +8,12 @@ def get_n_events(wildcards):
 rule femc_photon_generate:
     input:
         script="benchmarks/femc_photon/analysis/gen_particles.cxx",
+    output:
+        GEN_FILE="sim_output/femc_photon/photon_{P}GeV.hepmc",
     params:
         N_EVENTS=get_n_events,
         th_max=28,
-        th_min=2.0
-    output:
-        GEN_FILE="sim_output/femc_photon/photon_{P}GeV.hepmc"
+        th_min=2.0,
     shell:
         """
 mkdir -p sim_output/femc_photon
@@ -22,17 +22,24 @@ root -l -b -q '{input.script}({params.N_EVENTS},"{output.GEN_FILE}", "gamma", {p
 
 rule femc_photon_simulate:
     input:
-        GEN_FILE="sim_output/femc_photon/photon_{P}GeV.hepmc"
+        GEN_FILE="sim_output/femc_photon/photon_{P}GeV.hepmc",
+        warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
+        geometry_lib=find_epic_libraries(),
+    output:
+        SIM_FILE="sim_output/femc_photon/{DETECTOR_CONFIG}_sim_photon_{P}GeV.edm4hep.root",
     params:
         N_EVENTS=get_n_events,
-        PHYSICS_LIST="FTFP_BERT"
-    output:
-        SIM_FILE="sim_output/femc_photon/{DETECTOR_CONFIG}_sim_photon_{P}GeV.edm4hep.root"
+        PHYSICS_LIST="FTFP_BERT",
+        DETECTOR_PATH=os.environ["DETECTOR_PATH"],
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        DD4HEP_HASH=get_spack_package_hash("dd4hep"),
+        NPSIM_HASH=get_spack_package_hash("npsim"),
+    cache: True
     shell:
         """
 # Running simulation
 npsim \
-   --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
+   --compactFile {params.DETECTOR_PATH}/{params.DETECTOR_CONFIG}.xml \
    --numberOfEvents {params.N_EVENTS} \
    --physicsList {params.PHYSICS_LIST} \
    --inputFiles {input.GEN_FILE} \
@@ -46,9 +53,13 @@ rule femc_photon_recon:
         REC_FILE="sim_output/femc_photon/{DETECTOR_CONFIG}_rec_photon_{P}GeV.edm4eic.root"
     params:
         N_EVENTS=get_n_events,
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        EICRECON_HASH=get_spack_package_hash("eicrecon"),
+    cache: True
     shell:
         """
-eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Pdd4hep:xml_files=$DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPInsertRecHits,EcalEndcapPClusters -Pjana:nevents={params.N_EVENTS}
+env DETECTOR_CONFIG={params.DETECTOR_CONFIG} \
+  eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPInsertRecHits,EcalEndcapPClusters -Pjana:nevents={params.N_EVENTS}
 """
 
 rule femc_photon_analysis:
diff --git a/benchmarks/femc_pi0/Snakefile b/benchmarks/femc_pi0/Snakefile
index 9b8713abc8436afb20a3cdf66167030e3d0547ff..05902510ec21a4c8a5aac8a79cc412893cb6eee7 100644
--- a/benchmarks/femc_pi0/Snakefile
+++ b/benchmarks/femc_pi0/Snakefile
@@ -8,12 +8,12 @@ def get_n_events(wildcards):
 rule femc_pi0_generate:
     input:
         script="benchmarks/femc_pi0/analysis/gen_particles.cxx",
+    output:
+        GEN_FILE="sim_output/femc_pi0/pi0_{P}GeV.hepmc",
     params:
         N_EVENTS=get_n_events,
         th_max=28,
-        th_min=2.0
-    output:
-        GEN_FILE="sim_output/femc_pi0/pi0_{P}GeV.hepmc"
+        th_min=2.0,
     shell:
         """
 mkdir -p sim_output/femc_pi0
@@ -22,17 +22,24 @@ root -l -b -q '{input.script}({params.N_EVENTS},"{output.GEN_FILE}", "pi0", {par
 
 rule femc_pi0_simulate:
     input:
-        GEN_FILE="sim_output/femc_pi0/pi0_{P}GeV.hepmc"
+        GEN_FILE="sim_output/femc_pi0/pi0_{P}GeV.hepmc",
+        warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
+        geometry_lib=find_epic_libraries(),
     params:
         N_EVENTS=get_n_events,
-        PHYSICS_LIST="FTFP_BERT"
+        PHYSICS_LIST="FTFP_BERT",
+        DETECTOR_PATH=os.environ["DETECTOR_PATH"],
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        DD4HEP_HASH=get_spack_package_hash("dd4hep"),
+        NPSIM_HASH=get_spack_package_hash("npsim"),
+    cache: True
     output:
         SIM_FILE="sim_output/femc_pi0/{DETECTOR_CONFIG}_sim_pi0_{P}GeV.edm4hep.root"
     shell:
         """
 # Running simulation
 npsim \
-   --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
+   --compactFile {params.DETECTOR_PATH}/{params.DETECTOR_CONFIG}.xml \
    --numberOfEvents {params.N_EVENTS} \
    --physicsList {params.PHYSICS_LIST} \
    --inputFiles {input.GEN_FILE} \
@@ -46,9 +53,13 @@ rule femc_pi0_recon:
         REC_FILE="sim_output/femc_pi0/{DETECTOR_CONFIG}_rec_pi0_{P}GeV.edm4eic.root"
     params:
         N_EVENTS=get_n_events,
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        EICRECON_HASH=get_spack_package_hash("eicrecon"),
+    cache: True
     shell:
         """
-eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Pdd4hep:xml_files=$DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPInsertRecHits,EcalEndcapPClusters -Pjana:nevents={params.N_EVENTS}
+env DETECTOR_CONFIG={params.DETECTOR_CONFIG} \
+  eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPInsertRecHits,EcalEndcapPClusters -Pjana:nevents={params.N_EVENTS}
 """
 
 rule femc_pi0_analysis:
diff --git a/benchmarks/insert_muon/Snakefile b/benchmarks/insert_muon/Snakefile
index ca647c59a85266b0a62bb7fa08505a6f5ef8b3f6..fe9ce0ae3986e76ac7e968e8024a0b591cb6c076 100644
--- a/benchmarks/insert_muon/Snakefile
+++ b/benchmarks/insert_muon/Snakefile
@@ -1,12 +1,12 @@
 rule insert_muon_generate:
     input:
         script="benchmarks/insert_muon/analysis/gen_particles.cxx",
+    output:
+        GEN_FILE="sim_output/insert_muon/mu-_{P}GeV.hepmc",
     params:
         NEVENTS_GEN=5000,
         th_max=7.0,
-        th_min=1.7
-    output:
-        GEN_FILE="sim_output/insert_muon/mu-_{P}GeV.hepmc"
+        th_min=1.7,
     shell:
         """
 root -l -b -q '{input.script}({params.NEVENTS_GEN},"{output.GEN_FILE}", "mu-", {params.th_min}, {params.th_max}, 0., 360., {wildcards.P})'
@@ -16,16 +16,22 @@ rule insert_muon_simulate:
     input:
         GEN_FILE="sim_output/insert_muon/mu-_{P}GeV.hepmc",
         warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
-    params:
-        PHYSICS_LIST="FTFP_BERT"
+        geometry_lib=find_epic_libraries(),
     output:
-        SIM_FILE="sim_output/insert_muon/{DETECTOR_CONFIG}_sim_mu-_{P}GeV_{INDEX}.edm4hep.root"
+        SIM_FILE="sim_output/insert_muon/{DETECTOR_CONFIG}_sim_mu-_{P}GeV_{INDEX}.edm4hep.root",
+    params:
+        PHYSICS_LIST="FTFP_BERT",
+        DETECTOR_PATH=os.environ["DETECTOR_PATH"],
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        DD4HEP_HASH=get_spack_package_hash("dd4hep"),
+        NPSIM_HASH=get_spack_package_hash("npsim"),
+    cache: True
     shell:
         """
 NEVENTS_SIM=1000
 # Running simulation
 npsim \
-   --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
+   --compactFile {params.DETECTOR_PATH}/{params.DETECTOR_CONFIG}.xml \
    --skipNEvents $(( $NEVENTS_SIM * {wildcards.INDEX} )) \
    --numberOfEvents $NEVENTS_SIM \
    --physicsList {params.PHYSICS_LIST} \
@@ -35,13 +41,18 @@ npsim \
 
 rule insert_muon_recon:
     input:
-        SIM_FILE="sim_output/insert_muon/{DETECTOR_CONFIG}_sim_mu-_{P}GeV_{INDEX}.edm4hep.root"
+        SIM_FILE="sim_output/insert_muon/{DETECTOR_CONFIG}_sim_mu-_{P}GeV_{INDEX}.edm4hep.root",
     output:
-        REC_FILE="sim_output/insert_muon/{DETECTOR_CONFIG}_rec_mu-_{P}GeV_{INDEX}.edm4hep.root"
+        REC_FILE="sim_output/insert_muon/{DETECTOR_CONFIG}_rec_mu-_{P}GeV_{INDEX}.edm4hep.root",
+    params:
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        EICRECON_HASH=get_spack_package_hash("eicrecon"),
+    cache: True
     shell:
         """
 NEVENTS_REC=1000
-eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Pdd4hep:xml_files=$DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters  -Pjana:nevents=$NEVENTS_REC
+env DETECTOR_CONFIG={params.DETECTOR_CONFIG} \
+  eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters  -Pjana:nevents=$NEVENTS_REC
 """
 
 rule insert_muon_analysis:
diff --git a/benchmarks/insert_neutron/Snakefile b/benchmarks/insert_neutron/Snakefile
index 48bf47ed83f4fa8ac294e1929fb66caadfbc628b..98cc5a28ce173a7f7309b1d53829376300d8ffb1 100644
--- a/benchmarks/insert_neutron/Snakefile
+++ b/benchmarks/insert_neutron/Snakefile
@@ -1,12 +1,12 @@
 rule insert_neutron_generate:
     input:
         script="benchmarks/insert_neutron/analysis/gen_particles.cxx",
+    output:
+        GEN_FILE="sim_output/insert_neutron/neutron_{P}GeV.hepmc",
     params:
         NEVENTS_GEN=1000,
         th_max=5.7,
-        th_min=2.0
-    output:
-        GEN_FILE="sim_output/insert_neutron/neutron_{P}GeV.hepmc"
+        th_min=2.0,
     shell:
         """
 mkdir -p sim_output/insert_neutron
@@ -17,16 +17,22 @@ rule insert_neutron_simulate:
     input:
         GEN_FILE="sim_output/insert_neutron/neutron_{P}GeV.hepmc",
         warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
-    params:
-        PHYSICS_LIST="FTFP_BERT"
+        geometry_lib=find_epic_libraries(),
     output:
-        SIM_FILE="sim_output/insert_neutron/{DETECTOR_CONFIG}_sim_neutron_{P}GeV_{INDEX}.edm4hep.root"
+        SIM_FILE="sim_output/insert_neutron/{DETECTOR_CONFIG}_sim_neutron_{P}GeV_{INDEX}.edm4hep.root",
+    params:
+        PHYSICS_LIST="FTFP_BERT",
+        DETECTOR_PATH=os.environ["DETECTOR_PATH"],
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        DD4HEP_HASH=get_spack_package_hash("dd4hep"),
+        NPSIM_HASH=get_spack_package_hash("npsim"),
+    cache: True
     shell:
         """
 NEVENTS_SIM=200
 # Running simulation
 npsim \
-   --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
+   --compactFile {params.DETECTOR_PATH}/{params.DETECTOR_CONFIG}.xml \
    --skipNEvents $(( $NEVENTS_SIM * {wildcards.INDEX} )) \
    --numberOfEvents $NEVENTS_SIM \
    --physicsList {params.PHYSICS_LIST} \
@@ -36,13 +42,18 @@ npsim \
 
 rule insert_neutron_recon:
     input:
-        SIM_FILE="sim_output/insert_neutron/{DETECTOR_CONFIG}_sim_neutron_{P}GeV_{INDEX}.edm4hep.root"
+        SIM_FILE="sim_output/insert_neutron/{DETECTOR_CONFIG}_sim_neutron_{P}GeV_{INDEX}.edm4hep.root",
     output:
-        REC_FILE="sim_output/insert_neutron/{DETECTOR_CONFIG}_rec_neutron_{P}GeV_{INDEX}.edm4eic.root"
+        REC_FILE="sim_output/insert_neutron/{DETECTOR_CONFIG}_rec_neutron_{P}GeV_{INDEX}.edm4eic.root",
+    params:
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        EICRECON_HASH=get_spack_package_hash("eicrecon"),
+    cache: True
     shell:
         """
 NEVENTS_REC=200
-eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Pdd4hep:xml_files=$DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters  -Pjana:nevents=$NEVENTS_REC
+env DETECTOR_CONFIG={params.DETECTOR_CONFIG} \
+  eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters  -Pjana:nevents=$NEVENTS_REC
 """
 
 rule insert_neutron_analysis:
diff --git a/benchmarks/insert_tau/Snakefile b/benchmarks/insert_tau/Snakefile
index 57e4390e301c51bb04ac0d986bba7360cd0f3117..ffc9c49147dd5a404ab43fbd75621c1f32e098ce 100644
--- a/benchmarks/insert_tau/Snakefile
+++ b/benchmarks/insert_tau/Snakefile
@@ -7,12 +7,12 @@ def get_n_events(wildcards):
 rule insert_tau_generate:
     input:
         script="benchmarks/insert_tau/analysis/gen_particles.cxx",
+    output:
+        GEN_FILE="sim_output/insert_tau/tau-_{P}GeV.hepmc",
     params:
         N_EVENTS=get_n_events,
         th_max=7.0,
         th_min=1.7,
-    output:
-        GEN_FILE="sim_output/insert_tau/tau-_{P}GeV.hepmc",
     shell:
         """
 root -l -b -q '{input.script}({params.N_EVENTS},"{output.GEN_FILE}", "tau-", {params.th_min}, {params.th_max}, 0., 360., {wildcards.P})'
@@ -22,16 +22,22 @@ rule insert_tau_simulate:
     input:
         GEN_FILE="sim_output/insert_tau/tau-_{P}GeV.hepmc",
         warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
+        geometry_lib=find_epic_libraries(),
+    output:
+        SIM_FILE="sim_output/insert_tau/{DETECTOR_CONFIG}_sim_tau-_{P}GeV_{INDEX}.edm4hep.root",
     params:
         N_EVENTS=get_n_events,
         PHYSICS_LIST="FTFP_BERT",
-    output:
-        SIM_FILE="sim_output/insert_tau/{DETECTOR_CONFIG}_sim_tau-_{P}GeV_{INDEX}.edm4hep.root"
+        DETECTOR_PATH=os.environ["DETECTOR_PATH"],
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        DD4HEP_HASH=get_spack_package_hash("dd4hep"),
+        NPSIM_HASH=get_spack_package_hash("npsim"),
+    cache: True
     shell:
         """
 # Running simulation
 npsim \
-   --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
+   --compactFile {params.DETECTOR_PATH}/{params.DETECTOR_CONFIG}.xml \
    --numberOfEvents {params.N_EVENTS} \
    --skipNEvents $(( {params.N_EVENTS} * {wildcards.INDEX} )) \
    --physicsList {params.PHYSICS_LIST} \
@@ -42,13 +48,17 @@ npsim \
 rule insert_tau_recon:
     input:
         SIM_FILE="sim_output/insert_tau/{DETECTOR_CONFIG}_sim_tau-_{P}GeV_{INDEX}.edm4hep.root",
-    params:
-        N_EVENTS=get_n_events,
     output:
         REC_FILE="sim_output/insert_tau/{DETECTOR_CONFIG}_rec_tau-_{P}GeV_{INDEX}.edm4eic.root",
+    params:
+        N_EVENTS=get_n_events,
+        DETECTOR_CONFIG=lambda wildcards: wildcards.DETECTOR_CONFIG,
+        EICRECON_HASH=get_spack_package_hash("eicrecon"),
+    cache: True
     shell:
         """
-eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Pdd4hep:xml_files=$DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPClusters,LFHCALClusters  -Pjana:nevents={params.N_EVENTS}
+env DETECTOR_CONFIG={params.DETECTOR_CONFIG} \
+  eicrecon {input.SIM_FILE} -Ppodio:output_file={output.REC_FILE} -Ppodio:output_collections=MCParticles,HcalEndcapPInsertRecHits,HcalEndcapPInsertClusters,HcalEndcapPInsertSubcellHits,EcalEndcapPInsertRecHits,EcalEndcapPInsertClusters,EcalEndcapPClusters,LFHCALClusters  -Pjana:nevents={params.N_EVENTS}
 """
 
 rule insert_tau_analysis: