RooAbsReal.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Project: RooFit                                                           *
00003  * Package: RooFitCore                                                       *
00004  *    File: $Id: RooAbsReal.h,v 1.75 2007/07/13 21:50:24 wouter Exp $
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 #ifndef ROO_ABS_REAL
00017 #define ROO_ABS_REAL
00018 
00019 #include "RooAbsArg.h"
00020 #include "RooCmdArg.h"
00021 #include "RooCurve.h"
00022 #include "RooArgSet.h"
00023 #include "RooArgList.h"
00024 #include "RooGlobalFunc.h"
00025 
00026 class RooArgList ;
00027 class RooDataSet ;
00028 class RooPlot;
00029 class RooRealVar;
00030 class RooAbsFunc;
00031 class RooAbsCategoryLValue ;
00032 class RooCategory ;
00033 class RooLinkedList ;
00034 class RooNumIntConfig ;
00035 class RooDataHist ;
00036 class RooFunctor ;
00037 class RooGenFunction ;
00038 class RooMultiGenFunction ;
00039 class RooFitResult ;
00040 class RooMoment ;
00041 class RooDerivative ;
00042 
00043 class TH1;
00044 class TH1F;
00045 class TH2F;
00046 class TH3F;
00047 
00048 #include <list>
00049 #include <string>
00050 #include <iostream>
00051 
00052 
00053 class RooAbsReal : public RooAbsArg {
00054 public:
00055   // Constructors, assignment etc
00056   RooAbsReal() ;
00057   RooAbsReal(const char *name, const char *title, const char *unit= "") ;
00058   RooAbsReal(const char *name, const char *title, Double_t minVal, Double_t maxVal, 
00059              const char *unit= "") ;
00060   RooAbsReal(const RooAbsReal& other, const char* name=0);
00061   virtual ~RooAbsReal();
00062 
00063   // Return value and unit accessors
00064   virtual Double_t getVal(const RooArgSet* set=0) const ;
00065   inline  Double_t getVal(const RooArgSet& set) const { 
00066     // Return value with given choice of observables
00067     return getVal(&set) ; 
00068   }
00069 
00070 
00071   Double_t getPropagatedError(const RooFitResult& fr) ;
00072 
00073   Bool_t operator==(Double_t value) const ;
00074   virtual Bool_t operator==(const RooAbsArg& other) ;
00075   inline const Text_t *getUnit() const { 
00076     // Return string with unit description
00077     return _unit.Data(); 
00078   }
00079   inline void setUnit(const char *unit) { 
00080     // Set unit description to given string
00081     _unit= unit; 
00082   }
00083   TString getTitle(Bool_t appendUnit= kFALSE) const;
00084 
00085   // Lightweight interface adaptors (caller takes ownership)
00086   RooAbsFunc *bindVars(const RooArgSet &vars, const RooArgSet* nset=0, Bool_t clipInvalid=kFALSE) const;
00087 
00088   // Create a fundamental-type object that can hold our value.
00089   RooAbsArg *createFundamental(const char* newname=0) const;
00090 
00091   // Analytical integration support
00092   virtual Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet, const char* rangeName=0) const ;
00093   virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
00094   virtual Int_t getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars, const char* rangeName=0) const ;
00095   virtual Double_t analyticalIntegral(Int_t code, const char* rangeName=0) const ;
00096   virtual Bool_t forceAnalyticalInt(const RooAbsArg& /*dep*/) const { 
00097     // Interface to force RooRealIntegral to offer given observable for internal integration
00098     // even if this is deemed unsafe. This default implementation returns always flase
00099     return kFALSE ; 
00100   }
00101   virtual void forceNumInt(Bool_t flag=kTRUE) { 
00102     // If flag is true, all advertised analytical integrals will be ignored
00103     // and all integrals are calculated numerically
00104     _forceNumInt = flag ; 
00105   }
00106 
00107   // Chi^2 fits to histograms
00108   virtual RooFitResult* chi2FitTo(RooDataHist& data, const RooCmdArg& arg1=RooCmdArg::none(),  const RooCmdArg& arg2=RooCmdArg::none(),  
00109                               const RooCmdArg& arg3=RooCmdArg::none(),  const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),  
00110                               const RooCmdArg& arg6=RooCmdArg::none(),  const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00111   virtual RooFitResult* chi2FitTo(RooDataHist& data, const RooLinkedList& cmdList) ;
00112 
00113   virtual RooAbsReal* createChi2(RooDataHist& data, const RooLinkedList& cmdList) ;
00114   virtual RooAbsReal* createChi2(RooDataHist& data, const RooCmdArg& arg1=RooCmdArg::none(),  const RooCmdArg& arg2=RooCmdArg::none(),  
00115                                  const RooCmdArg& arg3=RooCmdArg::none(),  const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),  
00116                                  const RooCmdArg& arg6=RooCmdArg::none(),  const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00117 
00118   // Chi^2 fits to X-Y datasets
00119   virtual RooFitResult* chi2FitTo(RooDataSet& xydata, const RooCmdArg& arg1=RooCmdArg::none(),  const RooCmdArg& arg2=RooCmdArg::none(),  
00120                               const RooCmdArg& arg3=RooCmdArg::none(),  const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),  
00121                               const RooCmdArg& arg6=RooCmdArg::none(),  const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00122   virtual RooFitResult* chi2FitTo(RooDataSet& xydata, const RooLinkedList& cmdList) ;
00123 
00124   virtual RooAbsReal* createChi2(RooDataSet& data, const RooLinkedList& cmdList) ;
00125   virtual RooAbsReal* createChi2(RooDataSet& data, const RooCmdArg& arg1=RooCmdArg::none(),  const RooCmdArg& arg2=RooCmdArg::none(),  
00126                                    const RooCmdArg& arg3=RooCmdArg::none(),  const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),  
00127                                    const RooCmdArg& arg6=RooCmdArg::none(),  const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00128 
00129 
00130   virtual RooAbsReal* createProfile(const RooArgSet& paramsOfInterest) ;
00131 
00132 
00133   RooAbsReal* createIntegral(const RooArgSet& iset, const RooCmdArg& arg1, const RooCmdArg& arg2=RooCmdArg::none(),
00134                              const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), 
00135                              const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(), 
00136                              const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) const ;
00137 
00138   RooAbsReal* createIntegral(const RooArgSet& iset, const char* rangeName) const { 
00139     // Create integral over observables in iset in range named rangeName
00140     return createIntegral(iset,0,0,rangeName) ; 
00141   }
00142   RooAbsReal* createIntegral(const RooArgSet& iset, const RooArgSet& nset, const char* rangeName=0) const { 
00143     // Create integral over observables in iset in range named rangeName with integrand normalized over observables in nset
00144     return createIntegral(iset,&nset,0,rangeName) ; 
00145   }
00146   RooAbsReal* createIntegral(const RooArgSet& iset, const RooArgSet& nset, const RooNumIntConfig& cfg, const char* rangeName=0) const { 
00147     // Create integral over observables in iset in range named rangeName with integrand normalized over observables in nset while
00148     // using specified configuration for any numeric integration
00149     return createIntegral(iset,&nset,&cfg,rangeName) ; 
00150   }
00151   RooAbsReal* createIntegral(const RooArgSet& iset, const RooNumIntConfig& cfg, const char* rangeName=0) const { 
00152     // Create integral over observables in iset in range named rangeName using specified configuration for any numeric integration
00153     return createIntegral(iset,0,&cfg,rangeName) ; 
00154   }
00155   virtual RooAbsReal* createIntegral(const RooArgSet& iset, const RooArgSet* nset=0, const RooNumIntConfig* cfg=0, const char* rangeName=0) const ;  
00156 
00157   // Create running integrals
00158   RooAbsReal* createRunningIntegral(const RooArgSet& iset, const RooArgSet& nset=RooArgSet()) ;
00159   RooAbsReal* createRunningIntegral(const RooArgSet& iset, const RooCmdArg& arg1, const RooCmdArg& arg2=RooCmdArg::none(),
00160                         const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), 
00161                         const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(), 
00162                         const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00163   RooAbsReal* createIntRI(const RooArgSet& iset, const RooArgSet& nset=RooArgSet()) ;
00164   RooAbsReal* createScanRI(const RooArgSet& iset, const RooArgSet& nset, Int_t numScanBins, Int_t intOrder) ;
00165 
00166   
00167   // Optimized accept/reject generator support
00168   virtual Int_t getMaxVal(const RooArgSet& vars) const ;
00169   virtual Double_t maxVal(Int_t code) const ;
00170   virtual Int_t minTrialSamples(const RooArgSet& /*arGenObs*/) const { return 0 ; }
00171 
00172 
00173   // Plotting options
00174   void setPlotLabel(const char *label);
00175   const char *getPlotLabel() const;
00176 
00177   virtual Double_t defaultErrorLevel() const { 
00178     // Return default level for MINUIT error analysis
00179     return 1.0 ; 
00180   }
00181 
00182   const RooNumIntConfig* getIntegratorConfig() const ;
00183   RooNumIntConfig* getIntegratorConfig() ;
00184   static RooNumIntConfig* defaultIntegratorConfig()  ;
00185   RooNumIntConfig* specialIntegratorConfig() const ;
00186   RooNumIntConfig* specialIntegratorConfig(Bool_t createOnTheFly) ;
00187   void setIntegratorConfig() ;
00188   void setIntegratorConfig(const RooNumIntConfig& config) ;
00189 
00190   virtual void fixAddCoefNormalization(const RooArgSet& addNormSet=RooArgSet(),Bool_t force=kTRUE) ;
00191   virtual void fixAddCoefRange(const char* rangeName=0,Bool_t force=kTRUE) ;
00192 
00193   virtual void preferredObservableScanOrder(const RooArgSet& obs, RooArgSet& orderedObs) const ;
00194 
00195   // User entry point for plotting
00196   virtual RooPlot* plotOn(RooPlot* frame, 
00197                           const RooCmdArg& arg1=RooCmdArg(), const RooCmdArg& arg2=RooCmdArg(),
00198                           const RooCmdArg& arg3=RooCmdArg(), const RooCmdArg& arg4=RooCmdArg(),
00199                           const RooCmdArg& arg5=RooCmdArg(), const RooCmdArg& arg6=RooCmdArg(),
00200                           const RooCmdArg& arg7=RooCmdArg(), const RooCmdArg& arg8=RooCmdArg(),
00201                           const RooCmdArg& arg9=RooCmdArg(), const RooCmdArg& arg10=RooCmdArg()
00202               ) const ;
00203 
00204 
00205   enum ScaleType { Raw, Relative, NumEvent, RelativeExpected } ;
00206 
00207   // Forwarder function for backward compatibility
00208   virtual RooPlot *plotSliceOn(RooPlot *frame, const RooArgSet& sliceSet, Option_t* drawOptions="L", 
00209                                Double_t scaleFactor=1.0, ScaleType stype=Relative, const RooAbsData* projData=0) const;
00210 
00211   // Fill an existing histogram
00212   TH1 *fillHistogram(TH1 *hist, const RooArgList &plotVars,
00213                      Double_t scaleFactor= 1, const RooArgSet *projectedVars= 0, Bool_t scaling=kTRUE,
00214                      const RooArgSet* condObs=0, Bool_t setError=kTRUE) const;
00215 
00216   // Create 1,2, and 3D histograms from and fill it
00217   TH1 *createHistogram(const char* varNameList, Int_t xbins=0, Int_t ybins=0, Int_t zbins=0) const ;
00218   TH1* createHistogram(const char *name, const RooAbsRealLValue& xvar, RooLinkedList& argList) const ;
00219   TH1 *createHistogram(const char *name, const RooAbsRealLValue& xvar,
00220                        const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(), 
00221                        const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), 
00222                        const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(), 
00223                        const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) const ;
00224 
00225   // Fill a RooDataHist
00226   RooDataHist* fillDataHist(RooDataHist *hist, const RooArgSet* nset, Double_t scaleFactor,
00227                             Bool_t correctForBinVolume=kFALSE, Bool_t showProgress=kFALSE) const ;
00228 
00229   // I/O streaming interface (machine readable)
00230   virtual Bool_t readFromStream(istream& is, Bool_t compact, Bool_t verbose=kFALSE) ;
00231   virtual void writeToStream(ostream& os, Bool_t compact) const ;
00232 
00233   // Printing interface (human readable)
00234   virtual void printValue(ostream& os) const ;
00235   virtual void printMultiline(ostream& os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const ;
00236 
00237   static void setCacheCheck(Bool_t flag) ;
00238 
00239   // Evaluation error logging 
00240   class EvalError {
00241   public:
00242     EvalError() { _msg[0] = 0 ; _srvval[0] = 0 ; }
00243     EvalError(const EvalError& other) { strlcpy(_msg,other._msg,1024) ; strlcpy(_srvval,other._srvval,1024) ; } ;
00244     void setMessage(const char* tmp) ;
00245     void setServerValues(const char* tmp) ;
00246     char _msg[1024] ;
00247     char _srvval[1024] ;
00248   } ;
00249 
00250   enum ErrorLoggingMode { PrintErrors, CollectErrors, CountErrors } ;
00251   static ErrorLoggingMode evalErrorLoggingMode() ;
00252   static void setEvalErrorLoggingMode(ErrorLoggingMode m) ;
00253   void logEvalError(const char* message, const char* serverValueString=0) const ;
00254   static void logEvalError(const RooAbsReal* originator, const char* origName, const char* message, const char* serverValueString=0) ;
00255   static void printEvalErrors(ostream&os=std::cout, Int_t maxPerNode=10000000) ;
00256   static Int_t numEvalErrors() ;
00257   static Int_t numEvalErrorItems() { return _evalErrorList.size() ; }
00258 
00259    
00260   typedef std::map<const RooAbsArg*,std::pair<std::string,std::list<EvalError> > >::const_iterator EvalErrorIter ; 
00261   static EvalErrorIter evalErrorIter() { return _evalErrorList.begin() ; } 
00262 
00263   static void clearEvalErrorLog() ;
00264 
00265   virtual std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& /*obs*/, Double_t /*xlo*/, Double_t /*xhi*/) const { 
00266     // Interface for returning an optional hint for initial sampling points when constructing a curve 
00267     // projected on observable.
00268     return 0 ; 
00269   }
00270 
00271   RooGenFunction* iGenFunction(RooRealVar& x, const RooArgSet& nset=RooArgSet()) ;
00272   RooMultiGenFunction* iGenFunction(const RooArgSet& observables, const RooArgSet& nset=RooArgSet()) ;
00273 
00274   RooFunctor* functor(const RooArgList& obs, const RooArgList& pars=RooArgList(), const RooArgSet& nset=RooArgSet()) const ;
00275   TF1* asTF(const RooArgList& obs, const RooArgList& pars=RooArgList(), const RooArgSet& nset=RooArgSet()) const ;
00276 
00277   RooDerivative* derivative(RooRealVar& obs, Int_t order=1, Double_t eps=0.001) ;
00278   RooDerivative* derivative(RooRealVar& obs, const RooArgSet& normSet, Int_t order, Double_t eps=0.001) ; 
00279 
00280   RooMoment* moment(RooRealVar& obs, Int_t order, Bool_t central, Bool_t takeRoot) ;
00281   RooMoment* moment(RooRealVar& obs, const RooArgSet& normObs, Int_t order, Bool_t central, Bool_t takeRoot, Bool_t intNormObs) ;
00282 
00283   RooMoment* mean(RooRealVar& obs) { return moment(obs,1,kFALSE,kFALSE) ; }
00284   RooMoment* mean(RooRealVar& obs, const RooArgSet& nset) { return moment(obs,nset,1,kFALSE,kFALSE,kTRUE) ; }
00285   RooMoment* sigma(RooRealVar& obs) { return moment(obs,2,kTRUE,kTRUE) ; }
00286   RooMoment* sigma(RooRealVar& obs, const RooArgSet& nset) { return moment(obs,nset,2,kTRUE,kTRUE,kTRUE) ; }
00287 
00288   Double_t findRoot(RooRealVar& x, Double_t xmin, Double_t xmax, Double_t yval) ;
00289 
00290 
00291 protected:
00292 
00293   // PlotOn with command list
00294   virtual RooPlot* plotOn(RooPlot* frame, RooLinkedList& cmdList) const ;
00295 
00296   // Hook for objects with normalization-dependent parameters interperetation
00297   virtual void selectNormalization(const RooArgSet* depSet=0, Bool_t force=kFALSE) ;
00298   virtual void selectNormalizationRange(const char* rangeName=0, Bool_t force=kFALSE) ;
00299 
00300   // Helper functions for plotting
00301   Bool_t plotSanityChecks(RooPlot* frame) const ;
00302   void makeProjectionSet(const RooAbsArg* plotVar, const RooArgSet* allVars, 
00303                          RooArgSet& projectedVars, Bool_t silent) const ;
00304 
00305   TString integralNameSuffix(const RooArgSet& iset, const RooArgSet* nset=0, const char* rangeName=0, Bool_t omitEmpty=kFALSE) const ;
00306 
00307 
00308   Bool_t isSelectedComp() const ;
00309 
00310 
00311  public:
00312   const RooAbsReal* createPlotProjection(const RooArgSet& depVars, const RooArgSet& projVars) const ;
00313   const RooAbsReal* createPlotProjection(const RooArgSet& depVars, const RooArgSet& projVars, RooArgSet*& cloneSet) const ;
00314   const RooAbsReal *createPlotProjection(const RooArgSet &dependentVars, const RooArgSet *projectedVars,
00315                                          RooArgSet *&cloneSet, const char* rangeName=0, const RooArgSet* condObs=0) const;
00316  protected:
00317 
00318   RooFitResult* chi2FitDriver(RooAbsReal& fcn, RooLinkedList& cmdList) ;
00319 
00320   RooPlot* plotOnWithErrorBand(RooPlot* frame,const RooFitResult& fr, Double_t Z, const RooArgSet* params, const RooLinkedList& argList, Bool_t method1) const ;
00321 
00322   // Support interface for subclasses to advertise their analytic integration
00323   // and generator capabilities in their analticalIntegral() and generateEvent()
00324   // implementations.
00325   Bool_t matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, 
00326                    const RooArgProxy& a) const ;
00327   Bool_t matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, 
00328                    const RooArgProxy& a, const RooArgProxy& b) const ;
00329   Bool_t matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, 
00330                    const RooArgProxy& a, const RooArgProxy& b, const RooArgProxy& c) const ;
00331   Bool_t matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, 
00332                    const RooArgProxy& a, const RooArgProxy& b,             
00333                    const RooArgProxy& c, const RooArgProxy& d) const ;
00334 
00335   Bool_t matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, 
00336                    const RooArgSet& set) const ;
00337 
00338 
00339   RooAbsReal* createIntObj(const RooArgSet& iset, const RooArgSet* nset, const RooNumIntConfig* cfg, const char* rangeName) const ;
00340   void findInnerMostIntegration(const RooArgSet& allObs, RooArgSet& innerObs, const char* rangeName) const ;
00341 
00342 
00343   // Internal consistency checking (needed by RooDataSet)
00344   virtual Bool_t isValid() const ;
00345   virtual Bool_t isValidReal(Double_t value, Bool_t printError=kFALSE) const ;
00346 
00347   // Function evaluation and error tracing
00348   Double_t traceEval(const RooArgSet* set) const ;
00349   virtual Bool_t traceEvalHook(Double_t /*value*/) const { 
00350     // Hook function to add functionality to evaluation tracing in derived classes
00351     return kFALSE ;
00352   }
00353   virtual Double_t evaluate() const = 0 ;
00354 
00355   // Hooks for RooDataSet interface
00356   friend class RooRealIntegral ;
00357   virtual void syncCache(const RooArgSet* set=0) { getVal(set) ; }
00358   virtual void copyCache(const RooAbsArg* source, Bool_t valueOnly=kFALSE) ;
00359   virtual void attachToTree(TTree& t, Int_t bufSize=32000) ;
00360   virtual void setTreeBranchStatus(TTree& t, Bool_t active) ;
00361   virtual void fillTreeBranch(TTree& t) ;
00362 
00363   Double_t _plotMin ;       // Minimum of plot range
00364   Double_t _plotMax ;       // Maximum of plot range
00365   Int_t    _plotBins ;      // Number of plot bins
00366   mutable Double_t _value ; // Cache for current value of object
00367   TString  _unit ;          // Unit for objects value
00368   TString  _label ;         // Plot label for objects value
00369   Bool_t   _forceNumInt ;   // Force numerical integration if flag set
00370 
00371   mutable Float_t _floatValue ; //! Transient cache for floating point values from tree branches 
00372   mutable Int_t   _intValue   ; //! Transient cache for integer values from tree branches 
00373   mutable UChar_t _byteValue  ; //! Transient cache for byte values from tree branches 
00374   mutable Char_t  _sbyteValue ; //! Transient cache for signed byte values from tree branches 
00375   mutable UInt_t  _uintValue  ; //! Transient cache for unsigned integer values from tree branches 
00376 
00377   friend class RooAbsPdf ;
00378   friend class RooAbsAnaConvPdf ;
00379   friend class RooRealProxy ;
00380 
00381   RooNumIntConfig* _specIntegratorConfig ; // Numeric integrator configuration specific for this object
00382 
00383   Bool_t   _treeVar ;       // !do not persist
00384 
00385   static Bool_t _cacheCheck ; // If true, always validate contents of clean which outcome of evaluate()
00386 
00387   friend class RooDataProjBinding ;
00388   friend class RooAbsOptGoodnessOfFit ;
00389   
00390   struct PlotOpt {
00391    PlotOpt() : drawOptions("L"), scaleFactor(1.0), stype(Relative), projData(0), binProjData(kFALSE), projSet(0), precision(1e-3), 
00392                shiftToZero(kFALSE),projDataSet(0),normRangeName(0),rangeLo(0),rangeHi(0),postRangeFracScale(kFALSE),wmode(RooCurve::Extended),
00393                projectionRangeName(0),curveInvisible(kFALSE), curveName(0),addToCurveName(0),addToWgtSelf(1.),addToWgtOther(1.),
00394                numCPU(1),interleave(kTRUE),curveNameSuffix(""), numee(10), eeval(0), doeeval(kFALSE), progress(kFALSE) {} ;
00395    Option_t* drawOptions ;
00396    Double_t scaleFactor ;        
00397    ScaleType stype ;
00398    const RooAbsData* projData ;
00399    Bool_t binProjData ;
00400    const RooArgSet* projSet ;
00401    Double_t precision ;
00402    Bool_t shiftToZero ;
00403    const RooArgSet* projDataSet ;
00404    const char* normRangeName ;
00405    Double_t rangeLo ;
00406    Double_t rangeHi ;
00407    Bool_t postRangeFracScale ;
00408    RooCurve::WingMode wmode ;
00409    const char* projectionRangeName ;
00410    Bool_t curveInvisible ;
00411    const char* curveName ;
00412    const char* addToCurveName ;
00413    Double_t addToWgtSelf ;
00414    Double_t addToWgtOther ;
00415    Int_t    numCPU ;
00416    Bool_t interleave ;
00417    const char* curveNameSuffix ; 
00418    Int_t    numee ;
00419    Double_t eeval ;
00420    Bool_t   doeeval ;
00421    Bool_t progress ;
00422   } ;
00423 
00424   // Plot implementation functions
00425   virtual RooPlot *plotOn(RooPlot* frame, PlotOpt o) const;
00426   virtual RooPlot *plotAsymOn(RooPlot *frame, const RooAbsCategoryLValue& asymCat, PlotOpt o) const;
00427 
00428 
00429 private:
00430 
00431   static ErrorLoggingMode _evalErrorMode ;
00432   static std::map<const RooAbsArg*,std::pair<std::string,std::list<EvalError> > > _evalErrorList ;
00433   static Int_t _evalErrorCount ;
00434 
00435   Bool_t matchArgsByName(const RooArgSet &allArgs, RooArgSet &matchedArgs, const TList &nameList) const;
00436 
00437 protected:
00438 
00439 
00440   friend class RooRealSumPdf ;
00441   friend class RooAddPdf ;
00442   friend class RooAddModel ;
00443   void selectComp(Bool_t flag) { 
00444     // If flag is true, only selected component will be included in evaluates of RooAddPdf components
00445     _selectComp = flag ; 
00446   }
00447   static void globalSelectComp(Bool_t flag) ;
00448   Bool_t _selectComp ;               //! Component selection flag for RooAbsPdf::plotCompOn
00449   static Bool_t _globalSelectComp ;  // Global activation switch for component selection
00450 
00451   mutable RooArgSet* _lastNSet ; //!
00452 
00453 
00454   ClassDef(RooAbsReal,2) // Abstract real-valued variable
00455 };
00456 
00457 #endif

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