RooSimWSTool.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Project: RooFit                                                           *
00003  * Package: RooFitCore                                                       *
00004  *    File: $Id: RooSimWSTool.h 36209 2010-10-08 21:37:36Z wouter $
00005  * Authors:                                                                  *
00006  *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
00007  *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
00008  *                                                                           *
00009  * Copyright (c) 2000-2005, Regents of the University of California          *
00010  *                          and Stanford University. All rights reserved.    *
00011  *                                                                           *
00012  * Redistribution and use in source and binary forms,                        *
00013  * with or without modification, are permitted according to the terms        *
00014  * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
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   // Constructors, assignment etc
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) // Workspace oriented tool for customized cloning of p.d.f. into a simultaneous p.d.f
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) // Build configuration object for RooSimWSTool
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) // Build configuration object for RooSimWSTool with multiple prototype p.d.f.
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  ; //<paramName,<list<splitCatSet>,remainderStateName>>
00144   ClassDef(SplitRule,0) // Split rule specification for prototype p.d.f
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  ; //<paramName,<list<splitCatSet>,remainderStateName>>
00159   ClassDef(ObjSplitRule,0) // Validated RooSimWSTool split rule
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) // Validated RooSimWSTool build configuration
00179  } ;
00180 
00181 #endif

Generated on Tue Jul 5 14:26:21 2011 for ROOT_528-00b_version by  doxygen 1.5.1