Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooSimWSTool.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 
17 #ifndef ROO_SIM_WS_TOOL_HH
18 #define ROO_SIM_WS_TOOL_HH
19 
20 #include "Rtypes.h"
21 #include "RooWorkspace.h"
22 #include "RooCmdArg.h"
23 #include "RooFactoryWSTool.h"
24 #include <list>
25 #include <map>
26 #include <string>
27 
28 class RooAbsCategoryLValue ;
29 class RooAbsCategory ;
30 class RooAbsArg ;
31 class RooAbsPdf ;
32 class RooCatType ;
33 class RooSimultaneous ;
34 
35 
36 class RooSimWSTool : public TNamed, public RooPrintable {
37 
38 public:
39 
40  // Constructors, assignment etc
41  RooSimWSTool(RooWorkspace& ws) ;
42  virtual ~RooSimWSTool() ;
43 
44  class BuildConfig ;
45  class MultiBuildConfig ;
46  class SplitRule ;
47 
48  class ObjBuildConfig ;
49  class ObjSplitRule ;
50 
51  RooSimultaneous* build(const char* simPdfName, const char* protoPdfName,
52  const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
53  const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
54  const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
55 
56  RooSimultaneous* build(const char* simPdfName,BuildConfig& bc, Bool_t verbose=kTRUE) ;
57 
58  class SimWSIFace : public RooFactoryWSTool::IFace {
59  public:
60  virtual ~SimWSIFace() {} ;
61  std::string create(RooFactoryWSTool& ft, const char* typeName, const char* instanceName, std::vector<std::string> args) ;
62  } ;
63 
64 
65 protected:
66 
67  RooSimWSTool(const RooSimWSTool&) ;
68 
69  ObjBuildConfig* validateConfig(BuildConfig& bc) ;
70  RooSimultaneous* executeBuild(const char* simPdfName,ObjBuildConfig& obc, Bool_t verbose=kTRUE) ;
71  std::string makeSplitName(const RooArgSet& splitCatSet) ;
72 
73  RooWorkspace* _ws ;
74 
75  ClassDef(RooSimWSTool,0) // Workspace oriented tool for customized cloning of p.d.f. into a simultaneous p.d.f
76 } ;
77 
78 
79 class RooSimWSTool::SplitRule : public TNamed {
80 public:
81  SplitRule(const char* pdfName="") : TNamed(pdfName,pdfName) {} ;
82  virtual ~SplitRule() {} ;
83  void splitParameter(const char* paramList, const char* categoryList) ;
84  void splitParameterConstrained(const char* paramNameList, const char* categoryNameList, const char* remainderStateName) ;
85 
86 protected:
87 
88  friend class RooSimWSTool ;
89  friend class BuildConfig ;
90  friend class MultiBuildConfig ;
91  void configure(const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
92  const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
93  const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
94 
95  std::list<std::string> _miStateNameList ;
96  std::map<std::string, std::pair<std::list<std::string>,std::string> > _paramSplitMap ; //<paramName,<std::list<splitCatSet>,remainderStateName>>
97  ClassDef(SplitRule,0) // Split rule specification for prototype p.d.f
98 } ;
99 
100 
101 class RooSimWSTool::BuildConfig
102 {
103  public:
104  BuildConfig(const char* pdfName, SplitRule& sr) ;
105  BuildConfig(const char* pdfName, const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
106  const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
107  const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
108 
109  BuildConfig(const RooArgSet& legacyBuildConfig) ;
110 
111  virtual ~BuildConfig() {} ;
112  void restrictBuild(const char* catName, const char* stateList) ;
113 
114  protected:
115  BuildConfig() {} ;
116  friend class RooSimWSTool ;
117  std::string _masterCatName ;
118  std::map<std::string,SplitRule> _pdfmap ;
119  std::map<std::string,std::string> _restr ;
120  RooCmdArg _conflProtocol ;
121 
122  void internalAddPdf(const char* pdfName, const char* miStateList, SplitRule& sr) ;
123 
124  ClassDef(BuildConfig,0) // Build configuration object for RooSimWSTool
125  } ;
126 
127 
128 class RooSimWSTool::MultiBuildConfig : public RooSimWSTool::BuildConfig
129 {
130  public:
131  MultiBuildConfig(const char* masterIndexCat) ;
132  virtual ~MultiBuildConfig() {} ;
133  void addPdf(const char* miStateList, const char* pdfName, SplitRule& sr) ;
134  void addPdf(const char* miStateList, const char* pdfName,
135  const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
136  const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
137  const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
138 
139  protected:
140  friend class RooSimWSTool ;
141 
142  ClassDef(MultiBuildConfig,0) // Build configuration object for RooSimWSTool with multiple prototype p.d.f.
143  } ;
144 
145 
146 
147 
148 
149 
150 class RooSimWSTool::ObjSplitRule {
151 public:
152  ObjSplitRule() {} ;
153  virtual ~ObjSplitRule() ;
154 
155 protected:
156  friend class RooSimWSTool ;
157  friend class RooSimWSTool::ObjBuildConfig ;
158  std::list<const RooCatType*> _miStateList ;
159  std::map<RooAbsArg*, std::pair<RooArgSet,std::string> > _paramSplitMap ; //<paramName,<std::list<splitCatSet>,remainderStateName>>
160  ClassDef(ObjSplitRule,0) // Validated RooSimWSTool split rule
161  } ;
162 
163 
164 class RooSimWSTool::ObjBuildConfig
165 {
166  public:
167  ObjBuildConfig() : _masterCat(0) {} ;
168  virtual ~ObjBuildConfig() {} ;
169  void print() ;
170 
171  protected:
172  friend class RooSimWSTool ;
173  std::map<RooAbsPdf*,ObjSplitRule> _pdfmap ;
174  std::map<RooAbsCategory*,std::list<const RooCatType*> > _restr ;
175  RooCategory* _masterCat ;
176  RooArgSet _usedSplitCats ;
177  RooCmdArg _conflProtocol ;
178 
179  ClassDef(ObjBuildConfig,0) // Validated RooSimWSTool build configuration
180  } ;
181 
182 #endif