From 36fa87ac38d48ae58d1b79f1f99e9fc7c8a90c5e Mon Sep 17 00:00:00 2001 From: Christopher Dilks Date: Mon, 13 Nov 2023 18:47:28 -0500 Subject: [PATCH] feat: add event builder filter algorithm --- meson.build | 2 +- .../EventBuilderFilter.cc | 17 ++++++++++++++++ .../event_builder_filter/EventBuilderFilter.h | 17 ++++++++++++++++ .../clas12/event_builder_filter/README.md | 3 +++ .../{clas12/fiducial_cuts => }/meson.build | 4 ++-- src/iguana/Arbiter.cc | 2 +- src/iguana/Arbiter.h | 4 ++-- src/iguana/meson.build | 1 + src/services/Algorithm.h | 7 ++++++- src/services/meson.build | 4 ++-- src/tests/main.cc | 20 +++++++++++++++++-- 11 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 src/algorithms/clas12/event_builder_filter/EventBuilderFilter.cc create mode 100644 src/algorithms/clas12/event_builder_filter/EventBuilderFilter.h create mode 100644 src/algorithms/clas12/event_builder_filter/README.md rename src/algorithms/{clas12/fiducial_cuts => }/meson.build (78%) diff --git a/meson.build b/meson.build index 8134c3b7..ad05c82b 100644 --- a/meson.build +++ b/meson.build @@ -20,6 +20,6 @@ fmt_dep = dependency('fmt') hipo_dep = dependency('hipo4', method: 'cmake', cmake_args: '-DCMAKE_PREFIX_PATH=' + get_option('hipo')) subdir('src/services') -subdir('src/algorithms/clas12/fiducial_cuts') +subdir('src/algorithms') subdir('src/iguana') subdir('src/tests') diff --git a/src/algorithms/clas12/event_builder_filter/EventBuilderFilter.cc b/src/algorithms/clas12/event_builder_filter/EventBuilderFilter.cc new file mode 100644 index 00000000..6bc2ff6f --- /dev/null +++ b/src/algorithms/clas12/event_builder_filter/EventBuilderFilter.cc @@ -0,0 +1,17 @@ +#include "EventBuilderFilter.h" + +namespace iguana::clas12 { + + void EventBuilderFilter::Start() { + m_log->Info("start event builder filter"); + } + + Algorithm::BankMap EventBuilderFilter::Run(Algorithm::BankMap inputBanks) { + return inputBanks; + } + + void EventBuilderFilter::Stop() { + m_log->Info("stop event builder filter"); + } + +} diff --git a/src/algorithms/clas12/event_builder_filter/EventBuilderFilter.h b/src/algorithms/clas12/event_builder_filter/EventBuilderFilter.h new file mode 100644 index 00000000..b9c559b6 --- /dev/null +++ b/src/algorithms/clas12/event_builder_filter/EventBuilderFilter.h @@ -0,0 +1,17 @@ +#pragma once + +#include "services/Algorithm.h" + +namespace iguana::clas12 { + + class EventBuilderFilter : public Algorithm { + + public: + EventBuilderFilter() : Algorithm("event_builder_filter") {} + ~EventBuilderFilter() {} + + void Start() override; + Algorithm::BankMap Run(Algorithm::BankMap inputBanks) override; + void Stop() override; + }; +} diff --git a/src/algorithms/clas12/event_builder_filter/README.md b/src/algorithms/clas12/event_builder_filter/README.md new file mode 100644 index 00000000..79958d20 --- /dev/null +++ b/src/algorithms/clas12/event_builder_filter/README.md @@ -0,0 +1,3 @@ +# Event Builder Filter + +Filters a particle bank for specific Event Builder PDGs diff --git a/src/algorithms/clas12/fiducial_cuts/meson.build b/src/algorithms/meson.build similarity index 78% rename from src/algorithms/clas12/fiducial_cuts/meson.build rename to src/algorithms/meson.build index cc2767fe..fa9f2f32 100644 --- a/src/algorithms/clas12/fiducial_cuts/meson.build +++ b/src/algorithms/meson.build @@ -1,9 +1,9 @@ algo_headers = [ - 'FiducialCuts.h', + 'clas12/event_builder_filter/EventBuilderFilter.h', ] algo_sources = [ - 'FiducialCuts.cc', + 'clas12/event_builder_filter/EventBuilderFilter.cc', ] algo_lib = shared_library( diff --git a/src/iguana/Arbiter.cc b/src/iguana/Arbiter.cc index a2cf801c..e0e1f7dc 100644 --- a/src/iguana/Arbiter.cc +++ b/src/iguana/Arbiter.cc @@ -3,7 +3,7 @@ namespace iguana { Arbiter::Arbiter() { - algo_map.insert({clas12_FiducialCuts, std::make_shared()}); + algo_map.insert({clas12_EventBuilderFilter, std::make_shared()}); } } diff --git a/src/iguana/Arbiter.h b/src/iguana/Arbiter.h index 20ba893b..d3fd06ec 100644 --- a/src/iguana/Arbiter.h +++ b/src/iguana/Arbiter.h @@ -5,7 +5,7 @@ #include // TODO: avoid listing the algos -#include "algorithms/clas12/fiducial_cuts/FiducialCuts.h" +#include "algorithms/clas12/event_builder_filter/EventBuilderFilter.h" namespace iguana { @@ -18,7 +18,7 @@ namespace iguana { // TODO: avoid listing the algos // TODO: who should own the algorithm instances: Arbiter or the user? enum algo { - clas12_FiducialCuts + clas12_EventBuilderFilter }; // TODO: make private diff --git a/src/iguana/meson.build b/src/iguana/meson.build index 97ff1648..ffe284ff 100644 --- a/src/iguana/meson.build +++ b/src/iguana/meson.build @@ -10,6 +10,7 @@ iguana_lib = shared_library( 'Iguana', iguana_sources, include_directories: project_inc, + dependencies: [ fmt_dep, hipo_dep ], link_with: [ algo_lib, services_lib ], install: true, install_dir: project_lib_install_dir, diff --git a/src/services/Algorithm.h b/src/services/Algorithm.h index d5cbf740..624a9c2b 100644 --- a/src/services/Algorithm.h +++ b/src/services/Algorithm.h @@ -1,15 +1,20 @@ #pragma once #include "Logger.h" +#include namespace iguana { class Algorithm { public: + + using BankMap = std::unordered_map; + Algorithm(std::string name); + virtual void Start() = 0; - virtual int Run(int a, int b) = 0; + virtual BankMap Run(BankMap inputBanks) = 0; virtual void Stop() = 0; virtual ~Algorithm() {} diff --git a/src/services/meson.build b/src/services/meson.build index c60ef1b4..96cfb9ab 100644 --- a/src/services/meson.build +++ b/src/services/meson.build @@ -12,14 +12,14 @@ services_lib = shared_library( 'IguanaServices', services_sources, include_directories: project_inc, - dependencies: fmt_dep, + dependencies: [ fmt_dep, hipo_dep ], install: true, install_dir: project_lib_install_dir, install_rpath: project_lib_rpath, ) services_dep = declare_dependency( - dependencies: fmt_dep + dependencies: [ fmt_dep, hipo_dep ] ) install_headers(services_headers, subdir : meson.project_name()) diff --git a/src/tests/main.cc b/src/tests/main.cc index f8b8763b..a372214d 100644 --- a/src/tests/main.cc +++ b/src/tests/main.cc @@ -12,9 +12,25 @@ int main(int argc, char **argv) { reader.readDictionary(factory); factory.show(); + hipo::bank particleBank(factory.getSchema("REC::Particle")); + hipo::event event; + iguana::Arbiter arb; - auto algo = arb.algo_map.at(iguana::Arbiter::clas12_FiducialCuts); + auto algo = arb.algo_map.at(iguana::Arbiter::clas12_EventBuilderFilter); algo->Start(); - fmt::print("test result: {}\n", algo->Run(3,4)); + + int count = 0; + while(reader.next()) { + if(count > 3) break; + reader.read(event); + event.getStructure(particleBank); + + auto resultBank = algo->Run({{"REC::Particle", particleBank}}); + + fmt::print("BEFORE -> AFTER: {} -> {}\n", particleBank.getRows(), resultBank.at("REC::Particle").getRows()); + + count++; + } + algo->Stop(); }