Go to the documentation of this file.00001 #ifndef __BCTEMPLATEFITTER__H
00002 #define __BCTEMPLATEFITTER__H
00003
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <vector>
00027
00028 #include <TH1D.h>
00029 #include <TF1.h>
00030
00031 #include "BCModel.h"
00032
00033 class TH2D;
00034
00035
00036
00037 class BCTemplateFitter : public BCModel
00038 {
00039 public:
00040
00044 BCTemplateFitter();
00045
00049 BCTemplateFitter(const char * name);
00050
00054 ~BCTemplateFitter();
00055
00059 int GetNTemplates()
00060 { return int(fTemplateParIndexContainer.size()); }
00061
00066 int GetNTemplatesType(int templatetype);
00067
00071 int GetNSystErrors()
00072 { return int(fSystErrorParIndexContainer.size()); }
00073
00077 int GetNDF()
00078 { return fHistData.GetNbinsX() - GetNParameters(); }
00079
00083 int GetNRatios()
00084 { return int(fHistRatios1D.size()); }
00085
00089 std::vector<TH1D> GetHistRatios1D()
00090 { return fHistRatios1D; }
00091
00095 std::vector<TH1D> GetTemplateHistogramContainer()
00096 { return fTemplateHistogramContainer; };
00097
00101 std::vector<TF1> GetTemplateFunctionContainer()
00102 { return fTemplateFunctionContainer; };
00103
00107 TH1D GetHistRatio1D(int index)
00108 { return fHistRatios1D.at(index); }
00109
00110 TH2D* GetUncertaintyHistogramExp()
00111 { return fUncertaintyHistogramExp; };
00112
00113 TH2D* GetUncertaintyHistogramObsPosterior()
00114 { return fUncertaintyHistogramObsPosterior; };
00115
00120 int GetIndexTemplate(const char * name);
00121
00126 int GetIndexSystError(const char * name);
00127
00132 int GetParIndexTemplate(const char * name);
00133
00138 int GetParIndexTemplate(int index);
00139
00144 int GetParIndexEff(const char * name);
00145
00150 int GetParIndexSystError(const char * name);
00151
00156
00157
00161 TH1D GetData()
00162 { return fHistData; }
00163
00168 int GetHistogramIndex(int templatenumber)
00169 { return fHistogramIndexContainer.at(templatenumber); };
00170
00175 int GetFunctionIndex(int templatenumber)
00176 { return fFunctionIndexContainer.at(templatenumber); };
00177
00181 std::vector<int> GetTemplateParIndexContainer()
00182 { return fTemplateParIndexContainer; };
00183
00189 double Expectation(int binnumber, std::vector<double>& parameters);
00190
00197 double TemplateEfficiency(int templatenumber, int binnumber, std::vector<double>& parameters);
00198
00205 double TemplateProbability(int templatenumber, int binnumber, std::vector<double>& parameters);
00206
00207
00213 void SetFlagPhysicalLimits(bool flag)
00214 { fFlagPhysicalLimits = flag; }
00215
00220 void SetFlagFixNorm(bool flag)
00221 { fFlagFixNorm = flag; }
00222
00226 void SetNorm(double norm)
00227 { fNorm = norm; }
00228
00234 int SetData(const TH1D& hist);
00235
00236 int FixTemplateFunctions(std::vector<double>& parameters);
00237
00242 int Initialize();
00243
00253 int AddTemplate(TH1D hist, const char * name, double Nmin=0, double Nmax=0);
00254
00255 int AddTemplate(TF1 func, const char * name, double Nmin=0, double Nmax=0, const char* options="");
00256
00263 int SetTemplateEfficiency(const char * name, double effmean = 1., double effsigma = 0.);
00264
00272 int SetTemplateEfficiency(const char * name, TH1D eff, TH1D efferr);
00273
00280 int AddSystError(const char * errorname, const char * errtype = "gauss");
00281
00289 int SetTemplateSystError(const char * errorname, const char * templatename, TH1D parerror);
00290
00298
00299
00307 int ConstrainSum(std::vector <int> indices, double mean, double rms);
00308
00317 int CalculateRatio(int index, std::vector<int> indices, double rmin = -1.0, double rmax = 1.0);
00318
00323 int CompareHistogramProperties(TH1D hist1, TH1D hist2);
00324
00329 double CalculateChi2(std::vector<double> parameters);
00330
00334 double CalculateChi2Prob(std::vector<double> parameters);
00335
00339 double CalculateMaxLike();
00340
00344 double CalculatePValue();
00345
00349 double CalculateKSProb();
00350
00354 void MCMCUserIterationInterface();
00355
00370 void PrintStack(const char * filename = "stack.ps", const char * options="LE2E0D");
00371
00378 void PrintRatios(const char * filename = "ratio.ps", int option = 0, double ovalue = 0.);
00379
00386 int PrintTemplate(const char * name, const char * filename);
00387
00391 void PrintTemp();
00392
00399 TH1D CreateErrorHist(TH1D hist, TH1D histerr);
00400
00405 double LogLikelihood(std::vector <double> parameters);
00406
00411 int PerformFit();
00412
00419 TH1D CombineUncertainties(const char * name);
00420
00421 protected:
00422
00426 TH1D fHistData;
00427
00428
00429
00432 std::vector<TH1D> fTemplateHistogramContainer;
00433
00436 std::vector<TF1> fTemplateFunctionContainer;
00437
00440 std::vector<TH1D> fEffHistogramContainer;
00441
00444 std::vector<TH1D> fEffErrHistogramContainer;
00445
00448 std::vector< std::vector<TH1D> > fSystErrorHistogramContainer;
00449
00450
00451
00454 std::vector<std::string> fTemplateNameContainer;
00455
00458 std::vector<std::string> fSystErrorNameContainer;
00459
00460
00461
00464 std::vector<int> fTemplateParIndexContainer;
00465
00468 std::vector<int> fHistogramIndexContainer;
00469
00472 std::vector<int> fFunctionIndexContainer;
00473
00476 std::vector<int> fEffParIndexContainer;
00477
00481 std::vector<int> fSystErrorParIndexContainer;
00482
00483
00484
00487 std::vector<std::string> fSystErrorTypeContainer;
00488
00489
00494 std::vector<int> fTemplateTypeContainer;
00495
00499 std::vector< std::vector<int> > fConstraintSumIndices;
00500
00504 std::vector< double > fConstraintSumMean;
00505
00509 std::vector< double > fConstraintSumRMS;
00510
00514 TH1D fHistNorm;
00515
00519 std::vector< std::vector<int> > fIndicesRatios1D;
00520
00524 std::vector <TH1D> fHistRatios1D;
00525
00529 bool fFlagFixNorm;
00530
00535 bool fFlagPhysicalLimits;
00536
00540 TH2D * fUncertaintyHistogramExp;
00541
00545 TH2D * fUncertaintyHistogramObsPosterior;
00546
00550 double fNorm;
00551
00554 int fNBins;
00555
00558 double fXmin;
00559
00562 double fXmax;
00563
00564 };
00565
00566
00567
00568 #endif
00569