• 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 
00020 /*
00021  * Copyright (C) 2008-2012, Daniel Kollar and Kevin Kroeninger.
00022  * All rights reserved.
00023  *
00024  * For the licensing terms see doc/COPYING.
00025  */
00026 
00027 // ---------------------------------------------------------
00028 
00029 #include <vector>
00030 
00031 #include <TH1D.h>
00032 #include <TF1.h>
00033 
00034 #include "../../BAT/BCModel.h"
00035 
00036 class TH2D;
00037 
00038 // ---------------------------------------------------------
00039 
00040 class BCTemplateFitter : public BCModel
00041 {
00042    public:
00043 
00047       BCTemplateFitter();
00048 
00052       BCTemplateFitter(const char * name);
00053 
00057       ~BCTemplateFitter();
00058 
00062       int GetNTemplates()
00063          { return int(fTemplateParIndexContainer.size()); }
00064 
00069       int GetNTemplatesType(int templatetype);
00070 
00074       int GetNSystErrors()
00075          { return int(fSystErrorParIndexContainer.size()); }
00076 
00080       int GetNDF()
00081          { return fHistData.GetNbinsX() - GetNParameters(); }
00082 
00086       int GetNRatios()
00087          { return int(fHistRatios1D.size()); }
00088 
00092       std::vector<TH1D> GetHistRatios1D()
00093          { return fHistRatios1D; }
00094 
00098       std::vector<TH1D> GetTemplateHistogramContainer()
00099          { return fTemplateHistogramContainer; };
00100 
00104       std::vector<TF1> GetTemplateFunctionContainer()
00105          { return fTemplateFunctionContainer; };
00106 
00110       TH1D GetHistRatio1D(int index)
00111          { return fHistRatios1D.at(index); }
00112 
00113       TH2D* GetUncertaintyHistogramExp()
00114       { return fUncertaintyHistogramExp; };
00115 
00116       TH2D* GetUncertaintyHistogramObsPosterior()
00117       { return fUncertaintyHistogramObsPosterior; };
00118 
00123       int GetIndexTemplate(const char * name);
00124 
00129       int GetIndexSystError(const char * name);
00130 
00135       int GetParIndexTemplate(const char * name);
00136 
00141       int GetParIndexTemplate(int index);
00142 
00147       int GetParIndexEff(const char * name);
00148 
00153       int GetParIndexSystError(const char * name);
00154 
00159       //      TH1D GetTemplate(const char * name);
00160 
00164       TH1D GetData()
00165          { return fHistData; }
00166 
00171       int GetHistogramIndex(int templatenumber)
00172          { return fHistogramIndexContainer.at(templatenumber); };
00173 
00178       int GetFunctionIndex(int templatenumber)
00179          { return fFunctionIndexContainer.at(templatenumber); };
00180 
00184       std::vector<int> GetTemplateParIndexContainer()
00185          { return fTemplateParIndexContainer; };
00186 
00192       double Expectation(int binnumber, const std::vector<double>& parameters);
00193 
00200       double TemplateEfficiency(int templatenumber, int binnumber, const std::vector<double>& parameters);
00201 
00208       double TemplateProbability(int templatenumber, int binnumber, const std::vector<double>& parameters);
00209 
00210 
00216       void SetFlagPhysicalLimits(bool flag)
00217          { fFlagPhysicalLimits = flag; }
00218 
00223       void SetFlagFixNorm(bool flag)
00224          { fFlagFixNorm = flag; }
00225 
00229       void SetNorm(double norm)
00230          { fNorm = norm; }
00231 
00237       int SetData(const TH1D& hist);
00238 
00239       int FixTemplateFunctions(const std::vector<double>& parameters);
00240 
00245       int Initialize();
00246 
00256       int AddTemplate(TH1D hist, const char * name, double Nmin=0, double Nmax=0);
00257 
00258       int AddTemplate(TF1 func, const char * name, double Nmin=0, double Nmax=0, const char* options="");
00259 
00266       int SetTemplateEfficiency(const char * name, double effmean = 1., double effsigma = 0.);
00267 
00275       int SetTemplateEfficiency(const char * name, TH1D eff, TH1D efferr);
00276 
00283       int AddSystError(const char * errorname, const char * errtype = "gauss");
00284 
00292       int SetTemplateSystError(const char * errorname, const char * templatename, TH1D parerror);
00293 
00301       //      int AddSystErrorCorrelation(const char * errorname1, const char * errnorame2, double corr);
00302 
00310       int ConstrainSum(std::vector<int> indices, double mean, double rms);
00311 
00320       int CalculateRatio(int index, std::vector<int> indices, double rmin = -1.0, double rmax = 1.0);
00321 
00326       int CompareHistogramProperties(TH1D hist1, TH1D hist2);
00327 
00332       double CalculateChi2(const std::vector<double> & parameters);
00333 
00337       double CalculateChi2Prob(const std::vector<double> & parameters);
00338 
00342       double CalculateMaxLike();
00343 
00347       double CalculatePValue();
00348 
00352       double CalculateKSProb();
00353 
00357       void MCMCUserIterationInterface();
00358 
00373       void PrintStack(const char * filename = "stack.ps", const char * options="LE2E0D");
00374 
00381       void PrintRatios(const char * filename = "ratio.ps", int option = 0, double ovalue = 0.);
00382 
00389       int PrintTemplate(const char * name, const char * filename);
00390 
00394       void PrintTemp();
00395 
00402       TH1D CreateErrorHist(TH1D hist, TH1D histerr);
00403 
00408       double LogLikelihood(const std::vector<double> & parameters);
00409 
00414       int PerformFit();
00415 
00422       TH1D CombineUncertainties(const char * name);
00423 
00424     protected:
00425 
00429       TH1D fHistData;
00430 
00431       // histogram container
00432 
00435       std::vector<TH1D> fTemplateHistogramContainer;
00436 
00439       std::vector<TF1> fTemplateFunctionContainer;
00440 
00443       std::vector<TH1D> fEffHistogramContainer;
00444 
00447       std::vector<TH1D> fEffErrHistogramContainer;
00448 
00451       std::vector< std::vector<TH1D> > fSystErrorHistogramContainer;
00452 
00453       // name container
00454 
00457       std::vector<std::string> fTemplateNameContainer;
00458 
00461       std::vector<std::string> fSystErrorNameContainer;
00462 
00463       // index container
00464 
00467       std::vector<int> fTemplateParIndexContainer;
00468 
00471       std::vector<int> fHistogramIndexContainer;
00472 
00475       std::vector<int> fFunctionIndexContainer;
00476 
00479       std::vector<int> fEffParIndexContainer;
00480 
00484       std::vector<int> fSystErrorParIndexContainer;
00485 
00486       // error type container
00487 
00490       std::vector<std::string> fSystErrorTypeContainer;
00491 
00492 
00497       std::vector<int> fTemplateTypeContainer;
00498 
00502       std::vector< std::vector<int> > fConstraintSumIndices;
00503 
00507       std::vector< double > fConstraintSumMean;
00508 
00512       std::vector< double > fConstraintSumRMS;
00513 
00517       TH1D fHistNorm;
00518 
00522       std::vector< std::vector<int> > fIndicesRatios1D;
00523 
00527       std::vector<TH1D> fHistRatios1D;
00528 
00532       bool fFlagFixNorm;
00533 
00538       bool fFlagPhysicalLimits;
00539 
00543       TH2D * fUncertaintyHistogramExp;
00544 
00548       TH2D * fUncertaintyHistogramObsPosterior;
00549 
00553       double fNorm;
00554 
00557       int fNBins;
00558 
00561       double fXmin;
00562 
00565       double fXmax;
00566 
00567 };
00568 
00569 // ---------------------------------------------------------
00570 
00571 #endif
00572 

Generated by  doxygen 1.7.1