Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/CIValidations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ jobs:
test: MaCh3CLI --NuMCMCToolsValidations
compilation_flags:

- name: MaCh3 CLI Validations
test: MaCh3CLI --CLIValidations
compilation_flags:

- name: Multi Canonical Validations
test: MaCh3CLI --MultiCanonicalValidations
compilation_flags:
Expand Down
24 changes: 19 additions & 5 deletions CIValidations/MaCh3CLI
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ show_help() {
echo -e "\t --NuMCMCToolsValidations : Checking if interface to NuMCMC Tools works"
echo -e "\t --NuDockValidations : Checking if interface to NuDock works"
echo -e "\t --MultiCanonicalValidations : Checking if Multi Canonical works"
echo -e "\t --CLIValidations : Start testing new unified CLI"
echo -e "\t --all : Run all checks"
}

Expand Down Expand Up @@ -121,6 +122,14 @@ run_multicanoical_validations() {
${MaCh3Tutorial_ROOT}/bin/UmbrellaPlotting ${MaCh3Tutorial_ROOT}/umbrella_output.root ${MaCh3Tutorial_ROOT}/outputs/plotting/
}

run_CLI_validations() {
mach3 tutorial TutorialConfigs/FitterConfig.yaml --MCMCSteps 10000
mach3 process ${MaCh3Tutorial_ROOT}/bin/TutorialDiagConfig.yaml Test.root --corr --MakeCredibleIntervals
mach3 diag Test.root ${MaCh3Tutorial_ROOT}/bin/TutorialDiagConfig.yaml
mach3 penterm Test.root ${MaCh3Tutorial_ROOT}/bin/TutorialDiagConfig.yaml
}


# Parse command-line arguments
while [[ $# -gt 0 ]]; do
case $1 in
Expand All @@ -143,6 +152,9 @@ while [[ $# -gt 0 ]]; do
--NuDockValidations)
RUN_NU_DOCK=true
;;
--CLIValidations)
RUN_CLI=true
;;
--MultiCanonicalValidations)
RUN_MULTI_CANONICAL=true
;;
Expand Down Expand Up @@ -170,14 +182,16 @@ if [ "$RUN_ALL" = true ]; then
run_covariance_validations
run_nu_mcmc_tools_validations
run_nudock_validations
run_CLI_validations
run_multicanoical_validations
else
[ "$RUN_REWEIGHT" = true ] && run_reweight_validations
[ "$RUN_FITTER" = true ] && run_fitter_validations
[ "$RUN_COVARIANCE" = true ] && run_covariance_validations
[ "$RUN_NU_MCMC" = true ] && run_nu_mcmc_tools_validations
[ "$RUN_NU_DOCK" = true ] && run_nudock_validations
[ "$RUN_REWEIGHT" = true ] && run_reweight_validations
[ "$RUN_FITTER" = true ] && run_fitter_validations
[ "$RUN_COVARIANCE" = true ] && run_covariance_validations
[ "$RUN_NU_MCMC" = true ] && run_nu_mcmc_tools_validations
[ "$RUN_NU_DOCK" = true ] && run_nudock_validations
[ "$RUN_MULTI_CANONICAL" = true ] && run_multicanoical_validations
[ "$RUN_CLI" = true ] && run_CLI_validations
fi

echo "Validation process completed!"
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions MaCh3Plugins/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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 $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)


# add_executable(${app} ${app}.cpp)
# target_link_libraries(${app} MaCh3Tutorial::ValidationsUtils MaCh3Tutorial::SamplesTutorial)

# add_dependencies(TutorialApps ${app})
# install(TARGETS ${app} DESTINATION bin)
endforeach(app)

82 changes: 82 additions & 0 deletions MaCh3Plugins/MCMCTutorialPlugin.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// MaCh3 includes
#include "CLI/API/plugin.hpp"
#include "Fitters/MaCh3Factory.h"
#include "SamplesTutorial/SampleHandlerTutorial.h"
// #include "Mach3Plugins/MCMCTutorialPlugin.hpp"

namespace M3{

class MCMCTutorialPlugin: public PluginBase{

public:
virtual ~MCMCTutorialPlugin() = default;

MaCh3ArgumentParser* get_parser(){
m_parser = std::make_unique<MaCh3ArgumentParser>("tutorial", "1.0", argparse::default_arguments::help);
m_parser->add_argument("config")
.help("Config file.")
.metavar("CONFIG")
.required();
m_parser->add_argument("--MCMCSteps")
.scan<'d', int>()
.help("specify the number of steps.");
m_parser->add_argument("-o", "--override")
.append()
.help("specify any config overrides.");
return m_parser.get();
}

int Run(){
std::string config = m_parser->get<std::string>("config");

std::vector<std::string> args = { m_parser->name(), config };

if (auto fn = m_parser->present<int>("--MCMCSteps")) {
args.push_back("General:MCMC:NSteps:" + std::to_string(*fn));
}

std::vector<std::string> overrides = m_parser->get<std::vector<std::string>>("--override");
for (const std::string& override_str : overrides) {
args.push_back(override_str);
}

// Convert to char* array
std::vector<char*> 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<ParameterHandlerGeneric>(FitManager.get(), "Xsec");

// Initialise samplePDF
auto SampleConfig = Get<std::vector<std::string>>(FitManager->raw()["General"]["TutorialSamples"], __FILE__ , __LINE__);
auto mySamples = MaCh3SampleHandlerFactory<SampleHandlerTutorial>(SampleConfig, xsec.get());

// Create MCMC Class
std::unique_ptr<FitterBase> 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;
}


// private:
// MaCh3ArgumentParser* m_parser;
};

};

MACH3_REGISTER_PLUGIN(M3::MCMCTutorialPlugin)
2 changes: 2 additions & 0 deletions cmake/Templates/setup.MaCh3Tutorial.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,6 @@ else
fi
fi

export MACH3_PLUGINS=${SETUPDIR}/MaCh3Plugins

unset SETUPDIR