Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooMomentMorph.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * *
4  * This code was autogenerated by RooClassFactory *
5  *****************************************************************************/
6 
7 #ifndef ROOMOMENTMORPH
8 #define ROOMOMENTMORPH
9 
10 #include "RooAbsPdf.h"
11 #include "RooRealProxy.h"
12 #include "RooCategoryProxy.h"
13 #include "RooAbsReal.h"
14 #include "RooAbsCategory.h"
15 #include "RooSetProxy.h"
16 #include "RooListProxy.h"
17 #include "RooArgList.h"
18 
19 #include "TMatrixD.h"
20 #include "TVectorD.h"
21 
22 #include <vector>
23 #include <string>
24 class RooChangeTracker ;
25 
26 class RooMomentMorph : public RooAbsPdf {
27 public:
28 
29  enum Setting { Linear, NonLinear, NonLinearPosFractions, NonLinearLinFractions, SineLinear } ;
30 
31  RooMomentMorph() ;
32 
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();
40 
41  void setMode(const Setting& setting) { _setting = setting; }
42 
43  void useHorizontalMorphing(bool val) { _useHorizMorph = val; }
44 
45  virtual Bool_t selfNormalized() const {
46  // P.d.f is self normalized
47  return kTRUE ;
48  }
49 
50  virtual Double_t getVal(const RooArgSet* set=0) const ;
51  RooAbsPdf* sumPdf(const RooArgSet* nset) ;
52 
53 
54 protected:
55 
56  class CacheElem : public RooAbsCacheElement {
57  public:
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) ;
62  RooAbsPdf* _sumPdf ;
63  RooChangeTracker* _tracker ;
64  RooArgList _frac ;
65 
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;
69  } ;
70  mutable RooObjCacheManager _cacheMgr ; //! The cache manager
71  mutable RooArgSet* _curNormSet ; //! Current normalization set
72 
73  friend class CacheElem ; // Cache needs to be able to clear _norm pointer
74 
75  Double_t evaluate() const ;
76 
77  void initialize();
78  CacheElem* getCache(const RooArgSet* nset) const ;
79 
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;
83 
84  RooRealProxy m ;
85  RooSetProxy _varList ;
86  RooListProxy _pdfList ;
87  mutable TVectorD* _mref;
88 
89  TIterator* _varItr ; //! do not persist
90  TIterator* _pdfItr ; //!
91  mutable TMatrixD* _M; //
92 
93  Setting _setting;
94 
95  bool _useHorizMorph;
96 
97  ClassDef(RooMomentMorph,3) // Your description goes here...
98 };
99 
100 #endif
101 
102