7 #ifndef ROO_MOMENT_MORPH_FUNC
8 #define ROO_MOMENT_MORPH_FUNC
24 class RooChangeTracker;
26 class RooMomentMorphFunc :
public RooAbsReal {
28 enum Setting { Linear, NonLinear, NonLinearPosFractions, NonLinearLinFractions, SineLinear };
32 RooMomentMorphFunc(
const char *name,
const char *title, RooAbsReal &_m,
const RooArgList &varList,
33 const RooArgList &pdfList,
const RooArgList &mrefList, Setting setting = NonLinearPosFractions);
34 RooMomentMorphFunc(
const char *name,
const char *title, RooAbsReal &_m,
const RooArgList &varList,
35 const RooArgList &pdfList,
const TVectorD &mrefpoints, Setting setting = NonLinearPosFractions);
36 RooMomentMorphFunc(
const RooMomentMorphFunc &other,
const char *name = 0);
37 virtual TObject *clone(
const char *newname)
const {
return new RooMomentMorphFunc(*
this, newname); }
38 virtual ~RooMomentMorphFunc();
40 void setMode(
const Setting &setting) { _setting = setting; }
42 void useHorizontalMorphing(
bool val) { _useHorizMorph = val; }
44 virtual Bool_t selfNormalized()
const
50 virtual Double_t getVal(
const RooArgSet *set = 0)
const;
51 RooAbsReal *sumFunc(
const RooArgSet *nset);
52 const RooAbsReal *sumFunc(
const RooArgSet *nset)
const;
54 virtual std::list<Double_t> *plotSamplingHint(RooAbsRealLValue &obs, Double_t xlo, Double_t xhi)
const;
55 virtual std::list<Double_t> *binBoundaries(RooAbsRealLValue & , Double_t , Double_t )
const;
56 Bool_t isBinnedDistribution(
const RooArgSet &obs)
const;
59 class CacheElem :
public RooAbsCacheElement {
61 CacheElem(RooAbsReal &sumFunc, RooChangeTracker &tracker,
const RooArgList &flist)
62 : _sumFunc(&sumFunc), _tracker(&tracker)
66 void operModeHook(RooAbsArg::OperMode){};
68 virtual RooArgList containedArgs(Action);
70 RooChangeTracker *_tracker;
73 RooRealVar *frac(Int_t i);
74 const RooRealVar *frac(Int_t i)
const;
75 void calculateFractions(
const RooMomentMorphFunc &
self, Bool_t verbose = kTRUE)
const;
77 mutable RooObjCacheManager _cacheMgr;
78 mutable RooArgSet *_curNormSet;
80 friend class CacheElem;
82 Double_t evaluate()
const;
85 CacheElem *getCache(
const RooArgSet *nset)
const;
87 inline Int_t ij(
const Int_t &i,
const Int_t &j)
const {
return (i * _varList.getSize() + j); }
88 int idxmin(
const double &m)
const;
89 int idxmax(
const double &m)
const;
93 RooListProxy _pdfList;
94 mutable TVectorD *_mref;
104 ClassDef(RooMomentMorphFunc, 3)