Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooNumConvPdf.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooNumConvPdf.h,v 1.2 2007/05/11 10:42:36 verkerke Exp $
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_NUM_CONV_PDF
17 #define ROO_NUM_CONV_PDF
18 
19 #include "RooAbsPdf.h"
20 #include "RooNumConvolution.h"
21 
22 class TH2 ;
23 class RooArgSet ;
24 class RooDataSet ;
25 
26 class RooNumConvPdf : public RooAbsPdf {
27 public:
28 
29  RooNumConvPdf() ;
30 
31  RooNumConvPdf(const char *name, const char *title,
32  RooRealVar& convVar, RooAbsPdf& pdf, RooAbsPdf& resmodel) ;
33 
34  RooNumConvPdf(const RooNumConvPdf& other, const char* name=0) ;
35 
36  virtual TObject* clone(const char* newname) const { return new RooNumConvPdf(*this,newname) ; }
37  virtual ~RooNumConvPdf() ;
38 
39  virtual Double_t evaluate() const ;
40 
41  // Calls forwarded to RooNumConvolution
42  inline RooNumIntConfig& convIntConfig() { return conv().convIntConfig() ; }
43  inline void clearConvolutionWindow() { conv().clearConvolutionWindow() ; }
44  inline void setConvolutionWindow(RooAbsReal& centerParam, RooAbsReal& widthParam, Double_t widthScaleFactor=1)
45  { conv().setConvolutionWindow(centerParam,widthParam,widthScaleFactor) ; }
46  inline void setCallWarning(Int_t threshold=2000) { conv().setCallWarning(threshold) ; }
47  inline void setCallProfiling(Bool_t flag, Int_t nbinX = 40, Int_t nbinCall = 40, Int_t nCallHigh=1000)
48  { conv().setCallProfiling(flag,nbinX,nbinCall,nCallHigh) ; }
49  inline const TH2* profileData() const { return conv().profileData() ; }
50 
51  // Access components
52  RooRealVar& var() const { return (RooRealVar&)(const_cast<RooAbsReal&>(_origVar.arg())) ; }
53  RooAbsReal& pdf() const { return const_cast<RooAbsReal&>(_origPdf.arg()) ; }
54  RooAbsReal& model() const { return const_cast<RooAbsReal&>(_origModel.arg()) ; }
55 
56  void printMetaArgs(std::ostream& os) const ;
57 
58 protected:
59 
60  // WVE Store all properties of RooNumConvolution here so that can be take
61  // along in the copy ctor.
62 
63  RooNumConvolution& conv() const { if (!_init) initialize() ; return *_conv ; }
64 
65  mutable Bool_t _init ; //! do not persist
66  void initialize() const ;
67  mutable RooNumConvolution* _conv ; //! Actual convolution calculation
68 
69  RooRealProxy _origVar ; // Original convolution variable
70  RooRealProxy _origPdf ; // Original input PDF
71  RooRealProxy _origModel ; // Original resolution model
72 
73  virtual RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
74  const RooArgSet* auxProto=0, Bool_t verbose= kFALSE) const ;
75 
76  friend class RooConvGenContext ;
77 
78  ClassDef(RooNumConvPdf,1) // Operator PDF implementing numeric convolution of 2 input PDFs
79 };
80 
81 #endif