]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/CDB/AliCDBManager.h
Possibility to set the CDB manager in snapshot mode, that is, after looking in the...
[u/mrichter/AliRoot.git] / STEER / CDB / AliCDBManager.h
1 #ifndef ALI_CDB_MANAGER_H
2 #define ALI_CDB_MANAGER_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /////////////////////////////////////////////////////////////////////
8 //                                                                 //
9 //  class AliCDBManager                                            //
10 //                                                                 //
11 /////////////////////////////////////////////////////////////////////
12
13 #include <TObject.h>
14 #include <TList.h>
15 #include <TMap.h>
16 #include <TSystem.h>
17 #include <TFile.h>
18
19 class AliCDBEntry;
20 class AliCDBId;
21 class AliCDBPath;
22 class AliCDBRunRange;
23 class AliCDBMetaData;
24 class AliCDBStorage;
25 class AliCDBStorageFactory;
26 class AliCDBParam;
27
28 class AliCDBManager: public TObject {
29
30  public:
31         enum DataType {kCondition=0, kReference, kPrivate};
32
33         void RegisterFactory(AliCDBStorageFactory* factory);
34
35         Bool_t HasStorage(const char* dbString) const;
36
37         AliCDBParam* CreateParameter(const char* dbString) const;
38         AliCDBParam* GetCondParam() const {return fCondParam;}
39         AliCDBParam* GetRefParam() const {return fRefParam;}
40         static const char* GetDataTypeName(DataType type);
41
42         AliCDBStorage* GetStorage(const char* dbString);
43         AliCDBStorage* GetStorage(const AliCDBParam* param);
44
45         TList* GetActiveStorages();
46
47         const TMap* GetStorageMap() const {return fStorageMap;}
48         const TList* GetRetrievedIds() const {return fIds;}
49
50         void SetDefaultStorage(const char* dbString);
51         void SetDefaultStorage(const AliCDBParam* param);
52         void SetDefaultStorage(AliCDBStorage *storage);
53         void SetDefaultStorage(const char* runType, const char* simType);
54         void SetDefaultStorageFromRun(Int_t run);
55
56         Bool_t IsDefaultStorageSet() const {return fDefaultStorage != 0;}
57         AliCDBStorage* GetDefaultStorage() const {return fDefaultStorage;}
58         void UnsetDefaultStorage();
59
60         void SetSpecificStorage(const char* calibType, const char* dbString);
61         void SetSpecificStorage(const char* calibType, const AliCDBParam* param);
62
63         AliCDBStorage* GetSpecificStorage(const char* calibType);
64
65         void SetDrain(const char* dbString);
66         void SetDrain(const AliCDBParam* param);
67         void SetDrain(AliCDBStorage *storage);
68
69         Bool_t IsDrainSet() const {return fDrainStorage != 0;}
70
71         Bool_t Drain(AliCDBEntry* entry);
72
73         void UnsetDrain(){fDrainStorage = 0x0;}
74
75         AliCDBEntry* Get(const AliCDBId& query);
76         AliCDBEntry* Get(const AliCDBPath& path, Int_t runNumber=-1,
77                                 Int_t version = -1, Int_t subVersion = -1);
78         AliCDBEntry* Get(const AliCDBPath& path, const AliCDBRunRange& runRange,
79                                  Int_t version = -1, Int_t subVersion = -1);
80         AliCDBEntry* GetEntryFromSnapshot(const char* path);
81
82         const char* GetURI(const char* path);                            
83                                  
84         AliCDBId* GetId(const AliCDBId& query);
85         AliCDBId* GetId(const AliCDBPath& path, Int_t runNumber=-1,
86                                 Int_t version = -1, Int_t subVersion = -1);
87         AliCDBId* GetId(const AliCDBPath& path, const AliCDBRunRange& runRange,
88                                  Int_t version = -1, Int_t subVersion = -1);
89
90         TList* GetAll(const AliCDBId& query);
91         TList* GetAll(const AliCDBPath& path, Int_t runNumber=-1,
92                                 Int_t version = -1, Int_t subVersion = -1);
93         TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange,
94                                  Int_t version = -1, Int_t subVersion = -1); 
95
96         Bool_t Put(TObject* object, const AliCDBId& id,
97                         AliCDBMetaData* metaData, const DataType type=kPrivate);
98         Bool_t Put(AliCDBEntry* entry, DataType type=kPrivate);
99
100         void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;}
101         Bool_t GetCacheFlag() const {return fCache;}
102         
103         ULong_t SetLock(Bool_t lockFlag=kTRUE, ULong_t key=0);
104         Bool_t GetLock() const {return fLock;}
105
106         void SetRaw(Bool_t rawFlag){fRaw=rawFlag;}
107         Bool_t GetRaw() const {return fRaw;}
108
109         void SetRun(Int_t run);
110         Int_t GetRun() const {return fRun;}
111
112         void DestroyActiveStorages();
113         void DestroyActiveStorage(AliCDBStorage* storage);
114
115         void QueryCDB();
116
117         void Print(Option_t* option="") const;
118
119         static void Destroy();
120         ~AliCDBManager();
121
122         void ClearCache();
123         void UnloadFromCache(const char* path);
124         const TMap* GetEntryCache() const {return &fEntryCache;}
125
126         Bool_t IsShortLived(const char* path);
127
128         static AliCDBManager* Instance(TMap *entryCache = NULL, Int_t run = -1);
129
130         void Init();
131         void InitFromCache(TMap *entryCache, Int_t run);
132         Bool_t InitFromSnapshot(const char* snapshotFileName, Bool_t overwrite=kTRUE);
133         Bool_t SetSnapshotMode(const char* snapshotFileName="OCDB.root");
134         void UnsetSnapshotMode() {fSnapshotMode=kFALSE;}
135         void DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys);
136   
137 protected:
138
139         static TString fgkCondUri;      // URI of the Conditions data base folder
140         static TString fgkRefUri;       // URI of the Reference data base folder
141         static TString fgkMCIdealStorage;       // URI of the MC-Ideal Conditions data base folder form MC data
142         static TString fgkMCFullStorage;        // URI of the MC-Full Conditions data base folder form MC data
143         static TString fgkMCResidualStorage;    // URI of the MC-Residual Conditions data base folder form MC data
144         static TString fgkOCDBFolderXMLfile;    // alien path of the XML file for OCDB folder <--> Run range correspondance
145
146         AliCDBManager() ; 
147         AliCDBManager(const AliCDBManager & source);
148         AliCDBManager & operator=(const AliCDBManager & source);
149
150         static AliCDBManager* fgInstance; // AliCDBManager instance
151         
152         AliCDBStorage* GetActiveStorage(const AliCDBParam* param);
153         void PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage);
154
155         void CacheEntry(const char* path, AliCDBEntry* entry);
156
157         AliCDBParam* SelectSpecificStorage(const TString& path);
158         
159
160 //      void Init();
161         void InitShortLived();
162 //      void InitFromCache(TMap *entryCache, Int_t run);
163
164
165         TList fFactories;               //! list of registered storage factories
166         TMap fActiveStorages;           //! list of active storages
167         TMap fSpecificStorages;         //! list of detector-specific storages
168         TMap fEntryCache;               //! cache of the retrieved objects
169
170         TList* fIds;            //! List of the retrieved object Id's (to be streamed to file)
171         TMap* fStorageMap;      //! list of storages (to be streamed to file)
172         TList* fShortLived;     //! List of short lived objects
173
174         AliCDBStorage *fDefaultStorage; //! pointer to default storage
175         AliCDBStorage *fDrainStorage;   //! pointer to drain storage
176
177         AliCDBParam* fCondParam;        // Conditions data storage parameters
178         AliCDBParam* fRefParam;         // Reference data storage parameters
179
180         Int_t fRun;                     //! The run number
181         Bool_t fCache;                  //! The cache flag
182         Bool_t fLock;   //! Lock flag, if ON default storage and run number cannot be reset
183
184         Bool_t fSnapshotMode;           //! flag saying if we are in snapshot mode
185         //TMap* fSnapshotCache;         //! pointer to the cache of objects in the snapshot
186         //TList* fSnapshotIdsList;        //! pointer to the list of the object Id's in the snapshot
187         TFile *fSnapshotFile;
188
189         Bool_t fRaw;   // flag to say whether we are in the raw case
190         Int_t fStartRunLHCPeriod; // 1st run of the LHC period set
191         Int_t fEndRunLHCPeriod;   // last run of the LHC period set
192         TString fLHCPeriod;       // LHC period alien folder
193
194 private:
195    ULong_t fKey;  //! Key for locking/unlocking
196
197
198         ClassDef(AliCDBManager, 0);
199 };
200
201
202 /////////////////////////////////////////////////////////////////////
203 //                                                                 //
204 //  class AliCDBStorageFactory                                     //
205 //                                                                 //
206 /////////////////////////////////////////////////////////////////////
207
208 class AliCDBParam;
209 class AliCDBStorageFactory: public TObject {
210         friend class AliCDBManager;
211         
212 public:
213         virtual ~AliCDBStorageFactory(){}
214         virtual Bool_t Validate(const char* dbString) = 0;
215         virtual AliCDBParam* CreateParameter(const char* dbString) = 0; 
216
217 protected:
218         virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;
219
220         ClassDef(AliCDBStorageFactory, 0);
221 };
222
223 /////////////////////////////////////////////////////////////////////
224 //                                                                 //
225 //  class AliCDBParam                                              //
226 //                                                                 //
227 /////////////////////////////////////////////////////////////////////
228
229 class AliCDBParam: public TObject {
230
231 public:
232
233         AliCDBParam();
234         virtual ~AliCDBParam();
235
236         const TString& GetType() const {return fType;};
237         const TString& GetURI() const {return fURI;};
238
239         virtual AliCDBParam* CloneParam() const = 0;
240
241 protected:
242
243         void SetType(const char* type) {fType = type;};
244         void SetURI(const char* uri) {fURI = uri;};
245
246 private:
247
248         TString fType; //! CDB type
249         TString fURI;  //! CDB URI
250
251         ClassDef(AliCDBParam, 0);
252 };
253
254 #endif