#ifndef ROO_SIM_WS_TOOL_HH
#define ROO_SIM_WS_TOOL_HH
#include "Rtypes.h"
#include "RooWorkspace.h"
#include "RooCmdArg.h"
#include <list>
#include <map>
#include <string>
class RooAbsCategoryLValue ; 
class RooAbsCategory ;
class RooAbsArg ;
class RooAbsPdf ;
class RooCatType ;
class RooSimultaneous ;
class RooSimWSTool : public TNamed, public RooPrintable {
public:
  
  RooSimWSTool(RooWorkspace& ws) ;
  virtual ~RooSimWSTool() ;
  class BuildConfig ;
  class MultiBuildConfig ;
  class SplitRule ;
  
  class ObjBuildConfig ;
  class ObjSplitRule ;
  
  RooSimultaneous* build(const char* simPdfName, const char* protoPdfName, 
			 const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
			 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
			 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
  RooSimultaneous* build(const char* simPdfName,BuildConfig& bc) ;
  
protected:
  RooSimWSTool(const RooSimWSTool&) ;
  ObjBuildConfig* validateConfig(BuildConfig& bc) ;
  RooSimultaneous* executeBuild(const char* simPdfName,ObjBuildConfig& obc) ;
  std::string makeSplitName(const RooArgSet& splitCatSet) ;
  RooWorkspace* _ws ;
  ClassDef(RooSimWSTool,0) 
} ;
class RooSimWSTool::BuildConfig
{
 public:
  BuildConfig(const char* pdfName, SplitRule& sr) ;
  BuildConfig(const char* pdfName, const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
	      const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
	      const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
  BuildConfig(const RooArgSet& legacyBuildConfig) ;
  virtual ~BuildConfig() {} ;
  void restrictBuild(const char* catName, const char* stateList) ;
 protected:
  BuildConfig() {} ;
  friend class RooSimWSTool ;
  std::string _masterCatName ;
  std::map<std::string,SplitRule> _pdfmap ;
  std::map<std::string,std::string> _restr ;
  RooCmdArg _conflProtocol ;
  void internalAddPdf(const char* pdfName, const char* miStateList, SplitRule& sr) ;
  ClassDef(BuildConfig,0) 
 } ;
class RooSimWSTool::MultiBuildConfig : public RooSimWSTool::BuildConfig
{
 public:
  MultiBuildConfig(const char* masterIndexCat)  ;
  virtual ~MultiBuildConfig() {} ;
  void addPdf(const char* miStateList, const char* pdfName, SplitRule& sr) ;
  void addPdf(const char* miStateList, const char* pdfName, 
	      const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
	      const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
	      const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
 protected:
  friend class RooSimWSTool ;
  ClassDef(MultiBuildConfig,0) 
 } ;
  
class RooSimWSTool::SplitRule : public TNamed {
public:
  SplitRule(const char* pdfName="") : TNamed(pdfName,pdfName) {} ;  
  virtual ~SplitRule() {} ;  
  void splitParameter(const char* paramList, const char* categoryList) ;
  void splitParameterConstrained(const char* paramNameList, const char* categoryNameList, const char* remainderStateName) ;
  
protected:
  friend class RooSimWSTool ;
  friend class BuildConfig ;
  friend class MultiBuildConfig ;  
  void configure(const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
		 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
		 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
  std::list<std::string>                                             _miStateNameList ;
  std::map<std::string, std::pair<std::list<std::string>,std::string> > _paramSplitMap  ; 
  ClassDef(SplitRule,0) 
 } ;
class RooSimWSTool::ObjSplitRule {
public:
  ObjSplitRule() {} ;  
  virtual ~ObjSplitRule() ;  
  
protected:
  friend class RooSimWSTool ;
  friend class RooSimWSTool::ObjBuildConfig ;
  std::list<const RooCatType*>                            _miStateList ; 
  std::map<RooAbsArg*, std::pair<RooArgSet,std::string> > _paramSplitMap  ; 
  ClassDef(ObjSplitRule,0) 
 } ;
class RooSimWSTool::ObjBuildConfig
{
 public:
  ObjBuildConfig() {} ;
  virtual ~ObjBuildConfig() {} ;
  void print() ;
 protected:
  friend class RooSimWSTool ;
  std::map<RooAbsPdf*,ObjSplitRule> _pdfmap ;
  std::map<RooAbsCategory*,std::list<const RooCatType*> > _restr ;
  RooCategory* _masterCat ;
  RooArgSet    _usedSplitCats ;
  RooCmdArg _conflProtocol ;
  ClassDef(ObjBuildConfig,0) 
 } ;
#endif
Last change: Wed Jun 25 08:34:14 2008
Last generated: 2008-06-25 08:34
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.