Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:24:18

0001 #ifndef PhysicsTools_Utilities_CombinedChiSquaredLikelihood_h
0002 #define PhysicsTools_Utilities_CombinedChiSquaredLikelihood_h
0003 #include "PhysicsTools/Utilities/interface/RootMinuitResultPrinter.h"
0004 #include "PhysicsTools/Utilities/interface/RootMinuitFuncEvaluator.h"
0005 
0006 namespace fit {
0007   template <typename ChiSquared, typename Likelihood>
0008   class CombinedChiSquaredLikelihood {
0009   public:
0010     CombinedChiSquaredLikelihood() {}
0011     CombinedChiSquaredLikelihood(const ChiSquared& chi2, const Likelihood& like) : chi2_(chi2), like_(like) {}
0012     // return chi-square value
0013     double operator()() const { return -2 * like_() + chi2_(); }
0014     ChiSquared& chi2() { return chi2_; }
0015     const ChiSquared& chi2() const { return chi2_; }
0016     Likelihood& like() { return like_; }
0017     const Likelihood& like() const { return like_; }
0018     size_t numberOfBins() const { return chi2_.numberOfBins(); }
0019 
0020   private:
0021     ChiSquared chi2_;
0022     Likelihood like_;
0023   };
0024 
0025   template <typename ChiSquared, typename Likelihood>
0026   struct RootMinuitResultPrinter<CombinedChiSquaredLikelihood<ChiSquared, Likelihood> > {
0027     static void print(double amin,
0028                       unsigned int numberOfFreeParameters,
0029                       const CombinedChiSquaredLikelihood<ChiSquared, Likelihood>& f) {
0030       unsigned int ndof = f.numberOfBins() - numberOfFreeParameters;
0031       std::cout << "-2 log(maximum-likelihood) = " << amin << ", n.d.o.f = " << ndof
0032                 << ", free parameters = " << numberOfFreeParameters << std::endl;
0033       std::cout << "chi-2 contibution: " << f.chi2()() << "(n. bins: " << f.chi2().numberOfBins() << ")" << std::endl
0034                 << "likelihood contriution: " << -2. * f.like()() << std::endl;
0035     }
0036   };
0037 
0038 }  // namespace fit
0039 
0040 #endif