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 "AliMpSegmentation.h"
30 #include "AliMpDDLStore.h"
31 #include "AliMpManuStore.h"
32 #include "AliMpDataProcessor.h"
33 #include "AliMpDataStreams.h"
34 #include "AliMpDataMap.h"
37 #include "AliCDBManager.h"
38 #include "AliCDBEntry.h"
42 #include <Riostream.h>
48 Bool_t AliMpCDB::fgLoadFromData = kTRUE;
51 // private static methods
54 //______________________________________________________________________________
55 TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath)
57 /// Load CDB entry object with checks
59 AliCDBManager* cdbManager = AliCDBManager::Instance();
60 if ( ! cdbManager->GetDefaultStorage() ) {
61 AliErrorClassStream() << "CDB default storage has not been set." << endl;
65 Int_t run = cdbManager->GetRun();
67 AliErrorClassStream() << "Cannot get run number from CDB manager." << endl;
71 AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, run);
73 AliErrorClassStream() << "Cannot get cdbEntry." << endl;
77 TObject* object = cdbEntry->GetObject();
79 AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
87 //______________________________________________________________________________
88 TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath,
92 /// Load CDB entry from CDB and run specified in arguments
94 AliCDBManager* cdbManager = AliCDBManager::Instance();
95 cdbManager->SetDefaultStorage(cdbpath);
97 AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, runNumber);
99 AliErrorClassStream() << "Cannot get cdbEntry." << endl;
103 TObject* object = cdbEntry->GetObject();
105 AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
113 // public static methods
117 //______________________________________________________________________________
118 Bool_t AliMpCDB::LoadMpSegmentation(Bool_t warn)
120 /// Load the sementation from the mapping data from OCDB,
121 /// if it does not yet exist;
122 /// return false only in case loading from CDB failed
124 if ( AliMpSegmentation::Instance(false) ) {
126 AliWarningClass("Segmentation has been already loaded.");
130 if ( fgLoadFromData ) {
131 AliDebugClassStream(1)
132 << "Loading segmentation from MUON/Calib/MappingData" << endl;
134 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
135 if ( ! cdbEntryObject ) return kFALSE;
137 // Pass the map to the streams and then read segmentation
139 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
140 AliMpDataStreams dataStreams(dataMap);
141 AliMpSegmentation::ReadData(dataStreams);
145 AliDebugClassStream(1)
146 << "Loading segmentation from MUON/Calib/Mapping" << endl;
148 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/Mapping");
149 return cdbEntryObject != 0x0;
153 //______________________________________________________________________________
154 Bool_t AliMpCDB::LoadDDLStore(Bool_t warn)
156 /// Load the DDL store from the mapping data from OCDB,
157 /// if it does not yet exist;
158 /// return false only in case loading from CDB failed
160 if ( AliMpDDLStore::Instance(false) ) {
162 AliWarningClass("DDL Store has been already loaded.");
166 if ( fgLoadFromData ) {
167 AliDebugClassStream(1)
168 << "Loading DDL store from MUON/Calib/MappingData" << endl;
170 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
171 if ( ! cdbEntryObject ) return kFALSE;
173 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
174 AliMpDataStreams dataStreams(dataMap);
175 AliMpDDLStore::ReadData(dataStreams);
179 AliDebugClassStream(1)
180 << "Loading DDL store from MUON/Calib/DDLStore" << endl;
183 LoadMpSegmentation(warn);
186 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
187 return cdbEntryObject != 0x0;
191 //______________________________________________________________________________
192 Bool_t AliMpCDB::LoadManuStore(Bool_t warn)
194 /// Load the DDL store from the mapping data from OCDB,
195 /// if it does not yet exist;
196 /// return false only in case loading from CDB failed
198 if ( AliMpManuStore::Instance(false) ) {
200 AliWarningClass("Manu Store has been already loaded.");
204 if ( fgLoadFromData ) {
205 AliDebugClassStream(1)
206 << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
209 LoadMpSegmentation(warn);
211 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingRunData");
212 if ( ! cdbEntryObject ) return kFALSE;
214 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
215 AliMpDataStreams dataStreams(dataMap);
216 AliMpManuStore::ReadData(dataStreams);
220 AliDebugClassStream(1)
221 << "Loading Manu store from MUON/Calib/ManuStore" << endl;
224 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
225 return cdbEntryObject != 0x0;
228 //______________________________________________________________________________
229 Bool_t AliMpCDB::LoadMpSegmentation2(const char* cdbpath, Int_t runNumber,
232 /// Load the sementation from the CDB if it does not yet exist;
233 /// return false only in case loading from CDB failed.
234 /// In difference from LoadMpSegmentation(), in this method the CDB path
235 /// and run is set directly via arguments.
238 if ( AliMpSegmentation::Instance(false) ) {
240 AliWarningClass("Segmentation has been already loaded.");
244 if ( fgLoadFromData ) {
245 AliDebugClassStream(1)
246 << "Loading segmentation from MUON/Calib/MappingData" << endl;
248 TObject* cdbEntryObject
249 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
250 if ( ! cdbEntryObject ) return kFALSE;
252 // Pass the map to the streams and then read segmentation
254 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
255 AliMpDataStreams dataStreams(dataMap);
256 AliMpSegmentation::ReadData(dataStreams);
260 AliDebugClassStream(1)
261 << "Loading segmentation from MUON/Calib/Mapping" << endl;
263 TObject* cdbEntryObject
264 = GetCDBEntryObject("MUON/Calib/Mapping", cdbpath, runNumber);
265 return cdbEntryObject != 0x0;
269 //______________________________________________________________________________
270 Bool_t AliMpCDB::LoadDDLStore2(const char* cdbpath, Int_t runNumber,
273 /// Load the DDL store from the CDB if it does not yet exist
274 /// return false only in case loading from CDB failed
275 /// In difference from LoadDDLStore(), in this method the CDB path
276 /// and run is set directly via arguments.
278 if ( AliMpDDLStore::Instance(false) ) {
280 AliWarningClass("DDL Store has been already loaded.");
284 if ( fgLoadFromData ) {
285 AliDebugClassStream(1)
286 << "Loading DDL store from MUON/Calib/MappingData" << endl;
288 TObject* cdbEntryObject
289 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
290 if ( ! cdbEntryObject ) return kFALSE;
292 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
293 AliMpDataStreams dataStreams(dataMap);
294 AliMpDDLStore::ReadData(dataStreams);
298 AliDebugClassStream(1)
299 << "Loading DDL store from MUON/Calib/DDLStore" << endl;
302 LoadMpSegmentation2(cdbpath, runNumber, warn);
305 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
306 return cdbEntryObject != 0x0;
310 //______________________________________________________________________________
311 Bool_t AliMpCDB::LoadManuStore2(const char* cdbpath, Int_t runNumber,
314 /// Load the DDL store from the CDB if it does not yet exist
315 /// return false only in case loading from CDB failed
316 /// In difference from LoadDDLStore(), in this method the CDB path
317 /// and run is set directly via arguments.
319 if ( AliMpManuStore::Instance(false) ) {
321 AliWarningClass("Manu Store has been already loaded.");
325 if ( fgLoadFromData ) {
326 AliDebugClassStream(1)
327 << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
330 LoadMpSegmentation2(cdbpath, runNumber, warn);
332 TObject* cdbEntryObject
333 = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
334 if ( ! cdbEntryObject ) return kFALSE;
336 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
337 AliMpDataStreams dataStreams(dataMap);
338 AliMpManuStore::ReadData(dataStreams);
342 AliDebugClassStream(1)
343 << "Loading Manu store from MUON/Calib/ManuStore" << endl;
346 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
347 return cdbEntryObject != 0x0;
351 //______________________________________________________________________________
352 Bool_t AliMpCDB::WriteMpData()
354 /// Write mapping data in OCDB
356 AliCDBManager* cdbManager = AliCDBManager::Instance();
357 if ( ! cdbManager->GetDefaultStorage() )
358 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
360 AliCDBMetaData* cdbData = new AliCDBMetaData();
361 cdbData->SetResponsible("Dimuon Offline project");
362 cdbData->SetComment("MUON mapping");
363 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
364 AliCDBId id("MUON/Calib/MappingData", 0, AliCDBRunRange::Infinity());
366 AliMpDataProcessor mp;
367 AliMpDataMap* map = mp.CreateDataMap("data");
368 return cdbManager->Put(map, id, cdbData);
371 //______________________________________________________________________________
372 Bool_t AliMpCDB::WriteMpRunData()
374 /// Write mapping data in OCDB
376 AliCDBManager* cdbManager = AliCDBManager::Instance();
377 if ( ! cdbManager->GetDefaultStorage() )
378 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
380 AliCDBMetaData* cdbData = new AliCDBMetaData();
381 cdbData->SetResponsible("Dimuon Offline project");
382 cdbData->SetComment("MUON run-dependent mapping");
383 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
384 AliCDBId id("MUON/Calib/MappingRunData", 0, AliCDBRunRange::Infinity());
386 AliMpDataProcessor mp;
387 AliMpDataMap* map = mp.CreateDataMap("data_run");
388 return cdbManager->Put(map, id, cdbData);
391 //______________________________________________________________________________
392 Bool_t AliMpCDB::WriteMpSegmentation(Bool_t readData)
394 /// Write mapping segmentation in OCDB
396 if ( ! readData && ! AliMpSegmentation::Instance() ) return false;
398 AliCDBManager* cdbManager = AliCDBManager::Instance();
399 if ( ! cdbManager->GetDefaultStorage() )
400 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
402 AliCDBMetaData* cdbData = new AliCDBMetaData();
403 cdbData->SetResponsible("Dimuon Offline project");
404 cdbData->SetComment("MUON mapping");
405 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
406 AliCDBId id("MUON/Calib/Mapping", 0, AliCDBRunRange::Infinity());
409 AliMpDataStreams dataStreams;
410 AliMpSegmentation::ReadData(dataStreams, false);
411 AliMpDDLStore::ReadData(dataStreams, false);
414 return cdbManager->Put(AliMpSegmentation::Instance(), id, cdbData);
417 //______________________________________________________________________________
418 Bool_t AliMpCDB::WriteDDLStore(Bool_t readData)
420 /// Write mapping DDL store in OCDB
422 if ( ! readData && ! AliMpDDLStore::Instance() ) return false;
424 AliCDBManager* cdbManager = AliCDBManager::Instance();
425 if ( ! cdbManager->GetDefaultStorage() )
426 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
428 AliCDBMetaData* cdbData = new AliCDBMetaData();
429 cdbData->SetResponsible("Dimuon Offline project");
430 cdbData->SetComment("MUON DDL store");
431 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
432 AliCDBId id("MUON/Calib/DDLStore", 0, AliCDBRunRange::Infinity());
435 AliMpDataStreams dataStreams;
436 AliMpSegmentation::ReadData(dataStreams, false);
437 AliMpDDLStore::ReadData(dataStreams, false);
439 return cdbManager->Put(AliMpDDLStore::Instance(), id, cdbData);
442 //______________________________________________________________________________
443 Bool_t AliMpCDB::WriteManuStore(Bool_t readData)
445 /// Write mapping Manu store in OCDB
447 if ( ! readData && ! AliMpManuStore::Instance() ) return false;
449 AliCDBManager* cdbManager = AliCDBManager::Instance();
450 if ( ! cdbManager->GetDefaultStorage() )
451 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
453 AliCDBMetaData* cdbData = new AliCDBMetaData();
454 cdbData->SetResponsible("Dimuon Offline project");
455 cdbData->SetComment("MUON Manu store");
456 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
457 AliCDBId id("MUON/Calib/ManuStore", 0, AliCDBRunRange::Infinity());
460 AliMpDataStreams dataStreams;
461 AliMpSegmentation::ReadData(dataStreams, false);
462 AliMpManuStore::ReadData(dataStreams, false);
464 return cdbManager->Put(AliMpManuStore::Instance(), id, cdbData);
467 //______________________________________________________________________________
468 Bool_t AliMpCDB::GenerateMpData(const char* cdbpath, Int_t runNumber)
470 /// Generate mapping data ASCII files from OCDB
472 TObject* cdbEntryObject
473 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
474 if ( ! cdbEntryObject ) return kFALSE;
476 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
477 AliMpDataProcessor mp;
478 return mp.GenerateData(dataMap);
481 //______________________________________________________________________________
482 Bool_t AliMpCDB::GenerateMpRunData(const char* cdbpath, Int_t runNumber)
484 /// Generate mapping data ASCII files from OCDB
486 TObject* cdbEntryObject
487 = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
488 if ( ! cdbEntryObject ) return kFALSE;
490 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
491 AliMpDataProcessor mp;
492 return mp.GenerateData(dataMap);