00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOPROFILELL
00013 #define ROOPROFILELL
00014
00015 #include "RooAbsReal.h"
00016 #include "RooRealProxy.h"
00017 #include "RooSetProxy.h"
00018 #include <map>
00019 #include <string>
00020
00021 class RooMinuit ;
00022
00023 class RooProfileLL : public RooAbsReal {
00024 public:
00025
00026 RooProfileLL() ;
00027 RooProfileLL(const char *name, const char *title, RooAbsReal& nll, const RooArgSet& observables);
00028 RooProfileLL(const RooProfileLL& other, const char* name=0) ;
00029 virtual TObject* clone(const char* newname) const { return new RooProfileLL(*this,newname); }
00030 virtual ~RooProfileLL() ;
00031
00032 void setAlwaysStartFromMin(Bool_t flag) { _startFromMin = flag ; }
00033 Bool_t alwaysStartFromMin() const { return _startFromMin ; }
00034
00035 RooMinuit* minuit() { return _minuit ; }
00036 RooAbsReal& nll() { return const_cast<RooAbsReal&>(_nll.arg()) ; }
00037 const RooArgSet& bestFitParams() const ;
00038 const RooArgSet& bestFitObs() const ;
00039
00040 virtual RooAbsReal* createProfile(const RooArgSet& paramsOfInterest) ;
00041
00042 virtual Bool_t redirectServersHook(const RooAbsCollection& , Bool_t , Bool_t , Bool_t ) ;
00043
00044 void clearAbsMin() { _absMinValid = kFALSE ; }
00045
00046
00047 protected:
00048
00049 void validateAbsMin() const ;
00050
00051 RooRealProxy _nll ;
00052 RooSetProxy _obs ;
00053 RooSetProxy _par ;
00054 Bool_t _startFromMin ;
00055
00056 TIterator* _piter ;
00057 TIterator* _oiter ;
00058
00059 mutable RooMinuit* _minuit ;
00060
00061 mutable Bool_t _absMinValid ;
00062 mutable Double_t _absMin ;
00063 mutable RooArgSet _paramAbsMin ;
00064 mutable RooArgSet _obsAbsMin ;
00065 mutable std::map<std::string,bool> _paramFixed ;
00066
00067 Double_t evaluate() const ;
00068
00069
00070 private:
00071
00072 ClassDef(RooProfileLL,0)
00073 };
00074
00075 #endif