24 class RooChangeTracker ;
26 class RooMomentMorph :
public RooAbsPdf {
29 enum Setting { Linear, NonLinear, NonLinearPosFractions, NonLinearLinFractions, SineLinear } ;
33 RooMomentMorph(
const char *name,
const char *title, RooAbsReal& _m,
const RooArgList& varList,
34 const RooArgList& pdfList,
const RooArgList& mrefList, Setting setting = NonLinearPosFractions);
35 RooMomentMorph(
const char *name,
const char *title, RooAbsReal& _m,
const RooArgList& varList,
36 const RooArgList& pdfList,
const TVectorD& mrefpoints, Setting setting = NonLinearPosFractions );
37 RooMomentMorph(
const RooMomentMorph& other,
const char* name=0) ;
38 virtual TObject* clone(
const char* newname)
const {
return new RooMomentMorph(*
this,newname); }
39 virtual ~RooMomentMorph();
41 void setMode(
const Setting& setting) { _setting = setting; }
43 void useHorizontalMorphing(
bool val) { _useHorizMorph = val; }
45 virtual Bool_t selfNormalized()
const {
50 virtual Double_t getVal(
const RooArgSet* set=0)
const ;
51 RooAbsPdf* sumPdf(
const RooArgSet* nset) ;
56 class CacheElem :
public RooAbsCacheElement {
58 CacheElem(RooAbsPdf& sumPdf, RooChangeTracker& tracker,
const RooArgList& flist) : _sumPdf(&sumPdf), _tracker(&tracker) { _frac.add(flist) ; } ;
59 void operModeHook(RooAbsArg::OperMode) {};
60 virtual ~CacheElem() ;
61 virtual RooArgList containedArgs(Action) ;
63 RooChangeTracker* _tracker ;
66 RooRealVar* frac(Int_t i ) ;
67 const RooRealVar* frac(Int_t i )
const ;
68 void calculateFractions(
const RooMomentMorph&
self, Bool_t verbose=kTRUE)
const;
70 mutable RooObjCacheManager _cacheMgr ;
71 mutable RooArgSet* _curNormSet ;
73 friend class CacheElem ;
75 Double_t evaluate()
const ;
78 CacheElem* getCache(
const RooArgSet* nset)
const ;
80 inline Int_t ij(
const Int_t& i,
const Int_t& j)
const {
return (i*_varList.getSize()+j); }
81 int idxmin(
const double& m)
const;
82 int idxmax(
const double& m)
const;
85 RooSetProxy _varList ;
86 RooListProxy _pdfList ;
87 mutable TVectorD* _mref;
97 ClassDef(RooMomentMorph,3)