MaCh3  2.6.0
Reference Guide
PredictiveThrower.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Fitters/FitterBase.h"
4 
6 
7 // ***************************
10 // ***************************
11  // Name of sample
12  std::string Name;
16  int LocalId;
19 };
20 
32 class PredictiveThrower : public FitterBase {
33  public:
38  virtual ~PredictiveThrower();
39 
41  void ProduceToys();
42 
44  void RunPredictiveAnalysis();
45 
47  void RunMCMC() override {
48  MACH3LOG_ERROR("{} is not supported in {}", __func__, GetName());
49  throw MaCh3Exception(__FILE__ , __LINE__ );
50  };
51 
52  private:
54  void SetParamters(std::vector<std::string>& ParameterGroupsNotVaried,
55  std::unordered_set<int>& ParameterOnlyToVary);
56 
58  void SetupToyGeneration(std::vector<std::string>& ParameterGroupsNotVaried,
59  std::unordered_set<int>& ParameterOnlyToVary,
60  std::vector<const M3::float_t*>& BoundValuePointer,
61  std::vector<std::pair<double, double>>& ParamBounds);
62 
64  bool LoadToys();
66  void WriteToy(TDirectory* ToyDirectory, TDirectory* Toy_1DDirectory, TDirectory* Toy_2DDirectory, const int iToy);
68  void WriteByModeToys(TDirectory* ByModeDirectory, const int iToy);
69 
72 
74  std::vector<std::string> GetStoredFancyName(ParameterHandlerBase* Systematics) const;
75 
77  std::vector<std::unique_ptr<TH1>> MakePredictive(const std::vector<std::vector<std::unique_ptr<TH1>>>& Toys,
78  const std::vector<TDirectory*>& Director,
79  const std::string& suffix,
80  const bool DebugHistograms,
81  const bool WriteHist);
82 
84  void Study1DProjections(const std::vector<TDirectory*>& SampleDirectories) const;
86  void StudyByMode1DProjections(const std::vector<TDirectory*>& SampleDirectories) const;
87 
89  void ProduceSpectra(const std::vector<std::vector<std::vector<std::unique_ptr<TH1D>>>>& Toys,
90  const std::vector<TDirectory*>& Director,
91  const std::string suffix,
92  const bool DoSummary = true) const;
93 
97  void MakeFluctuatedHistogram(TH1* FluctHist, TH1* PolyHist);
98 
100  void PredictiveLLH(const std::vector<std::unique_ptr<TH1>>& Data_histogram,
101  const std::vector<std::unique_ptr<TH1>>& PostPred_mc,
102  const std::vector<std::unique_ptr<TH1>>& PostPred_w,
103  const std::vector<TDirectory*>& SampleDir);
104 
105 
114  void PosteriorPredictivepValue(const std::vector<std::unique_ptr<TH1>>& PostPred_mc,
115  const std::vector<TDirectory*>& SampleDir);
121  void ExtractLLH(TH1* DatHist, TH1* MCHist, TH1* W2Hist, const SampleHandlerInterface* SampleHandler) const;
122 
128  double CalcLLH(const double data,
129  const double mc,
130  const double w2,
131  const SampleHandlerInterface* SampleHandler) const;
132 
138  double CalcLLH(const TH1* DatHist,
139  const TH1* MCHist,
140  const TH1* W2Hist,
141  const SampleHandlerInterface* SampleHandler) const;
142 
148  double GetLLH(const TH1D* DatHist,
149  const TH1D* MCHist,
150  const TH1D* W2Hist,
151  const SampleHandlerInterface* SampleHandler) const;
152 
158  double GetLLH(const TH2D* DatHist,
159  const TH2D* MCHist,
160  const TH2D* W2Hist,
161  const SampleHandlerInterface* SampleHandler) const;
162 
168  double GetLLH(const TH2Poly* DatHist,
169  const TH2Poly* MCHist,
170  const TH2Poly* W2Hist,
171  const SampleHandlerInterface* SampleHandler) const;
172 
174  void MakeChi2Plots(const std::vector<std::vector<double>>& Chi2_x,
175  const std::string& Chi2_x_title,
176  const std::vector<std::vector<double>>& Chi2_y,
177  const std::string& Chi2_y_title,
178  const std::vector<TDirectory*>& SampleDir,
179  const std::string Title);
180 
182  void StudyCorrelations(TDirectory* PredictiveDir,
183  const std::vector<std::vector<std::unique_ptr<TH1>>>& Toys,
184  const bool DebugHistograms) const;
185 
188  const std::vector<std::unique_ptr<TH1>>& PostPred_mc,
189  const std::vector<std::unique_ptr<TH1>>& PostPred_w);
203  void StudyBIC(const std::vector<std::unique_ptr<TH1>>& PostPred_mc,
204  const std::vector<std::unique_ptr<TH1>>& PostPred_w);
225  void StudyDIC(const std::vector<std::unique_ptr<TH1>>& PostPred_mc,
226  const std::vector<std::unique_ptr<TH1>>& PostPred_w);
248  void StudyWAIC();
255  std::string GetBinName(TH1* hist,
256  const bool uniform,
257  const int Dim,
258  const std::vector<int>& bins) const;
274  std::vector<std::unique_ptr<TH1D>> PerBinHistogram(TH1* hist,
275  const int SampleId,
276  const int Dim,
277  const std::string& suffix) const;
278 
280  void StudyBetaParameters(TDirectory* PredictiveDir);
282  void MakeCutEventRate(TH1D *Histogram, const double DataRate) const;
284  void RateAnalysis(const std::vector<std::vector<std::unique_ptr<TH1>>>& Toys,
285  const std::vector<TDirectory*>& SampleDirectories) const;
286 
288  bool FullLLH;
293 
296 
298  std::vector<PredictiveSample> SampleInfo;
299 
301  int Ntoys;
302 
305 
307  std::vector<std::unique_ptr<TH1>> Data_Hist;
309  std::vector<std::unique_ptr<TH1>> MC_Nom_Hist;
311  std::vector<std::unique_ptr<TH1>> W2_Nom_Hist;
312 
315  std::vector<std::vector<std::unique_ptr<TH1>>> MC_Hist_Toy;
318  std::vector<std::vector<std::unique_ptr<TH1>>> W2_Hist_Toy;
319 
321  std::vector<double> ReweightWeight;
323  std::vector<double> PenaltyTerm;
324 
327 };
328 
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:37
Base class for implementing fitting algorithms.
Definition: FitterBase.h:29
std::string GetName() const
Get name of class.
Definition: FitterBase.h:75
Manager * fitMan
The manager for configuration handling.
Definition: FitterBase.h:113
Custom exception class used throughout MaCh3.
The manager class is responsible for managing configurations and settings.
Definition: Manager.h:16
Base class for handling systematic uncertainty parameters.
Class responsible for handling of systematic error parameters with different types defined in the con...
Implementation of Prior/Posterior Predictive and Bayesian p-Value calculations following the approach...
std::vector< double > PenaltyTerm
Penalty term values for each toy by default 0.
virtual ~PredictiveThrower()
Destructor.
void ExtractLLH(TH1 *DatHist, TH1 *MCHist, TH1 *W2Hist, const SampleHandlerInterface *SampleHandler) const
Calculate the LLH for TH1, set the LLH to title of MCHist.
bool FullLLH
KS: Use Full LLH or only sample contribution based on discussion with Asher we almost always only wan...
void WriteToy(TDirectory *ToyDirectory, TDirectory *Toy_1DDirectory, TDirectory *Toy_2DDirectory, const int iToy)
Save histograms for a single MCMC Throw/Toy.
void StudyCorrelations(TDirectory *PredictiveDir, const std::vector< std::vector< std::unique_ptr< TH1 >>> &Toys, const bool DebugHistograms) const
Study Prior/Posterior correlations between samples etc.
void RunPredictiveAnalysis()
Main routine responsible for producing posterior predictive distributions and $p$-value.
bool LoadToys()
Load existing toys.
void PosteriorPredictivepValue(const std::vector< std::unique_ptr< TH1 >> &PostPred_mc, const std::vector< TDirectory * > &SampleDir)
Calculate Posterior Predictive $p$-value Compares observed data to toy datasets generated from:
void WriteByModeToys(TDirectory *ByModeDirectory, const int iToy)
Save mode histograms for a single MCMC Throw/Toy.
void StudyBIC(const std::vector< std::unique_ptr< TH1 >> &PostPred_mc, const std::vector< std::unique_ptr< TH1 >> &PostPred_w)
Study Bayesian Information Criterion (BIC) The BIC is defined as:
void SetupToyGeneration(std::vector< std::string > &ParameterGroupsNotVaried, std::unordered_set< int > &ParameterOnlyToVary, std::vector< const M3::float_t * > &BoundValuePointer, std::vector< std::pair< double, double >> &ParamBounds)
Setup useful variables etc before stating toy generation.
std::string GetBinName(TH1 *hist, const bool uniform, const int Dim, const std::vector< int > &bins) const
Construct a human-readable label describing a specific analysis bin.
std::vector< std::string > GetStoredFancyName(ParameterHandlerBase *Systematics) const
Get Fancy parameters stored in mcmc chains for passed ParameterHandler.
std::vector< std::unique_ptr< TH1 > > W2_Nom_Hist
Vector of W2 histograms.
std::vector< std::vector< std::unique_ptr< TH1 > > > W2_Hist_Toy
bool Is_PriorPredictive
Whether it is Prior or Posterior predictive.
int NModelParams
KS: Count total number of model parameters which can be used for stuff like BIC.
void RunMCMC() override
This is not used in this class.
void MakeCutEventRate(TH1D *Histogram, const double DataRate) const
Make the 1D Event Rate Hist.
void StudyInformationCriterion(M3::kInfCrit Criterion, const std::vector< std::unique_ptr< TH1 >> &PostPred_mc, const std::vector< std::unique_ptr< TH1 >> &PostPred_w)
Information Criterion.
int Ntoys
Number of toys we are generating analysing.
void StudyByMode1DProjections(const std::vector< TDirectory * > &SampleDirectories) const
Load 1D projections by mode and produce post pred for each.
void PredictiveLLH(const std::vector< std::unique_ptr< TH1 >> &Data_histogram, const std::vector< std::unique_ptr< TH1 >> &PostPred_mc, const std::vector< std::unique_ptr< TH1 >> &PostPred_w, const std::vector< TDirectory * > &SampleDir)
Calculate Posterior Predictive LLH.
void RateAnalysis(const std::vector< std::vector< std::unique_ptr< TH1 >>> &Toys, const std::vector< TDirectory * > &SampleDirectories) const
Produce distribution of number of events for each sample.
void MakeChi2Plots(const std::vector< std::vector< double >> &Chi2_x, const std::string &Chi2_x_title, const std::vector< std::vector< double >> &Chi2_y, const std::string &Chi2_y_title, const std::vector< TDirectory * > &SampleDir, const std::string Title)
Produce Chi2 plot for a single sample based on which $p$-value is calculated.
void SetParamters(std::vector< std::string > &ParameterGroupsNotVaried, std::unordered_set< int > &ParameterOnlyToVary)
This set some params to prior value this way you can evaluate errors from subset of errors.
void StudyWAIC()
KS: Get the Watanabe-Akaike information criterion (WAIC)
void Study1DProjections(const std::vector< TDirectory * > &SampleDirectories) const
Load 1D projections and later produce violin plots for each.
void SetupSampleInformation()
Setup sample information.
std::vector< std::unique_ptr< TH1 > > MC_Nom_Hist
Vector of MC histograms.
int TotalNumberOfSamples
Number of toys we are generating analysing.
void ProduceToys()
Produce toys by throwing from MCMC.
void StudyBetaParameters(TDirectory *PredictiveDir)
Evaluate prior/post predictive distribution for beta parameters (used for evaluating impact MC statis...
double CalcLLH(const double data, const double mc, const double w2, const SampleHandlerInterface *SampleHandler) const
Calculates the -2LLH (likelihood) for a single sample.
std::vector< std::unique_ptr< TH1 > > Data_Hist
Vector of Data histograms.
bool StandardFluctuation
KS: We have two methods for Poissonian fluctuation.
ParameterHandlerGeneric * ModelSystematic
Pointer to El Generico.
std::vector< double > ReweightWeight
Reweighting factors applied for each toy, by default 1.
std::vector< std::unique_ptr< TH1 > > MakePredictive(const std::vector< std::vector< std::unique_ptr< TH1 >>> &Toys, const std::vector< TDirectory * > &Director, const std::string &suffix, const bool DebugHistograms, const bool WriteHist)
Produce posterior predictive distribution.
PredictiveThrower(Manager *const fitMan)
Constructor.
void MakeFluctuatedHistogram(TH1 *FluctHist, TH1 *PolyHist)
Make Poisson fluctuation of TH1D hist.
std::vector< std::vector< std::unique_ptr< TH1 > > > MC_Hist_Toy
std::vector< PredictiveSample > SampleInfo
Handy struct for all sample info.
void StudyDIC(const std::vector< std::unique_ptr< TH1 >> &PostPred_mc, const std::vector< std::unique_ptr< TH1 >> &PostPred_w)
KS: Get the Deviance Information Criterion (DIC) The deviance is defined as:
double GetLLH(const TH1D *DatHist, const TH1D *MCHist, const TH1D *W2Hist, const SampleHandlerInterface *SampleHandler) const
Helper functions to calculate likelihoods using TH1D.
void ProduceSpectra(const std::vector< std::vector< std::vector< std::unique_ptr< TH1D >>>> &Toys, const std::vector< TDirectory * > &Director, const std::string suffix, const bool DoSummary=true) const
Produce Violin style spectra.
std::vector< std::unique_ptr< TH1D > > PerBinHistogram(TH1 *hist, const int SampleId, const int Dim, const std::string &suffix) const
Create per-bin posterior histograms for a given sample.
Class responsible for handling implementation of samples used in analysis, reweighting and returning ...
kInfCrit
KS: Different Information Criterion tests mostly based Gelman paper.
KS: Summary of sample info to be used by.
int LocalId
Local SampleId in SampleHandler.
const SampleHandlerInterface * SamHandler
Pointer to SampleHandler.
int Dimenstion
Sample Dimension.