RooAbsArg.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Project: RooFit                                                           *
00003  * Package: RooFitCore                                                       *
00004  *    File: $Id: RooAbsArg.h,v 1.93 2007/07/16 21:04:28 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_ARG
00017 #define ROO_ABS_ARG
00018 
00019 #include <assert.h>
00020 #include "TNamed.h"
00021 #include "THashList.h"
00022 #include "RooPrintable.h"
00023 #include "RooRefCountList.h"
00024 #include "RooAbsCache.h"
00025 #include <map>
00026 #include <set>
00027 #include <deque>
00028 
00029 class TTree ;
00030 class RooArgSet ;
00031 class RooAbsCollection ;
00032 class RooTreeData ;
00033 class RooTreeDataStore ;
00034 class RooAbsData ;
00035 class RooAbsDataStore ;
00036 class RooAbsProxy ;
00037 class RooArgProxy ;
00038 class RooSetProxy ;
00039 class RooListProxy ;
00040 class RooExpensiveObjectCache ;
00041 class RooWorkspace ;
00042 /* class TGraphStruct ; */
00043 
00044 class RooAbsArg : public TNamed, public RooPrintable {
00045 public:
00046 
00047   // Constructors, cloning and assignment
00048   RooAbsArg() ;
00049   virtual ~RooAbsArg();
00050   RooAbsArg(const char *name, const char *title);
00051   RooAbsArg(const RooAbsArg& other, const char* name=0) ;
00052   virtual TObject* clone(const char* newname) const = 0 ;
00053   virtual TObject* Clone(const char* newname=0) const { 
00054     return clone(newname?newname:GetName()) ; 
00055   }
00056   virtual RooAbsArg* cloneTree(const char* newname=0) const ;
00057 
00058   // Accessors to client-server relation information 
00059   virtual Bool_t isDerived() const { 
00060     // Does value or shape of this arg depend on any other arg?
00061     return (_serverList.GetSize()>0 || _proxyList.GetSize()>0)?kTRUE:kFALSE; 
00062   }
00063   Bool_t isCloneOf(const RooAbsArg& other) const ; 
00064   Bool_t dependsOnValue(const RooAbsCollection& serverList, const RooAbsArg* ignoreArg=0) const { 
00065     // Does this arg depend on the value of any of of the values in serverList?
00066     return dependsOn(serverList,ignoreArg,kTRUE) ; 
00067   }
00068   Bool_t dependsOnValue(const RooAbsArg& server, const RooAbsArg* ignoreArg=0) const { 
00069     // Does this arg depend on the value of server?
00070     return dependsOn(server,ignoreArg,kTRUE) ; 
00071   }
00072   Bool_t dependsOn(const RooAbsCollection& serverList, const RooAbsArg* ignoreArg=0, Bool_t valueOnly=kFALSE) const ;
00073   Bool_t dependsOn(const RooAbsArg& server, const RooAbsArg* ignoreArg=0, Bool_t valueOnly=kFALSE) const ;
00074   Bool_t overlaps(const RooAbsArg& testArg, Bool_t valueOnly=kFALSE) const ;
00075   Bool_t hasClients() const { return _clientList.GetSize()>0 ? kTRUE : kFALSE ; }
00076   inline TIterator* clientIterator() const { 
00077     // Return iterator over all client RooAbsArgs
00078     return _clientList.MakeIterator() ; 
00079   }
00080   inline TIterator* valueClientIterator() const { 
00081     // Return iterator over all value client RooAbsArgs
00082     return _clientListValue.MakeIterator() ; 
00083   }
00084   inline TIterator* shapeClientIterator() const { 
00085     // Return iterator over all shape client RooAbsArgs
00086     return _clientListShape.MakeIterator() ; 
00087   }
00088   inline TIterator* serverIterator() const { 
00089     // Return iterator over all server RooAbsArgs
00090     return _serverList.MakeIterator() ; 
00091   }
00092 
00093   inline RooAbsArg* findServer(const char *name) const { 
00094     // Return server of this arg with given name. Returns null if not found
00095     return (RooAbsArg*)_serverList.FindObject(name); 
00096   }
00097   inline RooAbsArg* findServer(const RooAbsArg& arg) const { 
00098     // Return server of this arg with name of given input arg. Returns null if not found
00099     return (RooAbsArg*)_serverList.FindObject(&arg); 
00100   }
00101   inline RooAbsArg* findServer(Int_t index) const { 
00102     // Return i-th server from server list
00103     return (RooAbsArg*)_serverList.At(index); 
00104   }
00105   inline Bool_t isValueServer(const RooAbsArg& arg) const { 
00106     // If true, arg is a value server of self
00107     return _clientListValue.FindObject(&arg)?kTRUE:kFALSE ; 
00108   }
00109   inline Bool_t isValueServer(const char* name) const { 
00110     // If true, we have a server with given name
00111     return _clientListValue.FindObject(name)?kTRUE:kFALSE ; 
00112   }
00113   inline Bool_t isShapeServer(const RooAbsArg& arg) const { 
00114     // If true arg is a shape server of self
00115     return _clientListShape.FindObject(&arg)?kTRUE:kFALSE ; 
00116   }
00117   inline Bool_t isShapeServer(const char* name) const { 
00118     // If true, we have a shape server with given name
00119     return _clientListShape.FindObject(name)?kTRUE:kFALSE ; 
00120   }
00121   void leafNodeServerList(RooAbsCollection* list, const RooAbsArg* arg=0, Bool_t recurseNonDerived=kFALSE) const ;
00122   void branchNodeServerList(RooAbsCollection* list, const RooAbsArg* arg=0, Bool_t recurseNonDerived=kFALSE) const ;
00123   void treeNodeServerList(RooAbsCollection* list, const RooAbsArg* arg=0, 
00124                           Bool_t doBranch=kTRUE, Bool_t doLeaf=kTRUE, 
00125                           Bool_t valueOnly=kFALSE, Bool_t recurseNonDerived=kFALSE) const ;
00126   
00127 
00128   inline virtual Bool_t isFundamental() const { 
00129     // Is this object a fundamental type that can be added to a dataset?
00130     // Fundamental-type subclasses override this method to return kTRUE.
00131     // Note that this test is subtlely different from the dynamic isDerived()
00132     // test, e.g. a constant is not derived but is also not fundamental.
00133     return kFALSE; 
00134   }
00135 
00136   // Create a fundamental-type object that stores our type of value. The
00137   // created object will have a valid value, but not necessarily the same
00138   // as our value. The caller is responsible for deleting the returned object.
00139   virtual RooAbsArg *createFundamental(const char* newname=0) const = 0;
00140 
00141   inline virtual Bool_t isLValue() const { 
00142     // Is this argument an l-value, ie, can it appear on the left-hand side
00143     // of an assignment expression? LValues are also special since they can
00144     // potentially be analytically integrated and generated.
00145     return kFALSE; 
00146   }
00147 
00148   void addParameters(RooArgSet& params, const RooArgSet* nset=0, Bool_t stripDisconnected=kTRUE)  const ; 
00149 
00150   // Parameter & observable interpretation of servers
00151   friend class RooProdPdf ;
00152   friend class RooAddPdf ;
00153   friend class RooAddPdfOrig ;
00154   RooArgSet* getVariables(Bool_t stripDisconnected=kTRUE) const ;
00155   RooArgSet* getParameters(const RooAbsData* data, Bool_t stripDisconnected=kTRUE) const ;
00156   RooArgSet* getParameters(const RooAbsData& data, Bool_t stripDisconnected=kTRUE) const { 
00157     // Return the parameters of this p.d.f when used in conjuction with dataset 'data'
00158     return getParameters(&data,stripDisconnected) ; 
00159   }
00160   RooArgSet* getParameters(const RooArgSet& set, Bool_t stripDisconnected=kTRUE) const { 
00161     // Return the parameters of the p.d.f given the provided set of observables
00162     return getParameters(&set,stripDisconnected) ; 
00163   }
00164   virtual RooArgSet* getParameters(const RooArgSet* depList, Bool_t stripDisconnected=kTRUE) const ;
00165   RooArgSet* getObservables(const RooArgSet& set, Bool_t valueOnly=kTRUE) const { 
00166     // Return the observables of _this_ pdf given a set of observables
00167     return getObservables(&set,valueOnly) ; 
00168   }
00169   RooArgSet* getObservables(const RooAbsData* data) const ;
00170   RooArgSet* getObservables(const RooAbsData& data) const { 
00171     // Return the observables of _this_ pdf given the observables defined by 'data'
00172     return getObservables(&data) ; 
00173   }
00174   virtual RooArgSet* getObservables(const RooArgSet* depList, Bool_t valueOnly=kTRUE) const ;
00175   Bool_t observableOverlaps(const RooAbsData* dset, const RooAbsArg& testArg) const ;
00176   Bool_t observableOverlaps(const RooArgSet* depList, const RooAbsArg& testArg) const ;
00177   virtual Bool_t checkObservables(const RooArgSet* nset) const ;
00178   Bool_t recursiveCheckObservables(const RooArgSet* nset) const ;
00179   RooArgSet* getComponents() const ;    
00180 
00181   // --- Obsolete functions for backward compatibility
00182   inline RooArgSet* getDependents(const RooArgSet& set) const { return getObservables(set) ; }
00183   inline RooArgSet* getDependents(const RooAbsData* set) const { return getObservables(set) ; }
00184   inline RooArgSet* getDependents(const RooArgSet* depList) const { return getObservables(depList) ; }
00185   inline Bool_t dependentOverlaps(const RooAbsData* dset, const RooAbsArg& testArg) const { return observableOverlaps(dset,testArg) ; }
00186   inline Bool_t dependentOverlaps(const RooArgSet* depList, const RooAbsArg& testArg) const { return observableOverlaps(depList, testArg) ; }
00187   inline Bool_t checkDependents(const RooArgSet* nset) const { return checkObservables(nset) ; }
00188   inline Bool_t recursiveCheckDependents(const RooArgSet* nset) const { return recursiveCheckObservables(nset) ; }
00189   // --- End obsolete functions for backward compatibility
00190 
00191   void attachDataSet(const RooAbsData &set);
00192   void attachDataStore(const RooAbsDataStore &set);
00193 
00194   // I/O streaming interface (machine readable)
00195   virtual Bool_t readFromStream(istream& is, Bool_t compact, Bool_t verbose=kFALSE) = 0 ;
00196   virtual void writeToStream(ostream& os, Bool_t compact) const = 0 ;
00197 
00198   inline virtual void Print(Option_t *options= 0) const {
00199     // Printing interface (human readable)
00200     printStream(defaultPrintStream(),defaultPrintContents(options),defaultPrintStyle(options));
00201   }
00202 
00203   virtual void printName(ostream& os) const ;
00204   virtual void printTitle(ostream& os) const ;
00205   virtual void printClassName(ostream& os) const ;
00206   virtual void printAddress(ostream& os) const ;
00207   virtual void printArgs(ostream& os) const ;
00208   virtual void printMetaArgs(ostream& /*os*/) const {} ;
00209   virtual void printMultiline(ostream& os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const;
00210   virtual void printTree(ostream& os, TString indent="") const ;
00211 
00212   virtual Int_t defaultPrintContents(Option_t* opt) const ;
00213 
00214   // Accessors to attributes
00215   void setAttribute(const Text_t* name, Bool_t value=kTRUE) ;
00216   Bool_t getAttribute(const Text_t* name) const ;
00217   inline const std::set<std::string>& attributes() const { 
00218     // Returns set of names of boolean attributes defined
00219     return _boolAttrib ; 
00220   }
00221 
00222   void setStringAttribute(const Text_t* key, const Text_t* value) ;
00223   const Text_t* getStringAttribute(const Text_t* key) const ;
00224   inline const std::map<std::string,std::string>& stringAttributes() const { 
00225     // Returns map<string,string> with all string attributes defined
00226     return _stringAttrib ; 
00227   }
00228 
00229   // Accessors to transient attributes
00230   void setTransientAttribute(const Text_t* name, Bool_t value=kTRUE) ;
00231   Bool_t getTransientAttribute(const Text_t* name) const ;
00232   inline const std::set<std::string>& transientAttributes() const { 
00233     // Return set of transient boolean attributes 
00234     return _boolAttribTransient ; 
00235   }
00236 
00237   inline Bool_t isConstant() const { 
00238     // Returns true if 'Constant' attribute is set
00239     return getAttribute("Constant") ; 
00240   }
00241   RooLinkedList getCloningAncestors() const ;
00242 
00243   // Sorting
00244   Int_t Compare(const TObject* other) const ;
00245   virtual Bool_t IsSortable() const { 
00246     // Object is sortable in ROOT container class
00247     return kTRUE ; 
00248   }
00249 
00250   //Debug hooks
00251   static void verboseDirty(Bool_t flag) ;
00252   static void copyList(TList& dest, const TList& source) ;
00253   void printDirty(Bool_t depth=kTRUE) const ;
00254 
00255   static void setDirtyInhibit(Bool_t flag) ;
00256   static void setACleanADirty(Bool_t flag) ;
00257 
00258   virtual Bool_t operator==(const RooAbsArg& other) = 0 ;
00259 
00260   // Range management
00261   virtual Bool_t inRange(const char*) const { 
00262     // Is value in range (dummy interface always returns true)
00263     return kTRUE ; 
00264   }
00265   virtual Bool_t hasRange(const char*) const { 
00266     // Has this argument a defined range (dummy interface always returns flase)
00267     return kFALSE ; 
00268   }
00269 
00270 
00271   enum ConstOpCode { Activate=0, DeActivate=1, ConfigChange=2, ValueChange=3 } ;
00272   
00273 
00274   friend class RooMinuit ;
00275 
00276   // Cache mode optimization (tracks changes & do lazy evaluation vs evaluate always)
00277   virtual void optimizeCacheMode(const RooArgSet& observables) ;
00278   virtual void optimizeCacheMode(const RooArgSet& observables, RooArgSet& optNodes, RooLinkedList& processedNodes) ;
00279   
00280 
00281   // Find constant terms in expression 
00282   Bool_t findConstantNodes(const RooArgSet& observables, RooArgSet& cacheList) ;
00283   Bool_t findConstantNodes(const RooArgSet& observables, RooArgSet& cacheList, RooLinkedList& processedNodes) ;
00284 
00285 
00286   // constant term optimization
00287   virtual void constOptimizeTestStatistic(ConstOpCode opcode) ;
00288 
00289   void graphVizTree(const char* fileName, const char* delimiter="\n", bool useTitle=false, bool useLatex=false) ;
00290   void graphVizTree(ostream& os, const char* delimiter="\n", bool useTitle=false, bool useLatex=false) ;
00291 
00292 /*   TGraphStruct* graph(Bool_t useFactoryTag=kFALSE, Double_t textSize=0.03) ; */
00293 
00294   void printComponentTree(const char* indent="",const char* namePat=0, Int_t nLevel=999) ;
00295   void printCompactTree(const char* indent="",const char* fileName=0, const char* namePat=0, RooAbsArg* client=0) ;
00296   void printCompactTree(ostream& os, const char* indent="", const char* namePat=0, RooAbsArg* client=0) ;
00297   virtual void printCompactTreeHook(ostream& os, const char *ind="") ;
00298 
00299   // Dirty state accessor
00300   inline Bool_t isShapeDirty() const { 
00301     // Return true is shape has been invalidated by server value change
00302     return isDerived()?_shapeDirty:kFALSE ; 
00303   } 
00304   inline Bool_t isValueDirty() const { 
00305     // Returns true of value has been invalidated by server value change
00306     if (inhibitDirty()) return kTRUE ;
00307     switch(_operMode) {
00308     case AClean: return flipAClean() ;
00309     case ADirty: return kTRUE ;
00310     case Auto: return (isDerived()?_valueDirty:kFALSE) ;
00311     }
00312     return kTRUE ; // we should never get here
00313   }
00314 
00315   // Cache management
00316   void registerCache(RooAbsCache& cache) ;
00317   void unRegisterCache(RooAbsCache& cache) ;
00318   Int_t numCaches() const ;
00319   RooAbsCache* getCache(Int_t index) const ;
00320 
00321   enum OperMode { Auto=0, AClean=1, ADirty=2 } ;
00322   inline OperMode operMode() const { return _operMode==AClean ? (flipAClean() ? ADirty : AClean ) : _operMode  ; }
00323   void setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE) ; 
00324 
00325   static UInt_t crc32(const char* data) ;
00326   
00327   Bool_t addOwnedComponents(const RooArgSet& comps) ;
00328   const RooArgSet* ownedComponents() const { return _ownedComponents ; }
00329   
00330   void setProhibitServerRedirect(Bool_t flag) { _prohibitServerRedirect = flag ; }
00331 
00332   protected:
00333 
00334   void graphVizAddConnections(std::set<std::pair<RooAbsArg*,RooAbsArg*> >&) ;
00335 
00336   friend class RooExtendPdf ;
00337   friend class RooRealIntegral ;
00338   friend class RooAbsReal ;
00339   friend class RooProjectedPdf ;
00340   //friend class RooSimCloneTool ;
00341 
00342   virtual void operModeHook() {} ;
00343 
00344   virtual void optimizeDirtyHook(const RooArgSet* /*obs*/) {} ;
00345 
00346   virtual Bool_t isValid() const ;
00347 
00348   virtual void getParametersHook(const RooArgSet* /*nset*/, RooArgSet* /*list*/, Bool_t /*stripDisconnected*/) const {} ;
00349   virtual void getObservablesHook(const RooArgSet* /*nset*/, RooArgSet* /*list*/) const {} ;
00350 
00351   // Dirty state modifiers
00352  public:
00353   inline void setValueDirty() const { setValueDirty(0) ; }
00354   inline void setShapeDirty() const { setShapeDirty(0) ; } 
00355   inline void clearValueDirty() const { 
00356     _valueDirty=kFALSE ; 
00357   }
00358   inline void clearShapeDirty() const { 
00359     _shapeDirty=kFALSE ; 
00360   }
00361   
00362   const char* aggregateCacheUniqueSuffix() const ;
00363   virtual const char* cacheUniqueSuffix() const { return 0 ; }
00364 
00365  protected:
00366 
00367   // Client-Server relatation and Proxy management 
00368   friend class RooArgSet ;
00369   friend class RooAbsCollection ;
00370   friend class RooCustomizer ;
00371   friend class RooWorkspace ;
00372   RooRefCountList _serverList       ; // list of server objects
00373   RooRefCountList _clientList       ; // list of client objects
00374   RooRefCountList _clientListShape  ; // subset of clients that requested shape dirty flag propagation
00375   RooRefCountList _clientListValue  ; // subset of clients that requested value dirty flag propagation
00376   TList _proxyList        ; // list of proxies
00377   std::deque<RooAbsCache*> _cacheList ; // list of caches
00378   TIterator* _clientShapeIter ; //! Iterator over _clientListShape 
00379   TIterator* _clientValueIter ; //! Iterator over _clientListValue 
00380 
00381   // Server redirection interface
00382  public:
00383   Bool_t redirectServers(const RooAbsCollection& newServerList, Bool_t mustReplaceAll=kFALSE, Bool_t nameChange=kFALSE, Bool_t isRecursionStep=kFALSE) ;
00384   Bool_t recursiveRedirectServers(const RooAbsCollection& newServerList, Bool_t mustReplaceAll=kFALSE, Bool_t nameChange=kFALSE, Bool_t recurseInNewSet=kTRUE) ;
00385   virtual Bool_t redirectServersHook(const RooAbsCollection& /*newServerList*/, Bool_t /*mustReplaceAll*/, Bool_t /*nameChange*/, Bool_t /*isRecursive*/) { return kFALSE ; } ;
00386   virtual void serverNameChangeHook(const RooAbsArg* /*oldServer*/, const RooAbsArg* /*newServer*/) { } ;
00387 
00388   void addServer(RooAbsArg& server, Bool_t valueProp=kTRUE, Bool_t shapeProp=kFALSE) ;
00389   void addServerList(RooAbsCollection& serverList, Bool_t valueProp=kTRUE, Bool_t shapeProp=kFALSE) ;
00390   void replaceServer(RooAbsArg& oldServer, RooAbsArg& newServer, Bool_t valueProp, Bool_t shapeProp) ;
00391   void changeServer(RooAbsArg& server, Bool_t valueProp, Bool_t shapeProp) ;
00392   void removeServer(RooAbsArg& server, Bool_t force=kFALSE) ;
00393   RooAbsArg *findNewServer(const RooAbsCollection &newSet, Bool_t nameChange) const;
00394 
00395   RooExpensiveObjectCache& expensiveObjectCache() const ;
00396   void setExpensiveObjectCache(RooExpensiveObjectCache& cache) { _eocache = &cache ; }  
00397 
00398   virtual Bool_t importWorkspaceHook(RooWorkspace&) { return kFALSE ; } ;
00399 
00400  protected:
00401 
00402   // Proxy management
00403   friend class RooAddModel ;
00404   friend class RooArgProxy ;
00405   friend class RooSetProxy ;
00406   friend class RooListProxy ;
00407   friend class RooObjectFactory ;
00408   void registerProxy(RooArgProxy& proxy) ;
00409   void registerProxy(RooSetProxy& proxy) ;
00410   void registerProxy(RooListProxy& proxy) ;
00411   void unRegisterProxy(RooArgProxy& proxy) ;
00412   void unRegisterProxy(RooSetProxy& proxy) ;
00413   void unRegisterProxy(RooListProxy& proxy) ;
00414   RooAbsProxy* getProxy(Int_t index) const ;
00415   void setProxyNormSet(const RooArgSet* nset) ;
00416   Int_t numProxies() const ;
00417 
00418   // Attribute list
00419   std::set<std::string> _boolAttrib ; // Boolean attributes
00420   std::map<std::string,std::string> _stringAttrib ; // String attributes
00421   std::set<std::string> _boolAttribTransient ; //! Transient boolean attributes (not copied in ctor)
00422 
00423   void printAttribList(ostream& os) const;
00424 
00425   // Hooks for RooTreeData interface
00426   friend class RooCompositeDataStore ;
00427   friend class RooTreeDataStore ;
00428   friend class RooTreeData ;
00429   friend class RooDataSet ;
00430   friend class RooRealMPFE ;
00431   friend class RooHistPdf ;
00432   virtual void syncCache(const RooArgSet* nset=0) = 0 ;
00433   virtual void copyCache(const RooAbsArg* source, Bool_t valueOnly=kFALSE) = 0 ;
00434   virtual void attachToTree(TTree& t, Int_t bufSize=32000) = 0 ;
00435   virtual void setTreeBranchStatus(TTree& t, Bool_t active) = 0 ;
00436   virtual void fillTreeBranch(TTree& t) = 0 ;
00437   TString cleanBranchName() const ;
00438 
00439   // Global   
00440   friend ostream& operator<<(ostream& os, const RooAbsArg &arg);  
00441   friend istream& operator>>(istream& is, RooAbsArg &arg) ;
00442 
00443   // Debug stuff
00444   static Bool_t _verboseDirty ; // Static flag controlling verbose messaging for dirty state changes
00445   static Bool_t _inhibitDirty ; // Static flag controlling global inhibit of dirty state propagation
00446   static Bool_t _flipAClean ; // Static flag controlling flipping status of all AClean nodes to ADirty ;
00447   Bool_t _deleteWatch ; //! Delete watch flag 
00448   static Bool_t flipAClean() ;
00449 
00450   static Bool_t inhibitDirty() ;
00451   
00452   // Value and Shape dirty state bits
00453   void setValueDirty(const RooAbsArg* source) const ; 
00454   void setShapeDirty(const RooAbsArg* source) const ; 
00455   mutable Bool_t _valueDirty ;  // Flag set if value needs recalculating because input values modified
00456   mutable Bool_t _shapeDirty ;  // Flag set if value needs recalculating because input shapes modified
00457 
00458   mutable OperMode _operMode ; // Dirty state propagation mode
00459 
00460   // Owned components
00461   RooArgSet* _ownedComponents ; //! Set of owned component
00462 
00463   mutable Bool_t _prohibitServerRedirect ; //! Prohibit server redirects -- Debugging tool
00464 
00465   mutable RooExpensiveObjectCache* _eocache ; // Pointer to global cache manager for any expensive components created by this object
00466   
00467   ClassDef(RooAbsArg,4) // Abstract variable
00468 };
00469 
00470 ostream& operator<<(ostream& os, const RooAbsArg &arg);  
00471 istream& operator>>(istream& is, RooAbsArg &arg) ;
00472 
00473 #endif

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