12#include "Minuit2/FCNBase.h"
13#include "Minuit2/FCNGradientBase.h"
14#include "Minuit2/FunctionMinimum.h"
15#include "Minuit2/MnUserParameterState.h"
16#include "Minuit2/MnPrint.h"
17#include "Minuit2/MnMigrad.h"
18#include "Minuit2/MnSimplex.h"
19#include "Minuit2/MnHesse.h"
20#include "Minuit2/MnMinos.h"
21#include "Minuit2/MnScan.h"
22#include "Minuit2/MnContours.h"
23#include "Minuit2/MnPlot.h"
83 void SaveCache(
const TString &name,
double val) {
Num_Map.emplace(std::pair<TString, double>(name, val)); }
127 void GetProfile(std::map<TString, Parameter> &m_par);
155 for (
int i = 0; i < tobs->
Profile.size(); i++)
159 sum = sum + samp.second.Profile[i];
164 void GetProfile(std::map<TString, Parameter> &m_par);
173 PLH_FCN(std::shared_ptr<ThreadPool> tpool,
174 std::shared_ptr<MSGTool> _msg_,
175 std::map<TString, Parameter> *par_map,
176 std::map<TString, Observable> *obs_map);
178 double operator()(
const std::vector<double> &)
const override;
180 double Up()
const {
return 0.5; }
193 std::shared_ptr<ThreadPool>
pool;
194 std::shared_ptr<MSGTool>
msg;
196 inline static std::recursive_mutex
PrintMutex = std::recursive_mutex();
211 void BookObservableVariation(TString name, TString samplename,
const std::vector<double> &vec, TString parname,
double sigma);
212 void BookObservableVariationFromUnc(TString name, TString samplename,
const std::vector<double> &vec,
const std::vector<double> &vec_unc, TString parname);
213 void BookObservableData(TString name,
const std::vector<double> &vec,
const std::vector<double> &vec_stat);
214 void BookObservableNominal(TString name, TString samplename,
const std::vector<double> &vec,
const std::vector<double> &vec_stat);
234 void SetSymmetrization(TString obsname, TString samplename, TString parname,
bool need =
true);
235 void SymmetrizeVariation(std::vector<double> &up, std::vector<double> &down, std::vector<double> &norm);
237 void SetSmooth(TString obsname, TString samplename, TString parname,
int slevel);
238 void SmoothVariation(std::vector<double> &var, std::vector<double> &norm,
int level);
250 std::map<TString, double>
EstimateUnc(
const std::vector<TString> &par_vec,
FitMethod method,
int toy_num);
254 double GetChi2(
const std::map<TString, double> &par_val);
264 std::shared_ptr<ThreadPool>
pool =
nullptr;
335 std::shared_ptr<MSGTool> _msg_,
336 std::map<TString, Parameter> *par_map,
337 std::map<TString, Observable> *obs_map)
std::vector< Parameter * > Gamma_Vec
std::vector< double > Nominal
std::map< Parameter *, std::vector< double > > Variation_Nominal_Map
std::vector< double > Profile
std::vector< double > Nominal_Stat
std::map< Parameter *, bool > NeedSymmetrization_Map
std::map< Parameter *, std::vector< double > > Variation_Sigma_Map
std::map< Parameter *, std::vector< std::vector< double > > > Variation_Map
std::map< Parameter *, int > SmoothLevel_Map
double GetProfileBinVariation(int i, double aim_sigma, Parameter *par)
std::map< Parameter *, std::vector< double > > Variation_Up_Map
std::map< Parameter *, std::vector< double > > Variation_Down_Map
void GetProfile(std::map< TString, Parameter > &m_par)
std::map< Parameter *, std::vector< std::shared_ptr< ProfileCache > > > Variation_Cache
static NAGASH::StatusCode GetProfile_Thread(Sample *tsample, std::map< TString, Parameter > &m_par)
std::vector< double > Data_Stat
std::map< TString, Sample > Sample_Map
static double GetLikelihood_Thread(Observable *tobs)
std::vector< double > Profile
std::vector< double > Data
void GetProfile(std::map< TString, Parameter > &m_par)
static std::recursive_mutex PrintMutex
std::shared_ptr< MSGTool > MSGUser() const
double Max_Log_Likelihood
PLH_FCN(std::shared_ptr< ThreadPool > tpool, std::shared_ptr< MSGTool > _msg_, std::map< TString, Parameter > *par_map, std::map< TString, Observable > *obs_map)
std::shared_ptr< MSGTool > msg
std::map< TString, Parameter > * Par_Map
std::map< TString, Observable > * Obs_Map
std::shared_ptr< ThreadPool > pool
double operator()(const std::vector< double > &) const override
static double GetLikelihood_Thread(Parameter *tpar)
double Nuisance_Gaus_Mean
void SetStrategy(ExtrapStrategy str)
double Nuisance_Gaus_Sigma
void SaveCache(const TString &name, double val)
std::map< TString, double > Num_Map
double GetCache(const TString &name)
Tool for conducting profile likelihood fit.
void BookObservableData(TString name, const std::vector< double > &vec, const std::vector< double > &vec_stat)
void BookObservableVariation(TString name, TString samplename, const std::vector< double > &vec, TString parname, double sigma)
void FixParameter(TString name, double val)
Eigen::MatrixXd Nuisance_Cov_Matrix
TString GetParameterName(int index)
void SetSymmetrization(TString obsname, TString samplename, TString parname, bool need=true)
Parameter::ExtrapStrategy POI_DEFAULT_STRATEGY
void ReleaseParameter(TString name)
Eigen::MatrixXd Nuisance_Shift
void SetGammaPrefix(TString samplename, TString prefix)
void BookNuisanceParameter(TString name)
void SetParameterGroup(TString gname, TString parname)
Eigen::MatrixXd Y0_Matrix
std::map< TString, std::vector< TString > > Norm_Map
void BookObservableVariationNominal(TString name, TString samplename, const std::vector< double > &vec, TString parname)
Eigen::MatrixXd Epsilon_Matrix
void BookNormalizationParameter(TString name, double init, double min, double max)
double MAX_NUISANCE_SIGMA
void BookParameterOfInterest(TString name, double init, double min, double max)
void SetParameterStrategy(TString name, Parameter::ExtrapStrategy str)
void BookObservableNominal(TString name, TString samplename, const std::vector< double > &vec, const std::vector< double > &vec_stat)
void Prepare(FitMethod method)
@ AnalyticalChiSquare
Analytical method, described in https://arxiv.org/abs/2307.04007, very fast.
@ ProfileLikelihood
Traditional profile likelihood.
@ AnalyticalBoostedProfileLikelihood
use analytical method first, then run profile likelihood fit on top of it.
void BookObservableVariationFromUnc(TString name, TString samplename, const std::vector< double > &vec, const std::vector< double > &vec_unc, TString parname)
Observable * InitializeNewObservable(TString name)
Parameter * GetParameter(TString name)
void RebinObservable(TString name, int index)
Eigen::MatrixXd Lambda_Matrix
void BookParameter(TString name, double init, double min, double max, ParameterType type)
Eigen::MatrixXd POI_Shift
std::map< TString, Observable > Obs_Map
void LinkNormalizationSample(TString name, TString samplename)
std::map< TString, Parameter > Par_Map
void SymmetrizeVariation(std::vector< double > &up, std::vector< double > &down, std::vector< double > &norm)
int GetNParameters(ParameterType type=ParameterType::Unknown)
std::shared_ptr< ThreadPool > pool
void BookObservableVariationUp(TString name, TString samplename, const std::vector< double > &vec, TString parname)
void SmoothVariation(std::vector< double > &var, std::vector< double > &norm, int level)
void SetObservableRange(TString name, int start, int end)
void Fit(FitMethod method)
void BookObservableVariationDown(TString name, TString samplename, const std::vector< double > &vec, TString parname)
Eigen::MatrixXd Gamma_Matrix
std::map< TString, double > EstimateUnc(const std::vector< TString > &par_vec, FitMethod method, int toy_num)
Estimate uncertainty decomposition using toy method.
ParameterType
Type of the parameter.
@ StatGamma
Statistical Gamma, used to represent the statistical uncertainties.
@ Nuisance
Nuisance parameter.
@ Normalization
Normalization parameter.
std::map< TString, std::vector< TString > > ParGroup_Map
std::map< TString, std::vector< TString > > Gamma_Map
void SetSmooth(TString obsname, TString samplename, TString parname, int slevel)
Eigen::MatrixXd POI_Cov_Matrix
Parameter::ExtrapStrategy NUISANCE_DEFAULT_STRATEGY
Eigen::MatrixXd Rho_Matrix