Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooCustomizer.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooCustomizer.h,v 1.11 2007/05/11 09:11:30 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 
17 #ifndef ROO_PDF_CUSTOMIZER
18 #define ROO_PDF_CUSTOMIZER
19 
20 #include "Rtypes.h"
21 #include "TList.h"
22 #include "TNamed.h"
23 #include "TString.h"
24 #include "RooArgSet.h"
25 #include "RooPrintable.h"
26 #include "RooFactoryWSTool.h"
27 class RooAbsCategoryLValue ;
28 class RooAbsCategory ;
29 class RooAbsArg ;
30 class RooAbsPdf ;
31 
32 class RooCustomizer : public TNamed, public RooPrintable {
33 
34 public:
35 
36  // Constructors, assignment etc
37  RooCustomizer(const RooAbsArg& pdf, const RooAbsCategoryLValue& masterCat, RooArgSet& splitLeafListOwned, RooArgSet* splitLeafListAll=0) ;
38  RooCustomizer(const RooAbsArg& pdf, const char* name) ;
39  virtual ~RooCustomizer() ;
40 
41  void setOwning(Bool_t flag) {
42  // If flag is true, make customizer own all created components
43  _owning = flag ;
44  }
45 
46  void splitArgs(const RooArgSet& argSet, const RooAbsCategory& splitCat) ;
47  void splitArg(const RooAbsArg& arg, const RooAbsCategory& splitCat) ;
48  void replaceArg(const RooAbsArg& orig, const RooAbsArg& subst) ;
49  RooAbsArg* build(const char* masterCatState, Bool_t verbose=kFALSE) ;
50  RooAbsArg* build(Bool_t verbose=kFALSE) ;
51 
52  const RooArgSet& cloneBranchList() const {
53  // Return list of cloned branch nodes
54  return *_cloneBranchList ;
55  }
56  const RooArgSet& cloneLeafList() const {
57  // Return list of cloned leaf nodes
58  return *_cloneNodeListOwned ;
59  }
60 
61  // Printing interface
62  virtual void printName(std::ostream& os) const ;
63  virtual void printTitle(std::ostream& os) const ;
64  virtual void printClassName(std::ostream& os) const ;
65  virtual void printArgs(std::ostream& os) const ;
66  virtual void printMultiline(std::ostream& os, Int_t content, Bool_t verbose=kFALSE, TString indent= "") const;
67 
68  inline virtual void Print(Option_t *options= 0) const {
69  // Printing interface
70  printStream(defaultPrintStream(),defaultPrintContents(options),defaultPrintStyle(options));
71  }
72 
73  // Releases ownership of list of cloned branch nodes
74  void setCloneBranchSet(RooArgSet& cloneBranchSet) ;
75 
76  // Factory interface
77  class CustIFace : public RooFactoryWSTool::IFace {
78  public:
79  virtual ~CustIFace() {} ;
80  std::string create(RooFactoryWSTool& ft, const char* typeName, const char* instanceName, std::vector<std::string> args) ;
81  } ;
82 
83 protected:
84 
85  RooCustomizer(const RooCustomizer&) ;
86  void initialize() ;
87 
88  RooAbsArg* doBuild(const char* masterCatState, Bool_t verbose) ;
89 
90  Bool_t _sterile ; // If true we do not have as associated master category
91  Bool_t _owning ; // If true we own all created components
92  TString _name ; // Name of this object
93 
94  TList _splitArgList ; // List of RooAbsArgs to be split
95  TList _splitCatList ; // List of categories to be used for above splits
96 
97  TList _replaceArgList ; // List of RooAbsArgs to be replaced
98  TList _replaceSubList ; // List of replacement RooAbsArgs
99 
100  // Master nodes are not owned
101  RooAbsArg* _masterPdf ; // Pointer to input p.d.f
102  RooAbsCategoryLValue* _masterCat ; // Pointer to input master category
103 
104  RooArgSet _masterBranchList ; // List of branch nodes
105  RooArgSet _masterLeafList ; // List of leaf nodes
106 
107  RooArgSet _internalCloneBranchList ; // List of branches of internal clone
108  RooArgSet* _cloneBranchList ; // Pointer to list of cloned branches used
109 
110  // Cloned leafs are owned by the user supplied list in the ctor
111  RooArgSet* _cloneNodeListAll ; // List of all cloned nodes
112  RooArgSet* _cloneNodeListOwned ; // List of owned cloned nodes
113 
114  ClassDef(RooCustomizer,0) // Editing tool for RooAbsArg composite object expressions
115 } ;
116 
117 #endif