Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooResolutionModel.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooResolutionModel.h,v 1.26 2007/05/14 18:37:46 wouter 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_RESOLUTION_MODEL
17 #define ROO_RESOLUTION_MODEL
18 
19 #include "RooAbsPdf.h"
20 #include "RooRealProxy.h"
21 #include "RooRealVar.h"
22 #include "RooFormulaVar.h"
23 
24 class RooAbsAnaConvPdf;
25 
26 class RooResolutionModel : public RooAbsPdf {
27 public:
28 
29  // Constructors, assignment etc
30  inline RooResolutionModel() : _basis(0) { }
31  RooResolutionModel(const char *name, const char *title, RooRealVar& x) ;
32  RooResolutionModel(const RooResolutionModel& other, const char* name=0);
33  virtual TObject* clone(const char* newname) const = 0 ;
34  virtual ~RooResolutionModel();
35 
36  virtual RooAbsGenContext* modelGenContext(const RooAbsAnaConvPdf&, const RooArgSet&,
37  const RooDataSet*, const RooArgSet*,
38  Bool_t) const { return 0; }
39 
40  Double_t getValV(const RooArgSet* nset=0) const ;
41  virtual RooResolutionModel* convolution(RooFormulaVar* basis, RooAbsArg* owner) const ;
42  RooRealVar& convVar() const ;
43  const RooRealVar& basisConvVar() const ;
44 
45  inline Bool_t isBasisSupported(const char* name) const { return basisCode(name)?kTRUE:kFALSE ; }
46  virtual Int_t basisCode(const char* name) const = 0 ;
47 
48  virtual void normLeafServerList(RooArgSet& list) const ;
49  Double_t getNorm(const RooArgSet* nset=0) const ;
50 
51  inline const RooFormulaVar& basis() const { return _basis?*_basis:*identity() ; }
52  Bool_t isConvolved() { return _basis ? kTRUE : kFALSE ; }
53 
54  virtual void printMultiline(std::ostream& os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const ;
55 
56  static RooFormulaVar* identity() ;
57 
58  virtual void changeBasis(RooFormulaVar* basis) ;
59 
60 protected:
61 
62  friend class RooConvGenContext ;
63  friend class RooAddModel ;
64  RooRealProxy x ; // Dependent/convolution variable
65 
66  virtual Bool_t redirectServersHook(const RooAbsCollection& newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive) ;
67 // Bool_t traceEvalHook(Double_t value) const ;
68 
69 
70  friend class RooAbsAnaConvPdf ;
71 
72  Int_t _basisCode ; // Identifier code for selected basis function
73  RooFormulaVar* _basis ; // Basis function convolved with this resolution model
74  Bool_t _ownBasis ; // Flag indicating ownership of _basis
75 
76  ClassDef(RooResolutionModel,1) // Abstract Resolution Model
77 };
78 
79 #endif