BAT  0.9.4
The Bayesian analysis toolkit
 All Classes Namespaces Functions Variables Enumerations
BCModel.h
1 #ifndef __BCMODEL__H
2 #define __BCMODEL__H
3 
16 /*
17  * Copyright (C) 2007-2014, the BAT core developer team
18  * All rights reserved.
19  *
20  * For the licensing terms see doc/COPYING.
21  * For documentation see http://mpp.mpg.de/bat
22  */
23 
24 // ---------------------------------------------------------
25 
26 #include "BCIntegrate.h"
27 
28 #include <string>
29 
30 // ROOT classes
31 class TNamed;
32 class TH1;
33 class TH2D;
34 class TGraph;
35 class TCanvas;
36 class TPostscript;
37 class TF1;
38 
39 //BAT classes
40 class BCDataPoint;
41 class BCDataSet;
42 class BCParameter;
43 class BCH1D;
44 class BCH2D;
45 
46 const int MAXNDATAPOINTVALUES = 20;
47 
48 // ---------------------------------------------------------
49 
50 class BCModel : public BCIntegrate
51 {
52 
53  public:
54 
61  BCModel(const char * name="model");
62 
65  BCModel(const BCModel & bcmodel);
66 
69  virtual ~BCModel();
70 
77  BCModel & operator = (const BCModel & bcmodel);
78 
85  const std::string & GetName() const
86  { return fName; }
87 
91  { return fModelAPriori; }
92 
96  { return fModelAPosteriori; }
97 
101  { return fDataSet; }
102 
106  { return fDataPointLowerBoundaries; }
107 
111  { return fDataPointUpperBoundaries; }
112 
116  double GetDataPointLowerBoundary(unsigned int index) const;
117 
121  double GetDataPointUpperBoundary(unsigned int index) const;
122 
126  bool GetFlagBoundaries() const;
127 
130  unsigned GetNDataPoints() const;
131 
135  BCDataPoint * GetDataPoint(unsigned int index) const;
136 
145  void SetName(const char * name)
146  { fName = name; }
147 
152  void SetModelAPrioriProbability(double probability)
153  { fModelAPriori = probability; }
154 
159  void SetModelAPosterioriProbability(double probability)
160  { fModelAPosteriori = probability; }
161 
168 
173  virtual int AddParameter(BCParameter * parameter);
174 
178  void SetDataSet(BCDataSet* dataset)
179  { fDataSet = dataset; }
180 
184  void SetSingleDataPoint(BCDataPoint * datapoint);
185 
186  void SetSingleDataPoint(BCDataSet * dataset, unsigned int index);
187 
188  void SetDataBoundaries(unsigned int index, double lowerboundary, double upperboundary, bool fixed=false);
189 
193  void SetDataPointLowerBoundaries(BCDataPoint * datasetlowerboundaries)
194  { fDataPointLowerBoundaries = datasetlowerboundaries; }
195 
199  void SetDataPointUpperBoundaries(BCDataPoint * datasetupperboundaries)
200  { fDataPointUpperBoundaries = datasetupperboundaries; }
201 
205  void SetDataPointLowerBoundary(int index, double lowerboundary);
206 
210  void SetDataPointUpperBoundary(int index, double upperboundary);
211 
218  int SetPrior(int index, TF1* f);
219 
226  int SetPrior(const char* name, TF1* f);
227 
236  int SetPriorDelta(int index, double value);
237 
246  int SetPriorDelta(const char* name, double value);
247 
255  int SetPriorGauss(int index, double mean, double sigma);
256 
264  int SetPriorGauss(const char* name, double mean, double sigma);
265 
274  int SetPriorGauss(int index, double mean, double sigmadown, double sigmaup);
275 
284  int SetPriorGauss(const char* name, double mean, double sigmadown, double sigmaup);
285 
293  int SetPrior(int index, TH1 * h, bool flag=false);
294 
302  int SetPrior(const char* name, TH1 * h, bool flag=false);
303 
309  int SetPriorConstant(int index);
310 
316  int SetPriorConstant(const char* name)
317  { return SetPriorConstant(fParameters.Index(name)); }
318 
327  int SetPriorConstantAll();
328 
337  void Copy(const BCModel & bcmodel);
338 
344  double APrioriProbability(const std::vector<double> &parameters);
345 
352  virtual double LogAPrioriProbability(const std::vector<double> &parameters);
353 
358  virtual double Likelihood(const std::vector<double> &params);
359 
365  virtual double LogLikelihood(const std::vector<double> &params) = 0;
366 
371  double ProbabilityNN(const std::vector<double> &params);
372 
378  double LogProbabilityNN(const std::vector<double> &parameters)
379  { return LogLikelihood(parameters) + LogAPrioriProbability(parameters); }
380 
385  double Probability(const std::vector<double> &parameter);
386 
391  double LogProbability(const std::vector<double> &parameter);
392 
398  virtual double SamplingFunction(const std::vector<double> &parameters);
399 
402  double Eval(const std::vector<double> &parameters);
403 
406  virtual double LogEval(const std::vector<double> &parameters);
407 
411  virtual void CorrelateDataPointValues(std::vector<double> &x);
412 
418  double GetPvalueFromChi2(const std::vector<double> &par, int sigma_index);
419 
427  double GetPvalueFromKolmogorov(const std::vector<double>& par, int index);
428 
429  double GetPvalueFromChi2NDoF(std::vector<double> par, int sigma_index);
430 
431  BCH1D * CalculatePValue(std::vector<double> par, bool flag_histogram=false);
432 
435  double GetPValue()
436  { return fPValue; }
437 
438  double GetPValueNDoF()
439  { return fPValueNDoF; }
440 
441  double GetChi2NDoF()
442  { return fChi2NDoF; }
443 
449  std::vector<double> GetChi2Runs(int dataIndex, int sigmaIndex);
450 
455  { fGoFNIterationsMax=n; }
456 
461  { fGoFNIterationsRun=n; }
462 
466  void SetGoFNChains(int n)
467  { fGoFNChains=n; }
468 
474  double HessianMatrixElement(const BCParameter * parameter1, const BCParameter * parameter2, std::vector<double> point);
475 
478  void PrintSummary();
479 
482  void PrintResults(const char * file);
483 
486  void PrintShortFitSummary(int chi2flag=0);
487 
491  void PrintHessianMatrix(std::vector<double> parameters);
492 
502  virtual double CDF(const std::vector<double>& /*parameters*/, int /*index*/, bool /*lower=false*/)
503  {return 0.0;}
504 
507  protected:
510  std::string fName;
511 
515 
519 
523 
527 
531 
532  std::vector<bool> fDataFixedValues;
533 
536  double fPValue;
537 
538  double fChi2NDoF;
539  double fPValueNDoF;
540 
544 
549 
554 
559 
562  std::vector<TNamed*> fPriorContainer;
563 
567 
570  std::vector<bool> fPriorContainerConstant;
571 
574  std::vector<bool> fPriorContainerInterpolate;
575 
576  private:
577 
580  int CompareStrings(const char * string1, const char * string2);
581 
584  BCDataPoint * VectorToDataPoint(const std::vector<double> &data);
585 };
586 
587 // ---------------------------------------------------------
588 
589 typedef std::vector<BCModel*> BCModelContainer;
590 
591 // ---------------------------------------------------------
592 
593 #endif
void SetDataPointUpperBoundary(int index, double upperboundary)
Definition: BCModel.cxx:552
BCDataPoint * GetDataPointUpperBoundaries() const
Definition: BCModel.h:110
bool fPriorConstantAll
Definition: BCModel.h:566
int SetPriorGauss(int index, double mean, double sigma)
Definition: BCModel.cxx:610
std::vector< bool > fPriorContainerConstant
Definition: BCModel.h:570
void PrintShortFitSummary(int chi2flag=0)
Definition: BCModel.cxx:1029
double APrioriProbability(const std::vector< double > &parameters)
Definition: BCModel.cxx:267
BCDataPoint * GetDataPointLowerBoundaries() const
Definition: BCModel.h:105
void SetModelAPrioriProbability(double probability)
Definition: BCModel.h:152
double HessianMatrixElement(const BCParameter *parameter1, const BCParameter *parameter2, std::vector< double > point)
Definition: BCModel.cxx:501
void SetDataPointLowerBoundaries(BCDataPoint *datasetlowerboundaries)
Definition: BCModel.h:193
virtual double Likelihood(const std::vector< double > &params)
Definition: BCModel.cxx:324
virtual double LogLikelihood(const std::vector< double > &params)=0
std::vector< bool > fPriorContainerInterpolate
Definition: BCModel.h:574
double GetDataPointLowerBoundary(unsigned int index) const
Definition: BCModel.cxx:142
double Probability(const std::vector< double > &parameter)
Definition: BCModel.cxx:249
void SetGoFNChains(int n)
Definition: BCModel.h:466
double fModelAPriori
Definition: BCModel.h:514
A class representing a data point.
Definition: BCDataPoint.h:31
int SetPriorDelta(int index, double value)
Definition: BCModel.cxx:592
void SetGoFNIterationsMax(int n)
Definition: BCModel.h:454
int fGoFNChains
Definition: BCModel.h:558
void SetGoFNIterationsRun(int n)
Definition: BCModel.h:460
void SetName(const char *name)
Definition: BCModel.h:145
A class for handling numerical operations for models.
BCDataSet * GetDataSet() const
Definition: BCModel.h:100
void SetDataSet(BCDataSet *dataset)
Definition: BCModel.h:178
bool GetFlagBoundaries() const
Definition: BCModel.cxx:154
int SetPriorConstantAll()
Definition: BCModel.cxx:753
void PrintResults(const char *file)
Definition: BCModel.cxx:816
The base class for all user-defined models.
Definition: BCModel.h:50
A class for handling 2D distributions.
Definition: BCH2D.h:37
double GetDataPointUpperBoundary(unsigned int index) const
Definition: BCModel.cxx:148
void SetSingleDataPoint(BCDataPoint *datapoint)
Definition: BCModel.cxx:172
void PrintHessianMatrix(std::vector< double > parameters)
Definition: BCModel.cxx:1056
A class representing a set of data points.
Definition: BCDataSet.h:37
BCDataPoint * fDataPointLowerBoundaries
Definition: BCModel.h:526
std::vector< TNamed * > fPriorContainer
Definition: BCModel.h:562
double GetPvalueFromChi2(const std::vector< double > &par, int sigma_index)
Definition: BCModel.cxx:351
double GetModelAPosterioriProbability() const
Definition: BCModel.h:95
double LogProbabilityNN(const std::vector< double > &parameters)
Definition: BCModel.h:378
int fGoFNIterationsMax
Definition: BCModel.h:548
BCModel(const char *name="model")
Definition: BCModel.cxx:36
virtual double CDF(const std::vector< double > &, int, bool)
Definition: BCModel.h:502
double fModelAPosteriori
Definition: BCModel.h:518
BCDataPoint * GetDataPoint(unsigned int index) const
Definition: BCModel.cxx:132
void SetModelAPosterioriProbability(double probability)
Definition: BCModel.h:159
double LogProbability(const std::vector< double > &parameter)
Definition: BCModel.cxx:255
A class representing a parameter of a model.
Definition: BCParameter.h:28
virtual int AddParameter(BCParameter *parameter)
Definition: BCModel.cxx:225
std::string fName
Definition: BCModel.h:510
unsigned GetNDataPoints() const
Definition: BCModel.cxx:123
double Eval(const std::vector< double > &parameters)
Definition: BCModel.cxx:330
bool flag_discrete
Definition: BCModel.h:543
int fGoFNIterationsRun
Definition: BCModel.h:553
void PrintSummary()
Definition: BCModel.cxx:772
virtual int AddParameter(const char *name, double min, double max, const char *latexname="")
double ProbabilityNN(const std::vector< double > &params)
Definition: BCModel.cxx:243
virtual ~BCModel()
Definition: BCModel.cxx:104
double GetPvalueFromKolmogorov(const std::vector< double > &par, int index)
Definition: BCModel.cxx:394
A class for handling 1D distributions.
Definition: BCH1D.h:31
BCDataSet * fDataSet
Definition: BCModel.h:522
int SetPriorConstant(int index)
Definition: BCModel.cxx:732
virtual double LogEval(const std::vector< double > &parameters)
Definition: BCModel.cxx:336
virtual double SamplingFunction(const std::vector< double > &parameters)
Definition: BCModel.cxx:342
double GetModelAPrioriProbability() const
Definition: BCModel.h:90
int SetPrior(int index, TF1 *f)
Definition: BCModel.cxx:558
BCDataPoint * fDataPointUpperBoundaries
Definition: BCModel.h:530
double GetPValue()
Definition: BCModel.h:435
void Copy(const BCModel &bcmodel)
Definition: BCModel.cxx:62
void SetDataPointUpperBoundaries(BCDataPoint *datasetupperboundaries)
Definition: BCModel.h:199
void SetDataPointLowerBoundary(int index, double lowerboundary)
Definition: BCModel.cxx:546
double fPValue
Definition: BCModel.h:536
virtual double LogAPrioriProbability(const std::vector< double > &parameters)
Definition: BCModel.cxx:273
std::vector< double > GetChi2Runs(int dataIndex, int sigmaIndex)
Definition: BCModel.cxx:368
BCModel & operator=(const BCModel &bcmodel)
Definition: BCModel.cxx:115
int SetPriorConstant(const char *name)
Definition: BCModel.h:316
virtual void CorrelateDataPointValues(std::vector< double > &x)
Definition: BCModel.cxx:495
const std::string & GetName() const
Definition: BCModel.h:85