17 #ifndef ROO_SIM_WS_TOOL_HH 
   18 #define ROO_SIM_WS_TOOL_HH 
   28 class RooAbsCategoryLValue ; 
 
   29 class RooAbsCategory ;
 
   33 class RooSimultaneous ;
 
   36 class RooSimWSTool : 
public TNamed, 
public RooPrintable {
 
   41   RooSimWSTool(RooWorkspace& ws) ;
 
   42   virtual ~RooSimWSTool() ;
 
   45   class MultiBuildConfig ;
 
   48   class ObjBuildConfig ;
 
   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()) ;
 
   56   RooSimultaneous* build(
const char* simPdfName,BuildConfig& bc, Bool_t verbose=kTRUE) ;
 
   58   class SimWSIFace : 
public RooFactoryWSTool::IFace {
 
   60     virtual ~SimWSIFace() {} ;
 
   61     std::string create(RooFactoryWSTool& ft, 
const char* typeName, 
const char* instanceName, std::vector<std::string> args) ;
 
   67   RooSimWSTool(
const RooSimWSTool&) ;
 
   69   ObjBuildConfig* validateConfig(BuildConfig& bc) ;
 
   70   RooSimultaneous* executeBuild(
const char* simPdfName,ObjBuildConfig& obc, Bool_t verbose=kTRUE) ;
 
   71   std::string makeSplitName(
const RooArgSet& splitCatSet) ;
 
   75   ClassDef(RooSimWSTool,0) 
 
   79 class RooSimWSTool::SplitRule : 
public TNamed {
 
   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) ;
 
   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()) ;
 
   95    std::list<std::string>                                             _miStateNameList ;
 
   96    std::map<std::string, std::pair<std::list<std::string>,std::string> > _paramSplitMap  ; 
 
  101 class RooSimWSTool::BuildConfig
 
  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()) ;
 
  109   BuildConfig(
const RooArgSet& legacyBuildConfig) ;
 
  111   virtual ~BuildConfig() {} ;
 
  112   void restrictBuild(
const char* catName, 
const char* stateList) ;
 
  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 ;
 
  122   void internalAddPdf(
const char* pdfName, 
const char* miStateList, SplitRule& sr) ;
 
  124   ClassDef(BuildConfig,0) 
 
  128 class RooSimWSTool::MultiBuildConfig : 
public RooSimWSTool::BuildConfig
 
  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()) ;
 
  140   friend class RooSimWSTool ;
 
  142   ClassDef(MultiBuildConfig,0) 
 
  150 class RooSimWSTool::ObjSplitRule {
 
  153   virtual ~ObjSplitRule() ;  
 
  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  ; 
 
  160   ClassDef(ObjSplitRule,0) 
 
  164 class RooSimWSTool::ObjBuildConfig
 
  167   ObjBuildConfig() : _masterCat(0) {} ;
 
  168   virtual ~ObjBuildConfig() {} ;
 
  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 ;
 
  179   ClassDef(ObjBuildConfig,0)