Logo ROOT  
Reference Guide
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"
21
22class TH1D ;
23
25public:
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,
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
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
45 }
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
54 public:
57 void calculate(TIterator* iter) ;
59
60 protected:
61
62 void findRange() ;
65 void fillGap(Int_t ixlo, Int_t ixhi,Double_t splitPoint=0.5) ;
66 void interpolateGap(Int_t ixlo, Int_t ixhi) ;
67
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; //
85
87
88 } ;
89
90protected:
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
109private:
110
111 ClassDef(RooIntegralMorph,1) // Linear shape interpolation operator p.d.f
112};
113
114#endif
const Bool_t kFALSE
Definition: RtypesCore.h:90
double Double_t
Definition: RtypesCore.h:57
const Bool_t kTRUE
Definition: RtypesCore.h:89
#define ClassDef(name, id)
Definition: Rtypes.h:322
char name[80]
Definition: TGX11.cxx:109
RooAbsCachedPdf is the abstract base class for p.d.f.s that need or want to cache their evaluate() ou...
RooObjCacheManager _cacheMgr
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
Definition: RooAbsFunc.h:23
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:60
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:21
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
Implement the abstract 1-dimensional root finding interface using the Brent-Decker method.
void fillGap(Int_t ixlo, Int_t ixhi, Double_t splitPoint=0.5)
Fill all empty histogram bins between bins ixlo and ixhi.
void calculate(TIterator *iter)
Calculate shape of p.d.f for x,alpha values defined by dIter iterator over cache histogram.
void interpolateGap(Int_t ixlo, Int_t ixhi)
Fill empty histogram bins between ixlo and ixhi with values obtained from linear interpolation of ixl...
MorphCacheElem(RooIntegralMorph &self, const RooArgSet *nset)
Construct of cache element, copy relevant input from RooIntegralMorph, create the cdfs from the input...
std::vector< Double_t > _yatX
Int_t binX(Double_t x)
Return the bin number enclosing the given x value.
void findRange()
Determine which range of y values can be mapped to x values from the numeric inversion of the input c...
virtual RooArgList containedArgs(Action)
Return all RooAbsArg components contained in this cache.
std::vector< Double_t > _calcX
Double_t calcX(Double_t y, Bool_t &ok)
Calculate the x value of the output p.d.f at the given cdf value y.
Class RooIntegralMorph is an implementation of the histogram interpolation technique described by Ale...
Double_t evaluate() const
Dummy.
Bool_t cacheAlpha() const
void setCacheAlpha(Bool_t flag)
virtual ~RooIntegralMorph()
virtual PdfCacheElem * createCache(const RooArgSet *nset) const
Create and return a derived MorphCacheElem.
virtual RooArgSet * actualParameters(const RooArgSet &nset) const
Parameters of the cache.
virtual void preferredObservableScanOrder(const RooArgSet &obs, RooArgSet &orderedObs) const
Indicate to the RooAbsCachedPdf base class that for the filling of the cache the traversal of the x s...
virtual const char * inputBaseName() const
Return base name component for cache components in this case a string encoding the names of both end ...
virtual TObject * clone(const char *newname) const
virtual void fillCacheObject(PdfCacheElem &cache) const
Fill the cache with the interpolated shape.
RooRealProxy alpha
RooRealProxy pdf1
Bool_t selfNormalized() const
virtual RooArgSet * actualObservables(const RooArgSet &nset) const
Observable to be cached for given choice of normalization.
MorphCacheElem * _cache
void sterilize()
Clear the cache payload but retain slot mapping w.r.t to normalization and integration sets.
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:35
1-D histogram with a double per channel (see TH1 documentation)}
Definition: TH1.h:614
Iterator abstract base class.
Definition: TIterator.h:30
Mother of all ROOT objects.
Definition: TObject.h:37
Double_t y[n]
Definition: legend1.C:17