]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added functionality to get TTree's from the OCDB. The tree is loaded in memory
authoracolla <acolla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Jun 2007 14:59:41 +0000 (14:59 +0000)
committeracolla <acolla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Jun 2007 14:59:41 +0000 (14:59 +0000)
before closing the root file.

STEER/AliCDBGrid.cxx
STEER/AliCDBLocal.cxx
STEER/AliCDBStorage.cxx
STEER/AliCDBStorage.h

index 7cd3766a0985dc2d36a8fac879810629a9ac1d04..3725967ccf875ccba2a1924cb1cbe35c40ad138c 100644 (file)
@@ -392,6 +392,9 @@ AliCDBEntry* AliCDBGrid::GetEntryFromFile(TString& filename, AliCDBId* dataId){
 
        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;
 
@@ -530,19 +533,21 @@ Bool_t AliCDBGrid::PutEntry(AliCDBEntry* entry) {
        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()));
 
 
index aae166900d9fa6ab5c16c206a01cc40d98741cf6..5a489b0e363c76b2fda5fd147fa9771ab1c93bf0 100644 (file)
@@ -417,6 +417,9 @@ AliCDBEntry* AliCDBLocal::GetEntry(const AliCDBId& queryId) {
                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;
@@ -547,6 +550,8 @@ Bool_t AliCDBLocal::PutEntry(AliCDBEntry* entry) {
                return kFALSE;
        }
        
+       SetTreeToFile(entry, &file);
+
        entry->SetVersion(id.GetVersion());
        entry->SetSubVersion(id.GetSubVersion());
 
index 9ddbf14e1a37164009956910e28cd98ef85d8c52..7fcebf01e4b07419052bf775f1f2aee6b1233936 100644 (file)
@@ -15,6 +15,8 @@
 
 #include <TKey.h>
 #include <TH1.h>
+#include <TTree.h>
+#include <TFile.h>
 #include "AliCDBStorage.h"
 #include "AliCDBGrid.h"
 
@@ -440,3 +442,42 @@ AliCDBManager::DataType AliCDBStorage::GetDataType() const {
 
        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;
+}
index 26beac8452fbad02297eaf5d883fda4b35172445..7a7f3fb216acd7b06ad79441eb8a9a06049d70d7 100644 (file)
@@ -22,6 +22,7 @@
 class AliCDBEntry;
 class AliCDBPath;
 class AliCDBParam;
+class TFile;
 
 class AliCDBStorage: public TObject {
 
@@ -103,6 +104,8 @@ protected:
        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