#include "AliMpCDB.h"
-#include "AliMpSegmentation.h"
-#include "AliMpDDLStore.h"
-
-#include "AliLog.h"
-#include "AliCDBManager.h"
#include "AliCDBEntry.h"
-
-#include <TSystem.h>
-#include <TClass.h>
+#include "AliCDBManager.h"
+#include "AliLog.h"
+#include "AliMpDDLStore.h"
+#include "AliMpDEStore.h"
+#include "AliMpDataMap.h"
+#include "AliMpDataProcessor.h"
+#include "AliMpDataStreams.h"
+#include "AliMpManuStore.h"
+#include "AliMpSegmentation.h"
#include <Riostream.h>
+#include <TClass.h>
+#include <TSystem.h>
/// \cond CLASSIMP
ClassImp(AliMpCDB)
/// \endcond
+Bool_t AliMpCDB::fgLoadFromData = kTRUE;
+
+//
+// private static methods
+//
+
+//______________________________________________________________________________
+TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath)
+{
+/// Load CDB entry object with checks
+
+ AliCDBManager* cdbManager = AliCDBManager::Instance();
+
+ Int_t run = cdbManager->GetRun();
+ if ( run < 0 ) {
+ AliErrorClassStream() << "Cannot get run number from CDB manager." << endl;
+ return 0;
+ }
+
+ AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, run);
+ if ( ! cdbEntry ) {
+ AliErrorClassStream() << "Cannot get cdbEntry." << endl;
+ return 0;
+ }
+
+ TObject* object = cdbEntry->GetObject();
+ if ( ! object ) {
+ AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
+ return 0;
+ }
+
+ return object;
+}
+
+
+//______________________________________________________________________________
+TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath,
+ const char* cdbpath,
+ Int_t runNumber )
+{
+/// Load CDB entry from CDB and run specified in arguments
+
+ AliCDBManager* cdbManager = AliCDBManager::Instance();
+ cdbManager->SetDefaultStorage(cdbpath);
+
+ AliCDBEntry* cdbEntry = cdbManager->Get(dataPath, runNumber);
+ if ( ! cdbEntry ) {
+ AliErrorClassStream() << "Cannot get cdbEntry." << endl;
+ return 0;
+ }
+
+ TObject* object = cdbEntry->GetObject();
+ if ( ! object ) {
+ AliErrorClassStream() << "Cannot get object from cdbEntry." << endl;
+ return 0;
+ }
+
+ return object;
+}
+
//
-// static methods
+// public static methods
//
+
//______________________________________________________________________________
Bool_t AliMpCDB::LoadMpSegmentation(Bool_t warn)
{
-/// Load the sementation from the CDB if it does not yet exist;
+/// Load the sementation from the mapping data from OCDB,
+/// if it does not yet exist;
/// return false only in case loading from CDB failed
- AliDebugClass(1,"");
-
if ( AliMpSegmentation::Instance(false) ) {
if ( warn )
AliWarningClass("Segmentation has been already loaded.");
return true;
}
- AliCDBManager* cdbManager = AliCDBManager::Instance();
- if ( ! cdbManager->GetDefaultStorage() ) {
- AliErrorClassStream() << "CDB default storage has not been set." << endl;
- return kFALSE;
- }
-
- Int_t run = cdbManager->GetRun();
- if ( run < 0 ) {
- AliErrorClassStream() << "Cannot get run number from CDB manager." << endl;
- return kFALSE;
- }
-
- AliCDBEntry* cdbEntry = cdbManager->Get("MUON/Calib/Mapping", run);
+ if ( fgLoadFromData ) {
+ AliDebugClassStream(1)
+ << "Loading segmentation from MUON/Calib/MappingData" << endl;
- if ( cdbEntry )
- {
- return (AliMpSegmentation*)cdbEntry->GetObject() != 0x0;
- }
- else
- {
- return kFALSE;
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
+ if ( ! cdbEntryObject ) return kFALSE;
+
+ // Pass the map to the streams and then read segmentation
+ // from data map
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpSegmentation::ReadData(dataStreams);
+ return kTRUE;
}
+ else {
+ AliDebugClassStream(1)
+ << "Loading segmentation from MUON/Calib/Mapping" << endl;
+
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/Mapping");
+ return cdbEntryObject != 0x0;
+ }
}
//______________________________________________________________________________
Bool_t AliMpCDB::LoadDDLStore(Bool_t warn)
{
-/// Load the DDL store from the CDB if it does not yet exist
+/// Load the DDL store from the mapping data from OCDB,
+/// if it does not yet exist;
/// return false only in case loading from CDB failed
- AliDebugClass(1,"");
-
if ( AliMpDDLStore::Instance(false) ) {
if ( warn )
AliWarningClass("DDL Store has been already loaded.");
return true;
}
- // Load segmentation
- //
- LoadMpSegmentation(warn);
+ if ( fgLoadFromData ) {
+ AliDebugClassStream(1)
+ << "Loading DDL store from MUON/Calib/MappingData" << endl;
- // Load DDL store
- //
- AliCDBManager* cdbManager = AliCDBManager::Instance();
- if ( ! cdbManager->GetDefaultStorage() ) {
- AliErrorClassStream() << "CDB default storage has not been set." << endl;
- return kFALSE;
- }
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
+ if ( ! cdbEntryObject ) return kFALSE;
+
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpDDLStore::ReadData(dataStreams);
+ return kTRUE;
+ }
+ else {
+ AliDebugClassStream(1)
+ << "Loading DDL store from MUON/Calib/DDLStore" << endl;
+
+ // Load segmentation
+ LoadMpSegmentation(warn);
+
+ // Load DDL store
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
+ return cdbEntryObject != 0x0;
+ }
+}
- Int_t run = cdbManager->GetRun();
- if ( run < 0 ) {
- AliErrorClassStream() << "Cannot get run number from CDB manager." << endl;
- return kFALSE;
+//______________________________________________________________________________
+Bool_t AliMpCDB::LoadAll2(const char* cdbpath, Int_t runNumber, Bool_t warn)
+{
+ /// Load everything in one shot
+ return
+ LoadDDLStore2(cdbpath,runNumber,warn) &&
+ LoadManuStore2(cdbpath,runNumber,warn);
+}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::LoadAll(Bool_t warn)
+{
+ /// Load everything in one shot
+ return LoadDDLStore(warn) && LoadManuStore(warn);
+}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::LoadManuStore(Bool_t warn)
+{
+/// Load the DDL store from the mapping data from OCDB,
+/// if it does not yet exist;
+/// return false only in case loading from CDB failed
+
+ if ( AliMpManuStore::Instance(false) ) {
+ if ( warn )
+ AliWarningClass("Manu Store has been already loaded.");
+ return true;
}
+
+ if ( fgLoadFromData ) {
+ AliDebugClassStream(1)
+ << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
+
+ // Load segmentation
+ if ( ! AliMpSegmentation::Instance(false) )
+ LoadMpSegmentation(warn);
- AliCDBEntry* cdbEntry = cdbManager->Get("MUON/Calib/DDLStore", run);
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingRunData");
+ if ( ! cdbEntryObject ) return kFALSE;
- if ( cdbEntry )
- {
- return (AliMpDDLStore*)cdbEntry->GetObject() != 0x0;
- }
- else
- {
- return kFALSE;
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpManuStore::ReadData(dataStreams);
+ return kTRUE;
}
+ else {
+ AliDebugClassStream(1)
+ << "Loading Manu store from MUON/Calib/ManuStore" << endl;
+
+ // Load Manu store
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
+ return cdbEntryObject != 0x0;
+ }
}
-
//______________________________________________________________________________
Bool_t AliMpCDB::LoadMpSegmentation2(const char* cdbpath, Int_t runNumber,
Bool_t warn)
/// and run is set directly via arguments.
- AliDebugClass(1,"");
-
if ( AliMpSegmentation::Instance(false) ) {
if ( warn )
AliWarningClass("Segmentation has been already loaded.");
return true;
}
- AliCDBManager* cdbManager = AliCDBManager::Instance();
- cdbManager->SetDefaultStorage(cdbpath);
-
- AliCDBEntry* cdbEntry = cdbManager->Get("MUON/Calib/Mapping", runNumber);
+ if ( fgLoadFromData ) {
+ AliDebugClassStream(1)
+ << "Loading segmentation from MUON/Calib/MappingData" << endl;
- if ( cdbEntry )
- {
- return (AliMpSegmentation*)cdbEntry->GetObject() != 0x0;
- }
- else
- {
- return kFALSE;
+ TObject* cdbEntryObject
+ = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
+ if ( ! cdbEntryObject ) return kFALSE;
+
+ // Pass the map to the streams and then read segmentation
+ // from data map
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpSegmentation::ReadData(dataStreams);
+ return kTRUE;
}
+ else {
+ AliDebugClassStream(1)
+ << "Loading segmentation from MUON/Calib/Mapping" << endl;
+
+ TObject* cdbEntryObject
+ = GetCDBEntryObject("MUON/Calib/Mapping", cdbpath, runNumber);
+ return cdbEntryObject != 0x0;
+ }
}
//______________________________________________________________________________
/// In difference from LoadDDLStore(), in this method the CDB path
/// and run is set directly via arguments.
- AliDebugClass(1,"");
-
if ( AliMpDDLStore::Instance(false) ) {
if ( warn )
AliWarningClass("DDL Store has been already loaded.");
return true;
}
- // Load segmentation
- //
- LoadMpSegmentation2(cdbpath, runNumber, warn);
+ if ( fgLoadFromData ) {
+ AliDebugClassStream(1)
+ << "Loading DDL store from MUON/Calib/MappingData" << endl;
- // Load DDL store
- //
- AliCDBManager* cdbManager = AliCDBManager::Instance();
- cdbManager->SetDefaultStorage(cdbpath);
-
- AliCDBEntry* cdbEntry = cdbManager->Get("MUON/Calib/DDLStore", runNumber);
+ TObject* cdbEntryObject
+ = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
+ if ( ! cdbEntryObject ) return kFALSE;
- if ( cdbEntry )
- {
- return (AliMpDDLStore*)cdbEntry->GetObject() != 0x0;
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpDDLStore::ReadData(dataStreams);
+ return kTRUE;
}
- else
- {
- return kFALSE;
+ else {
+ AliDebugClassStream(1)
+ << "Loading DDL store from MUON/Calib/DDLStore" << endl;
+
+ // Load segmentation
+ LoadMpSegmentation2(cdbpath, runNumber, warn);
+
+ // Load DDL store
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
+ return cdbEntryObject != 0x0;
+ }
+}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::LoadManuStore2(const char* cdbpath, Int_t runNumber,
+ Bool_t warn)
+{
+/// Load the DDL store from the CDB if it does not yet exist
+/// return false only in case loading from CDB failed
+/// In difference from LoadDDLStore(), in this method the CDB path
+/// and run is set directly via arguments.
+
+ if ( AliMpManuStore::Instance(false) ) {
+ if ( warn )
+ AliWarningClass("Manu Store has been already loaded.");
+ return true;
+ }
+
+ if ( fgLoadFromData ) {
+ AliDebugClassStream(1)
+ << "Loading Manu store from MUON/Calib/MappingRunData" << endl;
+
+ // Load segmentation
+ LoadMpSegmentation2(cdbpath, runNumber, warn);
+
+ TObject* cdbEntryObject
+ = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
+ if ( ! cdbEntryObject ) return kFALSE;
+
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpManuStore::ReadData(dataStreams);
+ return kTRUE;
}
+ else {
+ AliDebugClassStream(1)
+ << "Loading Manu store from MUON/Calib/ManuStore" << endl;
+
+ // Load Manu store
+ TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
+ return cdbEntryObject != 0x0;
+ }
}
+//______________________________________________________________________________
+Bool_t AliMpCDB::WriteMpData()
+{
+/// Write mapping data in OCDB
+
+ AliCDBManager* cdbManager = AliCDBManager::Instance();
+ if ( ! cdbManager->GetDefaultStorage() )
+ cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
+
+ AliCDBMetaData* cdbData = new AliCDBMetaData();
+ cdbData->SetResponsible("Dimuon Offline project");
+ cdbData->SetComment("MUON mapping");
+ cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+ AliCDBId id("MUON/Calib/MappingData", 0, AliCDBRunRange::Infinity());
+
+ AliMpDataProcessor mp;
+ AliMpDataMap* map = mp.CreateDataMap("data");
+ return cdbManager->Put(map, id, cdbData);
+}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::WriteMpRunData()
+{
+/// Write mapping data in OCDB
+
+ AliCDBManager* cdbManager = AliCDBManager::Instance();
+ if ( ! cdbManager->GetDefaultStorage() )
+ cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
+
+ AliCDBMetaData* cdbData = new AliCDBMetaData();
+ cdbData->SetResponsible("Dimuon Offline project");
+ cdbData->SetComment("MUON run-dependent mapping");
+ cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+ AliCDBId id("MUON/Calib/MappingRunData", 0, AliCDBRunRange::Infinity());
+
+ AliMpDataProcessor mp;
+ AliMpDataMap* map = mp.CreateDataMap("data_run");
+ return cdbManager->Put(map, id, cdbData);
+}
+
//______________________________________________________________________________
Bool_t AliMpCDB::WriteMpSegmentation(Bool_t readData)
{
AliCDBManager* cdbManager = AliCDBManager::Instance();
if ( ! cdbManager->GetDefaultStorage() )
- cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
+ cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
AliCDBMetaData* cdbData = new AliCDBMetaData();
cdbData->SetResponsible("Dimuon Offline project");
AliCDBId id("MUON/Calib/Mapping", 0, AliCDBRunRange::Infinity());
if ( readData ) {
- AliMpSegmentation::ReadData(false);
- AliMpDDLStore::ReadData(false);
+ AliMpDataStreams dataStreams;
+ AliMpSegmentation::ReadData(dataStreams, false);
+ AliMpDDLStore::ReadData(dataStreams, false);
}
return cdbManager->Put(AliMpSegmentation::Instance(), id, cdbData);
AliCDBManager* cdbManager = AliCDBManager::Instance();
if ( ! cdbManager->GetDefaultStorage() )
- cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
+ cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
AliCDBMetaData* cdbData = new AliCDBMetaData();
cdbData->SetResponsible("Dimuon Offline project");
AliCDBId id("MUON/Calib/DDLStore", 0, AliCDBRunRange::Infinity());
if ( readData ) {
- AliMpSegmentation::ReadData(false);
- AliMpDDLStore::ReadData(false);
+ AliMpDataStreams dataStreams;
+ AliMpSegmentation::ReadData(dataStreams, false);
+ AliMpDDLStore::ReadData(dataStreams, false);
}
return cdbManager->Put(AliMpDDLStore::Instance(), id, cdbData);
}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::WriteManuStore(Bool_t readData)
+{
+/// Write mapping Manu store in OCDB
+
+ if ( ! readData && ! AliMpManuStore::Instance() ) return false;
+
+ AliCDBManager* cdbManager = AliCDBManager::Instance();
+ if ( ! cdbManager->GetDefaultStorage() )
+ cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
+
+ AliCDBMetaData* cdbData = new AliCDBMetaData();
+ cdbData->SetResponsible("Dimuon Offline project");
+ cdbData->SetComment("MUON Manu store");
+ cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+ AliCDBId id("MUON/Calib/ManuStore", 0, AliCDBRunRange::Infinity());
+
+ if ( readData ) {
+ AliMpDataStreams dataStreams;
+ AliMpSegmentation::ReadData(dataStreams, false);
+ AliMpManuStore::ReadData(dataStreams, false);
+ }
+ return cdbManager->Put(AliMpManuStore::Instance(), id, cdbData);
+}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::GenerateMpData(const char* cdbpath, Int_t runNumber)
+{
+/// Generate mapping data ASCII files from OCDB
+
+ TObject* cdbEntryObject
+ = GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
+ if ( ! cdbEntryObject ) return kFALSE;
+
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataProcessor mp;
+ return mp.GenerateData(dataMap);
+}
+
+//______________________________________________________________________________
+Bool_t AliMpCDB::GenerateMpRunData(const char* cdbpath, Int_t runNumber)
+{
+/// Generate mapping data ASCII files from OCDB
+
+ TObject* cdbEntryObject
+ = GetCDBEntryObject("MUON/Calib/MappingRunData", cdbpath, runNumber);
+ if ( ! cdbEntryObject ) return kFALSE;
+
+ AliMpDataMap* dataMap = (AliMpDataMap*)cdbEntryObject;
+ AliMpDataProcessor mp;
+ return mp.GenerateData(dataMap);
+}
+
+//______________________________________________________________________________
+void AliMpCDB::UnloadAll()
+{
+ /// Unload all the mapping from the memory
+ delete AliMpDDLStore::Instance(false);
+ delete AliMpSegmentation::Instance(false);
+ delete AliMpDEStore::Instance(false);
+ delete AliMpManuStore::Instance(false);
+}
+