From 77442e2d736de2c2c02e1cdc5f4e8a23b096afa3 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin <dmitry.kalinkin@gmail.com> Date: Tue, 10 Oct 2023 18:02:09 -0400 Subject: [PATCH] add Snakefile --- Snakefile | 1 + benchmarks/barrel_ecal/Snakefile | 194 +++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100644 Snakefile create mode 100644 benchmarks/barrel_ecal/Snakefile diff --git a/Snakefile b/Snakefile new file mode 100644 index 00000000..3bd2c69c --- /dev/null +++ b/Snakefile @@ -0,0 +1 @@ +include: "benchmarks/barrel_ecal/Snakefile" diff --git a/benchmarks/barrel_ecal/Snakefile b/benchmarks/barrel_ecal/Snakefile new file mode 100644 index 00000000..c148c443 --- /dev/null +++ b/benchmarks/barrel_ecal/Snakefile @@ -0,0 +1,194 @@ +DETECTOR_PATH = os.environ["DETECTOR_PATH"] + + +rule emcal_barrel_particles_gen: + input: + script="benchmarks/barrel_ecal/scripts/emcal_barrel_particles_gen.cxx", + params: + JUGGLER_N_EVENTS = 100, + output: + "data/emcal_barrel_{PARTICLE}_energies{E_MIN}_{E_MAX}.hepmc", + shell: + """ +env \ + JUGGLER_GEN_FILE=../{output} \ + root -l -b -q '{input.script}+({params.JUGGLER_N_EVENTS}, {wildcards.E_MIN}, {wildcards.E_MAX}, \"{wildcards.PARTICLE}\")' +""" + + +rule emcal_barrel_particles: + input: + "data/emcal_barrel_{PARTICLE}_energies{E_MIN}_{E_MAX}.hepmc" + params: + JUGGLER_N_EVENTS = 100, + output: + "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}_energies{E_MIN}_{E_MAX}.edm4hep.root" + shell: + """ +ddsim \ + --runType batch \ + -v WARNING \ + --part.minimalKineticEnergy 0.5*GeV \ + --filter.tracker edep0 \ + --numberOfEvents {params.JUGGLER_N_EVENTS} \ + --compactFile """ + DETECTOR_PATH + """/{wildcards.DETECTOR_CONFIG}.xml \ + --inputFiles {input} \ + --outputFile {output} +""" + + +# This is needed to bridge snakemake rule files to "normal" benchmarks +rule emcal_barrel_particles_compat_normal: + input: + "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}_energies5.0_5.0.edm4hep.root", + wildcard_constraints: + PARTICLE="[^_]+", + output: + "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}.edm4hep.root", + shell: + """ +ln {input} {output} +""" + + +# This is needed to bridge snakemake rule files to "energy_scan" benchmarks +rule emcal_barrel_particles_compat_energy_scan: + input: + "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}_energies{E}_{E}.edm4hep.root", + wildcard_constraints: + PARTICLE="[^_]+", + output: + "{DETECTOR_CONFIG}/sim_output/energy_scan/{E}/sim_emcal_barrel_{PARTICLE}.edm4hep.root", + shell: + """ +ln {input} {output} +""" + + +rule emcal_barrel_particles_analysis: + input: + script="benchmarks/barrel_ecal/scripts/emcal_barrel_particles_analysis.cxx", + sim="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}.edm4hep.root", + wildcard_constraints: + PARTICLE="(electron|photon|piplus|piminus)", # avoid clash with "pions" + output: + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_calibration.json", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Ethr.png", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Ethr.pdf", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_nhits.png", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_nhits.pdf", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Esim.png", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Esim.pdf", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsam.png", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsam.pdf", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamImg.png", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamImg.pdf", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamScFi.png", + "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamScFi.pdf", + shell: + """ +cd {wildcards.DETECTOR_CONFIG} +root -l -b -q '../{input.script}+("{wildcards.PARTICLE}", true)' +""" + + +rule emcal_barrel_pions_analysis: + input: + script="benchmarks/barrel_ecal/scripts/emcal_barrel_pions_analysis.cxx", + sim="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_piplus_energies5.0_5.0.edm4hep.root", + output: + expand( + "{{DETECTOR_CONFIG}}/results/emcal_barrel_pions_{var_name}.{extension}", + var_name=["Ethr", "nhits", "Esim", "fsam", "pid"], + extension=["pdf", "png"], + ), + shell: + """ +cd {wildcards.DETECTOR_CONFIG} +root -l -b -q '../{input.script}+("../{input.sim}")' +""" + + +rule emcal_barrel_pi0_analysis: + input: + script="benchmarks/barrel_ecal/scripts/emcal_barrel_pi0_analysis.cxx", + sim="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_pi0_energies5.0_5.0.edm4hep.root", + fsam="{DETECTOR_CONFIG}/results/emcal_barrel_electron_calibration.json", + output: + expand( + "{{DETECTOR_CONFIG}}/results/emcal_barrel_pi0_{var_name}.{extension}", + var_name=["Ethr", "nhits", "Esim", "dE_rel"], + extension=["pdf", "png"], + ), + "{DETECTOR_CONFIG}/results/Barrel_emcal_pi0.json" + shell: + """ +cd {wildcards.DETECTOR_CONFIG} +root -l -b -q '../{input.script}+("../{input.sim}")' +""" + + +ENERGY_SCAN_ENERGIES = [0.5, 1., 2., 5., 10.] +rule emcal_energy_scan: + input: + # Require all simulations produced for this rule + expand("{{DETECTOR_CONFIG}}/sim_output/energy_scan/{energy}/sim_emcal_barrel_{{PARTICLE}}.edm4hep.root", energy=ENERGY_SCAN_ENERGIES), + output: + "{DETECTOR_CONFIG}/sim_output/emcal_barrel_energy_scan_points_{PARTICLE}.txt", + run: + with open(output[0], "wt") as fp: + for energy in ENERGY_SCAN_ENERGIES: + fp.write(f"{energy}\n") + + +rule emcal_barrel_particles_energy_scan_analysis: + input: + script="benchmarks/barrel_ecal/scripts/emcal_barrel_energy_scan_analysis.cxx", + scan_points="{DETECTOR_CONFIG}/sim_output/emcal_barrel_energy_scan_points_{PARTICLE}.txt", + output: + "{DETECTOR_CONFIG}/results/energy_scan/emcal_barrel_{PARTICLE}_fsam_scan.png", + "{DETECTOR_CONFIG}/results/energy_scan/emcal_barrel_{PARTICLE}_fsam_scan_res.png", + expand( + "{{DETECTOR_CONFIG}}/results/energy_scan/{energy}/emcal_barrel_{{PARTICLE}}_{plot}.png", + energy=ENERGY_SCAN_ENERGIES, + plot=["Esim_layer", "Layer_nodep", "Layer_Esim_mean", "Ethr", "nhits", "Esim", "fsam"], + ), + shell: + """ +cd {wildcards.DETECTOR_CONFIG} +root -l -b -q '../{input.script}+("{wildcards.PARTICLE}")' +""" + + +rule emcal_barrel_pion_rejection_analysis: + input: + script="benchmarks/barrel_ecal/scripts/emcal_barrel_pion_rejection_analysis.cxx", + electron="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_electron_energies1.0_18.0.edm4hep.root", + piminus="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_piminus_energies1.0_18.0.edm4hep.root", + output: + "{DETECTOR_CONFIG}/results/emcal_barrel_pion_rej_RatioRej.png", + "{DETECTOR_CONFIG}/results/Barrel_emcal_pion_rej.json", + expand( + "{{DETECTOR_CONFIG}}/results/emcal_barrel_pion_rej_uncut_comb_{var_save}.png", + var_save=["Esim", "EsimTot", "EDep6", "EDep6OverP", "pT", "eta", "EsimScFi", "EsimScFiOverP"], + ), + expand( + "{{DETECTOR_CONFIG}}/results/emcal_barrel_pion_rej_uncut_comb_E{i}Eta{j}.png", + i=range(6), + j=range(2), + ), + expand( + "{{DETECTOR_CONFIG}}/results/emcal_barrel_pion_rej_{tag}_E{energy}_eta{eta_bin}.{extension}", + energy=[5, 10, 18], + eta_bin=range(2, 4), + tag=( + ["cut_mom_ele", "cut_mom_pim", "cut_ratio_pim"] + + sum([[f"cut_{var}_ele", f"cut_{var}_pim", f"cut_{var}_comb"] for var in ["pT", "EDep6OverP"]], []) + ), + extension=["pdf", "png"], + ), + shell: + """ +cd {wildcards.DETECTOR_CONFIG} +root -l -b -q '../{input.script}+("../{input.electron}", "../{input.piminus}")' +""" -- GitLab