Skip to content
Merged
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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
build*/
.cache/
*.idx
.cache/
2 changes: 1 addition & 1 deletion CIValidations/Benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ foreach(TEST
)

add_executable(${TEST} ${TEST}.cpp)
target_link_libraries(${TEST} PRIVATE Catch2::Catch2WithMain MaCh3::All MaCh3Tutorial::samplePDFTutorial)
target_link_libraries(${TEST} PRIVATE Catch2::Catch2WithMain MaCh3::All MaCh3Tutorial::SamplesTutorial)
catch_discover_tests(${TEST})
endforeach()
28 changes: 14 additions & 14 deletions CIValidations/Benchmark/MaCh3Benchmark.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// MaCh3 spline includes
#include "mcmc/MaCh3Factory.h"
#include "samplePDF/samplePDFTutorial.h"
#include "Fitters/MaCh3Factory.h"
#include "SamplesTutorial/SampleHandlerTutorial.h"

#include "catch2/catch_test_macros.hpp"
#include "catch2/benchmark/catch_benchmark.hpp"
Expand All @@ -10,44 +10,44 @@ TEST_CASE("Benchmark MaCh3") {
auto FitManager = std::make_unique<manager>("TutorialConfigs/FitterConfig.yaml");

// Initialise covariance class reasonable for Systematics
auto xsec = MaCh3CovarianceFactory<covarianceXsec>(FitManager.get(), "Xsec");
auto osc = MaCh3CovarianceFactory<covarianceOsc>(FitManager.get(), "Osc");
auto xsec = MaCh3CovarianceFactory<ParameterHandlerGeneric>(FitManager.get(), "Xsec");
auto osc = MaCh3CovarianceFactory<ParameterHandlerOsc>(FitManager.get(), "Osc");

std::vector<covarianceBase*> Covs;
std::vector<ParameterHandlerBase*> Covs;
Covs.push_back(xsec.get());
Covs.push_back(osc.get());

// Initialise samplePDF
auto BeamSamples = MaCh3SamplePDFFactory<samplePDFTutorial>({"TutorialConfigs/Samples/SamplePDF_Tutorial.yaml"}, xsec.get(), osc.get());
auto ATMSamples = MaCh3SamplePDFFactory<samplePDFTutorial>({"TutorialConfigs/Samples/SamplePDF_Tutorial_ATM.yaml"}, xsec.get(), osc.get());
auto BeamSamples = MaCh3SampleHandlerFactory<SampleHandlerTutorial>({"TutorialConfigs/Samples/SampleHandler_Tutorial.yaml"}, xsec.get(), osc.get());
auto ATMSamples = MaCh3SampleHandlerFactory<SampleHandlerTutorial>({"TutorialConfigs/Samples/SampleHandler_Tutorial_ATM.yaml"}, xsec.get(), osc.get());

BENCHMARK("Beam Reweight") {
for (size_t s = 0; s < Covs.size(); ++s) {
Covs[s]->proposeStep();
Covs[s]->acceptStep();
Covs[s]->ProposeStep();
Covs[s]->AcceptStep();
Covs[s]->GetLikelihood();
}
for(unsigned int ivs = 0; ivs < BeamSamples.size(); ivs++ ) {
BeamSamples[ivs]->reweight();
BeamSamples[ivs]->Reweight();
BeamSamples[ivs]->GetLikelihood();
}
};

BENCHMARK("Beam Reweight w/o Osc") {
for(unsigned int ivs = 0; ivs < BeamSamples.size(); ivs++ ) {
BeamSamples[ivs]->reweight();
BeamSamples[ivs]->Reweight();
BeamSamples[ivs]->GetLikelihood();
}
};

BENCHMARK("ATM Reweight") {
for (size_t s = 0; s < Covs.size(); ++s) {
Covs[s]->proposeStep();
Covs[s]->acceptStep();
Covs[s]->ProposeStep();
Covs[s]->AcceptStep();
Covs[s]->GetLikelihood();
}
for(unsigned int ivs = 0; ivs < ATMSamples.size(); ivs++ ) {
ATMSamples[ivs]->reweight();
ATMSamples[ivs]->Reweight();
ATMSamples[ivs]->GetLikelihood();
}
};
Expand Down
2 changes: 1 addition & 1 deletion CIValidations/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ foreach(app
)

add_executable(${app} ${app}.cpp)
target_link_libraries(${app} MaCh3Tutorial::ValidationsUtils MaCh3Tutorial::samplePDFTutorial)
target_link_libraries(${app} MaCh3Tutorial::ValidationsUtils MaCh3Tutorial::SamplesTutorial)
if(MaCh3Tutorial_Coverage_ENABLED)
target_compile_options(${app} PRIVATE --coverage)
target_link_options(${app} PRIVATE --coverage)
Expand Down
52 changes: 26 additions & 26 deletions CIValidations/CovarianceValidations.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// MaCh3 spline includes
#include "Utils/Comparison.h"
#include "covariance/covarianceXsec.h"
#include "covariance/covarianceOsc.h"
#include "Parameters/ParameterHandlerGeneric.h"
#include "Parameters/ParameterHandlerOsc.h"


int main(int argc, char *argv[])
Expand All @@ -14,12 +14,12 @@ int main(int argc, char *argv[])
}

////////////// Normal Xsec //////////////
std::vector<std::string> xsecCovMatrixFile = {"TutorialConfigs/CovObjs/SystematicModel.yaml"};
auto xsec = std::make_unique<covarianceXsec>(xsecCovMatrixFile, "xsec_cov");
std::vector<std::string> ParameterMatrixFile = {"TutorialConfigs/CovObjs/SystematicModel.yaml"};
auto xsec = std::make_unique<ParameterHandlerGeneric>(ParameterMatrixFile, "xsec_cov");

std::vector<double> ParProp = {1.05, 0.90, 1.10, 1.05, 1.05, 1.05, 1.05, 1.05, 0., 0.2};
xsec->setParameters(ParProp);
xsec->printNominalCurrProp();
xsec->SetParameters(ParProp);
xsec->PrintNominalCurrProp();

xsec->DumpMatrixToFile("xsec_2024a_flux_21bv2.root");

Expand All @@ -35,10 +35,10 @@ int main(int argc, char *argv[])
if (i % (Ntoys/10) == 0) {
MaCh3Utils::PrintProgressBar(i, Ntoys);
}
xsec->throwParameters();
xsec->ThrowParameters();
}
xsec->setParameters(ParProp);
xsec->acceptStep();
xsec->SetParameters(ParProp);
xsec->AcceptStep();
///// Test Params from DetId /////
const std::vector<std::string> AffectedSamples = {"Tutorial Beam", "Tutorial ATM", "tutorial beam", "blarb" "ATM"};
for (size_t id = 0; id < AffectedSamples.size(); ++id)
Expand Down Expand Up @@ -87,36 +87,36 @@ int main(int argc, char *argv[])

// Make sure we can reproduce parameter proposal
for (int i = 0; i < xsec->GetNumParams(); ++i) {
outFile << "Proposed Step for param " << i << " is equal to=" << xsec->getParProp(i) << std::endl;
outFile << "Proposed Step for param " << i << " is equal to=" << xsec->GetParProp(i) << std::endl;
}

////////////// Now PCA //////////////
MACH3LOG_INFO("Testing PCA matrix");
xsecCovMatrixFile = {"TutorialConfigs/CovObjs/PCATest.yaml"};
auto PCA = std::make_shared<covarianceXsec>(xsecCovMatrixFile, "xsec_cov", 0.001);
std::vector<double> EigenVal = PCA->getEigenValuesMaster();
ParameterMatrixFile = {"TutorialConfigs/CovObjs/PCATest.yaml"};
auto PCA = std::make_shared<ParameterHandlerGeneric>(ParameterMatrixFile, "xsec_cov", 0.001);
std::vector<double> EigenVal = PCA->GetEigenValuesMaster();
for(size_t i = 0; i < EigenVal.size(); i++) {
outFile << "Eigen Value " << i << " = " << EigenVal[i] << std::endl;
}

TVectorD eigen_values = PCA->getEigenValues();
TVectorD eigen_values = PCA->GetEigenValues();
double sum = 0;
for(int i = 0; i < eigen_values.GetNrows(); i++){
sum += eigen_values(i);
}
outFile << "Sum of Eigen Value: " << sum << std::endl;

outFile << "Num of PCA pars: " << PCA->getNpars() << std::endl;
for(int i = 0; i < PCA->getNpars(); i++){
outFile << "Param in PCA base: " << i << " = " << PCA->getParCurr_PCA(i) << std::endl;
outFile << "Num of PCA pars: " << PCA->GetNParameters() << std::endl;
for(int i = 0; i < PCA->GetNParameters(); i++){
outFile << "Param in PCA base: " << i << " = " << PCA->GetParCurrPCA(i) << std::endl;
}

////////////// Now Osc //////////////
std::vector<std::string> OscCovMatrixFile = {"TutorialConfigs/CovObjs/OscillationModel.yaml"};
auto osc = std::make_unique<covarianceOsc>(OscCovMatrixFile, "osc_cov");
auto osc = std::make_unique<ParameterHandlerOsc>(OscCovMatrixFile, "osc_cov");
std::vector<double> OscParProp = {0.3, 0.5, 0.020, 7.53e-5, 2.494e-3, 0.0, 295, 2.6, 0.5, 15};
osc->setParameters(OscParProp);
osc->printNominalCurrProp();
osc->SetParameters(OscParProp);
osc->PrintNominalCurrProp();
outFile << "Likelihood Osc=" << osc->GetLikelihood() << std::endl;

////////////// Now Adaptive //////////////
Expand Down Expand Up @@ -151,12 +151,12 @@ std::string yamlContent = R"(
// Convert the string to a YAML node
YAML::Node AdaptSetting = STRINGtoYAML(yamlContent);
std::vector<std::string> AdaptiveCovMatrixFile = {"TutorialConfigs/CovObjs/SystematicModel.yaml", "TutorialConfigs/CovObjs/PCATest.yaml"};
auto Adapt = std::make_unique<covarianceXsec>(AdaptiveCovMatrixFile, "xsec_cov");
auto Adapt = std::make_unique<ParameterHandlerGeneric>(AdaptiveCovMatrixFile, "xsec_cov");
//KS: Let's make Doctor Wallace proud
Adapt->initialiseAdaption(AdaptSetting);
Adapt->InitialiseAdaption(AdaptSetting);

std::vector<double> ParAdapt = {1.05, 0.90, 1.10, 1.05, 1.05, 1.05, 1.05, 1.05, 0., 0.2, -0.1, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
Adapt->setParameters(ParAdapt);
Adapt->SetParameters(ParAdapt);
bool increase = true;
for(int i = 0; i < 50000; ++i ) {

Expand All @@ -168,10 +168,10 @@ std::string yamlContent = R"(
for (double& param : ParAdapt) {
param += (increase ? 0.001 : -0.001);
}
Adapt->setParameters(ParAdapt);
Adapt->acceptStep();
Adapt->SetParameters(ParAdapt);
Adapt->AcceptStep();
}
Adapt->saveAdaptiveToFile("Wacky.root", "xsec");
Adapt->SaveAdaptiveToFile("Wacky.root", "xsec");

outFile.close();
bool TheSame = CompareTwoFiles("CIValidations/TestOutputs/CovarianceOut.txt", "NewCovarianceOut.txt");
Expand Down
32 changes: 16 additions & 16 deletions CIValidations/FitterValidations.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// MaCh3 spline includes
#include "mcmc/MaCh3Factory.h"
#include "covariance/covarianceXsec.h"
#include "Fitters/MaCh3Factory.h"
#include "Parameters/ParameterHandlerGeneric.h"
#include "Utils/Comparison.h"
#include "samplePDF/samplePDFTutorial.h"
#include "SamplesTutorial/SampleHandlerTutorial.h"

void FitVal(const std::string& Algo, bool MoreTests)
{
Expand All @@ -11,8 +11,8 @@ void FitVal(const std::string& Algo, bool MoreTests)

MACH3LOG_INFO("Testing {}", Algo);

auto xsec = MaCh3CovarianceFactory<covarianceXsec>(FitManager.get(), "Xsec");
auto osc = MaCh3CovarianceFactory<covarianceOsc>(FitManager.get(), "Osc");
auto xsec = MaCh3CovarianceFactory<ParameterHandlerGeneric>(FitManager.get(), "Xsec");
auto osc = MaCh3CovarianceFactory<ParameterHandlerOsc>(FitManager.get(), "Osc");
std::unique_ptr<FitterBase> MaCh3Fitter = nullptr;
if(Algo == "MCMC") {
FitManager->OverrideSettings("General", "OutputFile", "MCMC_Test.root");
Expand All @@ -34,24 +34,24 @@ void FitVal(const std::string& Algo, bool MoreTests)
throw MaCh3Exception(__FILE__ , __LINE__ );
}

std::string SampleConfig = {"TutorialConfigs/Samples/SamplePDF_Tutorial.yaml"};
auto Sample = std::make_unique<samplePDFTutorial>(SampleConfig, xsec.get(), osc.get());
Sample->reweight();
std::string SampleConfig = {"TutorialConfigs/Samples/SampleHandler_Tutorial.yaml"};
auto Sample = std::make_unique<SampleHandlerTutorial>(SampleConfig, xsec.get(), osc.get());
Sample->Reweight();
std::string name = Sample->GetTitle();
TString NameTString = TString(name.c_str());
TH1D *SampleHistogramPrior = (TH1D*)Sample->get1DHist()->Clone(NameTString+"_Prior");
Sample->addData(SampleHistogramPrior);
TH1D *SampleHistogramPrior = (TH1D*)Sample->Get1DHist()->Clone(NameTString+"_Prior");
Sample->AddData(SampleHistogramPrior);

MaCh3Fitter->addSystObj(xsec.get());
MaCh3Fitter->addSamplePDF(Sample.get());
MaCh3Fitter->AddSystObj(xsec.get());
MaCh3Fitter->AddSampleHandler(Sample.get());
if(MoreTests)
{
MaCh3Fitter->DragRace();
MaCh3Fitter->RunLLHScan();
MaCh3Fitter->Run2DLLHScan();
MaCh3Fitter->GetStepScaleBasedOnLLHScan();
}
MaCh3Fitter->runMCMC();
MaCh3Fitter->RunMCMC();
}

void StartFromPosteriorTest(const std::string& PreviousName)
Expand All @@ -61,13 +61,13 @@ void StartFromPosteriorTest(const std::string& PreviousName)

FitManager->OverrideSettings("General", "OutputFile", "MCMC_Test_Start.root");

auto xsec = MaCh3CovarianceFactory<covarianceXsec>(FitManager.get(), "Xsec");
auto xsec = MaCh3CovarianceFactory<ParameterHandlerGeneric>(FitManager.get(), "Xsec");
std::unique_ptr<mcmc> MarkovChain = std::make_unique<mcmc>(FitManager.get());
MarkovChain->addSystObj(xsec.get());
MarkovChain->AddSystObj(xsec.get());

MarkovChain->StartFromPreviousFit(PreviousName);

MarkovChain->runMCMC();
MarkovChain->RunMCMC();
}

int main(int argc, char *argv[])
Expand Down
2 changes: 1 addition & 1 deletion CIValidations/MaCh3ModeValidations.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// MaCh3 spline includes
#include "Utils/Comparison.h"
#include "manager/MaCh3Modes.h"
#include "Manager/MaCh3Modes.h"

/// Current tests include
int main(int argc, char *argv[])
Expand Down
2 changes: 1 addition & 1 deletion CIValidations/NuMCMCconversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "TNamed.h"
#include "TObjString.h"

#include "mcmc/MaCh3Factory.h"
#include "Fitters/MaCh3Factory.h"

int main(int argc, char *argv[])
{
Expand Down
34 changes: 17 additions & 17 deletions CIValidations/SamplePDFValidations.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// MaCh3 spline includes
#include "Utils/Comparison.h"
#include "samplePDF/samplePDFTutorial.h"
#include "SamplesTutorial/SampleHandlerTutorial.h"

_MaCh3_Safe_Include_Start_ //{
#include "Oscillator/OscillatorFactory.h"
_MaCh3_Safe_Include_End_ //}

void SharedNuOscTest(const std::string& config, covarianceXsec* xsec, covarianceOsc* osc){
void SharedNuOscTest(const std::string& config, ParameterHandlerGeneric* xsec, ParameterHandlerOsc* osc){
OscillatorBase* OscillatorObj = nullptr;
MACH3LOG_INFO("Utilising a shared NuOscillator object between all atmospheric samples");

Expand All @@ -17,8 +17,8 @@ void SharedNuOscTest(const std::string& config, covarianceXsec* xsec, covariance
OscillatorObj->Setup();
delete OscillFactory;

samplePDFTutorial *Sample1 = new samplePDFTutorial(config, xsec, osc, OscillatorObj);
samplePDFTutorial *Sample2 = new samplePDFTutorial(config, xsec, osc, OscillatorObj);
SampleHandlerTutorial *Sample1 = new SampleHandlerTutorial(config, xsec, osc, OscillatorObj);
SampleHandlerTutorial *Sample2 = new SampleHandlerTutorial(config, xsec, osc, OscillatorObj);

delete Sample1;
delete Sample2;
Expand All @@ -35,25 +35,25 @@ int main(int argc, char *argv[])
}

std::vector<std::string> xsecCovMatrixFile = {"TutorialConfigs/CovObjs/SystematicModel.yaml"};
covarianceXsec* xsec = new covarianceXsec(xsecCovMatrixFile, "xsec_cov");
ParameterHandlerGeneric* xsec = new ParameterHandlerGeneric(xsecCovMatrixFile, "xsec_cov");

std::vector<std::string> OscCovMatrixFile = {"TutorialConfigs/CovObjs/OscillationModel.yaml"};
covarianceOsc* osc = new covarianceOsc(OscCovMatrixFile, "osc_cov");
osc->setParameters();
ParameterHandlerOsc* osc = new ParameterHandlerOsc(OscCovMatrixFile, "osc_cov");
osc->SetParameters();

// Open a file in write mode
std::ofstream outFile("NewSampleOut.txt");
std::vector<std::string> SampleConfig = {"TutorialConfigs/Samples/SamplePDF_Tutorial.yaml", "TutorialConfigs/Samples/SamplePDF_Tutorial_ATM.yaml"};
std::vector<std::string> SampleConfig = {"TutorialConfigs/Samples/SampleHandler_Tutorial.yaml", "TutorialConfigs/Samples/SampleHandler_Tutorial_ATM.yaml"};
for (const auto& configPath : SampleConfig) {
samplePDFTutorial *Sample = new samplePDFTutorial({configPath}, xsec, osc);
SampleHandlerTutorial *Sample = new SampleHandlerTutorial({configPath}, xsec, osc);

std::string name = Sample->GetTitle();
TString NameTString = TString(name.c_str());

// Reweight and process prior histogram
Sample->reweight();
TH1D *SampleHistogramPrior = (TH1D*)Sample->get1DHist()->Clone(NameTString + "_Prior");
Sample->addData(SampleHistogramPrior);
Sample->Reweight();
TH1D *SampleHistogramPrior = (TH1D*)Sample->Get1DHist()->Clone(NameTString + "_Prior");
Sample->AddData(SampleHistogramPrior);

// Write initial info to file
outFile << "Info for sample: " << NameTString << std::endl;
Expand All @@ -62,17 +62,17 @@ int main(int argc, char *argv[])

// Set oscillation parameters and reweight for posterior
std::vector<double> OscParProp = {0.3, 0.5, 0.020, 7.53e-5, 2.494e-3, 0.0, 295, 2.6, 0.5, 15};
osc->setParameters(OscParProp);
Sample->reweight();
osc->SetParameters(OscParProp);
Sample->Reweight();

// Process posterior histogram
TH1D *SampleHistogramPost = (TH1D*)Sample->get1DHist()->Clone(NameTString + "_Post");
TH1D *SampleHistogramPost = (TH1D*)Sample->Get1DHist()->Clone(NameTString + "_Post");
outFile << "Rates Post:" << SampleHistogramPrior->Integral() << std::endl;
outFile << "Likelihood:" << std::fabs(Sample->GetLikelihood()) << std::endl;

MACH3LOG_INFO("Now trying to compare each weight individually");
for (int iSample = 0; iSample < Sample->getNMCSamples(); ++iSample) {
for (int iEntry = 0; iEntry < Sample->getNEventsInSample(iSample); ++iEntry) {
for (int iSample = 0; iSample < Sample->GetNMCSamples(); ++iSample) {
for (int iEntry = 0; iEntry < Sample->GetNEventsInSample(iSample); ++iEntry) {
double weight = Sample->GetEventWeight(iSample, iEntry);
outFile<< "Sample: "<< NameTString << " Channel: "<< iSample<<" Event: " << iEntry <<" weight: " << weight << std::endl;
}
Expand Down
Loading
Loading