From 4c9bbd17c2994d439c9087b3d19571b8d8b254f6 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Tue, 5 May 2026 18:56:29 +0000 Subject: [PATCH 01/11] creating tutorial plugin --- Mach3Plugins/CMakeLists.txt | 19 +++++++++ Mach3Plugins/MCMCTutorialPlugin.cpp | 62 +++++++++++++++++++++++++++++ Mach3Plugins/MCMCTutorialPlugin.hpp | 19 +++++++++ 3 files changed, 100 insertions(+) create mode 100644 Mach3Plugins/CMakeLists.txt create mode 100644 Mach3Plugins/MCMCTutorialPlugin.cpp create mode 100644 Mach3Plugins/MCMCTutorialPlugin.hpp diff --git a/Mach3Plugins/CMakeLists.txt b/Mach3Plugins/CMakeLists.txt new file mode 100644 index 0000000..9b2ccd2 --- /dev/null +++ b/Mach3Plugins/CMakeLists.txt @@ -0,0 +1,19 @@ +add_custom_target(TutorialPlugins) + +foreach(app + MCMCTutorialPlugin + ) + + add_library(${app} SHARED ${app}.cpp) + + target_link_libraries(${app} PRIVATE MaCh3Tutorial::SamplesTutorial MaCh3::All) + target_include_directories(${app} PUBLIC $) + + +# add_executable(${app} ${app}.cpp) +# target_link_libraries(${app} MaCh3Tutorial::ValidationsUtils MaCh3Tutorial::SamplesTutorial) + +# add_dependencies(TutorialApps ${app}) +# install(TARGETS ${app} DESTINATION bin) +endforeach(app) + diff --git a/Mach3Plugins/MCMCTutorialPlugin.cpp b/Mach3Plugins/MCMCTutorialPlugin.cpp new file mode 100644 index 0000000..086f2ed --- /dev/null +++ b/Mach3Plugins/MCMCTutorialPlugin.cpp @@ -0,0 +1,62 @@ +// MaCh3 includes +#include "Fitters/MaCh3Factory.h" +#include "SamplesTutorial/SampleHandlerTutorial.h" +#include "MaCh3Plugins/MCMCTutorialPlugin.hpp" + +MACH3_REGISTER_PLUGIN(mach3::MCMCTutorialPlugin) + +namespace mach3{ + MaCh3ArgumentParser* MCMCTutorialPlugin::get_parser(){ + m_parser = new MaCh3ArgumentParser("tutorial", "1.0", argparse::default_arguments::help); + m_parser->add_argument("config") + .help("Config file.") + .metavar("CONFIG") + .required(); + // m_parser->add_argument("root-file") + // .help("Root file.") + // .metavar("ROOT_FILE") + // .required(); + + return m_parser; + } + int MCMCTutorialPlugin::run(){ + std::string config = m_parser->get("config"); + // std::string inputFile = m_parser->get("root-file"); + + std::vector args = { m_parser->name(), config };//, inputFile }; + + // Convert to char* array + std::vector argv; + argv.reserve(args.size()); + for (auto& s : args) + argv.push_back(s.data()); + + // Initialise manger responsible for config handling + auto FitManager = MaCh3ManagerFactory(argv.size(), argv.data()); + + // Initialise covariance class reasonable for Systematics + auto xsec = MaCh3CovarianceFactory(FitManager.get(), "Xsec"); + + // Initialise samplePDF + auto SampleConfig = Get>(FitManager->raw()["General"]["TutorialSamples"], __FILE__ , __LINE__); + auto mySamples = MaCh3SampleHandlerFactory(SampleConfig, xsec.get()); + + // Create MCMC Class + std::unique_ptr MaCh3Fitter = MaCh3FitterFactory(FitManager.get()); + // Add covariance to MCM + MaCh3Fitter->AddSystObj(xsec.get()); + for (size_t i = 0; i < SampleConfig.size(); ++i) { + MaCh3Fitter->AddSampleHandler(mySamples[i]); + } + // Run MCMCM + MaCh3Fitter->RunMCMC(); + + for (size_t i = 0; i < SampleConfig.size(); ++i) { + delete mySamples[i]; + } + return 0; + } + + + +}; diff --git a/Mach3Plugins/MCMCTutorialPlugin.hpp b/Mach3Plugins/MCMCTutorialPlugin.hpp new file mode 100644 index 0000000..dc6ba30 --- /dev/null +++ b/Mach3Plugins/MCMCTutorialPlugin.hpp @@ -0,0 +1,19 @@ +#pragma once +#include "api/plugin.hpp" + +namespace mach3{ + + class MCMCTutorialPlugin: public IPlugin{ + + public: + virtual ~MCMCTutorialPlugin(){ + if (m_parser) { delete m_parser; } + } + MaCh3ArgumentParser* get_parser() override; + int run() override; + + + private: + MaCh3ArgumentParser* m_parser; + }; +}; From 7fb9cdb394c76a69bd5ecd977a1c0ee867a3ebdc Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Tue, 5 May 2026 18:57:53 +0000 Subject: [PATCH 02/11] Updating cmake file --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6713a45..ed20606 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,6 +147,7 @@ add_subdirectory(CIValidations) add_subdirectory(Tutorial) add_subdirectory(SplinesTutorial) add_subdirectory(SamplesTutorial) +add_subdirectory(MaCh3Plugins) # MOVE THIS BLOCK HERE - BEFORE add_subdirectory(python) # After MaCh3 is added/found, determine MaCh3_PREFIX From f1e17c602ea5f8f93b3c4820f1851724d6949296 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Wed, 6 May 2026 13:08:40 +0000 Subject: [PATCH 03/11] fix typo --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed20606..65f0b5a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,7 +147,7 @@ add_subdirectory(CIValidations) add_subdirectory(Tutorial) add_subdirectory(SplinesTutorial) add_subdirectory(SamplesTutorial) -add_subdirectory(MaCh3Plugins) +add_subdirectory(Mach3Plugins) # MOVE THIS BLOCK HERE - BEFORE add_subdirectory(python) # After MaCh3 is added/found, determine MaCh3_PREFIX From b8e0cbbbb5b5a30161cf9e240b7b701a4c122011 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Mon, 18 May 2026 13:51:57 +0000 Subject: [PATCH 04/11] remove header file. --- Mach3Plugins/MCMCTutorialPlugin.cpp | 22 +++++++++++++++++----- Mach3Plugins/MCMCTutorialPlugin.hpp | 19 ------------------- 2 files changed, 17 insertions(+), 24 deletions(-) delete mode 100644 Mach3Plugins/MCMCTutorialPlugin.hpp diff --git a/Mach3Plugins/MCMCTutorialPlugin.cpp b/Mach3Plugins/MCMCTutorialPlugin.cpp index 086f2ed..33b3947 100644 --- a/Mach3Plugins/MCMCTutorialPlugin.cpp +++ b/Mach3Plugins/MCMCTutorialPlugin.cpp @@ -1,12 +1,18 @@ // MaCh3 includes +#include "api/plugin.hpp" #include "Fitters/MaCh3Factory.h" #include "SamplesTutorial/SampleHandlerTutorial.h" -#include "MaCh3Plugins/MCMCTutorialPlugin.hpp" +// #include "Mach3Plugins/MCMCTutorialPlugin.hpp" -MACH3_REGISTER_PLUGIN(mach3::MCMCTutorialPlugin) +namespace M3{ -namespace mach3{ - MaCh3ArgumentParser* MCMCTutorialPlugin::get_parser(){ + class MCMCTutorialPlugin: public IPlugin{ + + public: + virtual ~MCMCTutorialPlugin(){ + if (m_parser) { delete m_parser; } + } + MaCh3ArgumentParser* get_parser(){ m_parser = new MaCh3ArgumentParser("tutorial", "1.0", argparse::default_arguments::help); m_parser->add_argument("config") .help("Config file.") @@ -19,7 +25,8 @@ namespace mach3{ return m_parser; } - int MCMCTutorialPlugin::run(){ + + int run(){ std::string config = m_parser->get("config"); // std::string inputFile = m_parser->get("root-file"); @@ -58,5 +65,10 @@ namespace mach3{ } + private: + MaCh3ArgumentParser* m_parser; + }; }; + +MACH3_REGISTER_PLUGIN(M3::MCMCTutorialPlugin) diff --git a/Mach3Plugins/MCMCTutorialPlugin.hpp b/Mach3Plugins/MCMCTutorialPlugin.hpp deleted file mode 100644 index dc6ba30..0000000 --- a/Mach3Plugins/MCMCTutorialPlugin.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once -#include "api/plugin.hpp" - -namespace mach3{ - - class MCMCTutorialPlugin: public IPlugin{ - - public: - virtual ~MCMCTutorialPlugin(){ - if (m_parser) { delete m_parser; } - } - MaCh3ArgumentParser* get_parser() override; - int run() override; - - - private: - MaCh3ArgumentParser* m_parser; - }; -}; From 010a0283ec9ccd12e36013b0ec53ce7ce2354a94 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Wed, 27 May 2026 13:11:49 +0000 Subject: [PATCH 05/11] adding the nsteps and override CLI options --- Mach3Plugins/MCMCTutorialPlugin.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Mach3Plugins/MCMCTutorialPlugin.cpp b/Mach3Plugins/MCMCTutorialPlugin.cpp index 33b3947..c303336 100644 --- a/Mach3Plugins/MCMCTutorialPlugin.cpp +++ b/Mach3Plugins/MCMCTutorialPlugin.cpp @@ -18,19 +18,28 @@ namespace M3{ .help("Config file.") .metavar("CONFIG") .required(); - // m_parser->add_argument("root-file") - // .help("Root file.") - // .metavar("ROOT_FILE") - // .required(); - + m_parser->add_argument("--nsteps") + .scan<'d', int>() + .help("specify the number of steps."); + m_parser->add_argument("--override") + .append() + .help("specify any config overrides."); return m_parser; } int run(){ std::string config = m_parser->get("config"); - // std::string inputFile = m_parser->get("root-file"); - std::vector args = { m_parser->name(), config };//, inputFile }; + std::vector args = { m_parser->name(), config }; + + if (auto fn = m_parser->present("--nsteps")) { + args.push_back("General:MCMC:NSteps:" + std::to_string(*fn)); + } + + std::vector overrides = m_parser->get>("--override"); + for (const std::string& override_str : overrides) { + args.push_back(override_str); + } // Convert to char* array std::vector argv; From 803c801bb65c73e940e6470da4c268a0aed4cc52 Mon Sep 17 00:00:00 2001 From: Charlotte Knight Date: Mon, 1 Jun 2026 10:57:39 +0100 Subject: [PATCH 06/11] naming conventions + plugin export in setup script --- CMakeLists.txt | 2 +- {Mach3Plugins => MaCh3Plugins}/CMakeLists.txt | 0 {Mach3Plugins => MaCh3Plugins}/MCMCTutorialPlugin.cpp | 4 ++-- cmake/Templates/setup.MaCh3Tutorial.sh.in | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) rename {Mach3Plugins => MaCh3Plugins}/CMakeLists.txt (100%) rename {Mach3Plugins => MaCh3Plugins}/MCMCTutorialPlugin.cpp (96%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 65f0b5a..ed20606 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,7 +147,7 @@ add_subdirectory(CIValidations) add_subdirectory(Tutorial) add_subdirectory(SplinesTutorial) add_subdirectory(SamplesTutorial) -add_subdirectory(Mach3Plugins) +add_subdirectory(MaCh3Plugins) # MOVE THIS BLOCK HERE - BEFORE add_subdirectory(python) # After MaCh3 is added/found, determine MaCh3_PREFIX diff --git a/Mach3Plugins/CMakeLists.txt b/MaCh3Plugins/CMakeLists.txt similarity index 100% rename from Mach3Plugins/CMakeLists.txt rename to MaCh3Plugins/CMakeLists.txt diff --git a/Mach3Plugins/MCMCTutorialPlugin.cpp b/MaCh3Plugins/MCMCTutorialPlugin.cpp similarity index 96% rename from Mach3Plugins/MCMCTutorialPlugin.cpp rename to MaCh3Plugins/MCMCTutorialPlugin.cpp index c303336..b1ebea7 100644 --- a/Mach3Plugins/MCMCTutorialPlugin.cpp +++ b/MaCh3Plugins/MCMCTutorialPlugin.cpp @@ -18,7 +18,7 @@ namespace M3{ .help("Config file.") .metavar("CONFIG") .required(); - m_parser->add_argument("--nsteps") + m_parser->add_argument("--MCMCSteps") .scan<'d', int>() .help("specify the number of steps."); m_parser->add_argument("--override") @@ -32,7 +32,7 @@ namespace M3{ std::vector args = { m_parser->name(), config }; - if (auto fn = m_parser->present("--nsteps")) { + if (auto fn = m_parser->present("--MCMCSteps")) { args.push_back("General:MCMC:NSteps:" + std::to_string(*fn)); } diff --git a/cmake/Templates/setup.MaCh3Tutorial.sh.in b/cmake/Templates/setup.MaCh3Tutorial.sh.in index db250e6..23c2e47 100755 --- a/cmake/Templates/setup.MaCh3Tutorial.sh.in +++ b/cmake/Templates/setup.MaCh3Tutorial.sh.in @@ -107,4 +107,6 @@ else fi fi +export MACH3_PLUGINS=${SETUPDIR}/MaCh3Plugins/libMCMCTutorialPlugin.so + unset SETUPDIR From ca79bd1a612347d49b3cdf6d2f678b113fb14f76 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Wed, 3 Jun 2026 16:44:09 +0000 Subject: [PATCH 07/11] add new api location --- MaCh3Plugins/MCMCTutorialPlugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MaCh3Plugins/MCMCTutorialPlugin.cpp b/MaCh3Plugins/MCMCTutorialPlugin.cpp index b1ebea7..c6662d6 100644 --- a/MaCh3Plugins/MCMCTutorialPlugin.cpp +++ b/MaCh3Plugins/MCMCTutorialPlugin.cpp @@ -1,5 +1,5 @@ // MaCh3 includes -#include "api/plugin.hpp" +#include "cli/api/plugin.hpp" #include "Fitters/MaCh3Factory.h" #include "SamplesTutorial/SampleHandlerTutorial.h" // #include "Mach3Plugins/MCMCTutorialPlugin.hpp" From bc91016f6ccaeb7a94dbc1eece3d0a031af0a5ed Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Tue, 16 Jun 2026 08:25:46 +0000 Subject: [PATCH 08/11] add option -o short form --- MaCh3Plugins/MCMCTutorialPlugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MaCh3Plugins/MCMCTutorialPlugin.cpp b/MaCh3Plugins/MCMCTutorialPlugin.cpp index c6662d6..f298fbe 100644 --- a/MaCh3Plugins/MCMCTutorialPlugin.cpp +++ b/MaCh3Plugins/MCMCTutorialPlugin.cpp @@ -21,7 +21,7 @@ namespace M3{ m_parser->add_argument("--MCMCSteps") .scan<'d', int>() .help("specify the number of steps."); - m_parser->add_argument("--override") + m_parser->add_argument("-o", "--override") .append() .help("specify any config overrides."); return m_parser; From 9dd467936b230ce9f3f03460be867f265f80bc28 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Mon, 6 Jul 2026 14:57:29 +0000 Subject: [PATCH 09/11] migrate to changes in the plugin system --- MaCh3Plugins/MCMCTutorialPlugin.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MaCh3Plugins/MCMCTutorialPlugin.cpp b/MaCh3Plugins/MCMCTutorialPlugin.cpp index f298fbe..7dcca5b 100644 --- a/MaCh3Plugins/MCMCTutorialPlugin.cpp +++ b/MaCh3Plugins/MCMCTutorialPlugin.cpp @@ -6,7 +6,7 @@ namespace M3{ - class MCMCTutorialPlugin: public IPlugin{ + class MCMCTutorialPlugin: public IPluginBase{ public: virtual ~MCMCTutorialPlugin(){ @@ -27,7 +27,7 @@ namespace M3{ return m_parser; } - int run(){ + int Run(){ std::string config = m_parser->get("config"); std::vector args = { m_parser->name(), config }; @@ -74,8 +74,8 @@ namespace M3{ } - private: - MaCh3ArgumentParser* m_parser; + // private: + // MaCh3ArgumentParser* m_parser; }; }; From faf866c59fe9881d21edc2b61d8093587a42ba51 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Mon, 6 Jul 2026 15:00:09 +0000 Subject: [PATCH 10/11] Allow dynamic loading of plugin directories --- cmake/Templates/setup.MaCh3Tutorial.sh.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Templates/setup.MaCh3Tutorial.sh.in b/cmake/Templates/setup.MaCh3Tutorial.sh.in index 23c2e47..8c2dc57 100755 --- a/cmake/Templates/setup.MaCh3Tutorial.sh.in +++ b/cmake/Templates/setup.MaCh3Tutorial.sh.in @@ -107,6 +107,6 @@ else fi fi -export MACH3_PLUGINS=${SETUPDIR}/MaCh3Plugins/libMCMCTutorialPlugin.so +export MACH3_PLUGINS=${SETUPDIR}/MaCh3Plugins unset SETUPDIR From b2d4d706ede58ab257ed862ec0926eecb455bd05 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Mon, 6 Jul 2026 16:10:51 +0000 Subject: [PATCH 11/11] fixing changes from upstream plugin system --- MaCh3Plugins/MCMCTutorialPlugin.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/MaCh3Plugins/MCMCTutorialPlugin.cpp b/MaCh3Plugins/MCMCTutorialPlugin.cpp index 7dcca5b..70c5e6a 100644 --- a/MaCh3Plugins/MCMCTutorialPlugin.cpp +++ b/MaCh3Plugins/MCMCTutorialPlugin.cpp @@ -1,19 +1,18 @@ // MaCh3 includes -#include "cli/api/plugin.hpp" +#include "CLI/API/plugin.hpp" #include "Fitters/MaCh3Factory.h" #include "SamplesTutorial/SampleHandlerTutorial.h" // #include "Mach3Plugins/MCMCTutorialPlugin.hpp" namespace M3{ - class MCMCTutorialPlugin: public IPluginBase{ + class MCMCTutorialPlugin: public PluginBase{ public: - virtual ~MCMCTutorialPlugin(){ - if (m_parser) { delete m_parser; } - } + virtual ~MCMCTutorialPlugin() = default; + MaCh3ArgumentParser* get_parser(){ - m_parser = new MaCh3ArgumentParser("tutorial", "1.0", argparse::default_arguments::help); + m_parser = std::make_unique("tutorial", "1.0", argparse::default_arguments::help); m_parser->add_argument("config") .help("Config file.") .metavar("CONFIG") @@ -24,7 +23,7 @@ namespace M3{ m_parser->add_argument("-o", "--override") .append() .help("specify any config overrides."); - return m_parser; + return m_parser.get(); } int Run(){