From fcfd0502f9f31e739727b618cecd4bb508c0ba39 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sat, 5 Jul 2025 17:34:13 -0400 Subject: [PATCH 1/6] add campaign benchmark --- .gitlab-ci.yml | 118 +++++++++++++++++---------------- Snakefile | 1 + benchmarks/campaign/Snakefile | 75 +++++++++++++++++++++ benchmarks/campaign/config.yml | 16 +++++ 4 files changed, 152 insertions(+), 58 deletions(-) create mode 100644 benchmarks/campaign/Snakefile create mode 100644 benchmarks/campaign/config.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f3372b57..9da87e81 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -121,69 +121,71 @@ common:setup: - runner_system_failure include: - - local: 'benchmarks/backgrounds/config.yml' - - local: 'benchmarks/backwards_ecal/config.yml' - - local: 'benchmarks/beamline/config.yml' - - local: 'benchmarks/calo_pid/config.yml' - - local: 'benchmarks/ecal_gaps/config.yml' - - local: 'benchmarks/tracking_detectors/config.yml' - - local: 'benchmarks/tracking_performances/config.yml' - - local: 'benchmarks/tracking_performances_dis/config.yml' - - local: 'benchmarks/barrel_ecal/config.yml' - - local: 'benchmarks/lfhcal/config.yml' - - local: 'benchmarks/zdc/config.yml' - - local: 'benchmarks/zdc_lyso/config.yml' - - local: 'benchmarks/zdc_neutron/config.yml' - - local: 'benchmarks/zdc_photon/config.yml' - - local: 'benchmarks/zdc_pi0/config.yml' - - local: 'benchmarks/material_scan/config.yml' - - local: 'benchmarks/pid/config.yml' - - local: 'benchmarks/rich/config.yml' - - local: 'benchmarks/timing/config.yml' - - local: 'benchmarks/b0_tracker/config.yml' - - local: 'benchmarks/insert_muon/config.yml' - - local: 'benchmarks/insert_tau/config.yml' - - local: 'benchmarks/zdc_sigma/config.yml' - - local: 'benchmarks/zdc_lambda/config.yml' - - local: 'benchmarks/insert_neutron/config.yml' - - local: 'benchmarks/femc_electron/config.yml' - - local: 'benchmarks/femc_photon/config.yml' - - local: 'benchmarks/femc_pi0/config.yml' - - local: 'benchmarks/nhcal_acceptance/config.yml' - - local: 'benchmarks/nhcal_basic_distribution/config.yml' + #- local: 'benchmarks/backgrounds/config.yml' + #- local: 'benchmarks/backwards_ecal/config.yml' + #- local: 'benchmarks/beamline/config.yml' + #- local: 'benchmarks/calo_pid/config.yml' + - local: 'benchmarks/campaign/config.yml' + #- local: 'benchmarks/ecal_gaps/config.yml' + #- local: 'benchmarks/tracking_detectors/config.yml' + #- local: 'benchmarks/tracking_performances/config.yml' + #- local: 'benchmarks/tracking_performances_dis/config.yml' + #- local: 'benchmarks/barrel_ecal/config.yml' + #- local: 'benchmarks/lfhcal/config.yml' + #- local: 'benchmarks/zdc/config.yml' + #- local: 'benchmarks/zdc_lyso/config.yml' + #- local: 'benchmarks/zdc_neutron/config.yml' + #- local: 'benchmarks/zdc_photon/config.yml' + #- local: 'benchmarks/zdc_pi0/config.yml' + #- local: 'benchmarks/material_scan/config.yml' + #- local: 'benchmarks/pid/config.yml' + #- local: 'benchmarks/rich/config.yml' + #- local: 'benchmarks/timing/config.yml' + #- local: 'benchmarks/b0_tracker/config.yml' + #- local: 'benchmarks/insert_muon/config.yml' + #- local: 'benchmarks/insert_tau/config.yml' + #- local: 'benchmarks/zdc_sigma/config.yml' + #- local: 'benchmarks/zdc_lambda/config.yml' + #- local: 'benchmarks/insert_neutron/config.yml' + #- local: 'benchmarks/femc_electron/config.yml' + #- local: 'benchmarks/femc_photon/config.yml' + #- local: 'benchmarks/femc_pi0/config.yml' + #- local: 'benchmarks/nhcal_acceptance/config.yml' + #- local: 'benchmarks/nhcal_basic_distribution/config.yml' deploy_results: allow_failure: true stage: deploy needs: - - "collect_results:backgrounds" - - "collect_results:backwards_ecal" - - "collect_results:barrel_ecal" - - "collect_results:beamline" - - "collect_results:calo_pid" - - "collect_results:ecal_gaps" - - "collect_results:lfhcal" - - "collect_results:material_scan" - - "collect_results:pid" - - "collect_results:rich" - - "collect_results:tracking_performance" - - "collect_results:tracking_performance_campaigns" - - "collect_results:zdc_sigma" - - "collect_results:zdc_lambda" - - "collect_results:insert_neutron" - - "collect_results:tracking_performances_dis" - - "collect_results:zdc" - - "collect_results:zdc_lyso" - - "collect_results:zdc_neutron" - - "collect_results:insert_muon" - - "collect_results:insert_tau" - - "collect_results:zdc_photon" - - "collect_results:zdc_pi0" - - "collect_results:femc_electron" - - "collect_results:femc_photon" - - "collect_results:femc_pi0" - - "collect_results:nhcal_acceptance" - - "collect_results:nhcal_basic_distribution" + #- "collect_results:backgrounds" + #- "collect_results:backwards_ecal" + #- "collect_results:barrel_ecal" + #- "collect_results:beamline" + #- "collect_results:calo_pid" + - "collect_results:campaign" + #- "collect_results:ecal_gaps" + #- "collect_results:lfhcal" + #- "collect_results:material_scan" + #- "collect_results:pid" + #- "collect_results:rich" + #- "collect_results:tracking_performance" + #- "collect_results:tracking_performance_campaigns" + #- "collect_results:zdc_sigma" + #- "collect_results:zdc_lambda" + #- "collect_results:insert_neutron" + #- "collect_results:tracking_performances_dis" + #- "collect_results:zdc" + #- "collect_results:zdc_lyso" + #- "collect_results:zdc_neutron" + #- "collect_results:insert_muon" + #- "collect_results:insert_tau" + #- "collect_results:zdc_photon" + #- "collect_results:zdc_pi0" + #- "collect_results:femc_electron" + #- "collect_results:femc_photon" + #- "collect_results:femc_pi0" + #- "collect_results:nhcal_acceptance" + #- "collect_results:nhcal_basic_distribution" script: - snakemake $SNAKEMAKE_FLAGS --cores 1 results/metadata.json - find results -print | sort | tee summary.txt diff --git a/Snakefile b/Snakefile index 4526fcc9..78ac922e 100644 --- a/Snakefile +++ b/Snakefile @@ -35,6 +35,7 @@ include: "benchmarks/backwards_ecal/Snakefile" include: "benchmarks/barrel_ecal/Snakefile" include: "benchmarks/beamline/Snakefile" include: "benchmarks/calo_pid/Snakefile" +include: "benchmarks/campaign/Snakefile" include: "benchmarks/ecal_gaps/Snakefile" include: "benchmarks/material_scan/Snakefile" include: "benchmarks/tracking_performances/Snakefile" diff --git a/benchmarks/campaign/Snakefile b/benchmarks/campaign/Snakefile new file mode 100644 index 00000000..0004a6f3 --- /dev/null +++ b/benchmarks/campaign/Snakefile @@ -0,0 +1,75 @@ +rule campaign_run: + input: + run_script="/opt/campaigns/hepmc3/scripts/run.sh", + output: + expand( + "LOG/{{DETECTOR_VERSION}}/{{DETECTOR_CONFIG}}/{{BASENAME}}.{EXTENSION}", + EXTENSION=[ + "eicrecon.prmon.log", + "npsim.log", + "npsim.prmon.log", + "eicrecon.prmon.txt", + "npsim.prmon.json", + "hepmcmerger.prmon.txt", + "eicrecon.dot", + "hepmcmerger.prmon.json", + "eicrecon.prmon.json", + "npsim.prmon.txt", + "hepmcmerger.log", + "eicrecon.log", + ], + ), + #log: + # "log", + wildcard_constraints: + DETECTOR_VERSION="[^/]+", + DETECTOR_CONFIG="[^/]+", + params: + N_EVENTS=100, + shell: + """ +env \ + DETECTOR_VERSION={wildcards.DETECTOR_VERSION} \ + DETECTOR_CONFIG={wildcards.DETECTOR_CONFIG} \ + SLURM_TMPDIR=$PWD \ + sh {input.run_script} EVGEN/{wildcards.BASENAME} hepmc3.tree.root {params.N_EVENTS} +""" + + +rule campaign_prmon_plot_memory: + input: + "{PATH}.prmon.txt", + output: + "{PATH}.{MODE}.{EXTENSION}", + wildcard_constraints: + EXTENSION="(png|pdf|svg)", + MODE="(load|memory)", + shell: + """ +case "{wildcards.MODE}" in + load) + flags=( --xvar wtime --yvar utime,stime --yunit SEC --diff --stacked ) + ;; + + memory) + flags=( --xvar wtime --yvar vmem,pss,rss,swap --yunit GB ) + ;; +esac +prmon_plot.py --input "{wildcards.PATH}.prmon.txt" "${flags[@]}" --otype {EXTENSION} --output "{wildcards.PATH}.memory" +""" + + +rule campaign_benchmark: + input: + expand( + "LOG/main/epic/DIS/NC/10x100/minQ2=1/pythia8NCDIS_10x100_minQ2=1_beamEffects_xAngle=-0.025_hiDiv_1.{PROG}.{MODE}.png", + PROG=[ + "hepmcmerger", + "npsim", + "eicrecon", + ], + MODE=[ + "load", + "memory", + ], + ), diff --git a/benchmarks/campaign/config.yml b/benchmarks/campaign/config.yml new file mode 100644 index 00000000..3d1942b2 --- /dev/null +++ b/benchmarks/campaign/config.yml @@ -0,0 +1,16 @@ +bench:campaign: + extends: .det_benchmark + stage: benchmarks + script: + - snakemake $SNAKEMAKE_FLAGS --cores 1 campaign_benchmark + +collect_results:campaign: + extends: .det_benchmark + stage: collect + needs: + - "bench:campaign" + script: + - ls -lrht + - mv results{,_save}/ # move results directory out of the way to preserve it + - snakemake $SNAKEMAKE_FLAGS --cores 1 --delete-all-output campaign_benchmark + - mv results{_save,}/ From fa7ad05d984e123d8e03738561be547ce6a2a550 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sat, 5 Jul 2025 21:26:44 -0400 Subject: [PATCH 2/6] bash --- benchmarks/campaign/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/campaign/Snakefile b/benchmarks/campaign/Snakefile index 0004a6f3..b0b6025a 100644 --- a/benchmarks/campaign/Snakefile +++ b/benchmarks/campaign/Snakefile @@ -32,7 +32,7 @@ env \ DETECTOR_VERSION={wildcards.DETECTOR_VERSION} \ DETECTOR_CONFIG={wildcards.DETECTOR_CONFIG} \ SLURM_TMPDIR=$PWD \ - sh {input.run_script} EVGEN/{wildcards.BASENAME} hepmc3.tree.root {params.N_EVENTS} + {input.run_script} EVGEN/{wildcards.BASENAME} hepmc3.tree.root {params.N_EVENTS} """ From fc8bc7f296645c20e7958cb0bc89d1d6a3d72785 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Thu, 10 Jul 2025 21:23:53 -0400 Subject: [PATCH 3/6] fix --- benchmarks/campaign/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/campaign/Snakefile b/benchmarks/campaign/Snakefile index b0b6025a..c4a72b2f 100644 --- a/benchmarks/campaign/Snakefile +++ b/benchmarks/campaign/Snakefile @@ -55,7 +55,7 @@ case "{wildcards.MODE}" in flags=( --xvar wtime --yvar vmem,pss,rss,swap --yunit GB ) ;; esac -prmon_plot.py --input "{wildcards.PATH}.prmon.txt" "${flags[@]}" --otype {EXTENSION} --output "{wildcards.PATH}.memory" +prmon_plot.py --input "{wildcards.PATH}.prmon.txt" "${{flags[@]}}" --otype {wildcards.EXTENSION} --output "{wildcards.PATH}.memory" """ From 7b6f8425a169897592f270b4593b3861becec7fa Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Fri, 11 Jul 2025 11:37:11 -0400 Subject: [PATCH 4/6] fix --- benchmarks/campaign/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/campaign/Snakefile b/benchmarks/campaign/Snakefile index c4a72b2f..6bd910ed 100644 --- a/benchmarks/campaign/Snakefile +++ b/benchmarks/campaign/Snakefile @@ -55,7 +55,7 @@ case "{wildcards.MODE}" in flags=( --xvar wtime --yvar vmem,pss,rss,swap --yunit GB ) ;; esac -prmon_plot.py --input "{wildcards.PATH}.prmon.txt" "${{flags[@]}}" --otype {wildcards.EXTENSION} --output "{wildcards.PATH}.memory" +prmon_plot.py --input "{wildcards.PATH}.prmon.txt" "${{flags[@]}}" --otype {wildcards.EXTENSION} --output "{wildcards.PATH}.{wildcards.MODE}" """ From 63029c348ffa781cadd6304f291a0d3914ba7cb8 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 13 Jul 2025 14:31:45 -0400 Subject: [PATCH 5/6] enable all benchmarks back, rm timing benchmark --- .gitlab-ci.yml | 119 ++++++++++++++++---------------- benchmarks/timing/config.yml | 22 ------ benchmarks/timing/run_timing.sh | 102 --------------------------- 3 files changed, 59 insertions(+), 184 deletions(-) delete mode 100644 benchmarks/timing/config.yml delete mode 100755 benchmarks/timing/run_timing.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9da87e81..27d30f33 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -121,71 +121,70 @@ common:setup: - runner_system_failure include: - #- local: 'benchmarks/backgrounds/config.yml' - #- local: 'benchmarks/backwards_ecal/config.yml' - #- local: 'benchmarks/beamline/config.yml' - #- local: 'benchmarks/calo_pid/config.yml' - - local: 'benchmarks/campaign/config.yml' - #- local: 'benchmarks/ecal_gaps/config.yml' - #- local: 'benchmarks/tracking_detectors/config.yml' - #- local: 'benchmarks/tracking_performances/config.yml' - #- local: 'benchmarks/tracking_performances_dis/config.yml' - #- local: 'benchmarks/barrel_ecal/config.yml' - #- local: 'benchmarks/lfhcal/config.yml' - #- local: 'benchmarks/zdc/config.yml' - #- local: 'benchmarks/zdc_lyso/config.yml' - #- local: 'benchmarks/zdc_neutron/config.yml' - #- local: 'benchmarks/zdc_photon/config.yml' - #- local: 'benchmarks/zdc_pi0/config.yml' - #- local: 'benchmarks/material_scan/config.yml' - #- local: 'benchmarks/pid/config.yml' - #- local: 'benchmarks/rich/config.yml' - #- local: 'benchmarks/timing/config.yml' - #- local: 'benchmarks/b0_tracker/config.yml' - #- local: 'benchmarks/insert_muon/config.yml' - #- local: 'benchmarks/insert_tau/config.yml' - #- local: 'benchmarks/zdc_sigma/config.yml' - #- local: 'benchmarks/zdc_lambda/config.yml' - #- local: 'benchmarks/insert_neutron/config.yml' - #- local: 'benchmarks/femc_electron/config.yml' - #- local: 'benchmarks/femc_photon/config.yml' - #- local: 'benchmarks/femc_pi0/config.yml' - #- local: 'benchmarks/nhcal_acceptance/config.yml' - #- local: 'benchmarks/nhcal_basic_distribution/config.yml' + - local: 'benchmarks/backgrounds/config.yml' + - local: 'benchmarks/backwards_ecal/config.yml' + - local: 'benchmarks/beamline/config.yml' + - local: 'benchmarks/calo_pid/config.yml' + - local: 'benchmarks/campaign/config.yml' + - local: 'benchmarks/ecal_gaps/config.yml' + - local: 'benchmarks/tracking_detectors/config.yml' + - local: 'benchmarks/tracking_performances/config.yml' + - local: 'benchmarks/tracking_performances_dis/config.yml' + - local: 'benchmarks/barrel_ecal/config.yml' + - local: 'benchmarks/lfhcal/config.yml' + - local: 'benchmarks/zdc/config.yml' + - local: 'benchmarks/zdc_lyso/config.yml' + - local: 'benchmarks/zdc_neutron/config.yml' + - local: 'benchmarks/zdc_photon/config.yml' + - local: 'benchmarks/zdc_pi0/config.yml' + - local: 'benchmarks/material_scan/config.yml' + - local: 'benchmarks/pid/config.yml' + - local: 'benchmarks/rich/config.yml' + - local: 'benchmarks/b0_tracker/config.yml' + - local: 'benchmarks/insert_muon/config.yml' + - local: 'benchmarks/insert_tau/config.yml' + - local: 'benchmarks/zdc_sigma/config.yml' + - local: 'benchmarks/zdc_lambda/config.yml' + - local: 'benchmarks/insert_neutron/config.yml' + - local: 'benchmarks/femc_electron/config.yml' + - local: 'benchmarks/femc_photon/config.yml' + - local: 'benchmarks/femc_pi0/config.yml' + - local: 'benchmarks/nhcal_acceptance/config.yml' + - local: 'benchmarks/nhcal_basic_distribution/config.yml' deploy_results: allow_failure: true stage: deploy needs: - #- "collect_results:backgrounds" - #- "collect_results:backwards_ecal" - #- "collect_results:barrel_ecal" - #- "collect_results:beamline" - #- "collect_results:calo_pid" - - "collect_results:campaign" - #- "collect_results:ecal_gaps" - #- "collect_results:lfhcal" - #- "collect_results:material_scan" - #- "collect_results:pid" - #- "collect_results:rich" - #- "collect_results:tracking_performance" - #- "collect_results:tracking_performance_campaigns" - #- "collect_results:zdc_sigma" - #- "collect_results:zdc_lambda" - #- "collect_results:insert_neutron" - #- "collect_results:tracking_performances_dis" - #- "collect_results:zdc" - #- "collect_results:zdc_lyso" - #- "collect_results:zdc_neutron" - #- "collect_results:insert_muon" - #- "collect_results:insert_tau" - #- "collect_results:zdc_photon" - #- "collect_results:zdc_pi0" - #- "collect_results:femc_electron" - #- "collect_results:femc_photon" - #- "collect_results:femc_pi0" - #- "collect_results:nhcal_acceptance" - #- "collect_results:nhcal_basic_distribution" + - "collect_results:backgrounds" + - "collect_results:backwards_ecal" + - "collect_results:barrel_ecal" + - "collect_results:beamline" + - "collect_results:calo_pid" + - "collect_results:campaign" + - "collect_results:ecal_gaps" + - "collect_results:lfhcal" + - "collect_results:material_scan" + - "collect_results:pid" + - "collect_results:rich" + - "collect_results:tracking_performance" + - "collect_results:tracking_performance_campaigns" + - "collect_results:zdc_sigma" + - "collect_results:zdc_lambda" + - "collect_results:insert_neutron" + - "collect_results:tracking_performances_dis" + - "collect_results:zdc" + - "collect_results:zdc_lyso" + - "collect_results:zdc_neutron" + - "collect_results:insert_muon" + - "collect_results:insert_tau" + - "collect_results:zdc_photon" + - "collect_results:zdc_pi0" + - "collect_results:femc_electron" + - "collect_results:femc_photon" + - "collect_results:femc_pi0" + - "collect_results:nhcal_acceptance" + - "collect_results:nhcal_basic_distribution" script: - snakemake $SNAKEMAKE_FLAGS --cores 1 results/metadata.json - find results -print | sort | tee summary.txt diff --git a/benchmarks/timing/config.yml b/benchmarks/timing/config.yml deleted file mode 100644 index 23b08327..00000000 --- a/benchmarks/timing/config.yml +++ /dev/null @@ -1,22 +0,0 @@ -sim:timing: - extends: .det_benchmark - stage: simulate - timeout: 1 hours - script: - - bash benchmarks/timing/run_timing.sh -n "${NEVENTS}" -p "${PARTICLES}" -e "${ENERGIES}" - artifacts: - paths: - - results/ - parallel: - matrix: - - PARTICLES: ["e-"] - ENERGIES: ["1*GeV"] - NEVENTS: ["1","100"] - -#collect_results:timing: -# extends: .det_benchmark -# stage: collect -# needs: -# - ["sim:timing"] -# script: -# - ls -lrht diff --git a/benchmarks/timing/run_timing.sh b/benchmarks/timing/run_timing.sh deleted file mode 100755 index 0a272a2d..00000000 --- a/benchmarks/timing/run_timing.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -function print_the_help { - echo "USAGE: ${0} -nevents -p -e " - echo " OPTIONS: " - echo " -n,--nevents number of events" - echo " -p,--particle particle type" - echo " -e,--energy particle energy" - exit -} - -POSITIONAL=() -while [[ $# -gt 0 ]] -do - key="$1" - - case $key in - -h|--help) - shift # past argument - print_the_help - ;; - -n|--nevents) - nevents="$2" - shift # past argument - shift # past value - ;; - -p|--particle) - particle="$2" - shift # past argument - shift # past value - ;; - -e|--energy) - energy="$2" - shift - shift - ;; - *) # unknown option - #POSITIONAL+=("$1") # save it in an array for later - echo "unknown option $1" - print_the_help - shift # past argument - ;; - esac -done -set -- "${POSITIONAL[@]}" # restore positional parameters - -if [[ ! -n "${nevents}" ]] ; then - nevents="1" -fi - -if [[ ! -n "${particle}" ]] ; then - particle="e-" -fi - -if [[ ! -n "${energy}" ]] ; then - energy="1*GeV" -fi - -if [[ ! -n "${DETECTOR}" ]] ; then - export DETECTOR="athena" -fi - -if [[ ! -n "${DETECTOR_PATH}" ]] ; then - export DETECTOR_PATH="/opt/detector/share/athena" -fi - -compact_path=${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml - -echo "DETECTOR_PATH = ${DETECTOR_PATH}" -echo "DETECTOR = ${DETECTOR}" - -# Run geant4 simulations -output_dir="data/timing/${particle}/${energy/\*/}" -output_file="sim_${nevents}.edm4hep.root" -mkdir -p ${output_dir} -timing_dir="results/timing/${particle}/${energy/\*/}" -timing_file="time_${nevents}events.log" -ddsim_file="npsim_${nevents}events.log" -mkdir -p ${timing_dir} -/usr/bin/time -v -o ${timing_dir}/time_${nevents}events.log \ - ddsim --runType batch \ - --printLevel WARNING \ - --filter.tracker edep0 \ - --numberOfEvents ${nevents} \ - --enableGun \ - --gun.energy "${energy}" \ - --gun.particle "${particle}" \ - --gun.thetaMin "45*deg" \ - --gun.thetaMax "135*deg" \ - --gun.distribution "cos(theta)" \ - --part.minimalKineticEnergy "1*TeV" \ - --compactFile ${compact_path} \ - --outputFile ${output_dir}/${output_file} \ - 2>&1 > ${timing_dir}/${ddsim_file} - -if [[ "$?" -ne "0" ]] ; then - echo "ERROR running npsim" - exit 1 -fi - -echo "For ${nevents} events:" -cat ${timing_dir}/${timing_file} From 92eed9392f003443b006838216f4ab2980b4b910 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 13 Jul 2025 14:33:56 -0400 Subject: [PATCH 6/6] campaign: provide plots in results/ --- benchmarks/campaign/Snakefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/benchmarks/campaign/Snakefile b/benchmarks/campaign/Snakefile index 6bd910ed..ed3ac506 100644 --- a/benchmarks/campaign/Snakefile +++ b/benchmarks/campaign/Snakefile @@ -73,3 +73,9 @@ rule campaign_benchmark: "memory", ], ), + output: + directory("results/campaign"), + shell: + """ +cp {input} {output} +"""