#ifndef ROO_MOMENT
#define ROO_MOMENT
#include "RooAbsReal.h"
#include "RooRealProxy.h"
#include "RooSetProxy.h"
class RooRealVar;
class RooArgList ;
class RooMoment : public RooAbsReal {
public:
RooMoment() ;
RooMoment(const char *name, const char *title, RooAbsReal& func, RooRealVar& x, Int_t order=1, Bool_t central=kFALSE, Bool_t takeRoot=kFALSE) ;
RooMoment(const char *name, const char *title, RooAbsReal& func, RooRealVar& x, const RooArgSet& nset, Int_t order=1, Bool_t central=kFALSE, Bool_t takeRoot=kFALSE,
Bool_t intNSet=kFALSE) ;
virtual ~RooMoment() ;
RooMoment(const RooMoment& other, const char* name = 0);
virtual TObject* clone(const char* newname) const { return new RooMoment(*this, newname); }
Int_t order() const { return _order ; }
Bool_t central() const { return _mean.absArg() ? kTRUE : kFALSE ; }
RooAbsReal* mean() { return (RooAbsReal*) _mean.absArg() ; }
const RooAbsReal& xF() { return _xf.arg() ; }
const RooAbsReal& ixF() { return _ixf.arg() ; }
const RooAbsReal& iF() { return _if.arg() ; }
protected:
Int_t _order ;
Int_t _takeRoot ;
RooSetProxy _nset ;
RooRealProxy _func ;
RooRealProxy _x ;
RooRealProxy _mean ;
RooRealProxy _xf ;
RooRealProxy _ixf ;
RooRealProxy _if ;
Double_t evaluate() const;
ClassDef(RooMoment,1)
};
#endif