16 #ifndef ROO_SIMULTANEOUS
17 #define ROO_SIMULTANEOUS
31 class RooAbsCategoryLValue ;
37 class RooSimultaneous :
public RooAbsPdf {
41 inline RooSimultaneous() : _plotCoefNormRange(0) { }
42 RooSimultaneous(
const char *name,
const char *title, RooAbsCategoryLValue& indexCat) ;
43 RooSimultaneous(
const char *name,
const char *title, std::map<std::string,RooAbsPdf*> pdfMap, RooAbsCategoryLValue& inIndexCat) ;
44 RooSimultaneous(
const char *name,
const char *title,
const RooArgList& pdfList, RooAbsCategoryLValue& indexCat) ;
45 RooSimultaneous(
const RooSimultaneous& other,
const char* name=0);
46 virtual TObject* clone(
const char* newname)
const {
return new RooSimultaneous(*
this,newname) ; }
47 virtual ~RooSimultaneous() ;
49 virtual Double_t evaluate()
const ;
50 virtual Bool_t selfNormalized()
const {
return kTRUE ; }
51 Bool_t addPdf(
const RooAbsPdf& pdf,
const char* catLabel) ;
53 virtual ExtendMode extendMode()
const ;
55 virtual Double_t expectedEvents(
const RooArgSet* nset)
const ;
56 virtual Double_t expectedEvents(
const RooArgSet& nset)
const {
return expectedEvents(&nset) ; }
58 virtual Bool_t forceAnalyticalInt(
const RooAbsArg&)
const {
return kTRUE ; }
59 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars,
const RooArgSet* normSet,
const char* rangeName=0)
const ;
60 Double_t analyticalIntegralWN(Int_t code,
const RooArgSet* normSet,
const char* rangeName=0)
const ;
62 using RooAbsPdf::plotOn ;
63 virtual RooPlot* plotOn(RooPlot* frame,
64 const RooCmdArg& arg1 ,
const RooCmdArg& arg2=RooCmdArg(),
65 const RooCmdArg& arg3=RooCmdArg(),
const RooCmdArg& arg4=RooCmdArg(),
66 const RooCmdArg& arg5=RooCmdArg(),
const RooCmdArg& arg6=RooCmdArg(),
67 const RooCmdArg& arg7=RooCmdArg(),
const RooCmdArg& arg8=RooCmdArg(),
68 const RooCmdArg& arg9=RooCmdArg(),
const RooCmdArg& arg10=RooCmdArg())
const {
69 return RooAbsReal::plotOn(frame,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) ;
71 virtual RooPlot* plotOn(RooPlot* frame, RooLinkedList& cmdList)
const ;
74 virtual RooPlot *plotOn(RooPlot *frame, Option_t* drawOptions, Double_t scaleFactor=1.0,
75 ScaleType stype=Relative,
const RooAbsData* projData=0,
const RooArgSet* projSet=0,
76 Double_t precision=1e-3, Bool_t shiftToZero=kFALSE,
const RooArgSet* projDataSet=0,
77 Double_t rangeLo=0, Double_t rangeHi=0, RooCurve::WingMode wmode=RooCurve::Extended)
const;
79 RooAbsPdf* getPdf(
const char* catName)
const ;
80 const RooAbsCategoryLValue& indexCat()
const {
return (RooAbsCategoryLValue&) _indexCat.arg() ; }
83 virtual RooDataSet* generateSimGlobal(
const RooArgSet& whatVars, Int_t nEvents) ;
85 virtual RooDataHist* fillDataHist(RooDataHist *hist,
const RooArgSet* nset, Double_t scaleFactor,
86 Bool_t correctForBinVolume=kFALSE, Bool_t showProgress=kFALSE)
const ;
90 void initialize(RooAbsCategoryLValue& inIndexCat, std::map<std::string,RooAbsPdf*> pdfMap) ;
92 virtual void selectNormalization(
const RooArgSet* depSet=0, Bool_t force=kFALSE) ;
93 virtual void selectNormalizationRange(
const char* rangeName=0, Bool_t force=kFALSE) ;
94 mutable RooSetProxy _plotCoefNormSet ;
95 const TNamed* _plotCoefNormRange ;
97 class CacheElem :
public RooAbsCacheElement {
99 virtual ~CacheElem() {} ;
100 RooArgList containedArgs(Action) {
return RooArgList(_partIntList) ; }
101 RooArgList _partIntList ;
103 mutable RooObjCacheManager _partIntMgr ;
106 friend class RooSimGenContext ;
107 friend class RooSimSplitGenContext ;
108 virtual RooAbsGenContext* autoGenContext(
const RooArgSet &vars,
const RooDataSet* prototype=0,
const RooArgSet* auxProto=0,
109 Bool_t verbose=kFALSE, Bool_t autoBinned=kTRUE,
const char* binnedTag=
"")
const ;
110 virtual RooAbsGenContext* genContext(
const RooArgSet &vars,
const RooDataSet *prototype=0,
111 const RooArgSet* auxProto=0, Bool_t verbose= kFALSE)
const ;
113 RooCategoryProxy _indexCat ;
114 TList _pdfProxyList ;
117 ClassDef(RooSimultaneous,2)