• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

BCTemplateFitter.h

Go to the documentation of this file.
00001 #ifndef __BCTEMPLATEFITTER__H
00002 #define __BCTEMPLATEFITTER__H
00003 
00017 /*
00018  * Copyright (C) 2008-2011, Daniel Kollar and Kevin Kroeninger.
00019  * All rights reserved.
00020  *
00021  * For the licensing terms see doc/COPYING.
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       //    TH1D GetTemplate(const char * name);
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       //    int AddSystErrorCorrelation(const char * errorname1, const char * errnorame2, double corr);
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       // histogram container
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       // name container
00451 
00454       std::vector<std::string> fTemplateNameContainer;
00455 
00458       std::vector<std::string> fSystErrorNameContainer;
00459 
00460       // index container
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       // error type container
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 

Generated by  doxygen 1.7.1