From 8a3f33eacde6e3724d2dc773475ce401522cb923 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 16 Aug 2022 12:34:56 -0500 Subject: [PATCH 1/6] feat: find_package algorithms --- CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f178908..2bc508c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,15 @@ find_package(Microsoft.GSL CONFIG) find_package(EICD REQUIRED) find_package(EDM4HEP 0.4.1 REQUIRED) +find_package(algorithms) +if(${algorithms_FOUND}) + message(STATUS "algorithms library found") + add_definitions("-DUSE_ALGORITHMS") + set(algorithms "algorithms::JugDigiPlugins") +else() + message(STATUS "algorithms library not found.") +endif() + find_package(podio 0.14.1 REQUIRED) add_definitions("-Dpodio_VERSION_MAJOR=${podio_VERSION_MAJOR}") add_definitions("-Dpodio_VERSION_MINOR=${podio_VERSION_MINOR}") -- GitLab From 7e454a2a28b1db59e824c91b7c9a17f0b867c577 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 16 Aug 2022 12:42:56 -0500 Subject: [PATCH 2/6] fix: ensure ${algorithms} exists when library not found --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bc508c4..e38f3484 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,7 @@ if(${algorithms_FOUND}) set(algorithms "algorithms::JugDigiPlugins") else() message(STATUS "algorithms library not found.") + set(algorithms "") endif() find_package(podio 0.14.1 REQUIRED) -- GitLab From 971a3ce283edb1d446dd85ca956bcd021374e342 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 16 Aug 2022 12:43:27 -0500 Subject: [PATCH 3/6] fix: JugDigi: link against algorithms --- JugDigi/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/JugDigi/CMakeLists.txt b/JugDigi/CMakeLists.txt index 64a0749a..c44457ce 100644 --- a/JugDigi/CMakeLists.txt +++ b/JugDigi/CMakeLists.txt @@ -15,6 +15,7 @@ gaudi_add_module(JugDigiPlugins ROOT::Core ROOT::RIO ROOT::Tree EDM4HEP::edm4hep EICD::eicd + ${algorithms} ) target_include_directories(JugDigiPlugins PUBLIC -- GitLab From e21affb657647433891940597522340b64c63f0a Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 16 Aug 2022 12:43:55 -0500 Subject: [PATCH 4/6] feat: CalorimeterHitDigi: include algorithms --- JugDigi/src/components/CalorimeterHitDigi.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/JugDigi/src/components/CalorimeterHitDigi.cpp b/JugDigi/src/components/CalorimeterHitDigi.cpp index 62241895..221c6961 100644 --- a/JugDigi/src/components/CalorimeterHitDigi.cpp +++ b/JugDigi/src/components/CalorimeterHitDigi.cpp @@ -34,6 +34,10 @@ #include "eicd/RawCalorimeterHitCollection.h" #include "eicd/RawCalorimeterHitData.h" +// Algorithms library +#ifdef USE_ALGORITHMS +#include "JugDigi/CalorimeterHitDigi.h" +#endif using namespace Gaudi::Units; -- GitLab From a2a1d5fa00c3706c1f43fe1e824d28e79d38e566 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 16 Aug 2022 15:57:57 -0500 Subject: [PATCH 5/6] feat: implement use of algorithms in two juggler plugins --- .../src/components/CalorimeterBirksCorr.cpp | 19 +++++++++++++++++ JugDigi/src/components/CalorimeterHitDigi.cpp | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/JugDigi/src/components/CalorimeterBirksCorr.cpp b/JugDigi/src/components/CalorimeterBirksCorr.cpp index b42c1dd7..2a3111e1 100644 --- a/JugDigi/src/components/CalorimeterBirksCorr.cpp +++ b/JugDigi/src/components/CalorimeterBirksCorr.cpp @@ -24,6 +24,10 @@ #include "eicd/RawCalorimeterHitCollection.h" #include "eicd/RawCalorimeterHitData.h" +// Algorithms library +#ifdef USE_ALGORITHMS +#include "JugDigi/CalorimeterBirksCorr.h" +#endif using namespace Gaudi::Units; @@ -45,6 +49,10 @@ namespace Jug::Digi { DataHandle m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer, this}; +#ifdef USE_ALGORITHMS + algorithms::digi::CalorimeterBirksCorr m_algorithm; +#endif + SmartIF m_pidSvc; // unitless conterpart of arguments double birksConstant{0}; @@ -71,6 +79,10 @@ namespace Jug::Digi { return StatusCode::FAILURE; } +#ifdef USE_ALGORITHMS + //m_algorithm.setService("particleService", [&m_pidSvc](int pdg){ return m_pidSvc->particle(pdg); }); +#endif + // using juggler internal units (GeV, mm, radian, ns) birksConstant = m_birksConstant.value() / mm * GeV; @@ -79,6 +91,12 @@ namespace Jug::Digi { StatusCode execute() override { +#ifdef USE_ALGORITHMS + const auto* const input = m_inputHitCollection.get(); + auto* output = m_outputHitCollection.createAndPut(); + *output = m_algorithm(*input); + return StatusCode::SUCCESS; +#else auto& ohits = *m_outputHitCollection.createAndPut(); for (const auto& hit : *m_inputHitCollection.get()) { auto ohit = ohits->create(hit.getCellID(), hit.getEnergy(), hit.getPosition()); @@ -98,6 +116,7 @@ namespace Jug::Digi { ohit.setEnergy(energy); } return StatusCode::SUCCESS; +#endif } }; // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) diff --git a/JugDigi/src/components/CalorimeterHitDigi.cpp b/JugDigi/src/components/CalorimeterHitDigi.cpp index 221c6961..e52b5e42 100644 --- a/JugDigi/src/components/CalorimeterHitDigi.cpp +++ b/JugDigi/src/components/CalorimeterHitDigi.cpp @@ -87,6 +87,10 @@ namespace Jug::Digi { DataHandle m_outputHitCollection{ "outputHitCollection", Gaudi::DataHandle::Writer, this}; +#ifdef USE_ALGORITHMS + algorithms::digi::CalorimeterHitDigi m_algorithm; +#endif + // ill-formed: using GaudiAlgorithm::GaudiAlgorithm; CalorimeterHitDigi(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) { @@ -99,6 +103,10 @@ namespace Jug::Digi { if (GaudiAlgorithm::initialize().isFailure()) { return StatusCode::FAILURE; } +#ifdef USE_ALGORITHMS + m_algorithm.initialize(); +#endif + // random number generator from service auto randSvc = svc("RndmGenSvc", true); auto sc = m_normDist.initialize(randSvc, Rndm::Gauss(0.0, 1.0)); @@ -158,12 +166,25 @@ namespace Jug::Digi { StatusCode execute() override { +#ifdef USE_ALGORITHMS + // input collections + const auto* const simhits = m_inputHitCollection.get(); + // output collections + auto* rawhits = m_outputHitCollection.createAndPut(); + + // apply algorithms + *rawhits = m_algorithm(*simhits); + + return StatusCode::SUCCESS; +#else + if (!u_fields.value().empty()) { signal_sum_digi(); } else { single_hits_digi(); } return StatusCode::SUCCESS; +#endif } private: -- GitLab From 9dccbd5b21635ae2d647bc7020165a1edf994e79 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Tue, 16 Aug 2022 21:06:21 -0500 Subject: [PATCH 6/6] attempt at registering properties --- JugDigi/src/components/CalorimeterBirksCorr.cpp | 4 ++++ JugDigi/src/components/CalorimeterHitDigi.cpp | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/JugDigi/src/components/CalorimeterBirksCorr.cpp b/JugDigi/src/components/CalorimeterBirksCorr.cpp index 2a3111e1..6811f5d4 100644 --- a/JugDigi/src/components/CalorimeterBirksCorr.cpp +++ b/JugDigi/src/components/CalorimeterBirksCorr.cpp @@ -63,6 +63,10 @@ namespace Jug::Digi { { declareProperty("inputHitCollection", m_inputHitCollection, ""); declareProperty("outputHitCollection", m_outputHitCollection, ""); + +#ifdef USE_ALGORITHMS + m_algorithms->registerProperty{"birksConstant", m_birksConstant}; +#endif } StatusCode initialize() override diff --git a/JugDigi/src/components/CalorimeterHitDigi.cpp b/JugDigi/src/components/CalorimeterHitDigi.cpp index e52b5e42..2c0fcb79 100644 --- a/JugDigi/src/components/CalorimeterHitDigi.cpp +++ b/JugDigi/src/components/CalorimeterHitDigi.cpp @@ -96,6 +96,14 @@ namespace Jug::Digi { : GaudiAlgorithm(name, svcLoc) { declareProperty("inputHitCollection", m_inputHitCollection, ""); declareProperty("outputHitCollection", m_outputHitCollection, ""); + +#ifdef USE_ALGORITHMS + // Connecting Gaudi properties to algorithm + m_algorithm.setProperty("pedestalMean", m_pedMeanADC); + + // Connecting Gaudi services to algorithm + m_algorithm.setService("geoSvc", m_normDist); +#endif } StatusCode initialize() override -- GitLab