#include "AliMpCDB.h"
#include "AliCDBEntry.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>
ClassImp(AliMpCDB)
Bool_t AliMpCDB::fgLoadFromData = kTRUE;
TObject* AliMpCDB::GetCDBEntryObject(const char* dataPath)
{
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 )
{
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;
}
Bool_t AliMpCDB::LoadMpSegmentation(Bool_t warn)
{
if ( AliMpSegmentation::Instance(false) ) {
if ( warn )
AliWarningClass("Segmentation has been already loaded.");
return true;
}
if ( fgLoadFromData ) {
AliDebugClassStream(1)
<< "Loading segmentation from MUON/Calib/MappingData" << endl;
TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingData");
if ( ! cdbEntryObject ) return kFALSE;
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)
{
if ( AliMpDDLStore::Instance(false) ) {
if ( warn )
AliWarningClass("DDL Store has been already loaded.");
return true;
}
if ( fgLoadFromData ) {
AliDebugClassStream(1)
<< "Loading DDL store from MUON/Calib/MappingData" << endl;
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;
LoadMpSegmentation(warn);
TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
return cdbEntryObject != 0x0;
}
}
Bool_t AliMpCDB::LoadAll2(const char* cdbpath, Int_t runNumber, Bool_t warn)
{
return
LoadDDLStore2(cdbpath,runNumber,warn) &&
LoadManuStore2(cdbpath,runNumber,warn);
}
Bool_t AliMpCDB::LoadAll(Bool_t warn)
{
return LoadDDLStore(warn) && LoadManuStore(warn);
}
Bool_t AliMpCDB::LoadManuStore(Bool_t warn)
{
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;
if ( ! AliMpSegmentation::Instance(false) )
LoadMpSegmentation(warn);
TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/MappingRunData");
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;
TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
return cdbEntryObject != 0x0;
}
}
Bool_t AliMpCDB::LoadMpSegmentation2(const char* cdbpath, Int_t runNumber,
Bool_t warn)
{
if ( AliMpSegmentation::Instance(false) ) {
if ( warn )
AliWarningClass("Segmentation has been already loaded.");
return true;
}
if ( fgLoadFromData ) {
AliDebugClassStream(1)
<< "Loading segmentation from MUON/Calib/MappingData" << endl;
TObject* cdbEntryObject
= GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
if ( ! cdbEntryObject ) return kFALSE;
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;
}
}
Bool_t AliMpCDB::LoadDDLStore2(const char* cdbpath, Int_t runNumber,
Bool_t warn)
{
if ( AliMpDDLStore::Instance(false) ) {
if ( warn )
AliWarningClass("DDL Store has been already loaded.");
return true;
}
if ( fgLoadFromData ) {
AliDebugClassStream(1)
<< "Loading DDL store from MUON/Calib/MappingData" << endl;
TObject* cdbEntryObject
= GetCDBEntryObject("MUON/Calib/MappingData", cdbpath, runNumber);
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;
LoadMpSegmentation2(cdbpath, runNumber, warn);
TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/DDLStore");
return cdbEntryObject != 0x0;
}
}
Bool_t AliMpCDB::LoadManuStore2(const char* cdbpath, Int_t runNumber,
Bool_t warn)
{
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;
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;
TObject* cdbEntryObject = GetCDBEntryObject("MUON/Calib/ManuStore");
return cdbEntryObject != 0x0;
}
}
Bool_t AliMpCDB::WriteMpData()
{
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()
{
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)
{
if ( ! readData && ! AliMpSegmentation::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 mapping");
cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
AliCDBId id("MUON/Calib/Mapping", 0, AliCDBRunRange::Infinity());
if ( readData ) {
AliMpDataStreams dataStreams;
AliMpSegmentation::ReadData(dataStreams, false);
AliMpDDLStore::ReadData(dataStreams, false);
}
return cdbManager->Put(AliMpSegmentation::Instance(), id, cdbData);
}
Bool_t AliMpCDB::WriteDDLStore(Bool_t readData)
{
if ( ! readData && ! AliMpDDLStore::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 DDL store");
cdbData->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
AliCDBId id("MUON/Calib/DDLStore", 0, AliCDBRunRange::Infinity());
if ( readData ) {
AliMpDataStreams dataStreams;
AliMpSegmentation::ReadData(dataStreams, false);
AliMpDDLStore::ReadData(dataStreams, false);
}
return cdbManager->Put(AliMpDDLStore::Instance(), id, cdbData);
}
Bool_t AliMpCDB::WriteManuStore(Bool_t readData)
{
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)
{
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)
{
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()
{
delete AliMpDDLStore::Instance(false);
delete AliMpSegmentation::Instance(false);
delete AliMpDEStore::Instance(false);
delete AliMpManuStore::Instance(false);
}