From e77c6bf73672bb5e6a0ce15c17a33e6d54e6c096 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Tue, 5 May 2026 18:56:29 +0000 Subject: [PATCH 1/7] 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 0b76d59abeadff8318019fe528aa9fd6a8882ad4 Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Tue, 5 May 2026 18:57:53 +0000 Subject: [PATCH 2/7] Updating cmake file --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 109713c..b065718 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,6 +142,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 48c74c80a5133a03e83bb334e5345e2cad4ee08a Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Wed, 6 May 2026 13:08:40 +0000 Subject: [PATCH 3/7] fix typo --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b065718..ccfedc1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,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 85db3cc7a65e406e80b81cb50efbfce5f994282e Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Mon, 18 May 2026 13:51:57 +0000 Subject: [PATCH 4/7] 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 cbd11ab3104023323fcdcd44fa012faa1071afbb Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Wed, 27 May 2026 13:11:49 +0000 Subject: [PATCH 5/7] 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 d9866cf29b2fc9e1da7e75614102268a5fb08fc9 Mon Sep 17 00:00:00 2001 From: Charlotte Knight Date: Mon, 1 Jun 2026 10:57:39 +0100 Subject: [PATCH 6/7] 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 ccfedc1..b065718 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,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 d280e73fe76ab0b73c1141e25a2310661bd531dc Mon Sep 17 00:00:00 2001 From: Alexander Richards Date: Wed, 3 Jun 2026 16:44:09 +0000 Subject: [PATCH 7/7] 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"