diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 75181da00c41b71602b38d33cc006b1fd5b4d5a9..051688856e07766ee2debbc90a19870a72cdbbf3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,8 @@ image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG +variables: + RECO: "eicrecon" + default: before_script: - source .local/bin/env.sh diff --git a/benchmarks/backgrounds/synchrotron.sh b/benchmarks/backgrounds/synchrotron.sh index 01c7a862477fd49f1b754f650b18bde4a7b6f544..bae4ec73d7cffc1b381d762517ee1e07c09c90c9 100644 --- a/benchmarks/backgrounds/synchrotron.sh +++ b/benchmarks/backgrounds/synchrotron.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh function print_the_help { echo "USAGE: ${0} [--rec] [--sim] [--ana] [--all] " @@ -114,18 +115,23 @@ if [[ -n "${DO_SIM}" || -n "${DO_ALL}" ]] ; then fi fi -### Step 3. Run the reconstruction (juggler) +### Step 3. Run the reconstruction (eicrecon) if [[ -n "${DO_REC}" || -n "${DO_ALL}" ]] ; then - for rec in options/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - gaudirun.py ${rec} + if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} if [[ "$?" -ne "0" ]] ; then + echo "ERROR running eicrecon" + exit 1 + fi + fi + + if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py + if [ "$?" -ne "0" ] ; then echo "ERROR running juggler" exit 1 fi - done + fi root_filesize=$(stat --format=%s "${JUGGLER_REC_FILE}") if [[ "${JUGGLER_N_EVENTS}" -lt "500" ]] ; then @@ -145,13 +151,13 @@ if [[ -n "${DO_ANA}" || -n "${DO_ALL}" ]] ; then mkdir -p results/synchrotron # here you can add as many scripts as you want. - root -b -q "benchmarks/synchrotron/analysis/synchrotron_sim.cxx+(\"${JUGGLER_SIM_FILE}\")" + root -b -q "benchmarks/backgrounds/analysis/synchrotron_sim.cxx+(\"${JUGGLER_SIM_FILE}\")" if [[ "$?" -ne "0" ]] ; then echo "ERROR running root script" exit 1 fi - root -b -q "benchmarks/synchrotron/analysis/synchrotron_raw.cxx+(\"${JUGGLER_REC_FILE/.root/.raw.root}\")" + root -b -q "benchmarks/backgrounds/analysis/synchrotron_raw.cxx+(\"${JUGGLER_REC_FILE/.root/.raw.root}\")" if [[ "$?" -ne "0" ]] ; then echo "ERROR running root script" exit 1 diff --git a/benchmarks/dis/analysis-only.sh b/benchmarks/dis/analysis-only.sh index 8c712a0711a3fd54832fd1ee8116b1214b47d6ad..14589ad1adf0d4371315bf1f593410f121552925 100755 --- a/benchmarks/dis/analysis-only.sh +++ b/benchmarks/dis/analysis-only.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Run the DIS benchmarks in 5 steps: diff --git a/benchmarks/dis/analysis/rec_analysis_ecal.cxx b/benchmarks/dis/analysis/rec_analysis_ecal.cxx deleted file mode 100644 index 747bb0abf532bb119fa2e791155816c01c637602..0000000000000000000000000000000000000000 --- a/benchmarks/dis/analysis/rec_analysis_ecal.cxx +++ /dev/null @@ -1,65 +0,0 @@ -#include "common_bench/benchmark.h" -#include "common_bench/mt.h" -#include "common_bench/util.h" -#include "common_bench/plot.h" - -#include <cmath> -#include <fstream> -#include <iostream> -#include <string> -#include <vector> -#include <algorithm> -#include <utility> - -#include "ROOT/RDataFrame.hxx" -#include <TH1D.h> -#include <TFitResult.h> -#include <TRandom3.h> -#include <TCanvas.h> - -#include "fmt/color.h" -#include "fmt/core.h" - -#include "nlohmann/json.hpp" -#include "edm4eic/CalorimeterHitData.h" -#include "edm4eic/ClusterData.h" - -int rec_analysis_ecal(const std::string& config_name) -{ - // read our configuration - std::ifstream config_file{config_name}; - nlohmann::json config; - config_file >> config; - - const std::string rec_file = config["rec_file"]; - const std::string detector = config["detector"]; - const std::string output_prefix = config["output_prefix"]; - const std::string test_tag = config["test_tag"]; - const int ebeam = config["ebeam"]; - const int pbeam = config["pbeam"]; - - fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green), - "Running DIS electron analysis...\n"); - fmt::print(" - Detector package: {}\n", detector); - fmt::print(" - input file: {}\n", rec_file); - fmt::print(" - output prefix: {}\n", output_prefix); - fmt::print(" - test tag: {}\n", test_tag); - fmt::print(" - ebeam: {}\n", ebeam); - fmt::print(" - pbeam: {}\n", pbeam); - - // create our test definition - // test_tag - common_bench::Test dis_Q2_resolution{ - {{"name", fmt::format("{}_Q2_resolution", test_tag)}, - {"title", "DIS Q2 resolution"}, - {"description", - fmt::format("DIS Q2 resolution with {}, estimated using a Gaussian fit.", detector)}, - {"quantity", "resolution (in %)"}, - {"target", "0.1"}}}; - - // Run this in multi-threaded mode if desired - ROOT::EnableImplicitMT(kNumThreads); - ROOT::RDataFrame d("events", rec_file); - - return 0; -} diff --git a/benchmarks/dis/analysis/rec_analysis_hcal.cxx b/benchmarks/dis/analysis/rec_analysis_hcal.cxx deleted file mode 100644 index c2bf3b5cfe41317b4daa8c50caca13bfb583ddff..0000000000000000000000000000000000000000 --- a/benchmarks/dis/analysis/rec_analysis_hcal.cxx +++ /dev/null @@ -1,65 +0,0 @@ -#include "common_bench/benchmark.h" -#include "common_bench/mt.h" -#include "common_bench/util.h" -#include "common_bench/plot.h" - -#include <cmath> -#include <fstream> -#include <iostream> -#include <string> -#include <vector> -#include <algorithm> -#include <utility> - -#include "ROOT/RDataFrame.hxx" -#include <TH1D.h> -#include <TFitResult.h> -#include <TRandom3.h> -#include <TCanvas.h> - -#include "fmt/color.h" -#include "fmt/core.h" - -#include "nlohmann/json.hpp" -#include "edm4eic/CalorimeterHitData.h" -#include "edm4eic/ClusterData.h" - -int rec_analysis_hcal(const std::string& config_name) -{ - // read our configuration - std::ifstream config_file{config_name}; - nlohmann::json config; - config_file >> config; - - const std::string rec_file = config["rec_file"]; - const std::string detector = config["detector"]; - const std::string output_prefix = config["output_prefix"]; - const std::string test_tag = config["test_tag"]; - const int ebeam = config["ebeam"]; - const int pbeam = config["pbeam"]; - - fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green), - "Running DIS electron analysis...\n"); - fmt::print(" - Detector package: {}\n", detector); - fmt::print(" - input file: {}\n", rec_file); - fmt::print(" - output prefix: {}\n", output_prefix); - fmt::print(" - test tag: {}\n", test_tag); - fmt::print(" - ebeam: {}\n", ebeam); - fmt::print(" - pbeam: {}\n", pbeam); - - // create our test definition - // test_tag - common_bench::Test dis_Q2_resolution{ - {{"name", fmt::format("{}_Q2_resolution", test_tag)}, - {"title", "DIS Q2 resolution"}, - {"description", - fmt::format("DIS Q2 resolution with {}, estimated using a Gaussian fit.", detector)}, - {"quantity", "resolution (in %)"}, - {"target", "0.1"}}}; - - // Run this in multi-threaded mode if desired - ROOT::EnableImplicitMT(kNumThreads); - ROOT::RDataFrame d("events", rec_file); - - return 0; -} diff --git a/benchmarks/dis/analysis/rec_analysis_raw.cxx b/benchmarks/dis/analysis/rec_analysis_raw.cxx deleted file mode 100644 index decd143f339e7442a9c1d83be979cd7ed405600b..0000000000000000000000000000000000000000 --- a/benchmarks/dis/analysis/rec_analysis_raw.cxx +++ /dev/null @@ -1,628 +0,0 @@ -#include "common_bench/benchmark.h" -#include "common_bench/mt.h" -#include "common_bench/util.h" -#include "common_bench/plot.h" - -#include <cmath> -#include <fstream> -#include <iostream> -#include <string> -#include <vector> -#include <algorithm> -#include <utility> - -#include "ROOT/RDataFrame.hxx" -#include <TH1D.h> -#include <TFitResult.h> -#include <TRandom3.h> -#include <TCanvas.h> - -#include "fmt/color.h" -#include "fmt/core.h" - -#include "nlohmann/json.hpp" -#include "edm4eic/RawCalorimeterHitData.h" - -int rec_analysis_raw(const std::string& config_name) -{ - // read our configuration - std::ifstream config_file{config_name}; - nlohmann::json config; - config_file >> config; - - const std::string rec_file = config["rec_file"]; - const std::string detector = config["detector"]; - const std::string output_prefix = config["output_prefix"]; - const std::string test_tag = config["test_tag"]; - const int ebeam = config["ebeam"]; - const int pbeam = config["pbeam"]; - - fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green), - "Running DIS electron analysis...\n"); - fmt::print(" - Detector package: {}\n", detector); - fmt::print(" - input file: {}\n", rec_file); - fmt::print(" - output prefix: {}\n", output_prefix); - fmt::print(" - test tag: {}\n", test_tag); - fmt::print(" - ebeam: {}\n", ebeam); - fmt::print(" - pbeam: {}\n", pbeam); - - // Run this in multi-threaded mode if desired - ROOT::EnableImplicitMT(kNumThreads); - ROOT::RDataFrame d("events", rec_file); - - auto d0 = ROOT::RDF::RNode(d - .Define("n_EcalEndcapPRawHits", "EcalEndcapPRawHits.size()") - .Define("n_EcalEndcapNRawHits", "EcalEndcapNRawHits.size()") - .Define("n_HcalEndcapPRawHits", "HcalEndcapPRawHits.size()") - .Define("n_HcalBarrelRawHits", "HcalBarrelRawHits.size()") - .Define("n_HcalEndcapNRawHits", "HcalEndcapNRawHits.size()") -// .Define("n_B0PreshowerRawHits", "B0TrackerRawHits.size()") -// .Define("n_B0TrackerRawHits", "B0TrackerRawHits.size()") - .Define("n_DRICHRawHits", "DRICHRawHits.size()") -// .Define("n_ERICHRawHits", "ERICHRawHits.size()") -// .Define("n_FakeDIRCRawHits", "FakeDIRCRawHits.size()") -// .Define("n_ffi_ZDC_ECALRawHits", "ffi_ZDC_ECALRawHits.size()") -// .Define("n_ffi_ZDC_HCALRawHits", "ffi_ZDC_HCALRawHits.size()") -// .Define("n_ForwardOffMTracker_station_1RawHits", "ForwardOffMTracker_station_1RawHits.size()") -// .Define("n_ForwardOffMTracker_station_2RawHits", "ForwardOffMTracker_station_2RawHits.size()") -// .Define("n_ForwardOffMTracker_station_3RawHits", "ForwardOffMTracker_station_3RawHits.size()") -// .Define("n_ForwardOffMTracker_station_4RawHits", "ForwardOffMTracker_station_4RawHits.size()") -// .Define("n_ForwardRomanPot_Station_1RawHits", "ForwardRomanPot_Status_1RawHits.size()") -// .Define("n_ForwardRomanPot_Station_2RawHits", "ForwardRomanPot_Status_2RawHits.size()") -// .Define("n_GEMEndcapNRawHits", "GEMEndcapNRawHits.size()") -// .Define("n_GEMEndcapPRawHits", "GEMEndcapPRawHits.size()") -// .Define("n_InnerTrackerBarrelRawHits", "InnerTrackerBarrelRawHits.size()") -// .Define("n_InnerTrackerEndcapNRawHits", "InnerTrackerEndcapNRawHits.size()") -// .Define("n_InnerTrackerEndcapPRawHits", "InnerTrackerEndcapPRawHits.size()") -// .Define("n_MedialTrackerBarrelRawHits", "MedialTrackerBarrelRawHits.size()") -// .Define("n_MedialTrackerEndcapNRawHits", "MedialTrackerEndcapNRawHits.size()") -// .Define("n_MedialTrackerEndcapPRawHits", "MedialTrackerEndcapPRawHits.size()") -// .Define("n_OuterTrackerBarrelRawHits", "OuterTrackerBarrelRawHits.size()") -// .Define("n_OuterTrackerEndcapNRawHits", "OuterTrackerEndcapNRawHits.size()") -// .Define("n_OuterTrackerEndcapPRawHits", "OuterTrackerEndcapPRawHits.size()") - .Define("n_VertexBarrelRawHits", "VertexBarrelRawHits.size()") - ); - - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - d0 = d0.Define("n_EcalBarrelImagingRawHits", "EcalBarrelImagingRawHits.size()") - .Define("n_EcalBarrelScFiRawHits", "EcalBarrelScFiRawHits.size()"); - } else { - d0 = d0.Define("n_EcalBarrelSciGlassRawHits", "EcalBarrelSciGlassRawHits.size()"); - } - - // Ecal hits - auto h_n_EcalEndcapPRawHits = d0.Histo1D({"h_n_EcalEndcapPRawHits", "EcalEndcapP; hits; counts", 100, 0, 1000}, "n_EcalEndcapPRawHits"); - ROOT::RDF::RResultPtr<TH1D> h_n_EcalBarrelImagingRawHits, h_n_EcalBarrelScFiRawHits, h_n_EcalBarrelSciGlassRawHits; - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - h_n_EcalBarrelImagingRawHits = d0.Histo1D({"h_n_EcalBarrelImagingRawHits", "EcalBarrelImaging; hits; counts", 100, 0, 1000}, "n_EcalBarrelImagingRawHits"); - h_n_EcalBarrelScFiRawHits = d0.Histo1D({"h_n_EcalBarrelScFiRawHits", "EcalBarrelScFi; hits; counts", 100, 0, 10000}, "n_EcalBarrelScFiRawHits"); - } else { - h_n_EcalBarrelSciGlassRawHits = d0.Histo1D({"h_n_EcalBarrelSciGlassRawHits", "EcalBarrelSciGlas; hits; counts", 100, 0, 1000}, "n_EcalBarrelSciGlassRawHits"); - } - auto h_n_EcalEndcapNRawHits = d0.Histo1D({"h_n_EcalEndcapNRawHits", "EcalEndcapN; hits; counts", 100, 0, 1000}, "n_EcalEndcapNRawHits"); - // Ecal stats - auto stats_n_EcalEndcapPRawHits = d0.Stats("n_EcalEndcapPRawHits"); - ROOT::RDF::RResultPtr<TStatistic> stats_n_EcalBarrelImagingRawHits, stats_n_EcalBarrelScFiRawHits, stats_n_EcalBarrelSciGlassRawHits; - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - stats_n_EcalBarrelImagingRawHits = d0.Stats("n_EcalBarrelImagingRawHits"); - stats_n_EcalBarrelScFiRawHits = d0.Stats("n_EcalBarrelScFiRawHits"); - } else { - stats_n_EcalBarrelSciGlassRawHits = d0.Stats("n_EcalBarrelSciGlassRawHits"); - } - auto stats_n_EcalEndcapNRawHits = d0.Stats("n_EcalEndcapNRawHits"); - // Ecal adc - auto h_adc_EcalEndcapPRawHits = d0.Histo1D({"h_adc_EcalEndcapPRawHits", "EcalEndcapP; amplitude; counts", 1024, 0, 32768}, "EcalEndcapPRawHits.amplitude"); - ROOT::RDF::RResultPtr<TH1D> h_adc_EcalBarrelImagingRawHits, h_adc_EcalBarrelScFiRawHits, h_adc_EcalBarrelSciGlassRawHits; - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - h_adc_EcalBarrelImagingRawHits = d0.Histo1D({"h_adc_EcalBarrelImagingRawHits", "EcalBarrelImaging; amplitude; counts", 1024, 0, 8192}, "EcalBarrelImagingRawHits.amplitude"); - h_adc_EcalBarrelScFiRawHits = d0.Histo1D({"h_adc_EcalBarrelScFiRawHits", "EcalBarrelScFi; amplitude; counts", 1024, 0, 32768}, "EcalBarrelScFiRawHits.amplitude"); - } else { - h_adc_EcalBarrelSciGlassRawHits = d0.Histo1D({"h_adc_EcalBarrelSciGlassRawHits", "EcalBarrel; amplitude; counts", 1024, 0, 32768}, "EcalBarrelSciGlassRawHits.amplitude"); - } - auto h_adc_EcalEndcapNRawHits = d0.Histo1D({"h_adc_EcalEndcapNRawHits", "EcalEndcapN; amplitude; counts", 1024, 0, 32768}, "EcalEndcapNRawHits.amplitude"); - // Ecal tdc - auto h_tdc_EcalEndcapPRawHits = d0.Histo1D({"h_tdc_EcalEndcapPRawHits", "EcalEndcapP; TDC channel; counts", 1024, 0, 32768}, "EcalEndcapPRawHits.timeStamp"); - ROOT::RDF::RResultPtr<TH1D> h_tdc_EcalBarrelImagingRawHits, h_tdc_EcalBarrelScFiRawHits, h_tdc_EcalBarrelSciGlassRawHits; - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - h_tdc_EcalBarrelImagingRawHits = d0.Histo1D({"h_tdc_EcalBarrelImagingRawHits", "EcalBarrelImaging; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelImagingRawHits.timeStamp"); - h_tdc_EcalBarrelScFiRawHits = d0.Histo1D({"h_tdc_EcalBarrelScFiRawHits", "EcalBarrelScFi; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelScFiRawHits.timeStamp"); - } else { - h_tdc_EcalBarrelSciGlassRawHits = d0.Histo1D({"h_tdc_EcalBarrelSciGlassRawHits", "EcalBarrel; TDC channel; counts", 1024, 0, 32768}, "EcalBarrelSciGlassRawHits.timeStamp"); - } - auto h_tdc_EcalEndcapNRawHits = d0.Histo1D({"h_tdc_EcalEndcapNRawHits", "EcalEndcapN; TDC channel; counts", 1024, 0, 32768}, "EcalEndcapNRawHits.timeStamp"); - // Hcal hits - auto h_n_HcalEndcapPRawHits = d0.Histo1D({"h_n_HcalEndcapPRawHits", "HcalEndcapP; hits; counts", 100, 0, 1000}, "n_HcalEndcapPRawHits"); - auto h_n_HcalBarrelRawHits = d0.Histo1D({"h_n_HcalBarrelRawHits", "HcalBarrel; hits; counts", 100, 0, 1000}, "n_HcalBarrelRawHits"); - auto h_n_HcalEndcapNRawHits = d0.Histo1D({"h_n_HcalEndcapNRawHits", "HcalEndcapN; hits; counts", 100, 0, 1000}, "n_HcalEndcapNRawHits"); - // Hcal stats - auto stats_n_HcalEndcapPRawHits = d0.Stats("n_HcalEndcapPRawHits"); - auto stats_n_HcalBarrelRawHits = d0.Stats("n_HcalBarrelRawHits"); - auto stats_n_HcalEndcapNRawHits = d0.Stats("n_HcalEndcapNRawHits"); - // Hcal adc - auto h_adc_HcalEndcapPRawHits = d0.Histo1D({"h_adc_HcalEndcapPRawHits", "HcalEndcapP; hits; counts", 1024, 0, 32768}, "HcalEndcapPRawHits.amplitude"); - auto h_adc_HcalBarrelRawHits = d0.Histo1D({"h_adc_HcalBarrelRawHits", "HcalBarrel; hits; counts", 1024, 0, 32768}, "HcalBarrelRawHits.amplitude"); - auto h_adc_HcalEndcapNRawHits = d0.Histo1D({"h_adc_HcalEndcapNRawHits", "HcalEndcapN; hits; counts", 1024, 0, 32768}, "HcalEndcapNRawHits.amplitude"); - // Hcal tdc - auto h_tdc_HcalEndcapPRawHits = d0.Histo1D({"h_tdc_HcalEndcapPRawHits", "HcalEndcapP; TDC channel; counts", 1024, 0, 32768}, "HcalEndcapPRawHits.timeStamp"); - auto h_tdc_HcalBarrelRawHits = d0.Histo1D({"h_tdc_HcalBarrelRawHits", "HcalBarrel; TDC channel; counts", 1024, 0, 32768}, "HcalBarrelRawHits.timeStamp"); - auto h_tdc_HcalEndcapNRawHits = d0.Histo1D({"h_tdc_HcalEndcapNRawHits", "HcalEndcapN; TDC channel; counts", 1024, 0, 32768}, "HcalEndcapNRawHits.timeStamp"); - - // other detector stats - //auto stats_n_B0PreshowerRawHits = d0.Stats("n_B0PreshowerRawHits"); - //auto stats_n_B0TrackerRawHits = d0.Stats("n_B0TrackerRawHits"); - auto stats_n_DRICHRawHits = d0.Stats("n_DRICHRawHits"); - // auto stats_n_ERICHRawHits = d0.Stats("n_ERICHRawHits"); - //auto stats_n_FakeDIRCRawHits = d0.Stats("n_FakeDIRCRawHits"); - //auto stats_n_ffi_ZDC_ECALRawHits = d0.Stats("n_ffi_ZDC_ECALRawHits"); - //auto stats_n_ffi_ZDC_HCALRawHits = d0.Stats("n_ffi_ZDC_HCALRawHits"); - //auto stats_n_ForwardOffMTracker_station_1RawHits = d0.Stats("n_ForwardOffMTracker_station_1RawHits"); - //auto stats_n_ForwardOffMTracker_station_2RawHits = d0.Stats("n_ForwardOffMTracker_station_2RawHits"); - //auto stats_n_ForwardOffMTracker_station_3RawHits = d0.Stats("n_ForwardOffMTracker_station_3RawHits"); - //auto stats_n_ForwardOffMTracker_station_4RawHits = d0.Stats("n_ForwardOffMTracker_station_4RawHits"); - //auto stats_n_ForwardRomanPot_Station_1RawHits = d0.Stats("n_ForwardRomanPot_Station_1RawHits"); - //auto stats_n_ForwardRomanPot_Station_2RawHits = d0.Stats("n_ForwardRomanPot_Station_2RawHits"); - //auto stats_n_GEMEndcapNRawHits = d0.Stats("n_GEMEndcapNRawHits"); - //auto stats_n_GEMEndcapPRawHits = d0.Stats("n_GEMEndcapPRawHits"); - //auto stats_n_InnerTrackerBarrelRawHits = d0.Stats("n_InnerTrackerBarrelRawHits"); - //auto stats_n_InnerTrackerEndcapNRawHits = d0.Stats("n_InnerTrackerEndcapNRawHits"); - //auto stats_n_InnerTrackerEndcapPRawHits = d0.Stats("n_InnerTrackerEndcapPRawHits"); - //auto stats_n_MedialTrackerBarrelRawHits = d0.Stats("n_MedialTrackerBarrelRawHits"); - //auto stats_n_MedialTrackerEndcapNRawHits = d0.Stats("n_MedialTrackerEndcapNRawHits"); - //auto stats_n_MedialTrackerEndcapPRawHits = d0.Stats("n_MedialTrackerEndcapPRawHits"); - //auto stats_n_OuterTrackerBarrelRawHits = d0.Stats("n_OuterTrackerBarrelRawHits"); - //auto stats_n_OuterTrackerEndcapNRawHits = d0.Stats("n_OuterTrackerEndcapNRawHits"); - //auto stats_n_OuterTrackerEndcapPRawHits = d0.Stats("n_OuterTrackerEndcapPRawHits"); - auto stats_n_VertexBarrelRawHits = d0.Stats("n_VertexBarrelRawHits"); - - fmt::print("EcalEndcapPRawHits:"); - stats_n_EcalEndcapPRawHits->Print(); - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - fmt::print("EcalBarrelImagingRawHits:"); - stats_n_EcalBarrelImagingRawHits->Print(); - fmt::print("EcalBarrelScFiRawHits:"); - stats_n_EcalBarrelScFiRawHits->Print(); - } else { - fmt::print("EcalBarrelSciGlassRawHits:"); - stats_n_EcalBarrelSciGlassRawHits->Print(); - } - fmt::print("EcalEndcapNRawHits:"); - stats_n_EcalEndcapNRawHits->Print(); - fmt::print("HcalEndcapPRawHits:"); - stats_n_HcalEndcapPRawHits->Print(); - fmt::print("HcalBarrelRawHits:"); - stats_n_HcalBarrelRawHits->Print(); - fmt::print("HcalEndcapNRawHits:"); - stats_n_HcalEndcapNRawHits->Print(); - - // other detector stats - //fmt::print("B0PreshowerRawHits:"); - //stats_n_B0PreshowerRawHits->Print(); - //fmt::print("B0TrackerRawHits:"); - //stats_n_B0TrackerRawHits->Print(); - fmt::print("n_DRICHRawHits:"); - stats_n_DRICHRawHits->Print(); - //fmt::print("n_ERICHRawHits:"); - // stats_n_ERICHRawHits->Print(); - //fmt::print("n_FakeDIRCRawHits:"); - //stats_n_FakeDIRCRawHits->Print(); - //fmt::print("n_ffi_ZDC_ECALRawHits:"); - //stats_n_ffi_ZDC_ECALRawHits->Print(); - //fmt::print("n_ffi_ZDC_HCALRawHits:"); - //stats_n_ffi_ZDC_HCALRawHits->Print(); - //fmt::print("n_ForwardOffMTracker_station_1RawHits:"); - //stats_n_ForwardOffMTracker_station_1RawHits->Print(); - //fmt::print("n_ForwardOffMTracker_station_2RawHits:"); - //stats_n_ForwardOffMTracker_station_2RawHits->Print(); - //fmt::print("n_ForwardOffMTracker_station_3RawHits:"); - //stats_n_ForwardOffMTracker_station_3RawHits->Print(); - //fmt::print("n_ForwardOffMTracker_station_4RawHits:"); - //stats_n_ForwardOffMTracker_station_4RawHits->Print(); - //fmt::print("n_ForwardOffMTracker_station_1RawHits:"); - //stats_n_ForwardRomanPot_Station_1RawHits->Print(); - //fmt::print("n_ForwardOffMTracker_station_2RawHits:"); - //stats_n_ForwardRomanPot_Station_2RawHits->Print(); - //fmt::print("n_GEMEndcapNRawHits:"); - //stats_n_GEMEndcapNRawHits->Print(); - //fmt::print("n_GEMEndcapPRawHits:"); - //stats_n_GEMEndcapPRawHits->Print(); - //fmt::print("n_InnerTrackerBarrelRawHits:"); - //stats_n_InnerTrackerBarrelRawHits->Print(); - //fmt::print("n_InnerTrackerEndcapNRawHits:"); - //stats_n_InnerTrackerEndcapNRawHits->Print(); - //fmt::print("n_InnerTrackerEndcapPRawHits:"); - //stats_n_InnerTrackerEndcapPRawHits->Print(); - //fmt::print("n_MedialTrackerBarrelRawHits:"); - //stats_n_MedialTrackerBarrelRawHits->Print(); - //fmt::print("n_MedialTrackerEndcapNRawHits:"); - //stats_n_MedialTrackerEndcapNRawHits->Print(); - //fmt::print("n_MedialTrackerEndcapPRawHits:"); - //stats_n_MedialTrackerEndcapPRawHits->Print(); - //fmt::print("n_OuterTrackerBarrelRawHits:"); - //stats_n_OuterTrackerBarrelRawHits->Print(); - //fmt::print("n_OuterTrackerEndcapNRawHits:"); - //stats_n_OuterTrackerEndcapNRawHits->Print(); - //fmt::print("n_OuterTrackerEndcapPRawHits:"); - //->Print(); - fmt::print("n_VertexBarrelRawHits:"); - stats_n_VertexBarrelRawHits->Print(); - - gStyle->SetOptTitle(kTRUE); - - // Ecal nhits - { - TCanvas c("c", "c", 1200, 1200); - c.Divide(2,2); - - c.cd(1); - gPad->SetLogy(true); - auto& h1 = *h_n_EcalEndcapPRawHits; - // histogram style - h1.SetLineColor(common_bench::plot::kMpBlue); - h1.SetLineWidth(2); - // axes - h1.GetXaxis()->CenterTitle(); - h1.GetYaxis()->CenterTitle(); - // draw everything - h1.DrawClone("hist"); - - c.cd(2); - gPad->SetLogy(true); - auto& h2 = *h_n_EcalEndcapNRawHits; - // histogram style - h2.SetLineColor(common_bench::plot::kMpBlue); - h2.SetLineWidth(2); - // axes - h2.GetXaxis()->CenterTitle(); - h2.GetYaxis()->CenterTitle(); - // draw everything - h2.DrawClone("hist"); - common_bench::plot::draw_label(ebeam, pbeam, detector); - - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_n_EcalBarrelImagingRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - - c.cd(4); - gPad->SetLogy(true); - auto& h4 = *h_n_EcalBarrelScFiRawHits; - // histogram style - h4.SetLineColor(common_bench::plot::kMpBlue); - h4.SetLineWidth(2); - // axes - h4.GetXaxis()->CenterTitle(); - h4.GetYaxis()->CenterTitle(); - // draw everything - h4.DrawClone("hist"); - - } else { - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_n_EcalBarrelSciGlassRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - } - - c.Print(fmt::format("{}_EcalRawHits_n.png", output_prefix).c_str()); - } - - // Ecal adc - { - TCanvas c("c", "c", 1200, 1200); - c.Divide(2,2); - - c.cd(1); - gPad->SetLogy(true); - auto& h1 = *h_adc_EcalEndcapPRawHits; - // histogram style - h1.SetLineColor(common_bench::plot::kMpBlue); - h1.SetLineWidth(2); - // axes - h1.GetXaxis()->CenterTitle(); - h1.GetYaxis()->CenterTitle(); - // draw everything - h1.DrawClone("hist"); - - c.cd(2); - gPad->SetLogy(true); - auto& h2 = *h_adc_EcalEndcapNRawHits; - // histogram style - h2.SetLineColor(common_bench::plot::kMpBlue); - h2.SetLineWidth(2); - // axes - h2.GetXaxis()->CenterTitle(); - h2.GetYaxis()->CenterTitle(); - // draw everything - h2.DrawClone("hist"); - common_bench::plot::draw_label(ebeam, pbeam, detector); - - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_adc_EcalBarrelImagingRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - - c.cd(4); - gPad->SetLogy(true); - auto& h4 = *h_adc_EcalBarrelScFiRawHits; - // histogram style - h4.SetLineColor(common_bench::plot::kMpBlue); - h4.SetLineWidth(2); - // axes - h4.GetXaxis()->CenterTitle(); - h4.GetYaxis()->CenterTitle(); - // draw everything - h4.DrawClone("hist"); - - } else { - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_adc_EcalBarrelSciGlassRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - } - - c.Print(fmt::format("{}_EcalRawHits_adc.png", output_prefix).c_str()); - } - - - // Ecal tdc - { - TCanvas c("c", "c", 1200, 1200); - c.Divide(2,2); - - c.cd(1); - gPad->SetLogy(true); - auto& h1 = *h_tdc_EcalEndcapPRawHits; - // histogram style - h1.SetLineColor(common_bench::plot::kMpBlue); - h1.SetLineWidth(2); - // axes - h1.GetXaxis()->CenterTitle(); - h1.GetYaxis()->CenterTitle(); - // draw everything - h1.DrawClone("hist"); - - c.cd(2); - gPad->SetLogy(true); - auto& h2 = *h_tdc_EcalEndcapNRawHits; - // histogram style - h2.SetLineColor(common_bench::plot::kMpBlue); - h2.SetLineWidth(2); - // axes - h2.GetXaxis()->CenterTitle(); - h2.GetYaxis()->CenterTitle(); - // draw everything - h2.DrawClone("hist"); - common_bench::plot::draw_label(ebeam, pbeam, detector); - - if (d0.HasColumn("EcalBarrelScFiRawHits")) { - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_tdc_EcalBarrelImagingRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - - c.cd(4); - gPad->SetLogy(true); - auto& h4 = *h_tdc_EcalBarrelScFiRawHits; - // histogram style - h4.SetLineColor(common_bench::plot::kMpBlue); - h4.SetLineWidth(2); - // axes - h4.GetXaxis()->CenterTitle(); - h4.GetYaxis()->CenterTitle(); - // draw everything - h4.DrawClone("hist"); - - } else { - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_tdc_EcalBarrelSciGlassRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - } - - c.Print(fmt::format("{}_EcalRawHits_tdc.png", output_prefix).c_str()); - } - - // Hcal nhits - { - TCanvas c("c", "c", 1200, 1200); - c.Divide(2,2); - - c.cd(1); - gPad->SetLogy(true); - auto& h1 = *h_n_HcalEndcapPRawHits; - // histogram style - h1.SetLineColor(common_bench::plot::kMpBlue); - h1.SetLineWidth(2); - // axes - h1.GetXaxis()->CenterTitle(); - h1.GetYaxis()->CenterTitle(); - // draw everything - h1.DrawClone("hist"); - - c.cd(2); - gPad->SetLogy(true); - auto& h2 = *h_n_HcalEndcapNRawHits; - // histogram style - h2.SetLineColor(common_bench::plot::kMpBlue); - h2.SetLineWidth(2); - // axes - h2.GetXaxis()->CenterTitle(); - h2.GetYaxis()->CenterTitle(); - // draw everything - h2.DrawClone("hist"); - common_bench::plot::draw_label(ebeam, pbeam, detector); - - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_n_HcalBarrelRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - - c.Print(fmt::format("{}_HcalRawHits_n.png", output_prefix).c_str()); - } - - // Hcal adc - { - TCanvas c("c", "c", 1200, 1200); - c.Divide(2,2); - - c.cd(1); - gPad->SetLogy(true); - auto& h1 = *h_adc_HcalEndcapPRawHits; - // histogram style - h1.SetLineColor(common_bench::plot::kMpBlue); - h1.SetLineWidth(2); - // axes - h1.GetXaxis()->CenterTitle(); - h1.GetYaxis()->CenterTitle(); - // draw everything - h1.DrawClone("hist"); - - c.cd(2); - gPad->SetLogy(true); - auto& h2 = *h_adc_HcalEndcapNRawHits; - // histogram style - h2.SetLineColor(common_bench::plot::kMpBlue); - h2.SetLineWidth(2); - // axes - h2.GetXaxis()->CenterTitle(); - h2.GetYaxis()->CenterTitle(); - // draw everything - h2.DrawClone("hist"); - common_bench::plot::draw_label(ebeam, pbeam, detector); - - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_adc_HcalBarrelRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - - c.Print(fmt::format("{}_HcalRawHits_adc.png", output_prefix).c_str()); - } - - // Hcal tdc - { - TCanvas c("c", "c", 1200, 1200); - c.Divide(2,2); - - c.cd(1); - gPad->SetLogy(true); - auto& h1 = *h_tdc_HcalEndcapPRawHits; - // histogram style - h1.SetLineColor(common_bench::plot::kMpBlue); - h1.SetLineWidth(2); - // axes - h1.GetXaxis()->CenterTitle(); - h1.GetYaxis()->CenterTitle(); - // draw everything - h1.DrawClone("hist"); - - c.cd(2); - gPad->SetLogy(true); - auto& h2 = *h_tdc_HcalEndcapNRawHits; - // histogram style - h2.SetLineColor(common_bench::plot::kMpBlue); - h2.SetLineWidth(2); - // axes - h2.GetXaxis()->CenterTitle(); - h2.GetYaxis()->CenterTitle(); - // draw everything - h2.DrawClone("hist"); - common_bench::plot::draw_label(ebeam, pbeam, detector); - - c.cd(3); - gPad->SetLogy(true); - auto& h3 = *h_tdc_HcalBarrelRawHits; - // histogram style - h3.SetLineColor(common_bench::plot::kMpBlue); - h3.SetLineWidth(2); - // axes - h3.GetXaxis()->CenterTitle(); - h3.GetYaxis()->CenterTitle(); - // draw everything - h3.DrawClone("hist"); - - c.Print(fmt::format("{}_HcalRawHits_tdc.png", output_prefix).c_str()); - } - - if ( - stats_n_EcalEndcapPRawHits->GetMean() < 0.1 || - ( - d0.HasColumn("EcalBarrelScFiRawHits") && - ( - stats_n_EcalBarrelImagingRawHits->GetMean() < 0.1 || - stats_n_EcalBarrelScFiRawHits->GetMean() < 0.1 - ) - ) || - ( - ! d0.HasColumn("EcalBarrelScFiRawHits") && - ( - stats_n_EcalBarrelSciGlassRawHits->GetMean() < 0.1 - ) - ) || - stats_n_EcalEndcapNRawHits->GetMean() < 0.1 || - stats_n_HcalEndcapPRawHits->GetMean() < 0.1 || - stats_n_HcalBarrelRawHits->GetMean() < 0.1 || - stats_n_HcalEndcapNRawHits->GetMean() < 0.1 - ) { - std::cout << "Error: too few raw hits per events " << std::endl; - return -1; - } - - return 0; -} diff --git a/benchmarks/dis/analysis/truth_reconstruction.py b/benchmarks/dis/analysis/truth_reconstruction.py index 808dde4b4d464af47360def2a1d00ace90d70d91..5bb19de30e4961b9e5caa92290f7765d41297ece 100644 --- a/benchmarks/dis/analysis/truth_reconstruction.py +++ b/benchmarks/dis/analysis/truth_reconstruction.py @@ -89,25 +89,26 @@ else: particle = config.split('-')[0].strip() particle_dict = {'e':[boolean_electron,'Electrons'],'pi':[boolean_pion,'Pions']} + #################################################################################################### #Ratio #################################################################################################### for i in range(len(MC_list)): #Repeat the following steps for each variable (momentum,theta,phi,eta) - X1 = MC_list[i] #MCParticles events to be plotted on x-axis - Y1 = RC_list[i] #ReconstructedParticles events - X_list = [ak.Array(X1), - ak.Array(X1[boolean_pion]), - ak.Array(X1[boolean_proton]), - ak.Array(X1[boolean_electron]), - ak.Array(X1[boolean_neutron]), - ak.Array(X1[boolean_photon])] - Y_list = [ak.Array(Y1), - ak.Array(Y1[boolean_pion]), - ak.Array(Y1[boolean_proton]), - ak.Array(Y1[boolean_electron]), - ak.Array(Y1[boolean_neutron]), - ak.Array(Y1[boolean_photon])] + MCparts = MC_list[i] #MCParticles events to be plotted on x-axis + RCparts = RC_list[i] #ReconstructedParticles events + X_list = [ak.Array(MCparts), + ak.Array(MCparts[boolean_pion]), + ak.Array(MCparts[boolean_proton]), + ak.Array(MCparts[boolean_electron]), + ak.Array(MCparts[boolean_neutron]), + ak.Array(MCparts[boolean_photon])] + Y_list = [ak.Array(RCparts), + ak.Array(RCparts[boolean_pion]), + ak.Array(RCparts[boolean_proton]), + ak.Array(RCparts[boolean_electron]), + ak.Array(RCparts[boolean_neutron]), + ak.Array(RCparts[boolean_photon])] X_plot = list(np.zeros(len(X_list))) Y_plot = list(np.zeros(len(X_list))) @@ -177,6 +178,7 @@ for i in range(len(MC_list)): #Repeat the following steps for each variable (mom plt.savefig(os.path.join(r_path, '%s_%s_%s.png' % (title_list[i],title,config))) plt.close() + ################################################################################################### #Ratio vs momentum ################################################################################################### @@ -219,19 +221,20 @@ for i in range(len(MC_list)): #Repeat the following steps for each variable (mom ax1.set_title('%s Difference Vs Momentum %s %s events\n DETECTOR_CONFIG: %s'%(title_list[i],config,Nevents,Dconfig)) plt.savefig(os.path.join(r_path, '%s_difference_vs_momentum_%s.png' % (title_list[i],config))) + ################################################################################################### #Correlation ################################################################################################### #Repeat the following steps for each variable (momentum,theta,phi,eta) - X_len = ak.count(X1,axis=None) - Y_len = ak.count(Y1,axis=None) + X_len = ak.count(MCparts,axis=None) + Y_len = ak.count(RCparts,axis=None) if X_len > Y_len: - F_boolean = np.ones_like(Y1) == 1 + F_boolean = np.ones_like(RCparts) == 1 else: - F_boolean = np.ones_like(X1) == 1 - X_s = np.array(ak.flatten(X1[F_boolean])) - Y_s = np.array(ak.flatten(Y1[F_boolean])) + F_boolean = np.ones_like(MCparts) == 1 + X_s = np.array(ak.flatten(MCparts[F_boolean])) + Y_s = np.array(ak.flatten(RCparts[F_boolean])) #Histogram if i == 0 and particle in particle_dict.keys(): #Momentum in Single events @@ -268,6 +271,7 @@ for i in range(len(MC_list)): #Repeat the following steps for each variable (mom fig.suptitle('%s %s events\n DETECTOR_CONFIG: %s'%(config,Nevents,Dconfig)) plt.savefig(os.path.join(r_path, '%s_correlation_%s.png' % (title_list[i],config))) + ################################################################################################### #Phi vs Theta plots ################################################################################################### diff --git a/benchmarks/dis/config.yml b/benchmarks/dis/config.yml index aef633ba05a548aa8b4b9e68a08fb978468fbbcd..d69e1925d732be887d52bae4ef1a697bad0ec745 100644 --- a/benchmarks/dis/config.yml +++ b/benchmarks/dis/config.yml @@ -38,7 +38,7 @@ dis:simulate: - EBEAM: 18 PBEAM: 275 MINQ2: [1, 10, 100, 1000] - timeout: 2 hour + timeout: 96 hour script: - bash benchmarks/dis/dis.sh --config dis_${EBEAM}x${PBEAM}_minQ2=${MINQ2} --ebeam ${EBEAM} --pbeam ${PBEAM} --minq2 ${MINQ2} retry: diff --git a/benchmarks/dis/dis.sh b/benchmarks/dis/dis.sh index 7b5d952bbcaa697e80fb2551e81e57a257627882..b3851707401a358932f89c6798f5541b754f4360 100755 --- a/benchmarks/dis/dis.sh +++ b/benchmarks/dis/dis.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Run the DIS benchmarks in 5 steps: @@ -52,7 +53,7 @@ GEN_FILE=${INPUT_PATH}/gen-${CONFIG}_${JUGGLER_N_EVENTS}.hepmc SIM_FILE=${TMP_PATH}/sim-${CONFIG}.edm4hep.root SIM_LOG=${TMP_PATH}/sim-${CONFIG}.log - +# JUGGLER_REC_FILE_BASE= ${TMP_PATH}/rec-${CONFIG} REC_FILE=${TMP_PATH}/rec-${CONFIG}.root REC_LOG=${TMP_PATH}/sim-${CONFIG}.log @@ -65,7 +66,7 @@ if [ ! -f ${SIM_FILE} ] ; then ddsim --runType batch \ --part.minimalKineticEnergy 1000*GeV \ --filter.tracker edep0 \ - -v INFO \ + -v WARNING \ --numberOfEvents ${JUGGLER_N_EVENTS} \ --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ --inputFiles ${GEN_FILE} \ @@ -79,25 +80,24 @@ fi ## ============================================================================= ## Step 3: Run digitization & reconstruction echo "Running the digitization and reconstruction" -## FIXME Need to figure out how to pass file name to juggler from the commandline -## the tracker_reconstruction.py options file uses the following environment -## variables: -## - JUGGLER_SIM_FILE: input detector simulation -## - JUGGLER_REC_FILE: output reconstructed data -## - JUGGLER_N_EVENTS: number of events to process (part of global environment) -## - DETECTOR: detector package (part of global environment) -export JUGGLER_SIM_FILE=${SIM_FILE} -export JUGGLER_REC_FILE=${REC_FILE} -for rec in options/*.py options/extra/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - gaudirun.py ${rec} +if [ ${RECO} == "eicrecon" ] ; then + /usr/bin/time -v eicrecon ${SIM_FILE} -Ppodio:output_file=${REC_FILE} + if [ "$?" -ne "0" ] ; then + echo "ERROR running eicrecon" + exit 1 + fi +fi + +if [[ ${RECO} == "juggler" ]] ; then + export JUGGLER_SIM_FILE=${SIM_FILE} + export JUGGLER_REC_FILE=${REC_FILE} + gaudirun.py options/reconstruction.py if [ "$?" -ne "0" ] ; then echo "ERROR running juggler" exit 1 fi -done +fi + ## ============================================================================= ## Step 4: Analysis @@ -134,59 +134,6 @@ if [[ "$?" -ne "0" ]] ; then exit 1 fi -CONFIG="${TMP_PATH}/${PLOT_TAG}.raw.json" -cat << EOF > ${CONFIG} -{ - "rec_file": "${REC_FILE/.root/.raw.root}", - "detector": "${DETECTOR}", - "output_prefix": "${RESULTS_PATH}/${PLOT_TAG}", - "ebeam": ${EBEAM}, - "pbeam": ${PBEAM}, - "minq2": ${MINQ2}, - "test_tag": "${BEAM_TAG}" -} -EOF -root -b -q "benchmarks/dis/analysis/rec_analysis_raw.cxx+(\"${CONFIG}\")" -if [[ "$?" -ne "0" ]] ; then - echo "ERROR running rec_analysis_raw script" - exit 1 -fi - -CONFIG="${TMP_PATH}/${PLOT_TAG}.ecal.json" -cat << EOF > ${CONFIG} -{ - "rec_file": "${REC_FILE/.root/.ecal.root}", - "detector": "${DETECTOR}", - "output_prefix": "${RESULTS_PATH}/${PLOT_TAG}", - "ebeam": ${EBEAM}, - "pbeam": ${PBEAM}, - "minq2": ${MINQ2}, - "test_tag": "${BEAM_TAG}" -} -EOF -root -b -q "benchmarks/dis/analysis/rec_analysis_ecal.cxx+(\"${CONFIG}\")" -if [[ "$?" -ne "0" ]] ; then - echo "ERROR running rec_analysis_ecal script" - exit 1 -fi - -CONFIG="${TMP_PATH}/${PLOT_TAG}.hcal.json" -cat << EOF > ${CONFIG} -{ - "rec_file": "${REC_FILE/.root/.hcal.root}", - "detector": "${DETECTOR}", - "output_prefix": "${RESULTS_PATH}/${PLOT_TAG}", - "ebeam": ${EBEAM}, - "pbeam": ${PBEAM}, - "minq2": ${MINQ2}, - "test_tag": "${BEAM_TAG}" -} -EOF -root -b -q "benchmarks/dis/analysis/rec_analysis_hcal.cxx+(\"${CONFIG}\")" -if [[ "$?" -ne "0" ]] ; then - echo "ERROR running rec_analysis_hcal script" - exit 1 -fi ## ============================================================================= ## Step 5: finalize @@ -198,9 +145,6 @@ if [ "${JUGGLER_N_EVENTS}" -lt "500" ] ; then cp ${REC_FILE} ${RESULTS_PATH} fi -## Always move over log files to the results path -cp ${REC_LOG} ${RESULTS_PATH} - ## ============================================================================= ## All done! echo "DIS benchmarks complete" diff --git a/benchmarks/dis/env.sh b/benchmarks/dis/env.sh index cbd42351dcd9a5ed19a9ac3e8077f12c5e516582..1afe4f052f0ccad16d789299a7f2b2760954c7f5 100644 --- a/benchmarks/dis/env.sh +++ b/benchmarks/dis/env.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Local configuration variables for this particular benchmark diff --git a/benchmarks/dis/gen.sh b/benchmarks/dis/gen.sh index 2714b1ab224bbd7df5206d7b948c6d247a1ea0ce..4b27b95d32641a4e2cc33c5ab5a035648acbf5de 100755 --- a/benchmarks/dis/gen.sh +++ b/benchmarks/dis/gen.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Standin for a proper pythia generation process, similar to how we diff --git a/benchmarks/dis/get.sh b/benchmarks/dis/get.sh index b9e3ccdb08a9247810f785d2f640e1c4d8c27f4f..ff7b8c1349b8a2772b8ae64b80d650339afb7ee3 100644 --- a/benchmarks/dis/get.sh +++ b/benchmarks/dis/get.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Standin for a proper pythia generation process, similar to how we diff --git a/benchmarks/dvcs/dvcs.sh b/benchmarks/dvcs/dvcs.sh index 9abe34273f090b6e5841b05d8833409fee8b100e..deb95f0b3c4a65428a800465961b9e2b38dce55b 100644 --- a/benchmarks/dvcs/dvcs.sh +++ b/benchmarks/dvcs/dvcs.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh function print_the_help { echo "USAGE: ${0} [--rec] [--sim] [--analysis] [--all] " @@ -114,19 +115,23 @@ if [[ -n "${DO_SIM}" || -n "${DO_ALL}" ]] ; then fi fi -### Step 3. Run the reconstruction (juggler) +### Step 3. Run the reconstruction (eicrecon) if [[ -n "${DO_REC}" || -n "${DO_ALL}" ]] ; then - for rec in options/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - gaudirun.py ${rec} + if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} if [[ "$?" -ne "0" ]] ; then - echo "ERROR running juggler" + echo "ERROR running eicrecon" exit 1 fi - done + fi + if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py + if [ "$?" -ne "0" ] ; then + echo "ERROR running juggler" + exit 1 + fi + fi root_filesize=$(stat --format=%s "${JUGGLER_REC_FILE}") if [[ "${JUGGLER_N_EVENTS}" -lt "500" ]] ; then # file must be less than 10 MB to upload diff --git a/benchmarks/dvmp/dvmp.sh b/benchmarks/dvmp/dvmp.sh index 432f194fb1a923dc545bdf971bf0f6700454759a..96274fcb7f8d416899fc0e6e753bdafa8dcf79f1 100755 --- a/benchmarks/dvmp/dvmp.sh +++ b/benchmarks/dvmp/dvmp.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Run the DVMP benchmarks in 5 steps: @@ -85,17 +86,21 @@ echo "Running the digitization and reconstruction" ## - DETECTOR: detector package (part of global environment) export JUGGLER_SIM_FILE=${SIM_FILE} export JUGGLER_REC_FILE=${REC_FILE} -for rec in options/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - gaudirun.py ${rec} - if [ "$?" -ne "0" ] ; then - echo "ERROR running juggler, both attempts failed" +if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} + if [[ "$?" -ne "0" ]] ; then + echo "ERROR running eicrecon" exit 1 fi -done +fi +if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py + if [ "$?" -ne "0" ] ; then + echo "ERROR running juggler" + exit 1 + fi +fi ## ============================================================================= ## Step 4: Analysis diff --git a/benchmarks/dvmp/env.sh b/benchmarks/dvmp/env.sh index ac51b1746c8b915b3d8927f79fa3184880b0ae11..641b7ce691ff6ff3cadcd0a2c76aaa6b28e5a8ab 100644 --- a/benchmarks/dvmp/env.sh +++ b/benchmarks/dvmp/env.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Local configuration variables for this particular benchmark diff --git a/benchmarks/dvmp/gen.sh b/benchmarks/dvmp/gen.sh index c3f9129aac06696e8e646d2e5f6ad623fc6b1918..2281784537229dd824166d6358652cde9fd249b7 100755 --- a/benchmarks/dvmp/gen.sh +++ b/benchmarks/dvmp/gen.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh ## ============================================================================= ## Run a single instance of the DVMP generator (lAger) diff --git a/benchmarks/single/analyze.sh b/benchmarks/single/analyze.sh index 681e32ccc91705d5b46a3fc6483b04b101d442ac..eebf96b6ef5d7283c7e75e67da547c23cb5d668f 100644 --- a/benchmarks/single/analyze.sh +++ b/benchmarks/single/analyze.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh source $(dirname $0)/common.sh $* diff --git a/benchmarks/single/common.sh b/benchmarks/single/common.sh index 2f8d58a27fd5a5d89f80c3440fe10a94127d64f4..82d3648b3ffdab73fcf702d49fdcb61b7d972582 100644 --- a/benchmarks/single/common.sh +++ b/benchmarks/single/common.sh @@ -1,3 +1,6 @@ +#!/bin/bash +source strict-mode.sh + if [[ ! -n "${JUGGLER_N_EVENTS}" ]] ; then export JUGGLER_N_EVENTS=100 fi @@ -5,7 +8,8 @@ fi export JUGGLER_FILE_NAME_TAG="${1:-e-_1GeV_45to135deg}" export JUGGLER_GEN_FILE="benchmarks/single/${JUGGLER_FILE_NAME_TAG}.steer" export JUGGLER_SIM_FILE="sim_output/sim_${JUGGLER_FILE_NAME_TAG}.edm4hep.root" -export JUGGLER_REC_FILE="sim_output/rec_${JUGGLER_FILE_NAME_TAG}.root" +export JUGGLER_REC_FILE_BASE="sim_output/rec_${JUGGLER_FILE_NAME_TAG}" +export JUGGLER_REC_FILE="${JUGGLER_REC_FILE_BASE}.tree.edm4eic.root" export BENCHMARK_TAG="single" echo "Setting up the local environment for the ${BENCHMARK_TAG^^} benchmarks" diff --git a/benchmarks/single/reconstruct.sh b/benchmarks/single/reconstruct.sh index a6285d28d642bc634a1fe4d0988648b88da45dfc..2e95c83c926a2a12a9bc3145faae6c54a06e42a1 100644 --- a/benchmarks/single/reconstruct.sh +++ b/benchmarks/single/reconstruct.sh @@ -1,16 +1,25 @@ #!/bin/bash +source strict-mode.sh source $(dirname $0)/common.sh $* # Reconstruct -for rec in options/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - /usr/bin/time -v \ - gaudirun.py ${JUGGLER_GAUDI_OPTIONS:-} ${rec} +if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} if [[ "$?" -ne "0" ]] ; then + echo "ERROR running eicrecon" + exit 1 + fi +fi + +if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py + if [ "$?" -ne "0" ] ; then echo "ERROR running juggler" exit 1 fi -done +fi + +if [ -f jana.dot ] ; then cp jana.dot ${JUGGLER_REC_FILE_BASE}.dot ; fi + +rootls -t ${JUGGLER_REC_FILE_BASE}.tree.edm4eic.root diff --git a/benchmarks/single/simulate.sh b/benchmarks/single/simulate.sh index 047e1e973ee8fdc8ab2733d7811692c42d578ec3..5ab79f6d8f947e002c0082c6b95def7f3ff41abf 100644 --- a/benchmarks/single/simulate.sh +++ b/benchmarks/single/simulate.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh source $(dirname $0)/common.sh $* diff --git a/benchmarks/tcs/tcs.sh b/benchmarks/tcs/tcs.sh index e8c64bec91c92f3bf97a948a84b9dd7c83cdf4bd..4ceb8c67fc34d68deeb1a2cabda6c22d230b0bc4 100644 --- a/benchmarks/tcs/tcs.sh +++ b/benchmarks/tcs/tcs.sh @@ -1,7 +1,5 @@ #!/bin/bash -set -Eu -trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR -IFS=$'\n\t' +source strict-mode.sh function print_the_help { echo "USAGE: ${0} [--rec] [--sim] [--analysis] [--all] " @@ -111,6 +109,7 @@ echo "DETECTOR = ${DETECTOR}" ## Step 1. Get the data if [[ -n "${DATA_INIT}" || -n "${DO_ALL}" ]] ; then mc -C . config host add S3 https://dtn01.sdcc.bnl.gov:9000 $S3_ACCESS_KEY $S3_SECRET_KEY + set +o pipefail mc -C . cat --insecure ${DATA_URL} | gunzip -c | head -n $((20+10*JUGGLER_N_EVENTS)) | sanitize_hepmc3 > "${JUGGLER_MC_FILE}" if [[ "$?" -ne "0" ]] ; then echo "Failed to download hepmc file" @@ -135,15 +134,24 @@ if [[ -n "${DO_SIM}" || -n "${DO_ALL}" ]] ; then fi fi -### Step 3. Run the reconstruction (juggler) +### Step 3. Run the reconstruction (eicrecon) export PBEAM if [[ -n "${DO_REC}" || -n "${DO_ALL}" ]] ; then - for rec in options/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - gaudirun.py ${rec} || [ $? -eq 4 ] - done + if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} + if [[ "$?" -ne "0" ]] ; then + echo "ERROR running eicrecon" + exit 1 + fi + fi + + if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py + if [ "$?" -ne "0" ] ; then + echo "ERROR running juggler" + exit 1 + fi + fi root_filesize=$(stat --format=%s "${JUGGLER_REC_FILE}") if [[ "${JUGGLER_N_EVENTS}" -lt "500" ]] ; then diff --git a/benchmarks/u_omega/u_omega.sh b/benchmarks/u_omega/u_omega.sh index ddd8557af89c16d72107e30be5838679e437a787..e29810c4542d8d0507010ddbf9ecf1866510357d 100644 --- a/benchmarks/u_omega/u_omega.sh +++ b/benchmarks/u_omega/u_omega.sh @@ -1,4 +1,5 @@ #!/bin/bash +source strict-mode.sh function print_the_help { echo "USAGE: ${0} [--rec] [--sim] [--analysis] [--all] " @@ -113,18 +114,23 @@ if [[ -n "${DO_SIM}" || -n "${DO_ALL}" ]] ; then fi fi -### Step 3. Run the reconstruction (juggler) +### Step 3. Run the reconstruction (eicrecon) if [[ -n "${DO_REC}" || -n "${DO_ALL}" ]] ; then - for rec in options/*.py ; do - unset tag - [[ $(basename ${rec} .py) =~ (.*)\.(.*) ]] && tag=".${BASH_REMATCH[2]}" - JUGGLER_REC_FILE=${JUGGLER_REC_FILE/.root/${tag:-}.root} \ - gaudirun.py ${rec} + if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} if [[ "$?" -ne "0" ]] ; then + echo "ERROR running eicrecon" + exit 1 + fi + fi + + if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py + if [ "$?" -ne "0" ] ; then echo "ERROR running juggler" exit 1 fi - done + fi root_filesize=$(stat --format=%s "${JUGGLER_REC_FILE}") if [[ "${JUGGLER_N_EVENTS}" -lt "500" ]] ; then diff --git a/options/extra/reconstruction.ecal.py b/options/extra/reconstruction.ecal.py deleted file mode 100644 index ee98e66a733f272c895274ecb92de7924ce938cd..0000000000000000000000000000000000000000 --- a/options/extra/reconstruction.ecal.py +++ /dev/null @@ -1,231 +0,0 @@ -from Gaudi.Configuration import * - -from Configurables import ApplicationMgr, AuditorSvc, EICDataSvc, PodioOutput, GeoSvc - -from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad - -import json - -detector_path = str(os.environ.get("DETECTOR_PATH", ".")) -detector_name = str(os.environ.get("DETECTOR_CONFIG", "epic")) -detector_config = str(os.environ.get("DETECTOR_CONFIG", detector_name)) -detector_version = str(os.environ.get("DETECTOR_VERSION", "main")) - -# Detector features that affect reconstruction -has_ecal_barrel_scfi = False -has_pid_backward_pfrich = False -if "epic" in detector_name and "imaging" in detector_config: - has_ecal_barrel_scfi = True - has_pid_backward_pfrich = True -if "epic" in detector_name and "brycecanyon" in detector_config: - has_ecal_barrel_scfi = True - has_pid_backward_pfrich = True - -# CAL reconstruction -# get sampling fractions from system environment variable -ci_ecal_sf = float(os.environ.get("CI_ECAL_SAMP_FRAC", 0.253)) - -# input calorimeter DAQ info -calo_daq = {} -with open( - "{}/calibrations/calo_digi_default.json".format(detector_path) -) as f: - calo_config = json.load(f) - ## add proper ADC capacity based on bit depth - for sys in calo_config: - cfg = calo_config[sys] - calo_daq[sys] = { - "dynamicRangeADC": eval(cfg["dynamicRange"]), - "capacityADC": 2 ** int(cfg["capacityBitsADC"]), - "pedestalMean": int(cfg["pedestalMean"]), - "pedestalSigma": float(cfg["pedestalSigma"]), - } -print(calo_daq) - -# input and output -input_sims = [ - f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip() -] -output_rec = str(os.environ["JUGGLER_REC_FILE"]) -n_events = int(os.environ["JUGGLER_N_EVENTS"]) - -# services -services = [] -# geometry service -services.append( - GeoSvc( - "GeoSvc", - detectors=["{}/{}.xml".format(detector_path, detector_config)], - OutputLevel=WARNING, - ) -) -# data service -services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)) - -# juggler components -from Configurables import PodioInput -from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi -from Configurables import Jug__Reco__CalorimeterHitReco as CalHitReco -from Configurables import Jug__Reco__CalorimeterHitsMerger as CalHitsMerger -from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster -from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG -from Configurables import Jug__Fast__TruthClustering as TruthClustering - -# from Configurables import Jug__Fast__ClusterMerger as ClusterMerger - -# branches needed from simulation root file -sim_coll = [ - "MCParticles", - "EcalEndcapNHits", - "EcalEndcapNHitsContributions", - "EcalEndcapPHits", - "EcalEndcapPHitsContributions", -] - -# list of algorithms -algorithms = [] - -# input -podin = PodioInput("PodioReader", collections=sim_coll) -algorithms.append(podin) - -# Crystal Endcap Ecal -ce_ecal_daq = calo_daq["ecal_neg_endcap"] -ce_ecal_digi = CalHitDigi( - "ce_ecal_digi", - inputHitCollection="EcalEndcapNHits", - outputHitCollection="EcalEndcapNRawHits", - energyResolutions=[0.0, 0.02, 0.0], - **ce_ecal_daq -) -algorithms.append(ce_ecal_digi) - -ce_ecal_reco = CalHitReco( - "ce_ecal_reco", - inputHitCollection=ce_ecal_digi.outputHitCollection, - outputHitCollection="EcalEndcapNRecHits", - thresholdFactor=4, # 4 sigma cut on pedestal sigma - samplingFraction=0.998, # this accounts for a small fraction of leakage - readoutClass="EcalEndcapNHits", - sectorField="sector", - **ce_ecal_daq -) -algorithms.append(ce_ecal_reco) - -ce_ecal_cl = TruthClustering( - "ce_ecal_cl", - inputHits=ce_ecal_reco.outputHitCollection, - mcHits="EcalEndcapNHits", - outputProtoClusters="EcalEndcapNProtoClusters", -) -# ce_ecal_cl = IslandCluster("ce_ecal_cl", -# inputHitCollection=ce_ecal_reco.outputHitCollection, -# outputProtoClusterCollection="EcalEndcapNProtoClusters", -# splitCluster=False, -# minClusterHitEdep=1.0*MeV, # discard low energy hits -# minClusterCenterEdep=30*MeV, -# sectorDist=5.0*cm, -# dimScaledLocalDistXY=[1.8, 1.8]) # dimension scaled dist is good for hybrid sectors with different module size -algorithms.append(ce_ecal_cl) - -ce_ecal_clreco = RecoCoG( - "ce_ecal_clreco", - inputProtoClusterCollection=ce_ecal_cl.outputProtoClusters, - outputClusterCollection="EcalEndcapNClusters", - logWeightBase=4.6, -) -algorithms.append(ce_ecal_clreco) - -# ce_ecal_clmerger = ClusterMerger("ce_ecal_clmerger", -# inputClusters = ce_ecal_clreco.outputClusterCollection, -# outputClusters = "EcalEndcapNMergedClusters", -# outputRelations = "EcalEndcapNMergedClusterRelations") -# algorithms.append(ce_ecal_clmerger) - -# Endcap ScFi Ecal -ci_ecal_daq = calo_daq["ecal_pos_endcap"] - -ci_ecal_digi = CalHitDigi( - "ci_ecal_digi", - inputHitCollection="EcalEndcapPHits", - outputHitCollection="EcalEndcapPRawHits", - scaleResponse=ci_ecal_sf, - energyResolutions=[0.1, 0.0015, 0.0], - **ci_ecal_daq -) -algorithms.append(ci_ecal_digi) - -ci_ecal_reco = CalHitReco( - "ci_ecal_reco", - inputHitCollection=ci_ecal_digi.outputHitCollection, - outputHitCollection="EcalEndcapPRecHits", - thresholdFactor=5.0, - samplingFraction=ci_ecal_sf, - **ci_ecal_daq -) -algorithms.append(ci_ecal_reco) - -# merge hits in different layer (projection to local x-y plane) -ci_ecal_merger = CalHitsMerger( - "ci_ecal_merger", - inputHitCollection=ci_ecal_reco.outputHitCollection, - outputHitCollection="EcalEndcapPRecMergedHits", - fields=["fiber_x", "fiber_y"], - fieldRefNumbers=[1, 1], - # fields=["layer", "slice"], - # fieldRefNumbers=[1, 0], - readoutClass="EcalEndcapPHits", -) -algorithms.append(ci_ecal_merger) - -ci_ecal_cl = TruthClustering( - "ci_ecal_cl", - inputHits=ci_ecal_reco.outputHitCollection, - mcHits="EcalEndcapPHits", - outputProtoClusters="EcalEndcapPProtoClusters", -) -# ci_ecal_cl = IslandCluster("ci_ecal_cl", -# inputHitCollection=ci_ecal_merger.outputHitCollection, -# outputProtoClusterCollection="EcalEndcapPProtoClusters", -# splitCluster=False, -# minClusterCenterEdep=10.*MeV, -# localDistXY=[10*mm, 10*mm]) -algorithms.append(ci_ecal_cl) - -ci_ecal_clreco = RecoCoG( - "ci_ecal_clreco", - inputProtoClusterCollection=ci_ecal_cl.outputProtoClusters, - outputClusterCollection="EcalEndcapPClusters", - enableEtaBounds=True, - logWeightBase=6.2, -) -algorithms.append(ci_ecal_clreco) - -# ci_ecal_clmerger = ClusterMerger("ci_ecal_clmerger", -# inputClusters = ci_ecal_clreco.outputClusterCollection, -# outputClusters = "EcalEndcapPMergedClusters", -# outputRelations = "EcalEndcapPMergedClusterRelations") -# algorithms.append(ci_ecal_clmerger) - -# Output -podout = PodioOutput("out", filename=output_rec) -podout.outputCommands = [ - "keep *", - "drop *Hits", - "keep *RecHits", - "keep *Layers", - "keep *Clusters", - "drop *ProtoClusters", - "drop outputParticles", - "drop InitTrackParams", -] + ["drop " + c for c in sim_coll] -algorithms.append(podout) - -ApplicationMgr( - TopAlg=algorithms, - EvtSel="NONE", - EvtMax=n_events, - ExtSvc=services, - OutputLevel=WARNING, - AuditAlgorithms=True, -) diff --git a/options/extra/reconstruction.hcal.py b/options/extra/reconstruction.hcal.py deleted file mode 100644 index 2d7d06c07fb6510f4fe4d0b0775d167dad8e8acf..0000000000000000000000000000000000000000 --- a/options/extra/reconstruction.hcal.py +++ /dev/null @@ -1,212 +0,0 @@ -from Gaudi.Configuration import * - -from Configurables import ApplicationMgr, AuditorSvc, EICDataSvc, PodioOutput, GeoSvc - -from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad - -import json - -detector_path = str(os.environ.get("DETECTOR_PATH", ".")) -detector_name = str(os.environ.get("DETECTOR_CONFIG", "epic")) -detector_config = str(os.environ.get("DETECTOR_CONFIG", detector_name)) -detector_version = str(os.environ.get("DETECTOR_VERSION", "main")) - -# Detector features that affect reconstruction -has_ecal_barrel_scfi = False -has_pid_backward_pfrich = False -if "epic" in detector_name and "imaging" in detector_config: - has_ecal_barrel_scfi = True - has_pid_backward_pfrich = True -if "epic" in detector_name and "brycecanyon" in detector_config: - has_ecal_barrel_scfi = True - has_pid_backward_pfrich = True - -# CAL reconstruction -# get sampling fractions from system environment variable -cb_hcal_sf = float(os.environ.get("CB_HCAL_SAMP_FRAC", 0.038)) -ci_hcal_sf = float(os.environ.get("CI_HCAL_SAMP_FRAC", 0.025)) -ce_hcal_sf = float(os.environ.get("CE_HCAL_SAMP_FRAC", 0.025)) - -# input calorimeter DAQ info -calo_daq = {} -with open( - "{}/calibrations/calo_digi_default.json".format(detector_path) -) as f: - calo_config = json.load(f) - ## add proper ADC capacity based on bit depth - for sys in calo_config: - cfg = calo_config[sys] - calo_daq[sys] = { - "dynamicRangeADC": eval(cfg["dynamicRange"]), - "capacityADC": 2 ** int(cfg["capacityBitsADC"]), - "pedestalMean": int(cfg["pedestalMean"]), - "pedestalSigma": float(cfg["pedestalSigma"]), - } -print(calo_daq) - -# input and output -input_sims = [ - f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip() -] -output_rec = str(os.environ["JUGGLER_REC_FILE"]) -n_events = int(os.environ["JUGGLER_N_EVENTS"]) - -# services -services = [] -# geometry service -services.append( - GeoSvc( - "GeoSvc", - detectors=["{}/{}.xml".format(detector_path, detector_config)], - OutputLevel=WARNING, - ) -) -# data service -services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)) - -# juggler components -from Configurables import PodioInput -from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi -from Configurables import Jug__Reco__CalorimeterHitReco as CalHitReco -from Configurables import Jug__Reco__CalorimeterHitsMerger as CalHitsMerger -from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster -from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG - -# branches needed from simulation root file -sim_coll = [ - "MCParticles", - "HcalBarrelHits", - "HcalBarrelHitsContributions", - "HcalEndcapPHits", - "HcalEndcapPHitsContributions", - "HcalEndcapNHits", - "HcalEndcapNHitsContributions", -] - -# list of algorithms -algorithms = [] - -# input -podin = PodioInput("PodioReader", collections=sim_coll) -algorithms.append(podin) - -# Hcal Hadron Endcap -ci_hcal_daq = calo_daq["hcal_pos_endcap"] - -ci_hcal_digi = CalHitDigi( - "ci_hcal_digi", - inputHitCollection="HcalEndcapPHits", - outputHitCollection="HcalEndcapPRawHits", - **ci_hcal_daq -) -algorithms.append(ci_hcal_digi) - -ci_hcal_reco = CalHitReco( - "ci_hcal_reco", - inputHitCollection=ci_hcal_digi.outputHitCollection, - outputHitCollection="HcalEndcapPRecHits", - thresholdFactor=5.0, - samplingFraction=ci_hcal_sf, - **ci_hcal_daq -) -algorithms.append(ci_hcal_reco) - -ci_hcal_merger = CalHitsMerger( - "ci_hcal_merger", - inputHitCollection=ci_hcal_reco.outputHitCollection, - outputHitCollection="HcalEndcapPMergedHits", - readoutClass="HcalEndcapPHits", - fields=["layer", "slice"], - fieldRefNumbers=[1, 0], -) -algorithms.append(ci_hcal_merger) - -ci_hcal_cl = IslandCluster( - "ci_hcal_cl", - inputHitCollection=ci_hcal_merger.outputHitCollection, - outputProtoClusterCollection="HcalEndcapPProtoClusters", - splitCluster=False, - minClusterCenterEdep=30.0 * MeV, - localDistXY=[15.0 * cm, 15.0 * cm], -) -algorithms.append(ci_hcal_cl) - -ci_hcal_clreco = RecoCoG( - "ci_hcal_clreco", - inputProtoClusterCollection=ci_hcal_cl.outputProtoClusterCollection, - outputClusterCollection="HcalEndcapPClusters", - logWeightBase=6.2, -) -algorithms.append(ci_hcal_clreco) - -# Hcal Electron Endcap -ce_hcal_daq = calo_daq["hcal_neg_endcap"] - -ce_hcal_digi = CalHitDigi( - "ce_hcal_digi", - inputHitCollection="HcalEndcapNHits", - outputHitCollection="HcalEndcapNRawHits", - **ce_hcal_daq -) -algorithms.append(ce_hcal_digi) - -ce_hcal_reco = CalHitReco( - "ce_hcal_reco", - inputHitCollection=ce_hcal_digi.outputHitCollection, - outputHitCollection="HcalEndcapNRecHits", - thresholdFactor=5.0, - samplingFraction=ce_hcal_sf, - **ce_hcal_daq -) -algorithms.append(ce_hcal_reco) - -ce_hcal_merger = CalHitsMerger( - "ce_hcal_merger", - inputHitCollection=ce_hcal_reco.outputHitCollection, - outputHitCollection="HcalEndcapNMergedHits", - readoutClass="HcalEndcapNHits", - fields=["layer", "slice"], - fieldRefNumbers=[1, 0], -) -algorithms.append(ce_hcal_merger) - -ce_hcal_cl = IslandCluster( - "ce_hcal_cl", - inputHitCollection=ce_hcal_merger.outputHitCollection, - outputProtoClusterCollection="HcalEndcapNProtoClusters", - splitCluster=False, - minClusterCenterEdep=30.0 * MeV, - localDistXY=[15.0 * cm, 15.0 * cm], -) -algorithms.append(ce_hcal_cl) - -ce_hcal_clreco = RecoCoG( - "ce_hcal_clreco", - inputProtoClusterCollection=ce_hcal_cl.outputProtoClusterCollection, - outputClusterCollection="HcalEndcapNClusters", - logWeightBase=6.2, -) -algorithms.append(ce_hcal_clreco) - -# Output -podout = PodioOutput("out", filename=output_rec) -podout.outputCommands = [ - "keep *", - "drop *Hits", - "keep *RecHits", - "keep *Layers", - "keep *Clusters", - "drop *ProtoClusters", - "drop outputParticles", - "drop InitTrackParams", -] + ["drop " + c for c in sim_coll] -algorithms.append(podout) - -ApplicationMgr( - TopAlg=algorithms, - EvtSel="NONE", - EvtMax=n_events, - ExtSvc=services, - OutputLevel=WARNING, - AuditAlgorithms=True, -) diff --git a/options/extra/reconstruction.raw.py b/options/extra/reconstruction.raw.py deleted file mode 100644 index 8348dd5898700da5ff86c9b1f916200544524b8a..0000000000000000000000000000000000000000 --- a/options/extra/reconstruction.raw.py +++ /dev/null @@ -1,384 +0,0 @@ -from Gaudi.Configuration import * - -from Configurables import ApplicationMgr, AuditorSvc, EICDataSvc, PodioOutput, GeoSvc - -from GaudiKernel.SystemOfUnits import eV, MeV, GeV, mm, cm, mrad - -import json - -detector_path = str(os.environ.get("DETECTOR_PATH", ".")) -detector_name = str(os.environ.get("DETECTOR_CONFIG", "epic")) -detector_config = str(os.environ.get("DETECTOR_CONFIG", detector_name)) -detector_version = str(os.environ.get("DETECTOR_VERSION", "main")) - -# Detector features that affect reconstruction -has_ecal_barrel_imaging = False -has_pid_backward_pfrich = False -if "epic" in detector_name and "imaging" in detector_config: - has_ecal_barrel_imaging = True - has_pid_backward_pfrich = True -if "epic" in detector_name and "brycecanyon" in detector_config: - has_ecal_barrel_imaging = True - has_pid_backward_pfrich = True - -# RICH reconstruction -qe_data = [ - (1.0, 0.25), - (7.5, 0.25), -] - -# input calorimeter DAQ info -calo_daq = {} -with open( - "{}/calibrations/calo_digi_default.json".format(detector_path) -) as f: - calo_config = json.load(f) - ## add proper ADC capacity based on bit depth - for sys in calo_config: - cfg = calo_config[sys] - calo_daq[sys] = { - "dynamicRangeADC": eval(cfg["dynamicRange"]), - "capacityADC": 2 ** int(cfg["capacityBitsADC"]), - "pedestalMean": int(cfg["pedestalMean"]), - "pedestalSigma": float(cfg["pedestalSigma"]), - } -print(calo_daq) - -# input and output -input_sims = [ - f.strip() for f in str.split(os.environ["JUGGLER_SIM_FILE"], ",") if f.strip() -] -output_rec = str(os.environ["JUGGLER_REC_FILE"]) -n_events = int(os.environ["JUGGLER_N_EVENTS"]) - -# services -services = [] -# auditor service -services.append(AuditorSvc("AuditorSvc", Auditors=["ChronoAuditor", "MemStatAuditor"])) -# geometry service -services.append( - GeoSvc( - "GeoSvc", - detectors=["{}/{}.xml".format(detector_path, detector_config)], - OutputLevel=WARNING, - ) -) -# data service -services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)) - -# juggler components -from Configurables import PodioInput - -from Configurables import Jug__Digi__SimTrackerHitsCollector as SimTrackerHitsCollector -from Configurables import Jug__Digi__PhotoMultiplierDigi as PhotoMultiplierDigi -from Configurables import Jug__Digi__CalorimeterHitDigi as CalHitDigi -from Configurables import Jug__Digi__SiliconTrackerDigi as TrackerDigi - -# branches needed from simulation root file -sim_coll = [ - "MCParticles", - "B0TrackerHits", - "EcalEndcapNHits", - "EcalEndcapNHitsContributions", - "EcalEndcapPHits", - "EcalEndcapPHitsContributions", - "HcalBarrelHits", - "HcalBarrelHitsContributions", - "HcalEndcapPHits", - "HcalEndcapPHitsContributions", - "HcalEndcapNHits", - "HcalEndcapNHitsContributions", - "DRICHHits", -] -ecal_barrel_imaging_collections = [ - "EcalBarrelImagingHits", - "EcalBarrelImagingHitsContributions", - "EcalBarrelScFiHits", - "EcalBarrelScFiHitsContributions", -] -ecal_barrel_sciglass_collections = [ - "EcalBarrelSciGlassHits", - "EcalBarrelSciGlassHitsContributions", -] -if has_ecal_barrel_imaging: - sim_coll += ecal_barrel_imaging_collections -else: - sim_coll += ecal_barrel_sciglass_collections - -forward_romanpot_collections = [ - "ForwardRomanPotHits", -] -forward_offmtracker_collections = [ - "ForwardOffMTrackerHits", -] -sim_coll += forward_romanpot_collections + forward_offmtracker_collections - -tracker_endcap_collections = [ - "TrackerEndcapHits", -] -tracker_barrel_collections = [ - "SiBarrelHits", -] -vertex_barrel_collections = [ - "VertexBarrelHits", -] -mpgd_barrel_collections = [ - "MPGDBarrelHits", -] - -sim_coll += ( - tracker_endcap_collections - + tracker_barrel_collections - + vertex_barrel_collections - + mpgd_barrel_collections -) - -if has_pid_backward_pfrich: - sim_coll.append("PFRICHHits") -else: - sim_coll.append("MRICHHits") - -# list of algorithms -algorithms = [] - -# input -podin = PodioInput("PodioReader", collections=sim_coll) -algorithms.append(podin) - -## Roman pots -ffi_romanpot_coll = SimTrackerHitsCollector( - "ffi_romanpot_coll", - inputSimTrackerHits=forward_romanpot_collections, - outputSimTrackerHits="ForwardRomanPotAllHits", -) -algorithms.append(ffi_romanpot_coll) -ffi_romanpot_digi = TrackerDigi( - "ffi_romanpot_digi", - inputHitCollection=ffi_romanpot_coll.outputSimTrackerHits, - outputHitCollection="ForwardRomanPotRawHits", - timeResolution=8, -) -algorithms.append(ffi_romanpot_digi) - -## Off momentum tracker -ffi_offmtracker_coll = SimTrackerHitsCollector( - "ffi_offmtracker_coll", - inputSimTrackerHits=forward_offmtracker_collections, - outputSimTrackerHits="ForwardOffMTrackerAllHits", -) -algorithms.append(ffi_offmtracker_coll) -ffi_offmtracker_digi = TrackerDigi( - "ffi_offmtracker_digi", - inputHitCollection=ffi_offmtracker_coll.outputSimTrackerHits, - outputHitCollection="ForwardOffMTrackerRawHits", - timeResolution=8, -) -algorithms.append(ffi_offmtracker_digi) - -## B0 tracker -trk_b0_digi = TrackerDigi( - "trk_b0_digi", - inputHitCollection="B0TrackerHits", - outputHitCollection="B0TrackerRawHits", - timeResolution=8, -) -algorithms.append(trk_b0_digi) - -# Crystal Endcap Ecal -ce_ecal_daq = calo_daq["ecal_neg_endcap"] - -ce_ecal_digi = CalHitDigi( - "ce_ecal_digi", - inputHitCollection="EcalEndcapNHits", - outputHitCollection="EcalEndcapNRawHits", - energyResolutions=[0.0, 0.02, 0.0], - **ce_ecal_daq -) -algorithms.append(ce_ecal_digi) - -# Endcap Sampling Ecal -ci_ecal_daq = calo_daq["ecal_pos_endcap"] - -ci_ecal_digi = CalHitDigi( - "ci_ecal_digi", - inputHitCollection="EcalEndcapPHits", - outputHitCollection="EcalEndcapPRawHits", - **ci_ecal_daq -) -algorithms.append(ci_ecal_digi) - -# Central Barrel Ecal -if has_ecal_barrel_imaging: - # Central ECAL Imaging Calorimeter - img_barrel_daq = calo_daq["ecal_barrel_imaging"] - - img_barrel_digi = CalHitDigi( - "img_barrel_digi", - inputHitCollection="EcalBarrelImagingHits", - outputHitCollection="EcalBarrelImagingRawHits", - energyResolutions=[0.0, 0.02, 0.0], # 2% flat resolution - **img_barrel_daq - ) - algorithms.append(img_barrel_digi) - - # Central ECAL SciFi - scfi_barrel_daq = calo_daq["ecal_barrel_scfi"] - - scfi_barrel_digi = CalHitDigi( - "scfi_barrel_digi", - inputHitCollection="EcalBarrelScFiHits", - outputHitCollection="EcalBarrelScFiRawHits", - **scfi_barrel_daq - ) - algorithms.append(scfi_barrel_digi) -else: - # SciGlass calorimeter - sciglass_ecal_daq = calo_daq["ecal_barrel_sciglass"] - - sciglass_ecal_digi = CalHitDigi( - "sciglass_ecal_digi", - inputHitCollection="EcalBarrelSciGlassHits", - outputHitCollection="EcalBarrelSciGlassRawHits", - energyResolutions=[0.0, 0.02, 0.0], # 2% flat resolution - **sciglass_ecal_daq - ) - algorithms.append(sciglass_ecal_digi) - -# Central Barrel Hcal -cb_hcal_daq = calo_daq["hcal_barrel"] - -cb_hcal_digi = CalHitDigi( - "cb_hcal_digi", - inputHitCollection="HcalBarrelHits", - outputHitCollection="HcalBarrelRawHits", - **cb_hcal_daq -) -algorithms.append(cb_hcal_digi) - -# Hcal Hadron Endcap -ci_hcal_daq = calo_daq["hcal_pos_endcap"] - -ci_hcal_digi = CalHitDigi( - "ci_hcal_digi", - inputHitCollection="HcalEndcapPHits", - outputHitCollection="HcalEndcapPRawHits", - **ci_hcal_daq -) -algorithms.append(ci_hcal_digi) - -# Hcal Electron Endcap -ce_hcal_daq = calo_daq["hcal_neg_endcap"] - -ce_hcal_digi = CalHitDigi( - "ce_hcal_digi", - inputHitCollection="HcalEndcapNHits", - outputHitCollection="HcalEndcapNRawHits", - **ce_hcal_daq -) -algorithms.append(ce_hcal_digi) - -# Tracking -trk_b_coll = SimTrackerHitsCollector( - "trk_b_coll", - inputSimTrackerHits=tracker_barrel_collections, - outputSimTrackerHits="TrackerBarrelAllHits", -) -algorithms.append(trk_b_coll) - -trk_b_digi = TrackerDigi( - "trk_b_digi", - inputHitCollection=trk_b_coll.outputSimTrackerHits, - outputHitCollection="TrackerBarrelRawHits", - timeResolution=8, -) -algorithms.append(trk_b_digi) - -trk_ec_coll = SimTrackerHitsCollector( - "trk_ec_coll", - inputSimTrackerHits=tracker_endcap_collections, - outputSimTrackerHits="TrackerEndcapAllHits", -) -algorithms.append(trk_ec_coll) - -trk_ec_digi = TrackerDigi( - "trk_ec_digi", - inputHitCollection=trk_ec_coll.outputSimTrackerHits, - outputHitCollection="TrackerEndcapRawHits", - timeResolution=8, -) -algorithms.append(trk_ec_digi) - -vtx_b_coll = SimTrackerHitsCollector( - "vtx_b_coll", - inputSimTrackerHits=vertex_barrel_collections, - outputSimTrackerHits="VertexBarrelAllHits", -) -algorithms.append(vtx_b_coll) - -vtx_b_digi = TrackerDigi( - "vtx_b_digi", - inputHitCollection=vtx_b_coll.outputSimTrackerHits, - outputHitCollection="VertexBarrelRawHits", - timeResolution=8, -) -algorithms.append(vtx_b_digi) - -mpgd_b_coll = SimTrackerHitsCollector( - "mpgd_b_coll", - inputSimTrackerHits=mpgd_barrel_collections, - outputSimTrackerHits="MPGDTrackerBarrelAllHits", -) -algorithms.append(mpgd_b_coll) - -mpgd_b_digi = TrackerDigi( - "mpgd_b_digi", - inputHitCollection=mpgd_b_coll.outputSimTrackerHits, - outputHitCollection="MPGDTrackerBarrelRawHits", - timeResolution=8, -) -algorithms.append(mpgd_b_digi) - -# DRICH -drich_digi = PhotoMultiplierDigi( - "drich_digi", - inputHitCollection="DRICHHits", - outputHitCollection="DRICHRawHits", - quantumEfficiency=[(a * eV, b) for a, b in qe_data], -) -algorithms.append(drich_digi) - -# MRICH -if "acadia" in detector_version: - mrich_digi = PhotoMultiplierDigi( - "mrich_digi", - inputHitCollection="MRICHHits", - outputHitCollection="MRICHRawHits", - quantumEfficiency=[(a * eV, b) for a, b in qe_data], - ) - algorithms.append(mrich_digi) - -# Output -podout = PodioOutput("out", filename=output_rec) -podout.outputCommands = ( - [ - "keep *", - "drop *Hits", - "keep *Layers", - "keep *Clusters", - "drop *ProtoClusters", - "drop outputParticles", - "drop InitTrackParams", - ] - + ["drop " + c for c in sim_coll] - + ["keep *RawHits"] -) -algorithms.append(podout) - -ApplicationMgr( - TopAlg=algorithms, - EvtSel="NONE", - EvtMax=n_events, - ExtSvc=services, - OutputLevel=WARNING, - AuditAlgorithms=True, -)