before closing the root file.
anEntry->SetLastStorage("grid");
+ // Check whether entry contains a TTree. In case load the tree in memory!
+ LoadTreeFromFile(anEntry);
+
// close file, return retieved entry
file->Close(); delete file; file=0;
if (fSE != "default") fullFilename += Form("?se=%s",fSE.Data());
// open file
- TFile *file = TFile::Open(fullFilename,"CREATE");
- if(!file || !file->IsWritable()){
- AliError(Form("Can't open file <%s>!", filename.Data()));
- if(file && !file->IsWritable()) file->Close(); delete file; file=0;
- return kFALSE;
- }
+ TFile *file = TFile::Open(fullFilename,"CREATE");
+ if(!file || !file->IsWritable()){
+ AliError(Form("Can't open file <%s>!", filename.Data()));
+ if(file && !file->IsWritable()) file->Close(); delete file; file=0;
+ return kFALSE;
+ }
file->cd();
+ SetTreeToFile(entry, file);
+
entry->SetVersion(id.GetVersion());
// write object (key name: "AliCDBEntry")
- Bool_t result = (entry->Write("AliCDBEntry") != 0);
+ Bool_t result = (file->WriteTObject(entry, "AliCDBEntry") != 0);
if (!result) AliError(Form("Can't write entry to file <%s>!", filename.Data()));
AliWarning(Form("Object's Id: %s", entryId.ToString().Data()));
}
+ // Check whether entry contains a TTree. In case load the tree in memory!
+ LoadTreeFromFile(anEntry);
+
// close file, return retieved entry
file.Close();
return anEntry;
return kFALSE;
}
+ SetTreeToFile(entry, &file);
+
entry->SetVersion(id.GetVersion());
entry->SetSubVersion(id.GetSubVersion());
#include <TKey.h>
#include <TH1.h>
+#include <TTree.h>
+#include <TFile.h>
#include "AliCDBStorage.h"
#include "AliCDBGrid.h"
return AliCDBManager::kPrivate;
}
+
+//_____________________________________________________________________________
+void AliCDBStorage::LoadTreeFromFile(AliCDBEntry *entry) const {
+// Checks whether entry contains a TTree and in case loads it into memory
+
+ AliCDBMetaData *md = dynamic_cast<AliCDBMetaData*> (entry->GetMetaData());
+ if(!md) return;
+ TString objStr = md->GetObjectClassName();
+ if(objStr != "TTree") return;
+ AliWarning("Entry contains a TTree! Loading baskets...");
+
+ TTree* tree = dynamic_cast<TTree*> (entry->GetObject());
+
+ if(!tree) return;
+
+ tree->LoadBaskets();
+ tree->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);
+
+ return;
+}
class AliCDBEntry;
class AliCDBPath;
class AliCDBParam;
+class TFile;
class AliCDBStorage: public TObject {
virtual Bool_t PutEntry(AliCDBEntry* entry) = 0;
virtual TList *GetIdListFromFile(const char* fileName)=0;
virtual void QueryValidFiles() = 0;
+ void LoadTreeFromFile(AliCDBEntry* entry) const;
+ void SetTreeToFile(AliCDBEntry* entry, TFile* file) const;
TObjArray fValidFileIds; // list of Id's of the files valid for a given run (cached as fRun)
Int_t fRun; // run number, used to manage list of valid files