#include <TKey.h>
#include <TH1.h>
-#include "AliCDBManager.h"
+#include <TTree.h>
+#include <TNtuple.h>
+#include <TFile.h>
#include "AliCDBStorage.h"
+#include "AliCDBGrid.h"
#include "AliCDBEntry.h"
#include "AliLog.h"
//_____________________________________________________________________________
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()) {
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;
}
if (entry) {
// this is to make the SHUTTLE output lighter
if(!(query.GetPath().Contains("SHUTTLE/STATUS")))
- AliInfo(Form("CDB object retrieved: %s", entry->GetId().ToString().Data()));
+ AliDebug(2, Form("CDB object retrieved: %s", entry->GetId().ToString().Data()));
} else {
// 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(!(query.GetPath().Contains("SHUTTLE/STATUS"))){
+
+ if(!(query.GetPath().Contains("SHUTTLE"))){
+ AliFatal(Form("No valid CDB object found! request was: %s", query.ToString().Data()));
+ }
+ else {
+ AliInfo(Form("No valid CDB object found! request was: %s", query.ToString().Data()));
+ }
+ }
}
// if drain storage is set, drain entry into drain storage
}
//_____________________________________________________________________________
-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
}
//_____________________________________________________________________________
-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
TH1::AddDirectory(kTRUE);
Int_t nEntries = result->GetEntries();
- if (nEntries) {
- AliInfo(Form("%d objects retrieved.",nEntries));
- for(int i=0; i<nEntries;i++){
- AliCDBEntry *entry = (AliCDBEntry*) result->At(i);
- AliInfo(Form("%s",entry->GetId().ToString().Data()));
-
- }
- } else {
- AliInfo(Form("No valid CDB object found! request was: %s", query.ToString().Data()));
+
+ AliInfo(Form("%d objects retrieved. Request was: %s",
+ nEntries, query.ToString().Data()));
+ for(int i=0; i<nEntries;i++){
+ AliCDBEntry *entry = (AliCDBEntry*) result->At(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; i<result->GetEntries(); i++){
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));
+}
+
+//_____________________________________________________________________________
+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) {
+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){
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",
entry->GetId().ToString().Data()));
return kFALSE;
}
- // set object's class name into metaData!
- entry->GetMetaData()->SetObjectClassName(entry->GetObject()->ClassName());
+ 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;
+ }
return PutEntry(entry);
}
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(md) fMetaDataFilter = dynamic_cast<AliCDBMetaData*> (md->Clone());
QueryValidFiles();
- AliCDBId queryId(pathFilter,run,run,version);
- AliInfo(Form("%d files valid for request <%s> found in CDB storage \"%s://%s\"",
- fValidFileIds.GetEntries(), queryId.ToString().Data(),
- fType.Data(), fBaseFolder.Data()));
+ AliInfo(Form("%d valid files found!", fValidFileIds.GetEntriesFast()));
}
while ((anId = dynamic_cast<AliCDBId*>(iter.Next()))) {
message += Form("\t%s\n", anId->ToString().Data());
}
- message += Form("\n\tTotal: %d objects found\n", fValidFileIds.GetEntries());
+ 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<TTree*> (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<TNtuple*> (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<AliCDBMetaData*> (entry->GetMetaData());
+// if(!md) return;
+// TString objStr = md->GetObjectClassName();
+// if(objStr != "TTree") return;
+// AliWarning("Entry contains a TTree! Setting file...");
+//
+// TTree* tree = dynamic_cast<TTree*> (entry->GetObject());
+//
+// if(!tree) return;
+//
+// // tree->SetDirectory(file);
+// tree->SetDirectory(0);
+//
+// return;
+// }