MaCh3  2.4.2
Reference Guide
MaCh3Factory.h
Go to the documentation of this file.
1 #pragma once
2 
3 // MaCh3 includes
4 #include "Fitters/FitterBase.h"
5 #include "Fitters/MR2T2.h"
6 #include "Fitters/DelayedMR2T2.h"
7 #include "Fitters/PSO.h"
9 #ifdef MaCh3_MINUIT2
10 #include "Fitters/MinuitFit.h"
11 #endif
12 
13 
15 
19 
30 std::unique_ptr<FitterBase> MaCh3FitterFactory(Manager *FitManager);
31 
41 std::unique_ptr<Manager> MaCh3ManagerFactory(int argc, char **argv);
42 
43 // ********************************************
69 template <typename CovType>
70 std::unique_ptr<CovType> MaCh3CovarianceFactory(Manager *FitManager, const std::string& PreFix) {
71 // ********************************************
72  // config for our matrix
73  YAML::Node Settings = FitManager->raw()["General"]["Systematics"];
74  auto CovMatrixName = Get<std::string>(Settings[std::string(PreFix) + "CovName"], __FILE__, __LINE__);
75  MACH3LOG_INFO("Initialising {} matrix", CovMatrixName);
76 
77  // yaml files initialising out matrix
78  auto CovMatrixFile = Get<std::vector<std::string>>(Settings[std::string(PreFix) + "CovFile"], __FILE__, __LINE__);
79 
80  // PCA threshold, -1 means no pca
81  auto PCAThreshold = GetFromManager<int>(Settings[std::string(PreFix) + "PCAThreshold"], -1);
82  // do we pca whole matrix or only submatrix
83  auto PCAParamRegion = GetFromManager<std::vector<int>>(Settings[std::string(PreFix) + "PCAParams"], {-999, -999});
84 
85  auto CovObject = std::make_unique<CovType>(CovMatrixFile, CovMatrixName, PCAThreshold, PCAParamRegion[0], PCAParamRegion[1]);
86 
87  // Fill the parameter values with their nominal values
88  // should _ALWAYS_ be done before overriding with fix or flat
89  CovObject->SetParameters();
90 
91  auto FixParams = GetFromManager<std::vector<std::string>>(Settings[std::string(PreFix) + "Fix"], {});
92 
93  // Fixed CovObject parameters loop
94  if (FixParams.size() == 1 && FixParams.at(0) == "All") {
95  for (int j = 0; j < CovObject->GetNumParams(); j++) {
96  CovObject->ToggleFixParameter(j);
97  }
98  } else {
99  for (unsigned int j = 0; j < FixParams.size(); j++) {
100  CovObject->ToggleFixParameter(FixParams.at(j));
101  }
102  }
103 
104  if (CheckNodeExists(Settings, std::string(PreFix) + "Tune"))
105  {
106  CovObject->SetTune(Get<std::string>(Settings[std::string(PreFix) + "Tune"], __FILE__, __LINE__));
107  }
108 
109  //Global step scale for matrix
110  auto StepScale = Get<double>(Settings[std::string(PreFix) + "StepScale"], __FILE__, __LINE__);
111 
112  CovObject->SetStepScale(StepScale);
113 
114  // Adaptive MCMC stuff
115  if (CheckNodeExists(FitManager->raw(), "AdaptionOptions")) {
116  CovObject->InitialiseAdaption(FitManager->raw());
117  }
118 
119  return CovObject;
120 }
121 
122 // ********************************************
134 template <typename SampleType>
135 std::vector<SampleType*> MaCh3SampleHandlerFactory(const std::vector<std::string>& SampleConfig,
136  ParameterHandlerGeneric* xsec) {
137 // ********************************************
138  std::vector<SampleType*> Handlers(SampleConfig.size());
139  for (size_t i = 0; i < SampleConfig.size(); ++i)
140  {
141  // Instantiate the sample using the specified class type
142  SampleType* Sample = new SampleType(SampleConfig[i], xsec);
143  Sample->Reweight();
144 
145  for(int iSample = 0; iSample < Sample->GetNsamples(); iSample++)
146  {
147  // Obtain sample name and create a TString version for histogram naming
148  std::string name = Sample->GetSampleTitle(iSample);
149  TString NameTString = TString(name.c_str());
150 
151  // Clone the 1D histogram with a modified name
152  Sample->AddData(iSample, Sample->GetMCArray(iSample));
153  }
154  Handlers[i] = Sample;
155  }
156  return Handlers;
157 }
std::unique_ptr< CovType > MaCh3CovarianceFactory(Manager *FitManager, const std::string &PreFix)
Factory function for creating a covariance class for systematic handling.
Definition: MaCh3Factory.h:70
std::vector< SampleType * > MaCh3SampleHandlerFactory(const std::vector< std::string > &SampleConfig, ParameterHandlerGeneric *xsec)
Factory function for creating SampleHandler and initialisation with systematic.
Definition: MaCh3Factory.h:135
std::unique_ptr< Manager > MaCh3ManagerFactory(int argc, char **argv)
Initializes the config Manager class and allows overriding settings via command-line arguments.
#define MACH3LOG_INFO
Definition: MaCh3Logger.h:35
bool CheckNodeExists(const YAML::Node &node, Args... args)
KS: Wrapper function to call the recursive helper.
Definition: YamlHelper.h:60
The manager class is responsible for managing configurations and settings.
Definition: Manager.h:16
YAML::Node const & raw() const
Return config.
Definition: Manager.h:41
Class responsible for handling of systematic error parameters with different types defined in the con...
std::unique_ptr< FitterBase > MaCh3FitterFactory(Manager *FitManager)
MaCh3 Factory initiates one of implemented fitting algorithms.
Definition: MaCh3Factory.cpp:5