Warning, /detector_benchmarks/benchmarks/backwards_ecal/Snakefile is written in an unsupported language. File is not indexed.
0001 def get_n_events(wildcards):
0002 energy = float(wildcards.ENERGY.replace("GeV", "").replace("MeV", "e-3"))
0003 n_events = 1000 if wildcards.PARTICLE == "e-" else 2000
0004 n_events = int(n_events // (energy ** 0.5))
0005 return n_events
0006
0007
0008 rule backwards_ecal_sim:
0009 input:
0010 steering_file=ancient("EPIC/EVGEN/SINGLE/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/{PARTICLE}_{ENERGY}_{PHASE_SPACE}.steer"),
0011 warmup="warmup/{DETECTOR_CONFIG}.edm4hep.root",
0012 output:
0013 "sim_output/backwards_ecal/{DETECTOR_CONFIG}/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/{PARTICLE}_{ENERGY}_{PHASE_SPACE}.{INDEX}.edm4hep.root",
0014 log:
0015 "sim_output/backwards_ecal/{DETECTOR_CONFIG}/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/{PARTICLE}_{ENERGY}_{PHASE_SPACE}.{INDEX}.edm4hep.root.log",
0016 wildcard_constraints:
0017 PARTICLE="(e-|pi-)",
0018 ENERGY="[0-9]+[kMG]eV",
0019 PHASE_SPACE="(3to50|45to135|130to177)deg",
0020 INDEX="\d{4}",
0021 params:
0022 N_EVENTS=get_n_events
0023 shell:
0024 """
0025 set -m # monitor mode to prevent lingering processes
0026 exec ddsim \
0027 --runType batch \
0028 --enableGun \
0029 --steeringFile "{input.steering_file}" \
0030 --random.seed 1{wildcards.INDEX} \
0031 --filter.tracker edep0 \
0032 -v WARNING \
0033 --numberOfEvents {params.N_EVENTS} \
0034 --compactFile $DETECTOR_PATH/{wildcards.DETECTOR_CONFIG}.xml \
0035 --outputFile {output}
0036 """
0037
0038
0039 rule backwards_ecal_recon:
0040 input:
0041 "sim_output/backwards_ecal/{DETECTOR_CONFIG}/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/{PARTICLE}_{ENERGY}_{PHASE_SPACE}.{INDEX}.edm4hep.root",
0042 output:
0043 "sim_output/backwards_ecal/{DETECTOR_CONFIG}/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/{PARTICLE}_{ENERGY}_{PHASE_SPACE}.{INDEX}.eicrecon.tree.edm4eic.root",
0044 log:
0045 "sim_output/backwards_ecal/{DETECTOR_CONFIG}/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/{PARTICLE}_{ENERGY}_{PHASE_SPACE}.{INDEX}.eicrecon.tree.edm4eic.root.log",
0046 wildcard_constraints:
0047 INDEX="\d{4}",
0048 shell: """
0049 set -m # monitor mode to prevent lingering processes
0050 exec env DETECTOR_CONFIG={wildcards.DETECTOR_CONFIG} \
0051 eicrecon {input} -Ppodio:output_file={output} \
0052 -Ppodio:output_collections=MCParticles,EcalEndcapNRecHits,EcalEndcapNClusters
0053 """
0054
0055
0056 rule backwards_ecal_recon_many:
0057 input:
0058 expand(
0059 "sim_output/backwards_ecal/{{DETECTOR_CONFIG}}/{{PARTICLE}}/{{ENERGY}}/{{PHASE_SPACE}}/{{PARTICLE}}_{{ENERGY}}_{{PHASE_SPACE}}.{INDEX:04d}.eicrecon.tree.edm4eic.root",
0060 INDEX=range(20),
0061 ),
0062 output:
0063 touch("sim_output/backwards_ecal/{DETECTOR_CONFIG}/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/flag"),
0064
0065
0066 DETECTOR_CONFIG=os.environ["DETECTOR_CONFIG"]
0067
0068 rule backwards_ecal:
0069 input:
0070 expand(
0071 "sim_output/backwards_ecal/" + DETECTOR_CONFIG + "/{PARTICLE}/{ENERGY}/{PHASE_SPACE}/flag",
0072 PARTICLE=["pi-", "e-"],
0073 ENERGY=[
0074 "100MeV",
0075 "200MeV",
0076 "500MeV",
0077 "1GeV",
0078 "2GeV",
0079 "5GeV",
0080 "10GeV",
0081 "20GeV",
0082 ],
0083 PHASE_SPACE=["130to177deg"],
0084 ),
0085 matplotlibrc=".matplotlibrc",
0086 script="benchmarks/backwards_ecal/backwards_ecal.py",
0087 output:
0088 directory("results/backwards_ecal")
0089 shell:
0090 """
0091 env \
0092 MATPLOTLIBRC={input.matplotlibrc} \
0093 DETECTOR_CONFIG=""" + DETECTOR_CONFIG + """ \
0094 PLOT_TITLE=""" + DETECTOR_CONFIG + """ \
0095 INPUT_PATH_FORMAT=sim_output/backwards_ecal/""" + DETECTOR_CONFIG + """/{{particle}}/{{energy}}/130to177deg/{{particle}}_{{energy}}_130to177deg.{{ix:04d}}.eicrecon.tree.edm4eic.root \
0096 OUTPUT_DIR={output} \
0097 python {input.script}
0098 """