ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 *    File: $Id: ParamHistFunc.h,v 1.3 2007/05/11 09:11:30 verkerke Exp $
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/

#ifndef ROO_PARAMHISTFUNC
#define ROO_PARAMHISTFUNC

#include <map>
#include "RooAbsReal.h"
#include "RooRealProxy.h"
#include "RooListProxy.h"
#include "RooObjCacheManager.h"
#include "RooDataHist.h"

// Forward Declarations
class RooRealVar;
class RooArgList ;
class RooWorkspace;
class RooBinning;

class ParamHistFunc : public RooAbsReal {
public:

  ParamHistFunc() ;
  ParamHistFunc(const char *name, const char *title, const RooArgList& vars, const RooArgList& paramSet );
  ParamHistFunc(const char *name, const char *title, const RooArgList& vars, const RooArgList& paramSet, const TH1* hist );
  // Not yet fully implemented:
  //ParamHistFunc(const char *name, const char *title, const RooRealVar& var, const RooArgList& paramSet, const RooAbsReal& nominal );
  virtual ~ParamHistFunc() ;


  ParamHistFunc(const ParamHistFunc& other, const char* name = 0);
  virtual TObject* clone(const char* newname) const { return new ParamHistFunc(*this, newname); }

  //  void printMetaArgs(ostream& os) const ;

  const RooArgList& paramList() const { return _paramSet ; }

  virtual Bool_t forceAnalyticalInt(const RooAbsArg&) const { return kTRUE ; }

  Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet,const char* rangeName=0) const ;
  Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;


  Int_t getCurrentBin() const ;
  RooRealVar& getParameter( Int_t ) const ;
  RooRealVar& getParameter() const ;

  void setParamConst( Int_t, Bool_t=kTRUE );

  static RooArgList createParamSet(RooWorkspace& w, const std::string&, const RooArgList& Vars);
  static RooArgList createParamSet(RooWorkspace& w, const std::string&, const RooArgList& Vars, Double_t, Double_t);
  static RooArgList createParamSet(const std::string&, Int_t, Double_t, Double_t);

  virtual std::list<Double_t>* binBoundaries(RooAbsRealLValue& /*obs*/, Double_t /*xlo*/, Double_t /*xhi*/) const ;
  virtual std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const ; 
  virtual Bool_t isBinnedDistribution(const RooArgSet& /*obs*/) const {return kTRUE;}


protected:

  class CacheElem : public RooAbsCacheElement {
  public:
    CacheElem()  {} ;
    virtual ~CacheElem() {} ; 
    virtual RooArgList containedArgs(Action) { 
      RooArgList ret(_funcIntList) ; 
      ret.add(_lowIntList); 
      ret.add(_highIntList);
      return ret ; 
    }
    RooArgList _funcIntList ;
    RooArgList _lowIntList ;
    RooArgList _highIntList ;
    // will want vector<RooRealVar*> for low and high also
  } ;
  mutable RooObjCacheManager _normIntMgr ; // The integration cache manager

  // Turn into a RooListProxy
  //RooRealProxy _dataVar;       // The RooRealVar
  RooListProxy _dataVars;       // The RooRealVars
  RooListProxy _paramSet ;            // interpolation parameters
  //RooAbsBinning* _binning;  // Holds the binning of the dataVar (at construction time)

  Int_t _numBins;
  mutable std::map<Int_t, Int_t> _binMap;
  mutable RooDataHist _dataSet;

  // std::vector< Double_t > _nominalVals; // The nominal vals when gamma = 1.0 ( = 1.0 by default)
  RooArgList   _ownedList ;       // List of owned components

  Int_t addVarSet( const RooArgList& vars );
  Int_t addParamSet( const RooArgList& params );
  static Int_t GetNumBins( const RooArgSet& vars );
  Double_t evaluate() const;

  ClassDef(ParamHistFunc,4) // Sum of RooAbsReal objects
};

#endif
 ParamHistFunc.h:1
 ParamHistFunc.h:2
 ParamHistFunc.h:3
 ParamHistFunc.h:4
 ParamHistFunc.h:5
 ParamHistFunc.h:6
 ParamHistFunc.h:7
 ParamHistFunc.h:8
 ParamHistFunc.h:9
 ParamHistFunc.h:10
 ParamHistFunc.h:11
 ParamHistFunc.h:12
 ParamHistFunc.h:13
 ParamHistFunc.h:14
 ParamHistFunc.h:15
 ParamHistFunc.h:16
 ParamHistFunc.h:17
 ParamHistFunc.h:18
 ParamHistFunc.h:19
 ParamHistFunc.h:20
 ParamHistFunc.h:21
 ParamHistFunc.h:22
 ParamHistFunc.h:23
 ParamHistFunc.h:24
 ParamHistFunc.h:25
 ParamHistFunc.h:26
 ParamHistFunc.h:27
 ParamHistFunc.h:28
 ParamHistFunc.h:29
 ParamHistFunc.h:30
 ParamHistFunc.h:31
 ParamHistFunc.h:32
 ParamHistFunc.h:33
 ParamHistFunc.h:34
 ParamHistFunc.h:35
 ParamHistFunc.h:36
 ParamHistFunc.h:37
 ParamHistFunc.h:38
 ParamHistFunc.h:39
 ParamHistFunc.h:40
 ParamHistFunc.h:41
 ParamHistFunc.h:42
 ParamHistFunc.h:43
 ParamHistFunc.h:44
 ParamHistFunc.h:45
 ParamHistFunc.h:46
 ParamHistFunc.h:47
 ParamHistFunc.h:48
 ParamHistFunc.h:49
 ParamHistFunc.h:50
 ParamHistFunc.h:51
 ParamHistFunc.h:52
 ParamHistFunc.h:53
 ParamHistFunc.h:54
 ParamHistFunc.h:55
 ParamHistFunc.h:56
 ParamHistFunc.h:57
 ParamHistFunc.h:58
 ParamHistFunc.h:59
 ParamHistFunc.h:60
 ParamHistFunc.h:61
 ParamHistFunc.h:62
 ParamHistFunc.h:63
 ParamHistFunc.h:64
 ParamHistFunc.h:65
 ParamHistFunc.h:66
 ParamHistFunc.h:67
 ParamHistFunc.h:68
 ParamHistFunc.h:69
 ParamHistFunc.h:70
 ParamHistFunc.h:71
 ParamHistFunc.h:72
 ParamHistFunc.h:73
 ParamHistFunc.h:74
 ParamHistFunc.h:75
 ParamHistFunc.h:76
 ParamHistFunc.h:77
 ParamHistFunc.h:78
 ParamHistFunc.h:79
 ParamHistFunc.h:80
 ParamHistFunc.h:81
 ParamHistFunc.h:82
 ParamHistFunc.h:83
 ParamHistFunc.h:84
 ParamHistFunc.h:85
 ParamHistFunc.h:86
 ParamHistFunc.h:87
 ParamHistFunc.h:88
 ParamHistFunc.h:89
 ParamHistFunc.h:90
 ParamHistFunc.h:91
 ParamHistFunc.h:92
 ParamHistFunc.h:93
 ParamHistFunc.h:94
 ParamHistFunc.h:95
 ParamHistFunc.h:96
 ParamHistFunc.h:97
 ParamHistFunc.h:98
 ParamHistFunc.h:99
 ParamHistFunc.h:100
 ParamHistFunc.h:101
 ParamHistFunc.h:102
 ParamHistFunc.h:103
 ParamHistFunc.h:104
 ParamHistFunc.h:105
 ParamHistFunc.h:106
 ParamHistFunc.h:107
 ParamHistFunc.h:108
 ParamHistFunc.h:109
 ParamHistFunc.h:110
 ParamHistFunc.h:111
 ParamHistFunc.h:112