From c8f17e6dd317615b455d0029791248bb9f41f7df Mon Sep 17 00:00:00 2001 From: Hank Hua Date: Mon, 29 Dec 2025 19:45:42 +0000 Subject: [PATCH 1/4] Demo for nudock server and client. --- Tutorial/CMakeLists.txt | 4 +- Tutorial/RunNuDockClient.cpp | 39 +++++++++++++++++++ Tutorial/RunNuDockServer.cpp | 64 +++++++++++++++++++++++++++++++ TutorialConfigs/FitterConfig.yaml | 6 +++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 Tutorial/RunNuDockClient.cpp create mode 100644 Tutorial/RunNuDockServer.cpp diff --git a/Tutorial/CMakeLists.txt b/Tutorial/CMakeLists.txt index 9cc73966..e22512c4 100755 --- a/Tutorial/CMakeLists.txt +++ b/Tutorial/CMakeLists.txt @@ -6,9 +6,11 @@ foreach(app PredictiveTutorial SigmaVarTutorial KinemDistributionTutorial + RunNuDockClient + RunNuDockServer ) add_executable(${app} ${app}.cpp) - target_link_libraries(${app} MaCh3Tutorial::ValidationsUtils MaCh3Tutorial::SamplesTutorial) + target_link_libraries(${app} MaCh3Tutorial::ValidationsUtils MaCh3Tutorial::SamplesTutorial MaCh3::MaCh3NuDock) if(MaCh3Tutorial_PROFILING_ENABLED) target_link_libraries(${app} profiler # Add this line to link gperftools diff --git a/Tutorial/RunNuDockClient.cpp b/Tutorial/RunNuDockClient.cpp new file mode 100644 index 00000000..fc678dff --- /dev/null +++ b/Tutorial/RunNuDockClient.cpp @@ -0,0 +1,39 @@ +// MaCh3 includes +#include "nudock.hpp" + +int main() +{ + NuDock client; + client.start_client(); + + nlohmann::json message; + message["request"] = "test 123 :)"; + // message["numb"] = 2.12; + + nlohmann::json new_params; + new_params["osc_pars"]["Theta12"] = 0.307, + new_params["osc_pars"]["Theta23"] = 0.561; + new_params["osc_pars"]["Theta13"] = 0.022; + new_params["osc_pars"]["Deltam2_21"] = 7.53e-5; + new_params["osc_pars"]["Deltam2_32"] = 2.494e-3; + // new_params["osc_pars"]["DeltaCP"] = 0.; + new_params["osc_pars"]["DeltaCP"] = -1.601; + new_params["sys_pars"]["MaCCRES"] = 0.01; + + client.send_request("/ping", message); + client.send_request("/get_parameter_names", nlohmann::json::object()); + client.send_request("/log_likelihood", nlohmann::json::object()); + client.send_request("/set_parameters", new_params); + client.send_request("/log_likelihood", nlohmann::json::object()); + // client.send_request("/set_asimov_point", nlohmann::json::object()); + + // Make a loop to change DeltaCP from -3.14 to 3.14 + int total_steps = 10; + for (int i=0; i(FitManager.get(), "Xsec"); + + // Initialise samplePDF + auto SampleConfig = Get>(FitManager->raw()["General"]["TutorialSamples"], __FILE__ , __LINE__); + auto mySamples = MaCh3SampleHandlerFactory(SampleConfig, xsec.get()); + + auto serverObj = std::make_unique(FitManager.get()); + // Add covariance to MCM + serverObj->AddSystObj(xsec.get()); + for (size_t i = 0; i < SampleConfig.size(); ++i) { + serverObj->AddSampleHandler(mySamples[i]); + } + serverObj->setup(); + + MACH3LOG_INFO("Testing log_likelihood calculation..."); + MACH3LOG_INFO("Initial log_likelihood: {}", serverObj->getLogLikelihood()); + + MACH3LOG_INFO("Starting NuDock server..."); + std::unique_ptr nudock_ptr = nullptr; + InitialiseNuDockObj(FitManager.get(), nudock_ptr); + nudock_ptr->register_response("/ping", std::bind(ping, std::placeholders::_1)); + nudock_ptr->register_response("/log_likelihood", [&serverObj](const nlohmann::json &request) { + return serverObj->getLogLikelihood(request); + }); + nudock_ptr->register_response("/get_parameter_names", [&serverObj](const nlohmann::json &request) { + return serverObj->getParametersNames(request); + }); + // nudock_ptr->register_response("/get_parameters", [&serverObj](const nlohmann::json &request) { + // return serverObj->getParameters(request); + // }); + nudock_ptr->register_response("/set_parameters", [&serverObj](const nlohmann::json &request) { + return serverObj->setParameters(request); + }); + // nudock_ptr->register_response("/set_asimov_point", [&serverObj](const nlohmann::json &request) { + // return serverObj->setAsimovPoint(request); + // }); + nudock_ptr->start_server(); + for (size_t i = 0; i < SampleConfig.size(); ++i) { + delete mySamples[i]; + } + return 0; +} diff --git a/TutorialConfigs/FitterConfig.yaml b/TutorialConfigs/FitterConfig.yaml index d81ae870..054ca767 100755 --- a/TutorialConfigs/FitterConfig.yaml +++ b/TutorialConfigs/FitterConfig.yaml @@ -134,3 +134,9 @@ AdaptionOptions: Covariance: xsec_cov: # Name of covariance matrix DoAdaption: False # [bool] Adapt this parameter + +NuDock: + Debug: false + #SchemaLocation: "../nudock/schemas" + Verbose: false + AddPriorLLH: false \ No newline at end of file From 43b02e9097c0025c70b4f5f348ede6fab8b8cbbc Mon Sep 17 00:00:00 2001 From: Hank Hua Date: Tue, 20 Jan 2026 16:37:59 +0000 Subject: [PATCH 2/4] Added client-side example in LLHScanTutorial. --- Tutorial/CMakeLists.txt | 1 - Tutorial/LLHScanTutorial.cpp | 19 ++++++++ Tutorial/RunNuDockClient.cpp | 39 ---------------- TutorialConfigs/FitterConfig.yaml | 10 +++- .../Samples/SampleHandler_NuDock.yaml | 46 +++++++++++++++++++ 5 files changed, 74 insertions(+), 41 deletions(-) delete mode 100644 Tutorial/RunNuDockClient.cpp create mode 100755 TutorialConfigs/Samples/SampleHandler_NuDock.yaml diff --git a/Tutorial/CMakeLists.txt b/Tutorial/CMakeLists.txt index e22512c4..227cefa9 100755 --- a/Tutorial/CMakeLists.txt +++ b/Tutorial/CMakeLists.txt @@ -6,7 +6,6 @@ foreach(app PredictiveTutorial SigmaVarTutorial KinemDistributionTutorial - RunNuDockClient RunNuDockServer ) add_executable(${app} ${app}.cpp) diff --git a/Tutorial/LLHScanTutorial.cpp b/Tutorial/LLHScanTutorial.cpp index 84fa1c9a..00d6c005 100644 --- a/Tutorial/LLHScanTutorial.cpp +++ b/Tutorial/LLHScanTutorial.cpp @@ -1,6 +1,7 @@ // MaCh3 spline includes #include "Fitters/MaCh3Factory.h" #include "SamplesTutorial/SampleHandlerTutorial.h" +#include "MaCh3NuDock/SampleHandlerNuDock.h" int main(int argc, char *argv[]){ // Initialise manger responsible for config handling @@ -14,6 +15,16 @@ int main(int argc, char *argv[]){ auto SampleConfig = Get>(FitManager->raw()["General"]["TutorialSamples"], __FILE__ , __LINE__); auto mySamples = MaCh3SampleHandlerFactory(SampleConfig, xsec.get()); + // Initialise NuDock samples + auto NuDockSampleConfigs = FitManager->raw()["General"]["NuDockSamples"].as>(); + bool useNuDock = GetFromManager(FitManager->raw()["General"]["UseNuDock"], false, __FILE__, __LINE__); + std::vector samplesNuDock; + if (useNuDock){ + for(size_t Sample_i = 0; Sample_i < NuDockSampleConfigs.size(); Sample_i++){ + samplesNuDock.push_back(new SampleHandlerNuDock(NuDockSampleConfigs[Sample_i].c_str(), xsec.get())); + } + } + // Create MCMC Class std::unique_ptr MaCh3Fitter = MaCh3FitterFactory(FitManager.get()); // Add covariance to MCM @@ -21,10 +32,18 @@ int main(int argc, char *argv[]){ for (size_t i = 0; i < SampleConfig.size(); ++i) { MaCh3Fitter->AddSampleHandler(mySamples[i]); } + if (useNuDock) { + for(size_t i = 0; i < NuDockSampleConfigs.size(); i++){ + MaCh3Fitter->AddSampleHandler(samplesNuDock[i]); + } + } // Run LLH scan MaCh3Fitter->RunLLHScan(); for (size_t i = 0; i < SampleConfig.size(); ++i) { delete mySamples[i]; } + for(size_t i = 0; i < NuDockSampleConfigs.size(); i++){ + delete samplesNuDock[i]; + } return 0; } diff --git a/Tutorial/RunNuDockClient.cpp b/Tutorial/RunNuDockClient.cpp deleted file mode 100644 index fc678dff..00000000 --- a/Tutorial/RunNuDockClient.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// MaCh3 includes -#include "nudock.hpp" - -int main() -{ - NuDock client; - client.start_client(); - - nlohmann::json message; - message["request"] = "test 123 :)"; - // message["numb"] = 2.12; - - nlohmann::json new_params; - new_params["osc_pars"]["Theta12"] = 0.307, - new_params["osc_pars"]["Theta23"] = 0.561; - new_params["osc_pars"]["Theta13"] = 0.022; - new_params["osc_pars"]["Deltam2_21"] = 7.53e-5; - new_params["osc_pars"]["Deltam2_32"] = 2.494e-3; - // new_params["osc_pars"]["DeltaCP"] = 0.; - new_params["osc_pars"]["DeltaCP"] = -1.601; - new_params["sys_pars"]["MaCCRES"] = 0.01; - - client.send_request("/ping", message); - client.send_request("/get_parameter_names", nlohmann::json::object()); - client.send_request("/log_likelihood", nlohmann::json::object()); - client.send_request("/set_parameters", new_params); - client.send_request("/log_likelihood", nlohmann::json::object()); - // client.send_request("/set_asimov_point", nlohmann::json::object()); - - // Make a loop to change DeltaCP from -3.14 to 3.14 - int total_steps = 10; - for (int i=0; i Date: Wed, 6 May 2026 08:17:31 +0000 Subject: [PATCH 3/4] more cmake options --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d75e24b..46188721 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ include(CIValidations) option(MaCh3_CPM "Whether MaCh3 was obtained using CPM or find_package" OFF) option(MaCh3Tutorial_PROFILING_ENABLED "Will run with gperftools" OFF) option(Use_External_MaCh3 "Use an externally installed MaCh3 instead of CPM" OFF) +option(MaCh3Tutorial_NUDOCK_ENABLED "Whether to enable NuDock support" OFF) # KS: Here we try to find tag matching tutorial version. If we can't find one then use develop # This will allow to grab tutorial for tagged MaCh3 version without a need of manually changing version @@ -89,6 +90,10 @@ if(NOT MaCh3_FOUND) list(APPEND MaCh3_OPTIONS "LOG_LEVEL ${LOG_LEVEL}") endif() + if (DEFINED MaCh3Tutorial_NUDOCK_ENABLED) + list(APPEND MaCh3_OPTIONS "MaCh3_NUDOCK_ENABLED ON") + endif() + if (MaCh3Tutorial_NATIVE_ENABLED) list(APPEND MaCh3_OPTIONS "MaCh3_NATIVE_ENABLED ON") endif() From 6aa6262040add9e7279dd5b864168cf767bb1efb Mon Sep 17 00:00:00 2001 From: Kamil Skwarczynski Date: Wed, 6 May 2026 10:27:39 +0000 Subject: [PATCH 4/4] correct cmake syntax --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 59a2c1bf..0755e702 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,7 +89,7 @@ if(NOT MaCh3_FOUND) list(APPEND MaCh3_OPTIONS "LOG_LEVEL ${LOG_LEVEL}") endif() - if (DEFINED MaCh3Tutorial_NUDOCK_ENABLED) + if (MaCh3Tutorial_NUDOCK_ENABLED) list(APPEND MaCh3_OPTIONS "MaCh3_NUDOCK_ENABLED ON") endif()