Warning, /detector_benchmarks/benchmarks/barrel_ecal/Snakefile is written in an unsupported language. File is not indexed.
0001 DETECTOR_PATH = os.environ["DETECTOR_PATH"]
0002
0003
0004 rule emcal_barrel_particles_gen:
0005 input:
0006 workflow.source_path("scripts/emcal_barrel_common_functions.h"),
0007 script=workflow.source_path("scripts/emcal_barrel_particles_gen.cxx"),
0008 params:
0009 JUGGLER_N_EVENTS = 100,
0010 output:
0011 "data/emcal_barrel_{PARTICLE}_energies{E_MIN}_{E_MAX}.hepmc",
0012 shell:
0013 """
0014 root -l -b -q '{input.script}+("{output}", {params.JUGGLER_N_EVENTS}, {wildcards.E_MIN}, {wildcards.E_MAX}, "{wildcards.PARTICLE}")'
0015 """
0016
0017
0018 rule emcal_barrel_particles:
0019 input:
0020 hepmc="data/emcal_barrel_{PARTICLE}_energies{E_MIN}_{E_MAX}.hepmc",
0021 geometry_lib=find_epic_libraries(),
0022 params:
0023 JUGGLER_N_EVENTS = 100,
0024 DD4HEP_HASH=get_spack_package_hash("dd4hep"),
0025 NPSIM_HASH=get_spack_package_hash("npsim"),
0026 output:
0027 "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}_energies{E_MIN}_{E_MAX}.edm4hep.root"
0028 cache: True
0029 shell:
0030 """
0031 set -m # monitor mode to prevent lingering processes
0032 exec npsim \
0033 --runType batch \
0034 -v WARNING \
0035 --part.minimalKineticEnergy 0.5*GeV \
0036 --filter.tracker edep0 \
0037 --numberOfEvents {params.JUGGLER_N_EVENTS} \
0038 --compactFile """ + DETECTOR_PATH + """/{wildcards.DETECTOR_CONFIG}.xml \
0039 --inputFiles {input.hepmc} \
0040 --outputFile {output}
0041 """
0042
0043
0044 # This is needed to bridge snakemake rule files to "normal" benchmarks
0045 rule emcal_barrel_particles_compat_normal:
0046 input:
0047 "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}_energies5.0_5.0.edm4hep.root",
0048 wildcard_constraints:
0049 PARTICLE="[^_]+",
0050 output:
0051 "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}.edm4hep.root",
0052 shell:
0053 """
0054 ln {input} {output}
0055 """
0056
0057
0058 # This is needed to bridge snakemake rule files to "energy_scan" benchmarks
0059 rule emcal_barrel_particles_compat_energy_scan:
0060 input:
0061 "{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}_energies{E}_{E}.edm4hep.root",
0062 wildcard_constraints:
0063 PARTICLE="[^_]+",
0064 output:
0065 "{DETECTOR_CONFIG}/sim_output/energy_scan/{E}/sim_emcal_barrel_{PARTICLE}.edm4hep.root",
0066 shell:
0067 """
0068 ln {input} {output}
0069 """
0070
0071
0072 rule emcal_barrel_particles_analysis:
0073 input:
0074 workflow.source_path("scripts/emcal_barrel_common_functions.h"),
0075 script=workflow.source_path("scripts/emcal_barrel_particles_analysis.cxx"),
0076 sim="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_{PARTICLE}.edm4hep.root",
0077 wildcard_constraints:
0078 PARTICLE="(electron|photon|piplus|piminus)", # avoid clash with "pions"
0079 output:
0080 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_calibration.json",
0081 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Ethr.png",
0082 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Ethr.pdf",
0083 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_nhits.png",
0084 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_nhits.pdf",
0085 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Esim.png",
0086 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_Esim.pdf",
0087 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsam.png",
0088 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsam.pdf",
0089 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamImg.png",
0090 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamImg.pdf",
0091 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamScFi.png",
0092 "{DETECTOR_CONFIG}/results/emcal_barrel_{PARTICLE}_fsamScFi.pdf",
0093 shell:
0094 """
0095 cd {wildcards.DETECTOR_CONFIG}
0096 root -l -b -q '{input.script}+("{wildcards.PARTICLE}", true)'
0097 """
0098
0099
0100 rule emcal_barrel_pions_analysis:
0101 input:
0102 script=workflow.source_path("scripts/emcal_barrel_pions_analysis.cxx"),
0103 sim="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_piplus_energies5.0_5.0.edm4hep.root",
0104 output:
0105 expand(
0106 "{{DETECTOR_CONFIG}}/results/emcal_barrel_pions_{var_name}.{extension}",
0107 var_name=["Ethr", "nhits", "Esim", "fsam", "pid"],
0108 extension=["pdf", "png"],
0109 ),
0110 shell:
0111 """
0112 cd {wildcards.DETECTOR_CONFIG}
0113 root -l -b -q '{input.script}+("../{input.sim}")'
0114 """
0115
0116
0117 rule emcal_barrel_pi0_analysis:
0118 input:
0119 script=workflow.source_path("scripts/emcal_barrel_pi0_analysis.cxx"),
0120 sim="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_pi0_energies5.0_5.0.edm4hep.root",
0121 fsam="{DETECTOR_CONFIG}/results/emcal_barrel_electron_calibration.json",
0122 output:
0123 expand(
0124 "{{DETECTOR_CONFIG}}/results/emcal_barrel_pi0_{var_name}.{extension}",
0125 var_name=["Ethr", "nhits", "Esim", "dE_rel"],
0126 extension=["pdf", "png"],
0127 ),
0128 "{DETECTOR_CONFIG}/results/Barrel_emcal_pi0.json"
0129 shell:
0130 """
0131 cd {wildcards.DETECTOR_CONFIG}
0132 root -l -b -q '{input.script}+("../{input.sim}")'
0133 """
0134
0135
0136 ENERGY_SCAN_ENERGIES = [0.5, 1., 2., 5., 10.]
0137 rule emcal_energy_scan:
0138 input:
0139 # Require all simulations produced for this rule
0140 expand("{{DETECTOR_CONFIG}}/sim_output/energy_scan/{energy}/sim_emcal_barrel_{{PARTICLE}}.edm4hep.root", energy=ENERGY_SCAN_ENERGIES),
0141 output:
0142 "{DETECTOR_CONFIG}/sim_output/emcal_barrel_energy_scan_points_{PARTICLE}.txt",
0143 run:
0144 with open(output[0], "wt") as fp:
0145 for energy in ENERGY_SCAN_ENERGIES:
0146 fp.write(f"{energy}\n")
0147
0148
0149 rule emcal_barrel_particles_energy_scan_analysis:
0150 input:
0151 script=workflow.source_path("scripts/emcal_barrel_energy_scan_analysis.cxx"),
0152 scan_points="{DETECTOR_CONFIG}/sim_output/emcal_barrel_energy_scan_points_{PARTICLE}.txt",
0153 output:
0154 "{DETECTOR_CONFIG}/results/energy_scan/emcal_barrel_{PARTICLE}_fsam_scan.png",
0155 "{DETECTOR_CONFIG}/results/energy_scan/emcal_barrel_{PARTICLE}_fsam_scan_res.png",
0156 expand(
0157 "{{DETECTOR_CONFIG}}/results/energy_scan/{energy}/emcal_barrel_{{PARTICLE}}_{plot}.png",
0158 energy=ENERGY_SCAN_ENERGIES,
0159 plot=["Esim_layer", "Layer_nodep", "Layer_Esim_mean", "Ethr", "nhits", "Esim", "fsam"],
0160 ),
0161 shell:
0162 """
0163 cd {wildcards.DETECTOR_CONFIG}
0164 root -l -b -q '{input.script}+("{wildcards.PARTICLE}")'
0165 """
0166
0167
0168 rule emcal_barrel_pion_rejection_analysis:
0169 input:
0170 workflow.source_path("scripts/emcal_barrel_common_functions.h"),
0171 script=workflow.source_path("scripts/emcal_barrel_pion_rejection_analysis.cxx"),
0172 electron="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_electron_energies1.0_18.0.edm4hep.root",
0173 piminus="{DETECTOR_CONFIG}/sim_output/sim_emcal_barrel_piminus_energies1.0_18.0.edm4hep.root",
0174 output:
0175 "{DETECTOR_CONFIG}/results/emcal_barrel_pion_rej_RatioRej.png",
0176 "{DETECTOR_CONFIG}/results/Barrel_emcal_pion_rej.json",
0177 expand(
0178 "{{DETECTOR_CONFIG}}/results/emcal_barrel_pion_rej_uncut_comb_{var_save}.png",
0179 var_save=["Esim", "EsimTot", "EDep6", "EDep6OverP", "pT", "eta", "EsimScFi", "EsimScFiOverP"],
0180 ),
0181 expand(
0182 "{{DETECTOR_CONFIG}}/results/emcal_barrel_pion_rej_uncut_comb_E{i}Eta{j}.png",
0183 i=range(6),
0184 j=range(2),
0185 ),
0186 expand(
0187 "{{DETECTOR_CONFIG}}/results/emcal_barrel_pion_rej_{tag}_E{energy}_eta{eta_bin}.{extension}",
0188 energy=[5, 10, 18],
0189 eta_bin=range(2, 4),
0190 tag=(
0191 ["cut_mom_ele", "cut_mom_pim", "cut_ratio_pim"]
0192 + sum([[f"cut_{var}_ele", f"cut_{var}_pim", f"cut_{var}_comb"] for var in ["pT", "EDep6OverP"]], [])
0193 ),
0194 extension=["pdf", "png"],
0195 ),
0196 shell:
0197 """
0198 cd {wildcards.DETECTOR_CONFIG}
0199 root -l -b -q '{input.script}+g("../{input.electron}", "../{input.piminus}")'
0200 """