00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef ROO_SIM_WS_TOOL_HH
00018 #define ROO_SIM_WS_TOOL_HH
00019
00020 #include "Rtypes.h"
00021 #include "RooWorkspace.h"
00022 #include "RooCmdArg.h"
00023 #include "RooFactoryWSTool.h"
00024 #include <list>
00025 #include <map>
00026 #include <string>
00027
00028 class RooAbsCategoryLValue ;
00029 class RooAbsCategory ;
00030 class RooAbsArg ;
00031 class RooAbsPdf ;
00032 class RooCatType ;
00033 class RooSimultaneous ;
00034
00035
00036 class RooSimWSTool : public TNamed, public RooPrintable {
00037
00038 public:
00039
00040
00041 RooSimWSTool(RooWorkspace& ws) ;
00042 virtual ~RooSimWSTool() ;
00043
00044 class BuildConfig ;
00045 class MultiBuildConfig ;
00046 class SplitRule ;
00047
00048 class ObjBuildConfig ;
00049 class ObjSplitRule ;
00050
00051 RooSimultaneous* build(const char* simPdfName, const char* protoPdfName,
00052 const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
00053 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
00054 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
00055
00056 RooSimultaneous* build(const char* simPdfName,BuildConfig& bc, Bool_t verbose=kTRUE) ;
00057
00058 class SimWSIFace : public RooFactoryWSTool::IFace {
00059 public:
00060 virtual ~SimWSIFace() {} ;
00061 std::string create(RooFactoryWSTool& ft, const char* typeName, const char* instanceName, std::vector<std::string> args) ;
00062 } ;
00063
00064
00065 protected:
00066
00067 RooSimWSTool(const RooSimWSTool&) ;
00068
00069 ObjBuildConfig* validateConfig(BuildConfig& bc) ;
00070 RooSimultaneous* executeBuild(const char* simPdfName,ObjBuildConfig& obc, Bool_t verbose=kTRUE) ;
00071 std::string makeSplitName(const RooArgSet& splitCatSet) ;
00072
00073 RooWorkspace* _ws ;
00074
00075 ClassDef(RooSimWSTool,0)
00076 } ;
00077
00078
00079
00080 class RooSimWSTool::BuildConfig
00081 {
00082 public:
00083 BuildConfig(const char* pdfName, SplitRule& sr) ;
00084 BuildConfig(const char* pdfName, const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
00085 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
00086 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
00087
00088 BuildConfig(const RooArgSet& legacyBuildConfig) ;
00089
00090 virtual ~BuildConfig() {} ;
00091 void restrictBuild(const char* catName, const char* stateList) ;
00092
00093 protected:
00094 BuildConfig() {} ;
00095 friend class RooSimWSTool ;
00096 std::string _masterCatName ;
00097 std::map<std::string,SplitRule> _pdfmap ;
00098 std::map<std::string,std::string> _restr ;
00099 RooCmdArg _conflProtocol ;
00100
00101 void internalAddPdf(const char* pdfName, const char* miStateList, SplitRule& sr) ;
00102
00103 ClassDef(BuildConfig,0)
00104 } ;
00105
00106
00107 class RooSimWSTool::MultiBuildConfig : public RooSimWSTool::BuildConfig
00108 {
00109 public:
00110 MultiBuildConfig(const char* masterIndexCat) ;
00111 virtual ~MultiBuildConfig() {} ;
00112 void addPdf(const char* miStateList, const char* pdfName, SplitRule& sr) ;
00113 void addPdf(const char* miStateList, const char* pdfName,
00114 const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
00115 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
00116 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
00117
00118 protected:
00119 friend class RooSimWSTool ;
00120
00121 ClassDef(MultiBuildConfig,0)
00122 } ;
00123
00124
00125
00126 class RooSimWSTool::SplitRule : public TNamed {
00127 public:
00128 SplitRule(const char* pdfName="") : TNamed(pdfName,pdfName) {} ;
00129 virtual ~SplitRule() {} ;
00130 void splitParameter(const char* paramList, const char* categoryList) ;
00131 void splitParameterConstrained(const char* paramNameList, const char* categoryNameList, const char* remainderStateName) ;
00132
00133 protected:
00134
00135 friend class RooSimWSTool ;
00136 friend class BuildConfig ;
00137 friend class MultiBuildConfig ;
00138 void configure(const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
00139 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
00140 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
00141
00142 std::list<std::string> _miStateNameList ;
00143 std::map<std::string, std::pair<std::list<std::string>,std::string> > _paramSplitMap ;
00144 ClassDef(SplitRule,0)
00145 } ;
00146
00147
00148
00149 class RooSimWSTool::ObjSplitRule {
00150 public:
00151 ObjSplitRule() {} ;
00152 virtual ~ObjSplitRule() ;
00153
00154 protected:
00155 friend class RooSimWSTool ;
00156 friend class RooSimWSTool::ObjBuildConfig ;
00157 std::list<const RooCatType*> _miStateList ;
00158 std::map<RooAbsArg*, std::pair<RooArgSet,std::string> > _paramSplitMap ;
00159 ClassDef(ObjSplitRule,0)
00160 } ;
00161
00162
00163 class RooSimWSTool::ObjBuildConfig
00164 {
00165 public:
00166 ObjBuildConfig() : _masterCat(0) {} ;
00167 virtual ~ObjBuildConfig() {} ;
00168 void print() ;
00169
00170 protected:
00171 friend class RooSimWSTool ;
00172 std::map<RooAbsPdf*,ObjSplitRule> _pdfmap ;
00173 std::map<RooAbsCategory*,std::list<const RooCatType*> > _restr ;
00174 RooCategory* _masterCat ;
00175 RooArgSet _usedSplitCats ;
00176 RooCmdArg _conflProtocol ;
00177
00178 ClassDef(ObjBuildConfig,0)
00179 } ;
00180
00181 #endif