00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_ABS_PDF
00017 #define ROO_ABS_PDF
00018
00019 #include "RooAbsReal.h"
00020
00021 #include "RooNameSet.h"
00022 #include "RooObjCacheManager.h"
00023 #include "RooCmdArg.h"
00024
00025 class RooDataSet;
00026 class RooDataHist ;
00027 class RooArgSet ;
00028 class RooRealProxy ;
00029 class RooAbsGenContext ;
00030 class RooFitResult ;
00031 class RooExtendPdf ;
00032 class RooCategory ;
00033 class TPaveText;
00034 class TH1F;
00035 class TH2F;
00036 class TList ;
00037 class RooLinkedList ;
00038 class RooNumGenConfig ;
00039 class RooRealIntegral ;
00040
00041 class RooAbsPdf : public RooAbsReal {
00042 public:
00043
00044
00045 RooAbsPdf() ;
00046 RooAbsPdf(const char *name, const char *title=0) ;
00047 RooAbsPdf(const char *name, const char *title, Double_t minVal, Double_t maxVal) ;
00048
00049 virtual ~RooAbsPdf();
00050
00051
00052 RooDataSet *generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg& arg1,
00053 const RooCmdArg& arg2=RooCmdArg::none(), const RooCmdArg& arg3=RooCmdArg::none(),
00054 const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none()) ;
00055 RooDataSet *generate(const RooArgSet &whatVars,
00056 const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
00057 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
00058 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
00059 RooDataSet *generate(const RooArgSet &whatVars, Int_t nEvents = 0, Bool_t verbose=kFALSE) const;
00060 RooDataSet *generate(const RooArgSet &whatVars, const RooDataSet &prototype, Int_t nEvents= 0,
00061 Bool_t verbose=kFALSE, Bool_t randProtoOrder=kFALSE, Bool_t resampleProto=kFALSE) const;
00062
00063
00064 class GenSpec {
00065 public:
00066 ~GenSpec() ;
00067 private:
00068 GenSpec(RooAbsGenContext* context, const RooArgSet& whatVars, RooDataSet* protoData, Int_t nGen, Bool_t extended,
00069 Bool_t randProto, Bool_t resampleProto, TString dsetName) ;
00070 GenSpec(const GenSpec& other) ;
00071
00072 friend class RooAbsPdf ;
00073 RooAbsGenContext* _genContext ;
00074 RooArgSet _whatVars ;
00075 RooDataSet* _protoData ;
00076 Int_t _nGen ;
00077 Bool_t _extended ;
00078 Bool_t _randProto ;
00079 Bool_t _resampleProto ;
00080 TString _dsetName ;
00081 } ;
00082
00083 GenSpec* prepareMultiGen(const RooArgSet &whatVars,
00084 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 RooDataSet* generate(GenSpec&) const ;
00088
00089
00090 RooDataHist *generateBinned(const RooArgSet &whatVars, Double_t nEvents, const RooCmdArg& arg1,
00091 const RooCmdArg& arg2=RooCmdArg::none(), const RooCmdArg& arg3=RooCmdArg::none(),
00092 const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none()) ;
00093 RooDataHist *generateBinned(const RooArgSet &whatVars,
00094 const RooCmdArg& arg1=RooCmdArg::none(),const RooCmdArg& arg2=RooCmdArg::none(),
00095 const RooCmdArg& arg3=RooCmdArg::none(),const RooCmdArg& arg4=RooCmdArg::none(),
00096 const RooCmdArg& arg5=RooCmdArg::none(),const RooCmdArg& arg6=RooCmdArg::none()) ;
00097 RooDataHist *generateBinned(const RooArgSet &whatVars, Double_t nEvents, Bool_t expectedData=kFALSE, Bool_t extended=kFALSE) const;
00098
00099 virtual RooPlot* plotOn(RooPlot* frame,
00100 const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00101 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00102 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00103 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none(),
00104 const RooCmdArg& arg9=RooCmdArg::none(), const RooCmdArg& arg10=RooCmdArg::none()
00105 ) const {
00106 return RooAbsReal::plotOn(frame,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) ;
00107 }
00108
00109
00110 virtual RooPlot* paramOn(RooPlot* frame,
00111 const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00112 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00113 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00114 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00115
00116 virtual RooPlot* paramOn(RooPlot* frame, const RooAbsData* data, const char *label= "", Int_t sigDigits = 2,
00117 Option_t *options = "NELU", Double_t xmin=0.50,
00118 Double_t xmax= 0.99,Double_t ymax=0.95) ;
00119
00120
00121 virtual Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const;
00122 virtual void initGenerator(Int_t code) ;
00123 virtual void generateEvent(Int_t code);
00124 virtual Bool_t isDirectGenSafe(const RooAbsArg& arg) const ;
00125
00126
00127 const RooNumGenConfig* getGeneratorConfig() const ;
00128 static RooNumGenConfig* defaultGeneratorConfig() ;
00129 RooNumGenConfig* specialGeneratorConfig() const ;
00130 RooNumGenConfig* specialGeneratorConfig(Bool_t createOnTheFly) ;
00131 void setGeneratorConfig() ;
00132 void setGeneratorConfig(const RooNumGenConfig& config) ;
00133
00134
00135 virtual RooFitResult* fitTo(RooAbsData& data, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00136 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),
00137 const RooCmdArg& arg6=RooCmdArg::none(), const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00138 virtual RooFitResult* fitTo(RooAbsData& data, const RooLinkedList& cmdList) ;
00139
00140 virtual RooAbsReal* createNLL(RooAbsData& data, const RooLinkedList& cmdList) ;
00141 virtual RooAbsReal* createNLL(RooAbsData& data, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00142 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),
00143 const RooCmdArg& arg6=RooCmdArg::none(), const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00144
00145
00146 using RooAbsReal::chi2FitTo ;
00147 using RooAbsReal::createChi2 ;
00148 virtual RooFitResult* chi2FitTo(RooDataHist& data, const RooLinkedList& cmdList) ;
00149 virtual RooAbsReal* createChi2(RooDataHist& data, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00150 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),
00151 const RooCmdArg& arg6=RooCmdArg::none(), const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00152
00153
00154 virtual RooAbsReal* createChi2(RooDataSet& data, const RooLinkedList& cmdList) ;
00155
00156
00157
00158
00159
00160
00161 virtual RooArgSet* getConstraints(const RooArgSet& , RooArgSet& , Bool_t ) const {
00162
00163 return 0 ;
00164 }
00165 virtual RooArgSet* getAllConstraints(const RooArgSet& observables, RooArgSet& constrainedParams, Bool_t stripDisconnected=kTRUE) const ;
00166
00167
00168 virtual RooAbsPdf* createProjection(const RooArgSet& iset) ;
00169
00170
00171 RooAbsReal* createCdf(const RooArgSet& iset, const RooArgSet& nset=RooArgSet()) ;
00172 RooAbsReal* createCdf(const RooArgSet& iset, const RooCmdArg& arg1, const RooCmdArg& arg2=RooCmdArg::none(),
00173 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00174 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00175 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00176 RooAbsReal* createScanCdf(const RooArgSet& iset, const RooArgSet& nset, Int_t numScanBins, Int_t intOrder) ;
00177
00178
00179 virtual Bool_t traceEvalHook(Double_t value) const ;
00180 virtual Double_t getVal(const RooArgSet* set=0) const ;
00181 virtual Double_t getLogVal(const RooArgSet* set=0) const ;
00182
00183 void setNormValueCaching(Int_t minNumIntDim, Int_t ipOrder=2) ;
00184 Int_t minDimNormValueCaching() const { return _minDimNormValueCache ; }
00185 Int_t intOrderNormValueCaching() const { return _valueCacheIntOrder ; }
00186
00187
00188 Double_t getNorm(const RooArgSet& nset) const {
00189
00190 return getNorm(&nset) ;
00191 }
00192 virtual Double_t getNorm(const RooArgSet* set=0) const ;
00193
00194 virtual void resetErrorCounters(Int_t resetValue=10) ;
00195 void setTraceCounter(Int_t value, Bool_t allNodes=kFALSE) ;
00196 Bool_t traceEvalPdf(Double_t value) const ;
00197
00198 Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
00199
00200 virtual Bool_t selfNormalized() const {
00201
00202
00203 return kFALSE ;
00204 }
00205
00206
00207 enum ExtendMode { CanNotBeExtended, CanBeExtended, MustBeExtended } ;
00208 virtual ExtendMode extendMode() const {
00209
00210
00211
00212 return CanNotBeExtended ;
00213 }
00214 inline Bool_t canBeExtended() const {
00215
00216 return (extendMode() != CanNotBeExtended) ;
00217 }
00218 inline Bool_t mustBeExtended() const {
00219
00220 return (extendMode() == MustBeExtended) ;
00221 }
00222 virtual Double_t expectedEvents(const RooArgSet* nset) const ;
00223 virtual Double_t expectedEvents(const RooArgSet& nset) const {
00224
00225 return expectedEvents(&nset) ;
00226 }
00227
00228
00229 virtual void printValue(ostream& os) const ;
00230 virtual void printMultiline(ostream& os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const ;
00231
00232 static void verboseEval(Int_t stat) ;
00233 static int verboseEval() ;
00234
00235 virtual Double_t extendedTerm(UInt_t observedEvents, const RooArgSet* nset=0) const ;
00236
00237 static void clearEvalError() ;
00238 static Bool_t evalError() ;
00239
00240 void setNormRange(const char* rangeName) ;
00241 const char* normRange() const {
00242 return _normRange.Length()>0 ? _normRange.Data() : 0 ;
00243 }
00244 void setNormRangeOverride(const char* rangeName) ;
00245
00246
00247 protected:
00248
00249 public:
00250 virtual const RooAbsReal* getNormObj(const RooArgSet* set, const RooArgSet* iset, const TNamed* rangeName=0) const ;
00251 protected:
00252
00253 RooDataSet *generate(RooAbsGenContext& context, const RooArgSet& whatVars, const RooDataSet* prototype,
00254 Int_t nEvents, Bool_t verbose, Bool_t randProtoOrder, Bool_t resampleProto) const ;
00255
00256
00257 virtual RooPlot* paramOn(RooPlot* frame, const RooArgSet& params, Bool_t showConstants=kFALSE,
00258 const char *label= "", Int_t sigDigits = 2, Option_t *options = "NELU", Double_t xmin=0.65,
00259 Double_t xmax= 0.99,Double_t ymax=0.95, const RooCmdArg* formatCmd=0) ;
00260
00261
00262 virtual RooPlot* plotOn(RooPlot* frame, RooLinkedList& cmdList) const ;
00263 void plotOnCompSelect(RooArgSet* selNodes) const ;
00264
00265 virtual RooPlot *plotOn(RooPlot *frame, PlotOpt o) const;
00266
00267 friend class RooEffGenContext ;
00268 friend class RooAddGenContext ;
00269 friend class RooProdGenContext ;
00270 friend class RooSimGenContext ;
00271 friend class RooConvGenContext ;
00272 friend class RooSimultaneous ;
00273 friend class RooAddGenContextOrig ;
00274 friend class RooMCStudy ;
00275
00276 Int_t* randomizeProtoOrder(Int_t nProto,Int_t nGen,Bool_t resample=kFALSE) const ;
00277 virtual RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
00278 const RooArgSet* auxProto=0, Bool_t verbose= kFALSE) const ;
00279
00280
00281 friend class RooExtendPdf ;
00282
00283 RooAbsPdf(const RooAbsPdf& other, const char* name = 0);
00284
00285 friend class RooRealIntegral ;
00286 static Int_t _verboseEval ;
00287
00288 virtual Bool_t syncNormalization(const RooArgSet* dset, Bool_t adjustProxies=kTRUE) const ;
00289
00290 friend class RooAbsAnaConvPdf ;
00291 mutable Double_t _rawValue ;
00292 mutable RooAbsReal* _norm ;
00293 mutable RooArgSet* _normSet ;
00294 Int_t _minDimNormValueCache ;
00295 Int_t _valueCacheIntOrder ;
00296
00297 class CacheElem : public RooAbsCacheElement {
00298 public:
00299 CacheElem(RooAbsReal& norm) : _norm(&norm) {} ;
00300 void operModeHook(RooAbsArg::OperMode) ;
00301 virtual ~CacheElem() ;
00302 virtual RooArgList containedArgs(Action) { return RooArgList(*_norm) ; }
00303 RooAbsReal* _norm ;
00304 } ;
00305 mutable RooObjCacheManager _normMgr ;
00306
00307 friend class CacheElem ;
00308
00309 virtual Bool_t redirectServersHook(const RooAbsCollection&, Bool_t, Bool_t, Bool_t) {
00310
00311
00312
00313
00314
00315 _norm = 0 ;
00316 return kFALSE ;
00317 } ;
00318
00319
00320 mutable Int_t _errorCount ;
00321 mutable Int_t _traceCount ;
00322 mutable Int_t _negCount ;
00323
00324 Bool_t _selectComp ;
00325
00326 static void raiseEvalError() ;
00327
00328 static Bool_t _evalError ;
00329
00330 RooNumGenConfig* _specGeneratorConfig ;
00331
00332 TString _normRange ;
00333 static TString _normRangeOverride ;
00334
00335 ClassDef(RooAbsPdf,3)
00336 };
00337
00338
00339 #endif