Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooIntegralMorph.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * *
4  * Copyright (c) 2000-2007, Regents of the University of California *
5  * and Stanford University. All rights reserved. *
6  * *
7  * Redistribution and use in source and binary forms, *
8  * with or without modification, are permitted according to the terms *
9  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
10  *****************************************************************************/
11 
12 #ifndef ROOLINEARMORPH
13 #define ROOLINEARMORPH
14 
15 #include "RooAbsCachedPdf.h"
16 #include "RooRealProxy.h"
17 #include "RooCategoryProxy.h"
18 #include "RooAbsReal.h"
19 #include "RooAbsCategory.h"
20 class RooBrentRootFinder ;
21 
22 class TH1D ;
23 
24 class RooIntegralMorph : public RooAbsCachedPdf {
25 public:
26  RooIntegralMorph() : _cache(nullptr) {
27  // coverity[UNINIT_CTOR]
28  } ;
29  RooIntegralMorph(const char *name, const char *title,
30  RooAbsReal& _pdf1,
31  RooAbsReal& _pdf2,
32  RooAbsReal& _x,
33  RooAbsReal& _alpha, Bool_t cacheAlpha=kFALSE);
34  RooIntegralMorph(const RooIntegralMorph& other, const char* name=0) ;
35  virtual TObject* clone(const char* newname) const { return new RooIntegralMorph(*this,newname); }
36  inline virtual ~RooIntegralMorph() { }
37 
38  Bool_t selfNormalized() const {
39  // P.d.f is self normalized
40  return kTRUE ;
41  }
42  void setCacheAlpha(Bool_t flag) {
43  // Activate caching of p.d.f. shape for all values of alpha as well
44  _cacheMgr.sterilize() ; _cacheAlpha = flag ;
45  }
46  Bool_t cacheAlpha() const {
47  // If true caching of p.d.f for all alpha values is active
48  return _cacheAlpha ;
49  }
50 
51  virtual void preferredObservableScanOrder(const RooArgSet& obs, RooArgSet& orderedObs) const ;
52 
53  class MorphCacheElem : public RooAbsCachedPdf::PdfCacheElem {
54  public:
55  MorphCacheElem(RooIntegralMorph& self, const RooArgSet* nset) ;
56  ~MorphCacheElem() ;
57  void calculate(TIterator* iter) ;
58  virtual RooArgList containedArgs(Action) ;
59 
60  protected:
61 
62  void findRange() ;
63  Double_t calcX(Double_t y, Bool_t& ok) ;
64  Int_t binX(Double_t x) ;
65  void fillGap(Int_t ixlo, Int_t ixhi,Double_t splitPoint=0.5) ;
66  void interpolateGap(Int_t ixlo, Int_t ixhi) ;
67 
68  RooIntegralMorph* _self ; //
69  RooArgSet* _nset ;
70  RooAbsPdf* _pdf1 ; // PDF1
71  RooAbsPdf* _pdf2 ; // PDF2
72  RooRealVar* _x ; // X
73  RooAbsReal* _alpha ; // ALPHA
74  RooAbsReal* _c1 ; // CDF of PDF 1
75  RooAbsReal* _c2 ; // CDF of PDF 2
76  RooAbsFunc* _cb1 ; // Binding of CDF1
77  RooAbsFunc* _cb2 ; // Binding of CDF2
78  RooBrentRootFinder* _rf1 ; // ROOT finder on CDF1
79  RooBrentRootFinder* _rf2 ; // ROOT finder of CDF2 ;
80 
81  std::vector<Double_t> _yatX ; //
82  std::vector<Double_t> _calcX; //
83  Int_t _yatXmin, _yatXmax ;
84  Int_t _ccounter ;
85 
86  Double_t _ycutoff ;
87 
88  } ;
89 
90 protected:
91 
92  friend class MorphCacheElem ;
93  virtual PdfCacheElem* createCache(const RooArgSet* nset) const ;
94  virtual const char* inputBaseName() const ;
95  virtual RooArgSet* actualObservables(const RooArgSet& nset) const ;
96  virtual RooArgSet* actualParameters(const RooArgSet& nset) const ;
97  virtual void fillCacheObject(PdfCacheElem& cache) const ;
98 
99  RooRealProxy pdf1 ; // First input shape
100  RooRealProxy pdf2 ; // Second input shape
101  RooRealProxy x ; // Observable
102  RooRealProxy alpha ; // Interpolation parameter
103  Bool_t _cacheAlpha ; // If true, both (x,alpha) are cached
104  mutable MorphCacheElem* _cache ; // Current morph cache element in use
105 
106 
107  Double_t evaluate() const ;
108 
109 private:
110 
111  ClassDef(RooIntegralMorph,1) // Linear shape interpolation operator p.d.f
112 };
113 
114 #endif