Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooMomentMorphND.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * *
4  * This code was autogenerated by RooClassFactory *
5  *****************************************************************************/
6 
7 #ifndef ROOMOMENTMORPHND
8 #define ROOMOMENTMORPHND
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 #include "RooBinning.h"
19 
20 #include "TMatrixD.h"
21 #include "TMap.h"
22 
23 #include <vector>
24 #include <map>
25 
26 class RooChangeTracker;
27 
28 class RooMomentMorphND : public RooAbsPdf {
29 
30 public:
31  class Grid {
32  public:
33  Grid(){};
34  Grid(const Grid &other);
35  Grid(const RooAbsBinning &binning_x) { _grid.push_back(binning_x.clone()); };
36  Grid(const RooAbsBinning &binning_x, const RooAbsBinning &binning_y)
37  {
38  _grid.push_back(binning_x.clone());
39  _grid.push_back(binning_y.clone());
40  };
41  Grid(const RooAbsBinning &binning_x, const RooAbsBinning &binning_y, const RooAbsBinning &binning_z)
42  {
43  _grid.push_back(binning_x.clone());
44  _grid.push_back(binning_y.clone());
45  _grid.push_back(binning_z.clone());
46  };
47  Grid(const std::vector<RooAbsBinning *> binnings)
48  {
49  for (unsigned int i = 0; i < binnings.size(); i++) {
50  _grid.push_back(binnings[i]->clone());
51  }
52  };
53 
54  ~Grid();
55 
56  void addPdf(const RooAbsPdf &pdf, int bin_x);
57  void addPdf(const RooAbsPdf &pdf, int bin_x, int bin_y);
58  void addPdf(const RooAbsPdf &pdf, int bin_x, int bin_y, int bin_z);
59  void addPdf(const RooAbsPdf &pdf, std::vector<int> bins);
60  void addBinning(const RooAbsBinning &binning) { _grid.push_back(binning.clone()); };
61 
62  mutable std::vector<RooAbsBinning *> _grid;
63  mutable RooArgList _pdfList;
64  mutable std::map<std::vector<int>, int> _pdfMap;
65 
66  mutable std::vector<std::vector<double>> _nref;
67  mutable std::vector<int> _nnuis;
68  };
69 
70 protected:
71  class CacheElem : public RooAbsCacheElement {
72  public:
73  CacheElem(RooAbsPdf &sumPdf, RooChangeTracker &tracker, const RooArgList &flist)
74  : _sumPdf(&sumPdf), _tracker(&tracker)
75  {
76  _frac.add(flist);
77  };
78  void operModeHook(RooAbsArg::OperMode){};
79  virtual ~CacheElem();
80  virtual RooArgList containedArgs(Action);
81  RooAbsPdf *_sumPdf;
82  RooChangeTracker *_tracker;
83  RooArgList _frac;
84 
85  RooRealVar *frac(int i);
86  const RooRealVar *frac(int i) const;
87  void calculateFractions(const RooMomentMorphND &self, Bool_t verbose = kTRUE) const;
88  };
89 
90 public:
91  enum Setting { Linear, SineLinear, NonLinear, NonLinearPosFractions, NonLinearLinFractions };
92 
93  RooMomentMorphND();
94  RooMomentMorphND(const char *name, const char *title, RooAbsReal &_m, const RooArgList &varList,
95  const RooArgList &pdfList, const RooArgList &mrefList, Setting setting);
96  RooMomentMorphND(const char *name, const char *title, const RooArgList &parList, const RooArgList &obsList,
97  const Grid &referenceGrid, const Setting &setting);
98  RooMomentMorphND(const RooMomentMorphND &other, const char *name = 0);
99  RooMomentMorphND(const char *name, const char *title, RooAbsReal &_m, const RooArgList &varList,
100  const RooArgList &pdfList, const TVectorD &mrefpoints, Setting setting);
101  virtual ~RooMomentMorphND();
102  virtual TObject *clone(const char *newname) const { return new RooMomentMorphND(*this, newname); }
103 
104  void setMode(const Setting &setting) { _setting = setting; }
105  virtual Bool_t selfNormalized() const { return kTRUE; }
106  Bool_t setBinIntegrator(RooArgSet &allVars);
107  void useHorizontalMorphing(Bool_t val) { _useHorizMorph = val; }
108 
109  Double_t evaluate() const;
110  virtual Double_t getVal(const RooArgSet *set = 0) const;
111 
112 protected:
113  void initialize();
114  void initializeParameters(const RooArgList &parList);
115  void initializeObservables(const RooArgList &obsList);
116 
117  RooAbsPdf *sumPdf(const RooArgSet *nset);
118  CacheElem *getCache(const RooArgSet *nset) const;
119 
120  void findShape(const std::vector<double> &x) const;
121 
122  friend class CacheElem;
123  friend class Grid;
124 
125  mutable RooObjCacheManager _cacheMgr;
126  mutable RooArgSet *_curNormSet;
127 
128  RooListProxy _parList;
129  RooSetProxy _obsList;
130  // RooListProxy _pdfList ;
131  TIterator *_parItr; //! Do not persist
132  TIterator *_obsItr; //! Do not persist
133  mutable Grid _referenceGrid;
134  RooListProxy _pdfList;
135 
136  mutable TMatrixD *_M;
137  mutable TMatrixD *_MSqr;
138  mutable std::vector<std::vector<double>> _squareVec;
139  mutable std::vector<int> _squareIdx;
140 
141  Setting _setting;
142  Bool_t _useHorizMorph;
143 
144  inline int sij(const int &i, const int &j) const { return (i * _obsList.getSize() + j); }
145 
146  ClassDef(RooMomentMorphND, 1)
147 };
148 
149 #endif