Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooAbsNumGenerator.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id$
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_ABS_NUM_GENERATOR
17 #define ROO_ABS_NUM_GENERATOR
18 
19 #include "TNamed.h"
20 #include "RooPrintable.h"
21 #include "RooArgSet.h"
22 #include "RooArgList.h"
23 
24 class RooAbsReal;
25 class RooRealVar;
26 class RooDataSet;
27 class RooRealBinding;
28 class RooNumGenConfig ;
29 
30 class RooAbsNumGenerator : public TNamed, public RooPrintable {
31 public:
32  RooAbsNumGenerator() : _cloneSet(0), _funcClone(0), _funcMaxVal(0), _verbose(kFALSE), _isValid(kFALSE), _funcValStore(0), _funcValPtr(0), _cache(0) {} ;
33  RooAbsNumGenerator(const RooAbsReal &func, const RooArgSet &genVars, Bool_t verbose=kFALSE, const RooAbsReal* maxFuncVal=0);
34  virtual RooAbsNumGenerator* clone(const RooAbsReal&, const RooArgSet& genVars, const RooArgSet& condVars,
35  const RooNumGenConfig& config, Bool_t verbose=kFALSE, const RooAbsReal* maxFuncVal=0) const = 0 ;
36 
37  Bool_t isValid() const {
38  // If true, generator is in a valid state
39  return _isValid;
40  }
41  virtual ~RooAbsNumGenerator();
42 
43  inline void setVerbose(Bool_t verbose= kTRUE) {
44  // If flag is true, verbose messaging will be active during generation
45  _verbose= verbose;
46  }
47  inline Bool_t isVerbose() const {
48  // Return status of verbose messaging flag
49  return _verbose;
50  }
51 
52  virtual const RooArgSet *generateEvent(UInt_t remaining, Double_t& resampleRatio) = 0;
53  virtual Double_t getFuncMax() { return 0 ; }
54 
55  inline virtual void Print(Option_t *options= 0) const {
56  // ascii printing interface
57  printStream(defaultPrintStream(),defaultPrintContents(options),defaultPrintStyle(options));
58  }
59 
60  virtual void printName(std::ostream& os) const ;
61  virtual void printTitle(std::ostream& os) const ;
62  virtual void printClassName(std::ostream& os) const ;
63  virtual void printArgs(std::ostream& os) const ;
64 
65  void attachParameters(const RooArgSet& vars) ;
66 
67  // Advertisement of capabilities
68  virtual Bool_t canSampleCategories() const { return kFALSE ; }
69  virtual Bool_t canSampleConditional() const { return kFALSE ; } // Must implement getFuncMax()
70 
71 protected:
72 
73  RooArgSet *_cloneSet; // Set owning clone of input function
74  RooAbsReal *_funcClone; // Pointer to top level node of cloned function
75  const RooAbsReal *_funcMaxVal ; // Container for maximum function value
76  RooArgSet _catVars,_realVars ; // Sets of discrete and real valued observabeles
77  Bool_t _verbose, _isValid; // Verbose and valid flag
78  RooRealVar *_funcValStore,*_funcValPtr; // RRVs storing function value in context and in output dataset
79 
80  RooDataSet *_cache; // Dataset holding generared values of observables
81 
82  ClassDef(RooAbsNumGenerator,0) // Abstract base class for numeric event generator algorithms
83 };
84 
85 #endif