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