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();
61 Int_t run = cdbManager->GetRun();
63 AliErrorClassStream() << "Cannot get run number from CDB manager." << endl;
67 AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, run);
69 AliErrorClassStream() << "Cannot get cdbEntry." << endl;
73 TObject* object = cdbEntry->GetObject();
75 AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
83 //______________________________________________________________________________
84 TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath,
88 /// Load CDB entry from CDB and run specified in arguments
90 AliCDBManager* cdbManager = AliCDBManager::Instance();
91 cdbManager->SetDefaultStorage(cdbpath);
93 AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, runNumber);
95 AliErrorClassStream() << "Cannot get cdbEntry." << endl;
99 TObject* object = cdbEntry->GetObject();
101 AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
109 // public static methods
113 //______________________________________________________________________________
114 Bool_t AliMpCDB::LoadMpSegmentation(Bool_t warn)
116 /// Load the sementation from the mapping data from OCDB,
117 /// if it does not yet exist;
118 /// return false only in case loading from CDB failed
120 if ( AliMpSegmentation::Instance(false) ) {
122 AliWarningClass("Segmentation has been already loaded.");
126 if ( fgLoadFromData ) {
127 AliDebugClassStream(1)
128 << "Loading segmentation from MUON/Calib/MappingData" << endl;
130 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
131 if ( ! cdbEntryObject ) return kFALSE;
133 // Pass the map to the streams and then read segmentation
135 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
136 AliMpDataStreams dataStreams(dataMap);
137 AliMpSegmentation::ReadData(dataStreams);
141 AliDebugClassStream(1)
142 << "Loading segmentation from MUON/Calib/Mapping" << endl;
144 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/Mapping");
145 return cdbEntryObject != 0x0;
149 //______________________________________________________________________________
150 Bool_t AliMpCDB::LoadDDLStore(Bool_t warn)
152 /// Load the DDL store from the mapping data from OCDB,
153 /// if it does not yet exist;
154 /// return false only in case loading from CDB failed
156 if ( AliMpDDLStore::Instance(false) ) {
158 AliWarningClass("DDL Store has been already loaded.");
162 if ( fgLoadFromData ) {
163 AliDebugClassStream(1)
164 << "Loading DDL store from MUON/Calib/MappingData" << endl;
166 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
167 if ( ! cdbEntryObject ) return kFALSE;
169 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
170 AliMpDataStreams dataStreams(dataMap);
171 AliMpDDLStore::ReadData(dataStreams);
175 AliDebugClassStream(1)
176 << "Loading DDL store from MUON/Calib/DDLStore" << endl;
179 LoadMpSegmentation(warn);
182 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
183 return cdbEntryObject != 0x0;
187 //______________________________________________________________________________
188 Bool_t AliMpCDB::LoadManuStore(Bool_t warn)
190 /// Load the DDL store from the mapping data from OCDB,
191 /// if it does not yet exist;
192 /// return false only in case loading from CDB failed
194 if ( AliMpManuStore::Instance(false) ) {
196 AliWarningClass("Manu Store has been already loaded.");
200 if ( fgLoadFromData ) {
201 AliDebugClassStream(1)
202 << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
205 LoadMpSegmentation(warn);
207 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingRunData");
208 if ( ! cdbEntryObject ) return kFALSE;
210 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
211 AliMpDataStreams dataStreams(dataMap);
212 AliMpManuStore::ReadData(dataStreams);
216 AliDebugClassStream(1)
217 << "Loading Manu store from MUON/Calib/ManuStore" << endl;
220 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
221 return cdbEntryObject != 0x0;
224 //______________________________________________________________________________
225 Bool_t AliMpCDB::LoadMpSegmentation2(const char* cdbpath, Int_t runNumber,
228 /// Load the sementation from the CDB if it does not yet exist;
229 /// return false only in case loading from CDB failed.
230 /// In difference from LoadMpSegmentation(), in this method the CDB path
231 /// and run is set directly via arguments.
234 if ( AliMpSegmentation::Instance(false) ) {
236 AliWarningClass("Segmentation has been already loaded.");
240 if ( fgLoadFromData ) {
241 AliDebugClassStream(1)
242 << "Loading segmentation from MUON/Calib/MappingData" << endl;
244 TObject* cdbEntryObject
245 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
246 if ( ! cdbEntryObject ) return kFALSE;
248 // Pass the map to the streams and then read segmentation
250 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
251 AliMpDataStreams dataStreams(dataMap);
252 AliMpSegmentation::ReadData(dataStreams);
256 AliDebugClassStream(1)
257 << "Loading segmentation from MUON/Calib/Mapping" << endl;
259 TObject* cdbEntryObject
260 = GetCDBEntryObject("MUON/Calib/Mapping", cdbpath, runNumber);
261 return cdbEntryObject != 0x0;
265 //______________________________________________________________________________
266 Bool_t AliMpCDB::LoadDDLStore2(const char* cdbpath, Int_t runNumber,
269 /// Load the DDL store from the CDB if it does not yet exist
270 /// return false only in case loading from CDB failed
271 /// In difference from LoadDDLStore(), in this method the CDB path
272 /// and run is set directly via arguments.
274 if ( AliMpDDLStore::Instance(false) ) {
276 AliWarningClass("DDL Store has been already loaded.");
280 if ( fgLoadFromData ) {
281 AliDebugClassStream(1)
282 << "Loading DDL store from MUON/Calib/MappingData" << endl;
284 TObject* cdbEntryObject
285 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
286 if ( ! cdbEntryObject ) return kFALSE;
288 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
289 AliMpDataStreams dataStreams(dataMap);
290 AliMpDDLStore::ReadData(dataStreams);
294 AliDebugClassStream(1)
295 << "Loading DDL store from MUON/Calib/DDLStore" << endl;
298 LoadMpSegmentation2(cdbpath, runNumber, warn);
301 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
302 return cdbEntryObject != 0x0;
306 //______________________________________________________________________________
307 Bool_t AliMpCDB::LoadManuStore2(const char* cdbpath, Int_t runNumber,
310 /// Load the DDL store from the CDB if it does not yet exist
311 /// return false only in case loading from CDB failed
312 /// In difference from LoadDDLStore(), in this method the CDB path
313 /// and run is set directly via arguments.
315 if ( AliMpManuStore::Instance(false) ) {
317 AliWarningClass("Manu Store has been already loaded.");
321 if ( fgLoadFromData ) {
322 AliDebugClassStream(1)
323 << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
326 LoadMpSegmentation2(cdbpath, runNumber, warn);
328 TObject* cdbEntryObject
329 = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
330 if ( ! cdbEntryObject ) return kFALSE;
332 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
333 AliMpDataStreams dataStreams(dataMap);
334 AliMpManuStore::ReadData(dataStreams);
338 AliDebugClassStream(1)
339 << "Loading Manu store from MUON/Calib/ManuStore" << endl;
342 TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
343 return cdbEntryObject != 0x0;
347 //______________________________________________________________________________
348 Bool_t AliMpCDB::WriteMpData()
350 /// Write mapping data in OCDB
352 AliCDBManager* cdbManager = AliCDBManager::Instance();
353 if ( ! cdbManager->GetDefaultStorage() )
354 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
356 AliCDBMetaData* cdbData = new AliCDBMetaData();
357 cdbData->SetResponsible("Dimuon Offline project");
358 cdbData->SetComment("MUON mapping");
359 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
360 AliCDBId id("MUON/Calib/MappingData", 0, AliCDBRunRange::Infinity());
362 AliMpDataProcessor mp;
363 AliMpDataMap* map = mp.CreateDataMap("data");
364 return cdbManager->Put(map, id, cdbData);
367 //______________________________________________________________________________
368 Bool_t AliMpCDB::WriteMpRunData()
370 /// Write mapping data in OCDB
372 AliCDBManager* cdbManager = AliCDBManager::Instance();
373 if ( ! cdbManager->GetDefaultStorage() )
374 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
376 AliCDBMetaData* cdbData = new AliCDBMetaData();
377 cdbData->SetResponsible("Dimuon Offline project");
378 cdbData->SetComment("MUON run-dependent mapping");
379 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
380 AliCDBId id("MUON/Calib/MappingRunData", 0, AliCDBRunRange::Infinity());
382 AliMpDataProcessor mp;
383 AliMpDataMap* map = mp.CreateDataMap("data_run");
384 return cdbManager->Put(map, id, cdbData);
387 //______________________________________________________________________________
388 Bool_t AliMpCDB::WriteMpSegmentation(Bool_t readData)
390 /// Write mapping segmentation in OCDB
392 if ( ! readData && ! AliMpSegmentation::Instance() ) return false;
394 AliCDBManager* cdbManager = AliCDBManager::Instance();
395 if ( ! cdbManager->GetDefaultStorage() )
396 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
398 AliCDBMetaData* cdbData = new AliCDBMetaData();
399 cdbData->SetResponsible("Dimuon Offline project");
400 cdbData->SetComment("MUON mapping");
401 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
402 AliCDBId id("MUON/Calib/Mapping", 0, AliCDBRunRange::Infinity());
405 AliMpDataStreams dataStreams;
406 AliMpSegmentation::ReadData(dataStreams, false);
407 AliMpDDLStore::ReadData(dataStreams, false);
410 return cdbManager->Put(AliMpSegmentation::Instance(), id, cdbData);
413 //______________________________________________________________________________
414 Bool_t AliMpCDB::WriteDDLStore(Bool_t readData)
416 /// Write mapping DDL store in OCDB
418 if ( ! readData && ! AliMpDDLStore::Instance() ) return false;
420 AliCDBManager* cdbManager = AliCDBManager::Instance();
421 if ( ! cdbManager->GetDefaultStorage() )
422 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
424 AliCDBMetaData* cdbData = new AliCDBMetaData();
425 cdbData->SetResponsible("Dimuon Offline project");
426 cdbData->SetComment("MUON DDL store");
427 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
428 AliCDBId id("MUON/Calib/DDLStore", 0, AliCDBRunRange::Infinity());
431 AliMpDataStreams dataStreams;
432 AliMpSegmentation::ReadData(dataStreams, false);
433 AliMpDDLStore::ReadData(dataStreams, false);
435 return cdbManager->Put(AliMpDDLStore::Instance(), id, cdbData);
438 //______________________________________________________________________________
439 Bool_t AliMpCDB::WriteManuStore(Bool_t readData)
441 /// Write mapping Manu store in OCDB
443 if ( ! readData && ! AliMpManuStore::Instance() ) return false;
445 AliCDBManager* cdbManager = AliCDBManager::Instance();
446 if ( ! cdbManager->GetDefaultStorage() )
447 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
449 AliCDBMetaData* cdbData = new AliCDBMetaData();
450 cdbData->SetResponsible("Dimuon Offline project");
451 cdbData->SetComment("MUON Manu store");
452 cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
453 AliCDBId id("MUON/Calib/ManuStore", 0, AliCDBRunRange::Infinity());
456 AliMpDataStreams dataStreams;
457 AliMpSegmentation::ReadData(dataStreams, false);
458 AliMpManuStore::ReadData(dataStreams, false);
460 return cdbManager->Put(AliMpManuStore::Instance(), id, cdbData);
463 //______________________________________________________________________________
464 Bool_t AliMpCDB::GenerateMpData(const char* cdbpath, Int_t runNumber)
466 /// Generate mapping data ASCII files from OCDB
468 TObject* cdbEntryObject
469 = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
470 if ( ! cdbEntryObject ) return kFALSE;
472 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
473 AliMpDataProcessor mp;
474 return mp.GenerateData(dataMap);
477 //______________________________________________________________________________
478 Bool_t AliMpCDB::GenerateMpRunData(const char* cdbpath, Int_t runNumber)
480 /// Generate mapping data ASCII files from OCDB
482 TObject* cdbEntryObject
483 = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
484 if ( ! cdbEntryObject ) return kFALSE;
486 AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
487 AliMpDataProcessor mp;
488 return mp.GenerateData(dataMap);