MaCh3  2.5.1
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:26
std::string GetName() const
Get name of class.
Definition: FitterBase.h:72
Manager * fitMan
The manager for configuration handling.
Definition: FitterBase.h:110
Custom exception class used throughout MaCh3.
The manager class is responsible for managing configurations and settings.
Definition: Manager.h:16
Base class responsible for handling of systematic error parameters. Capable of using PCA or using ada...
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.