// @(#)root/hist:$Id$
// Author: Frank Filthaut, Rene Brun   30/05/2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TBinomialEfficiencyFitter
#define ROOT_TBinomialEfficiencyFitter


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TBinomialEfficiencyFitter                                            //
//                                                                      //
// Binomial Fitter for the division of two histograms.                  //
// Use when you need to calculate a selection's efficiency from two     //
// histograms, one containing all entries, and one containing the subset//
// of these entries that pass the selection                             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TObject
#include "TObject.h"
#endif

#ifndef ROOT_TFitResultPtr
#include "TFitResultPtr.h"
#endif



class TH1;
class TF1;

namespace ROOT {
   namespace Fit {
      class Fitter;
   }
}

class TBinomialEfficiencyFitter: public TObject {

protected:
   TH1             *fDenominator;    //Denominator histogram
   TH1             *fNumerator;      //Numerator histogram
   TF1             *fFunction;       //Function to fit
   Double_t         fEpsilon;        //Precision required for function integration (option "I")
   Bool_t           fFitDone;        //Set to kTRUE when the fit has been done
   Bool_t           fAverage;        //True if the fit function must be averaged over the bin
   Bool_t           fRange;          //True if the fit range must be taken from the function range
   ROOT::Fit::Fitter *fFitter;       //pointer to the real fitter

private:

   void   ComputeFCN(Double_t& f, const Double_t* par);

public:
   TBinomialEfficiencyFitter();
   TBinomialEfficiencyFitter(const TH1 *numerator, const TH1 *denominator);
   virtual ~TBinomialEfficiencyFitter();

   void   Set(const TH1 *numerator, const TH1 *denominator);
   void   SetPrecision(Double_t epsilon);
   TFitResultPtr  Fit(TF1 *f1, Option_t* option = "");
   ROOT::Fit::Fitter * GetFitter();
   Double_t  EvaluateFCN(const Double_t * par) {
      Double_t f = 0;
      ComputeFCN(f, par);
      return f;
   }

   ClassDef(TBinomialEfficiencyFitter, 1) //Binomial Fitter for the division of two histograms


};


#endif
 TBinomialEfficiencyFitter.h:1
 TBinomialEfficiencyFitter.h:2
 TBinomialEfficiencyFitter.h:3
 TBinomialEfficiencyFitter.h:4
 TBinomialEfficiencyFitter.h:5
 TBinomialEfficiencyFitter.h:6
 TBinomialEfficiencyFitter.h:7
 TBinomialEfficiencyFitter.h:8
 TBinomialEfficiencyFitter.h:9
 TBinomialEfficiencyFitter.h:10
 TBinomialEfficiencyFitter.h:11
 TBinomialEfficiencyFitter.h:12
 TBinomialEfficiencyFitter.h:13
 TBinomialEfficiencyFitter.h:14
 TBinomialEfficiencyFitter.h:15
 TBinomialEfficiencyFitter.h:16
 TBinomialEfficiencyFitter.h:17
 TBinomialEfficiencyFitter.h:18
 TBinomialEfficiencyFitter.h:19
 TBinomialEfficiencyFitter.h:20
 TBinomialEfficiencyFitter.h:21
 TBinomialEfficiencyFitter.h:22
 TBinomialEfficiencyFitter.h:23
 TBinomialEfficiencyFitter.h:24
 TBinomialEfficiencyFitter.h:25
 TBinomialEfficiencyFitter.h:26
 TBinomialEfficiencyFitter.h:27
 TBinomialEfficiencyFitter.h:28
 TBinomialEfficiencyFitter.h:29
 TBinomialEfficiencyFitter.h:30
 TBinomialEfficiencyFitter.h:31
 TBinomialEfficiencyFitter.h:32
 TBinomialEfficiencyFitter.h:33
 TBinomialEfficiencyFitter.h:34
 TBinomialEfficiencyFitter.h:35
 TBinomialEfficiencyFitter.h:36
 TBinomialEfficiencyFitter.h:37
 TBinomialEfficiencyFitter.h:38
 TBinomialEfficiencyFitter.h:39
 TBinomialEfficiencyFitter.h:40
 TBinomialEfficiencyFitter.h:41
 TBinomialEfficiencyFitter.h:42
 TBinomialEfficiencyFitter.h:43
 TBinomialEfficiencyFitter.h:44
 TBinomialEfficiencyFitter.h:45
 TBinomialEfficiencyFitter.h:46
 TBinomialEfficiencyFitter.h:47
 TBinomialEfficiencyFitter.h:48
 TBinomialEfficiencyFitter.h:49
 TBinomialEfficiencyFitter.h:50
 TBinomialEfficiencyFitter.h:51
 TBinomialEfficiencyFitter.h:52
 TBinomialEfficiencyFitter.h:53
 TBinomialEfficiencyFitter.h:54
 TBinomialEfficiencyFitter.h:55
 TBinomialEfficiencyFitter.h:56
 TBinomialEfficiencyFitter.h:57
 TBinomialEfficiencyFitter.h:58
 TBinomialEfficiencyFitter.h:59
 TBinomialEfficiencyFitter.h:60
 TBinomialEfficiencyFitter.h:61
 TBinomialEfficiencyFitter.h:62
 TBinomialEfficiencyFitter.h:63
 TBinomialEfficiencyFitter.h:64
 TBinomialEfficiencyFitter.h:65
 TBinomialEfficiencyFitter.h:66
 TBinomialEfficiencyFitter.h:67
 TBinomialEfficiencyFitter.h:68
 TBinomialEfficiencyFitter.h:69
 TBinomialEfficiencyFitter.h:70
 TBinomialEfficiencyFitter.h:71
 TBinomialEfficiencyFitter.h:72
 TBinomialEfficiencyFitter.h:73
 TBinomialEfficiencyFitter.h:74
 TBinomialEfficiencyFitter.h:75
 TBinomialEfficiencyFitter.h:76
 TBinomialEfficiencyFitter.h:77
 TBinomialEfficiencyFitter.h:78
 TBinomialEfficiencyFitter.h:79
 TBinomialEfficiencyFitter.h:80
 TBinomialEfficiencyFitter.h:81
 TBinomialEfficiencyFitter.h:82
 TBinomialEfficiencyFitter.h:83