1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 // Category: management
20 //-----------------------------------------------------------------------------
22 // -----------------------
23 // Manager class for mapping CDB IO
24 // Author: Ivana Hrivnacova, IPN Orsay
25 //-----------------------------------------------------------------------------
29 #include "AliCDBEntry.h"
30 #include "AliCDBManager.h"
32 #include "AliMpDDLStore.h"
33 #include "AliMpDEStore.h"
34 #include "AliMpDataMap.h"
35 #include "AliMpDataProcessor.h"
36 #include "AliMpDataStreams.h"
37 #include "AliMpManuStore.h"
38 #include "AliMpSegmentation.h"
39 #include <Riostream.h>
47 Bool_t AliMpCDB::fgLoadFromData = kTRUE;
50 // private static methods
53 //______________________________________________________________________________
54 TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath)
56 /// Load CDB entry object with checks
58 AliCDBManager* cdbManager = AliCDBManager::Instance();
60 Int_t run = cdbManager->GetRun();
62 AliErrorClassStream() << "Cannot get run number from CDB manager." << endl;
66 AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, run);
68 AliErrorClassStream() << "Cannot get cdbEntry." << endl;
72 TObject* object = cdbEntry->GetObject();
74 AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
82 //______________________________________________________________________________
83 TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath,
87 /// Load CDB entry from CDB and run specified in arguments
89 AliCDBManager* cdbManager = AliCDBManager::Instance();
90 cdbManager->SetDefaultStorage(cdbpath);
92 AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, runNumber);
94 AliErrorClassStream() << "Cannot get cdbEntry." << endl;
98 TObject* object = cdbEntry->GetObject();
100 AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
108 // public static methods
112 //______________________________________________________________________________
113 Bool_t AliMpCDB::LoadMpSegmentation(Bool_t warn)
115 /// Load the sementation from the mapping data from OCDB,
116 /// if it does not yet exist;
117 /// return false only in case loading from CDB failed
119 if ( AliMpSegmentation::Instance(false) ) {
121 AliWarningClass("Segmentation has been already loaded.");
125 if ( fgLoadFromData ) {
126 AliDebugClassStream(1)
127 << "Loading segmentation from MUON/Calib/MappingData" << endl;
129 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
130 if ( ! cdbEntryObject ) return kFALSE;
132 // Pass the map to the streams and then read segmentation
134 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
135 AliMpDataStreams dataStreams(dataMap);
136 AliMpSegmentation::ReadData(dataStreams);
140 AliDebugClassStream(1)
141 << "Loading segmentation from MUON/Calib/Mapping" << endl;
143 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/Mapping");
144 return cdbEntryObject != 0x0;
148 //______________________________________________________________________________
149 Bool_t AliMpCDB::LoadDDLStore(Bool_t warn)
151 /// Load the DDL store from the mapping data from OCDB,
152 /// if it does not yet exist;
153 /// return false only in case loading from CDB failed
155 if ( AliMpDDLStore::Instance(false) ) {
157 AliWarningClass("DDL Store has been already loaded.");
161 if ( fgLoadFromData ) {
162 AliDebugClassStream(1)
163 << "Loading DDL store from MUON/Calib/MappingData" << endl;
165 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
166 if ( ! cdbEntryObject ) return kFALSE;
168 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
169 AliMpDataStreams dataStreams(dataMap);
170 AliMpDDLStore::ReadData(dataStreams);
174 AliDebugClassStream(1)
175 << "Loading DDL store from MUON/Calib/DDLStore" << endl;
178 LoadMpSegmentation(warn);
181 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
182 return cdbEntryObject != 0x0;
186 //______________________________________________________________________________
187 Bool_t AliMpCDB::LoadManuStore(Bool_t warn)
189 /// Load the DDL store from the mapping data from OCDB,
190 /// if it does not yet exist;
191 /// return false only in case loading from CDB failed
193 if ( AliMpManuStore::Instance(false) ) {
195 AliWarningClass("Manu Store has been already loaded.");
199 if ( fgLoadFromData ) {
200 AliDebugClassStream(1)
201 << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
204 LoadMpSegmentation(warn);
206 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingRunData");
207 if ( ! cdbEntryObject ) return kFALSE;
209 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
210 AliMpDataStreams dataStreams(dataMap);
211 AliMpManuStore::ReadData(dataStreams);
215 AliDebugClassStream(1)
216 << "Loading Manu store from MUON/Calib/ManuStore" << endl;
219 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
220 return cdbEntryObject != 0x0;
223 //______________________________________________________________________________
224 Bool_t AliMpCDB::LoadMpSegmentation2(const char* cdbpath, Int_t runNumber,
227 /// Load the sementation from the CDB if it does not yet exist;
228 /// return false only in case loading from CDB failed.
229 /// In difference from LoadMpSegmentation(), in this method the CDB path
230 /// and run is set directly via arguments.
233 if ( AliMpSegmentation::Instance(false) ) {
235 AliWarningClass("Segmentation has been already loaded.");
239 if ( fgLoadFromData ) {
240 AliDebugClassStream(1)
241 << "Loading segmentation from MUON/Calib/MappingData" << endl;
243 TObject* cdbEntryObject
244 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
245 if ( ! cdbEntryObject ) return kFALSE;
247 // Pass the map to the streams and then read segmentation
249 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
250 AliMpDataStreams dataStreams(dataMap);
251 AliMpSegmentation::ReadData(dataStreams);
255 AliDebugClassStream(1)
256 << "Loading segmentation from MUON/Calib/Mapping" << endl;
258 TObject* cdbEntryObject
259 = GetCDBEntryObject("MUON/Calib/Mapping", cdbpath, runNumber);
260 return cdbEntryObject != 0x0;
264 //______________________________________________________________________________
265 Bool_t AliMpCDB::LoadDDLStore2(const char* cdbpath, Int_t runNumber,
268 /// Load the DDL store from the CDB if it does not yet exist
269 /// return false only in case loading from CDB failed
270 /// In difference from LoadDDLStore(), in this method the CDB path
271 /// and run is set directly via arguments.
273 if ( AliMpDDLStore::Instance(false) ) {
275 AliWarningClass("DDL Store has been already loaded.");
279 if ( fgLoadFromData ) {
280 AliDebugClassStream(1)
281 << "Loading DDL store from MUON/Calib/MappingData" << endl;
283 TObject* cdbEntryObject
284 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
285 if ( ! cdbEntryObject ) return kFALSE;
287 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
288 AliMpDataStreams dataStreams(dataMap);
289 AliMpDDLStore::ReadData(dataStreams);
293 AliDebugClassStream(1)
294 << "Loading DDL store from MUON/Calib/DDLStore" << endl;
297 LoadMpSegmentation2(cdbpath, runNumber, warn);
300 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
301 return cdbEntryObject != 0x0;
305 //______________________________________________________________________________
306 Bool_t AliMpCDB::LoadManuStore2(const char* cdbpath, Int_t runNumber,
309 /// Load the DDL store from the CDB if it does not yet exist
310 /// return false only in case loading from CDB failed
311 /// In difference from LoadDDLStore(), in this method the CDB path
312 /// and run is set directly via arguments.
314 if ( AliMpManuStore::Instance(false) ) {
316 AliWarningClass("Manu Store has been already loaded.");
320 if ( fgLoadFromData ) {
321 AliDebugClassStream(1)
322 << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
325 LoadMpSegmentation2(cdbpath, runNumber, warn);
327 TObject* cdbEntryObject
328 = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
329 if ( ! cdbEntryObject ) return kFALSE;
331 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
332 AliMpDataStreams dataStreams(dataMap);
333 AliMpManuStore::ReadData(dataStreams);
337 AliDebugClassStream(1)
338 << "Loading Manu store from MUON/Calib/ManuStore" << endl;
341 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
342 return cdbEntryObject != 0x0;
346 //______________________________________________________________________________
347 Bool_t AliMpCDB::WriteMpData()
349 /// Write mapping data in OCDB
351 AliCDBManager* cdbManager = AliCDBManager::Instance();
352 if ( ! cdbManager->GetDefaultStorage() )
353 cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
355 AliCDBMetaData* cdbData = new AliCDBMetaData();
356 cdbData->SetResponsible("Dimuon Offline project");
357 cdbData->SetComment("MUON mapping");
358 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
359 AliCDBId id("MUON/Calib/MappingData", 0, AliCDBRunRange::Infinity());
361 AliMpDataProcessor mp;
362 AliMpDataMap* map = mp.CreateDataMap("data");
363 return cdbManager->Put(map, id, cdbData);
366 //______________________________________________________________________________
367 Bool_t AliMpCDB::WriteMpRunData()
369 /// Write mapping data in OCDB
371 AliCDBManager* cdbManager = AliCDBManager::Instance();
372 if ( ! cdbManager->GetDefaultStorage() )
373 cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
375 AliCDBMetaData* cdbData = new AliCDBMetaData();
376 cdbData->SetResponsible("Dimuon Offline project");
377 cdbData->SetComment("MUON run-dependent mapping");
378 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
379 AliCDBId id("MUON/Calib/MappingRunData", 0, AliCDBRunRange::Infinity());
381 AliMpDataProcessor mp;
382 AliMpDataMap* map = mp.CreateDataMap("data_run");
383 return cdbManager->Put(map, id, cdbData);
386 //______________________________________________________________________________
387 Bool_t AliMpCDB::WriteMpSegmentation(Bool_t readData)
389 /// Write mapping segmentation in OCDB
391 if ( ! readData && ! AliMpSegmentation::Instance() ) return false;
393 AliCDBManager* cdbManager = AliCDBManager::Instance();
394 if ( ! cdbManager->GetDefaultStorage() )
395 cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
397 AliCDBMetaData* cdbData = new AliCDBMetaData();
398 cdbData->SetResponsible("Dimuon Offline project");
399 cdbData->SetComment("MUON mapping");
400 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
401 AliCDBId id("MUON/Calib/Mapping", 0, AliCDBRunRange::Infinity());
404 AliMpDataStreams dataStreams;
405 AliMpSegmentation::ReadData(dataStreams, false);
406 AliMpDDLStore::ReadData(dataStreams, false);
409 return cdbManager->Put(AliMpSegmentation::Instance(), id, cdbData);
412 //______________________________________________________________________________
413 Bool_t AliMpCDB::WriteDDLStore(Bool_t readData)
415 /// Write mapping DDL store in OCDB
417 if ( ! readData && ! AliMpDDLStore::Instance() ) return false;
419 AliCDBManager* cdbManager = AliCDBManager::Instance();
420 if ( ! cdbManager->GetDefaultStorage() )
421 cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
423 AliCDBMetaData* cdbData = new AliCDBMetaData();
424 cdbData->SetResponsible("Dimuon Offline project");
425 cdbData->SetComment("MUON DDL store");
426 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
427 AliCDBId id("MUON/Calib/DDLStore", 0, AliCDBRunRange::Infinity());
430 AliMpDataStreams dataStreams;
431 AliMpSegmentation::ReadData(dataStreams, false);
432 AliMpDDLStore::ReadData(dataStreams, false);
434 return cdbManager->Put(AliMpDDLStore::Instance(), id, cdbData);
437 //______________________________________________________________________________
438 Bool_t AliMpCDB::WriteManuStore(Bool_t readData)
440 /// Write mapping Manu store in OCDB
442 if ( ! readData && ! AliMpManuStore::Instance() ) return false;
444 AliCDBManager* cdbManager = AliCDBManager::Instance();
445 if ( ! cdbManager->GetDefaultStorage() )
446 cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
448 AliCDBMetaData* cdbData = new AliCDBMetaData();
449 cdbData->SetResponsible("Dimuon Offline project");
450 cdbData->SetComment("MUON Manu store");
451 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
452 AliCDBId id("MUON/Calib/ManuStore", 0, AliCDBRunRange::Infinity());
455 AliMpDataStreams dataStreams;
456 AliMpSegmentation::ReadData(dataStreams, false);
457 AliMpManuStore::ReadData(dataStreams, false);
459 return cdbManager->Put(AliMpManuStore::Instance(), id, cdbData);
462 //______________________________________________________________________________
463 Bool_t AliMpCDB::GenerateMpData(const char* cdbpath, Int_t runNumber)
465 /// Generate mapping data ASCII files from OCDB
467 TObject* cdbEntryObject
468 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
469 if ( ! cdbEntryObject ) return kFALSE;
471 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
472 AliMpDataProcessor mp;
473 return mp.GenerateData(dataMap);
476 //______________________________________________________________________________
477 Bool_t AliMpCDB::GenerateMpRunData(const char* cdbpath, Int_t runNumber)
479 /// Generate mapping data ASCII files from OCDB
481 TObject* cdbEntryObject
482 = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
483 if ( ! cdbEntryObject ) return kFALSE;
485 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
486 AliMpDataProcessor mp;
487 return mp.GenerateData(dataMap);
490 //______________________________________________________________________________
491 void AliMpCDB::UnloadAll()
493 /// Unload all the mapping from the memory
494 delete AliMpDDLStore::Instance(false);
495 delete AliMpSegmentation::Instance(false);
496 delete AliMpDEStore::Instance(false);