12 #ifndef ROOLINEARMORPH
13 #define ROOLINEARMORPH
20 class RooBrentRootFinder ;
24 class RooIntegralMorph :
public RooAbsCachedPdf {
26 RooIntegralMorph() : _cache(nullptr) {
29 RooIntegralMorph(
const char *name,
const char *title,
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() { }
38 Bool_t selfNormalized()
const {
42 void setCacheAlpha(Bool_t flag) {
44 _cacheMgr.sterilize() ; _cacheAlpha = flag ;
46 Bool_t cacheAlpha()
const {
51 virtual void preferredObservableScanOrder(
const RooArgSet& obs, RooArgSet& orderedObs)
const ;
53 class MorphCacheElem :
public RooAbsCachedPdf::PdfCacheElem {
55 MorphCacheElem(RooIntegralMorph&
self,
const RooArgSet* nset) ;
57 void calculate(TIterator* iter) ;
58 virtual RooArgList containedArgs(Action) ;
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) ;
68 RooIntegralMorph* _self ;
78 RooBrentRootFinder* _rf1 ;
79 RooBrentRootFinder* _rf2 ;
81 std::vector<Double_t> _yatX ;
82 std::vector<Double_t> _calcX;
83 Int_t _yatXmin, _yatXmax ;
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 ;
104 mutable MorphCacheElem* _cache ;
107 Double_t evaluate()
const ;
111 ClassDef(RooIntegralMorph,1)