X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliCDBStorage.cxx;h=d7dc53b062351ccf7f6a3f403f8eaad4065a1efc;hb=a5181344aa1dab140e90f5d4e3d6431c3d58b6ff;hp=351ba43eb827484392453119075c04165f7786f0;hpb=4b5e0dce7647dab853aa777612de4986f60a383b;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliCDBStorage.cxx b/STEER/AliCDBStorage.cxx index 351ba43eb82..d7dc53b0623 100644 --- a/STEER/AliCDBStorage.cxx +++ b/STEER/AliCDBStorage.cxx @@ -15,8 +15,11 @@ #include #include -#include "AliCDBManager.h" +#include +#include +#include #include "AliCDBStorage.h" +#include "AliCDBGrid.h" #include "AliCDBEntry.h" #include "AliLog.h" @@ -24,9 +27,20 @@ ClassImp(AliCDBStorage) //_____________________________________________________________________________ -AliCDBStorage::AliCDBStorage() { +AliCDBStorage::AliCDBStorage(): +fValidFileIds(), +fRun(-1), +fPathFilter(), +fVersion(-1), +fMetaDataFilter(0), +fSelections(), +fURI(), +fType(), +fBaseFolder() +{ // constructor + fValidFileIds.SetOwner(1); fSelections.SetOwner(1); } @@ -34,11 +48,15 @@ AliCDBStorage::AliCDBStorage() { AliCDBStorage::~AliCDBStorage() { // destructor + RemoveAllSelections(); + fValidFileIds.Clear(); + delete fMetaDataFilter; + } //_____________________________________________________________________________ void AliCDBStorage::GetSelection(/*const*/ AliCDBId* id) { -// return required version and subversion from the list of selection criteria +// return required version and subversion from the list of selection criteria TIter iter(&fSelections); AliCDBId* aSelection; @@ -108,7 +126,7 @@ void AliCDBStorage::AddSelection(const AliCDBId& selection) { } //_____________________________________________________________________________ -void AliCDBStorage::AddSelection(const AliCDBPath& path, +void AliCDBStorage::AddSelection(const AliCDBPath& path, const AliCDBRunRange& runRange, Int_t version, Int_t subVersion){ // add a selection criterion @@ -157,14 +175,14 @@ void AliCDBStorage::RemoveSelection(const AliCDBPath& path, void AliCDBStorage::RemoveSelection(int position){ // remove a selection criterion from its position in the list - fSelections.RemoveAt(position); + delete fSelections.RemoveAt(position); } //_____________________________________________________________________________ void AliCDBStorage::RemoveAllSelections(){ // remove all selection criteria - fSelections.RemoveAll(); + fSelections.Clear(); } //_____________________________________________________________________________ @@ -173,7 +191,7 @@ void AliCDBStorage::PrintSelectionList(){ TIter iter(&fSelections); AliCDBId* aSelection; - + // loop on the list of selection criteria int index=0; while ((aSelection = (AliCDBId*) iter.Next())) { @@ -183,9 +201,9 @@ void AliCDBStorage::PrintSelectionList(){ } //_____________________________________________________________________________ -AliCDBEntry* AliCDBStorage::Get(const AliCDBId& query) { +AliCDBEntry* AliCDBStorage::Get(const AliCDBId& query) { // get an AliCDBEntry object from the database - + // check if query's path and runRange are valid // query is invalid also if version is not specified and subversion is! if (!query.IsValid()) { @@ -193,13 +211,13 @@ AliCDBEntry* AliCDBStorage::Get(const AliCDBId& query) { return NULL; } - // query is not specified if path contains wildcard or runrange = [-1,-1] + // query is not specified if path contains wildcard or runrange = [-1,-1] if (!query.IsSpecified()) { - AliError(Form("Unspecified query: %s", + AliError(Form("Unspecified query: %s", query.ToString().Data())); return NULL; } - + // This is needed otherwise TH1 objects (histos, TTree's) are lost when file is closed! Bool_t oldStatus = TH1::AddDirectoryStatus(); TH1::AddDirectory(kFALSE); @@ -208,23 +226,26 @@ AliCDBEntry* AliCDBStorage::Get(const AliCDBId& query) { if (oldStatus != kFALSE) TH1::AddDirectory(kTRUE); - + if (entry) { - AliInfo(Form("CDB object retrieved: %s", entry->GetId().ToString().Data())); + // this is to make the SHUTTLE output lighter + if(!(query.GetPath().Contains("SHUTTLE/STATUS"))) + AliDebug(2, Form("CDB object retrieved: %s", entry->GetId().ToString().Data())); } else { - AliInfo(Form("No valid CDB object found! request was: name = <%s>, run = %d", - (query.GetPath()).Data(), query.GetFirstRun())); + // this is to make the SHUTTLE output lighter + if(!(query.GetPath().Contains("SHUTTLE/STATUS"))) + AliInfo(Form("No valid CDB object found! request was: %s", query.ToString().Data())); } - + // if drain storage is set, drain entry into drain storage if(entry && (AliCDBManager::Instance())->IsDrainSet()) AliCDBManager::Instance()->Drain(entry); - + return entry; } //_____________________________________________________________________________ -AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path, Int_t runNumber, +AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path, Int_t runNumber, Int_t version, Int_t subVersion) { // get an AliCDBEntry object from the database @@ -232,7 +253,7 @@ AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path, Int_t runNumber, } //_____________________________________________________________________________ -AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path, +AliCDBEntry* AliCDBStorage::Get(const AliCDBPath& path, const AliCDBRunRange& runRange, Int_t version, Int_t subVersion) { // get an AliCDBEntry object from the database @@ -266,18 +287,15 @@ TList* AliCDBStorage::GetAll(const AliCDBId& query) { TH1::AddDirectory(kTRUE); Int_t nEntries = result->GetEntries(); - if (nEntries) { - AliInfo(Form("%d AliCDBEntry objects retrieved.",nEntries)); - for(int i=0; iAt(i); - AliInfo(Form("%s",entry->GetId().ToString().Data())); - - } - } else { - AliInfo(Form("No valid CDB object found! request was: name = <%s>, run = %d, version = %d", - (query.GetPath()).Data(), query.GetFirstRun(), query.GetVersion())); + + AliInfo(Form("%d objects retrieved. Request was: %s", + nEntries, query.ToString().Data())); + for(int i=0; iAt(i); + AliInfo(Form("%s",entry->GetId().ToString().Data())); } + // if drain storage is set, drain entries into drain storage if((AliCDBManager::Instance())->IsDrainSet()){ for(int i = 0; iGetEntries(); i++){ @@ -307,18 +325,62 @@ TList* AliCDBStorage::GetAll(const AliCDBPath& path, return GetAll(AliCDBId(path, runRange, version, subVersion)); } +//_____________________________________________________________________________ +AliCDBId* AliCDBStorage::GetId(const AliCDBId& query) { +// get the Id of the valid object from the database (does not open the file) + + // check if query's path and runRange are valid + // query is invalid also if version is not specified and subversion is! + if (!query.IsValid()) { + AliError(Form("Invalid query: %s", query.ToString().Data())); + return NULL; + } + + // query is not specified if path contains wildcard or runrange = [-1,-1] + if (!query.IsSpecified()) { + AliError(Form("Unspecified query: %s", + query.ToString().Data())); + return NULL; + } + + AliCDBId* id = GetEntryId(query); + + return id; +} + +//_____________________________________________________________________________ +AliCDBId* AliCDBStorage::GetId(const AliCDBPath& path, Int_t runNumber, + Int_t version, Int_t subVersion) { +// get the Id of the valid object from the database (does not open the file) + + return GetId(AliCDBId(path, runNumber, runNumber, version, subVersion)); +} //_____________________________________________________________________________ -Bool_t AliCDBStorage::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData) { +AliCDBId* AliCDBStorage::GetId(const AliCDBPath& path, + const AliCDBRunRange& runRange, Int_t version, + Int_t subVersion) { +// get the Id of the valid object from the database (does not open the file) + + return GetId(AliCDBId(path, runRange, version, subVersion)); +} + +//_____________________________________________________________________________ +Bool_t AliCDBStorage::Put(TObject* object, AliCDBId& id, AliCDBMetaData* metaData, AliCDBManager::DataType type) { // store an AliCDBEntry object into the database + if (object==0x0) { + AliError("Null Entry! No storage will be done!"); + return kFALSE; + } + AliCDBEntry anEntry(object, id, metaData); - return Put(&anEntry); -} + return Put(&anEntry, type); +} //_____________________________________________________________________________ -Bool_t AliCDBStorage::Put(AliCDBEntry* entry) { +Bool_t AliCDBStorage::Put(AliCDBEntry* entry, AliCDBManager::DataType type) { // store an AliCDBEntry object into the database if (!entry){ @@ -326,21 +388,164 @@ Bool_t AliCDBStorage::Put(AliCDBEntry* entry) { return kFALSE; } + if (entry->GetObject()==0x0){ + AliError("No valid object in CDB entry!"); + return kFALSE; + } + if (!entry->GetId().IsValid()) { - AliError(Form("Invalid entry ID: %s", + AliError(Form("Invalid entry ID: %s", entry->GetId().ToString().Data())); return kFALSE; } if (!entry->GetId().IsSpecified()) { - AliError(Form("Unspecified entry ID: %s", + AliError(Form("Unspecified entry ID: %s", entry->GetId().ToString().Data())); return kFALSE; } + AliCDBManager::DataType expectedType = GetDataType(); + + if(expectedType != AliCDBManager::kPrivate && type != expectedType) { + AliError(Form("It is forbidden to store %s data into a folder of type %s!", + AliCDBManager::GetDataTypeName(type), + AliCDBManager::GetDataTypeName(expectedType))); + return 0; + } + // set object's class name into metaData! entry->GetMetaData()->SetObjectClassName(entry->GetObject()->ClassName()); return PutEntry(entry); } +//_____________________________________________________________________________ +void AliCDBStorage::QueryCDB(Int_t run, const char* pathFilter, + Int_t version, AliCDBMetaData* md){ +// query CDB for files valid for given run, and fill list fValidFileIds +// Actual query is done in virtual function QueryValidFiles() + + fRun = run; + + fPathFilter = pathFilter; + if(!fPathFilter.IsValid()) { + AliError(Form("Filter not valid: %s", pathFilter)); + fPathFilter = "*"; + return; + } + + fVersion = version; + + AliInfo(Form("Querying files valid for run %d and path \"%s\" into CDB storage \"%s://%s\"", + fRun, pathFilter, fType.Data(), fBaseFolder.Data())); + + // Clear fValidFileIds list (it cannot be filled twice! + AliDebug(2, "Clearing list of CDB Id's previously loaded"); + fValidFileIds.Clear(); + + if(fMetaDataFilter) {delete fMetaDataFilter; fMetaDataFilter=0;} + if(md) fMetaDataFilter = dynamic_cast (md->Clone()); + + QueryValidFiles(); + AliCDBId queryId(pathFilter,run,run,version); + + AliInfo(Form("%d valid files found!", fValidFileIds.GetEntriesFast())); + +} + +//_____________________________________________________________________________ +void AliCDBStorage::PrintQueryCDB(){ +// print parameters used to load list of CDB Id's (fRun, fPathFilter, fVersion) + + AliCDBId paramId(fPathFilter, fRun, fRun, fVersion); + AliInfo(Form("**** QueryCDB Parameters **** \n\t<%s>\n", + paramId.ToString().Data())); + + if(fMetaDataFilter) fMetaDataFilter->PrintMetaData(); + + + TString message = "**** Id's of valid objects found *****\n"; + TIter iter(&fValidFileIds); + AliCDBId* anId=0; + + // loop on the list of selection criteria + while ((anId = dynamic_cast(iter.Next()))) { + message += Form("\t%s\n", anId->ToString().Data()); + } + message += Form("\n\tTotal: %d objects found\n", fValidFileIds.GetEntriesFast()); + AliInfo(Form("%s", message.Data())); +} + +//_____________________________________________________________________________ +AliCDBManager::DataType AliCDBStorage::GetDataType() const { +// returns the type of the data that should be stored into this storage: +// kConditions: conditions data; kReference: reference data; kPrivate: private (user-defined) data type + + if(GetType() != "alien") return AliCDBManager::kPrivate; + + TString condFolder = ((AliCDBGridParam*) AliCDBManager::Instance()->GetCondParam())->GetDBFolder(); + TString refFolder = ((AliCDBGridParam*) AliCDBManager::Instance()->GetRefParam())->GetDBFolder(); + + if(GetBaseFolder().Contains(condFolder)) return AliCDBManager::kCondition; + if(GetBaseFolder().Contains(refFolder)) return AliCDBManager::kReference; + + return AliCDBManager::kPrivate; +} + +//_____________________________________________________________________________ +void AliCDBStorage::LoadTreeFromFile(AliCDBEntry *entry) const { +// Checks whether entry contains a TTree and in case loads it into memory + + TObject *obj = (TObject*) entry->GetObject(); + if (!obj) { + AliError("Cannot retrieve the object:"); + entry->PrintMetaData(); + return; + } + + if (!strcmp(obj->ClassName(),TTree::Class_Name())) { + + AliWarning("Entry contains a TTree! Loading baskets..."); + + TTree* tree = dynamic_cast (obj); + + if(!tree) return; + + tree->LoadBaskets(); + tree->SetDirectory(0); + } + else if (!strcmp(obj->ClassName(),TNtuple::Class_Name())){ + + AliWarning("Entry contains a TNtuple! Loading baskets..."); + + TNtuple* ntu = dynamic_cast (obj); + + if(!ntu) return; + + ntu->LoadBaskets(); + ntu->SetDirectory(0); + } + + return; +} + +// //_____________________________________________________________________________ +// void AliCDBStorage::SetTreeToFile(AliCDBEntry *entry, TFile* file) const { +// // Checks whether entry contains a TTree and in case assigns it to memory +// +// AliCDBMetaData *md = dynamic_cast (entry->GetMetaData()); +// if(!md) return; +// TString objStr = md->GetObjectClassName(); +// if(objStr != "TTree") return; +// AliWarning("Entry contains a TTree! Setting file..."); +// +// TTree* tree = dynamic_cast (entry->GetObject()); +// +// if(!tree) return; +// +// // tree->SetDirectory(file); +// tree->SetDirectory(0); +// +// return; +// }