]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/CDB/AliCDBManager.h
porting from the master branch
[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, Bool_t forceCaching=kFALSE);
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         TList* GetAll(const AliCDBId& query);
85         TList* GetAll(const AliCDBPath& path, Int_t runNumber=-1,
86                                 Int_t version = -1, Int_t subVersion = -1);
87         TList* GetAll(const AliCDBPath& path, const AliCDBRunRange& runRange,
88                                  Int_t version = -1, Int_t subVersion = -1); 
89
90         Bool_t Put(TObject* object, const AliCDBId& id, AliCDBMetaData* metaData,
91                         const char* mirrors="", DataType type=kPrivate);
92         Bool_t Put(AliCDBEntry* entry, const char* mirrors="", DataType type=kPrivate);
93
94         void SetCacheFlag(Bool_t cacheFlag) {fCache=cacheFlag;}
95         Bool_t GetCacheFlag() const {return fCache;}
96         
97         ULong64_t SetLock(Bool_t lockFlag=kTRUE, ULong64_t key=0);
98         Bool_t GetLock() const {return fLock;}
99
100         void SetRaw(Bool_t rawFlag){fRaw=rawFlag;}
101         Bool_t GetRaw() const {return fRaw;}
102
103         void SetRun(Int_t run);
104         Int_t GetRun() const {return fRun;}
105
106         void SetMirrorSEs(const char* mirrors);
107         const char* GetMirrorSEs() const;
108
109         void DestroyActiveStorages();
110         void DestroyActiveStorage(AliCDBStorage* storage);
111
112         void QueryCDB();
113
114         void Print(Option_t* option="") const;
115
116         static void Destroy();
117         ~AliCDBManager();
118
119         void ClearCache();
120         void UnloadFromCache(const char* path);
121         const TMap* GetEntryCache() const {return &fEntryCache;}
122
123         Bool_t IsShortLived(const char* path);
124
125         static AliCDBManager* Instance(TMap *entryCache = NULL, Int_t run = -1);
126
127         void Init();
128         void InitFromCache(TMap *entryCache, Int_t run);
129         Bool_t InitFromSnapshot(const char* snapshotFileName, Bool_t overwrite=kTRUE);
130         Bool_t SetSnapshotMode(const char* snapshotFileName="OCDB.root");
131         void UnsetSnapshotMode() {fSnapshotMode=kFALSE;}
132         void DumpToSnapshotFile(const char* snapshotFileName, Bool_t singleKeys);
133   
134         Int_t GetStartRunLHCPeriod();
135         Int_t GetEndRunLHCPeriod();
136         TString GetLHCPeriod();
137
138         Bool_t DiffObjects(const char *cdbFile1, const char *cdbFile2) const;
139
140 protected:
141
142         static TString fgkCondUri;      // URI of the Conditions data base folder
143         static TString fgkRefUri;       // URI of the Reference data base folder
144         static TString fgkMCIdealStorage;       // URI of the MC-Ideal Conditions data base folder form MC data
145         static TString fgkMCFullStorage;        // URI of the MC-Full Conditions data base folder form MC data
146         static TString fgkMCResidualStorage;    // URI of the MC-Residual Conditions data base folder form MC data
147         static TString fgkOCDBFolderXMLfile;    // alien path of the XML file for OCDB folder <--> Run range correspondance
148
149         AliCDBManager() ; 
150         AliCDBManager(const AliCDBManager & source);
151         AliCDBManager & operator=(const AliCDBManager & source);
152
153         static AliCDBManager* fgInstance; // AliCDBManager instance
154         
155         AliCDBStorage* GetActiveStorage(const AliCDBParam* param);
156         void PutActiveStorage(AliCDBParam* param, AliCDBStorage* storage);
157
158         void CacheEntry(const char* path, AliCDBEntry* entry);
159
160         AliCDBParam* SelectSpecificStorage(const TString& path);
161                                  
162         AliCDBId* GetId(const AliCDBId& query);
163         AliCDBId* GetId(const AliCDBPath& path, Int_t runNumber=-1,
164                                 Int_t version = -1, Int_t subVersion = -1);
165         AliCDBId* GetId(const AliCDBPath& path, const AliCDBRunRange& runRange,
166                                  Int_t version = -1, Int_t subVersion = -1);
167         
168
169 //      void Init();
170         void InitShortLived();
171 //      void InitFromCache(TMap *entryCache, Int_t run);
172
173
174         TList fFactories;               //! list of registered storage factories
175         TMap fActiveStorages;           //! list of active storages
176         TMap fSpecificStorages;         //! list of detector-specific storages
177         TMap fEntryCache;               //! cache of the retrieved objects
178
179         TList* fIds;            //! List of the retrieved object Id's (to be streamed to file)
180         TMap* fStorageMap;      //! list of storages (to be streamed to file)
181         TList* fShortLived;     //! List of short lived objects
182
183         AliCDBStorage *fDefaultStorage; //! pointer to default storage
184         AliCDBStorage *fDrainStorage;   //! pointer to drain storage
185
186         AliCDBParam* fCondParam;        // Conditions data storage parameters
187         AliCDBParam* fRefParam;         // Reference data storage parameters
188
189         Int_t fRun;                     //! The run number
190         Bool_t fCache;                  //! The cache flag
191         Bool_t fLock;   //! Lock flag, if ON default storage and run number cannot be reset
192
193         Bool_t fSnapshotMode;           //! flag saying if we are in snapshot mode
194         TFile *fSnapshotFile;
195
196         Bool_t fRaw;   // flag to say whether we are in the raw case
197         Int_t fStartRunLHCPeriod; // 1st run of the LHC period set
198         Int_t fEndRunLHCPeriod;   // last run of the LHC period set
199         TString fLHCPeriod;       // LHC period alien folder
200
201 private:
202         ULong64_t fKey;  //! Key for locking/unlocking
203
204
205         ClassDef(AliCDBManager, 0);
206 };
207
208
209 /////////////////////////////////////////////////////////////////////
210 //                                                                 //
211 //  class AliCDBStorageFactory                                     //
212 //                                                                 //
213 /////////////////////////////////////////////////////////////////////
214
215 class AliCDBParam;
216 class AliCDBStorageFactory: public TObject {
217         friend class AliCDBManager;
218         
219 public:
220         virtual ~AliCDBStorageFactory(){}
221         virtual Bool_t Validate(const char* dbString) = 0;
222         virtual AliCDBParam* CreateParameter(const char* dbString) = 0; 
223
224 protected:
225         virtual AliCDBStorage* Create(const AliCDBParam* param) = 0;
226
227         ClassDef(AliCDBStorageFactory, 0);
228 };
229
230 /////////////////////////////////////////////////////////////////////
231 //                                                                 //
232 //  class AliCDBParam                                              //
233 //                                                                 //
234 /////////////////////////////////////////////////////////////////////
235
236 class AliCDBParam: public TObject {
237
238 public:
239
240         AliCDBParam();
241         virtual ~AliCDBParam();
242
243         const TString& GetType() const {return fType;};
244         const TString& GetURI() const {return fURI;};
245
246         virtual AliCDBParam* CloneParam() const = 0;
247
248 protected:
249
250         void SetType(const char* type) {fType = type;};
251         void SetURI(const char* uri) {fURI = uri;};
252
253 private:
254
255         TString fType; //! CDB type
256         TString fURI;  //! CDB URI
257
258         ClassDef(AliCDBParam, 0);
259 };
260
261 #endif