Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooExpensiveObjectCache.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id$
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_EXPENSIVE_OBJECT_CACHE
17 #define ROO_EXPENSIVE_OBJECT_CACHE
18 
19 #include "Rtypes.h"
20 #include "RooArgSet.h"
21 #include "TString.h"
22 #include <list>
23 #include <map>
24 
25 class RooExpensiveObjectCache : public TObject {
26 public:
27 
28  RooExpensiveObjectCache() ;
29  RooExpensiveObjectCache(const RooExpensiveObjectCache&) ;
30  virtual ~RooExpensiveObjectCache() ;
31 
32  Bool_t registerObject(const char* ownerName, const char* objectName, TObject& cacheObject, TIterator* paramIter) ;
33  Bool_t registerObject(const char* ownerName, const char* objectName, TObject& cacheObject, const RooArgSet& params) ;
34  const TObject* retrieveObject(const char* name, TClass* tclass, const RooArgSet& params) ;
35 
36  const TObject* getObj(Int_t uniqueID) ;
37  Bool_t clearObj(Int_t uniqueID) ;
38  Bool_t setObj(Int_t uniqueID, TObject* obj) ;
39  void clearAll() ;
40 
41  void importCacheObjects(RooExpensiveObjectCache& other, const char* ownerName, Bool_t verbose=kFALSE) ;
42 
43  static RooExpensiveObjectCache& instance() ;
44 
45  Int_t size() const { return _map.size() ; }
46 
47  void print() const ;
48 
49  class ExpensiveObject {
50  public:
51  ExpensiveObject() { _uid = 0 ; _payload = 0 ; } ;
52  ExpensiveObject(Int_t uid, const char* ownerName, TObject& payload, TIterator* paramIter) ;
53  ExpensiveObject(Int_t uid, const ExpensiveObject& other) ;
54  virtual ~ExpensiveObject() ;
55  Bool_t matches(TClass* tc, const RooArgSet& params) ;
56 
57  Int_t uid() const { return _uid ; }
58  const TObject* payload() const { return _payload ; }
59  TObject* payload() { return _payload ; }
60  void setPayload(TObject* obj) { _payload = obj ; }
61  const char* ownerName() const { return _ownerName.Data() ; }
62 
63  void print() const;
64 
65  protected:
66 
67  Int_t _uid ; // Unique element ID ;
68  TObject* _payload ; // Payload
69  std::map<TString,Double_t> _realRefParams ; // Names and values of real-valued reference parameters
70  std::map<TString,Int_t> _catRefParams ; // Names and values of discrete-valued reference parameters
71  TString _ownerName ; // Name of RooAbsArg object that is associated to cache contents
72 
73  ClassDef(ExpensiveObject,2) ; // Cache element containing expensive object and parameter values for which object is valid
74 } ;
75 
76 
77 protected:
78 
79  Int_t _nextUID ;
80 
81  std::map<TString,ExpensiveObject*> _map ;
82 
83 
84  ClassDef(RooExpensiveObjectCache,2) // Singleton class that serves as session repository for expensive objects
85 };
86 
87 #endif