From: morsch Date: Sat, 15 Jan 2011 21:57:48 +0000 (+0000) Subject: Services for default objects added. X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=bad1b400dbbf17fa25c4ca6806588692867c60a8;ds=sidebyside Services for default objects added. --- diff --git a/OADB/AliOADBContainer.cxx b/OADB/AliOADBContainer.cxx index 527ad881cf5..ffd32789a7f 100644 --- a/OADB/AliOADBContainer.cxx +++ b/OADB/AliOADBContainer.cxx @@ -28,6 +28,7 @@ #include #include #include +#include ClassImp(AliOADBContainer); @@ -35,6 +36,7 @@ ClassImp(AliOADBContainer); AliOADBContainer::AliOADBContainer() : TNamed(), fArray(new TObjArray(100)), + fDefaultList(new TList()), fLowerLimits(), fUpperLimits(), fEntries(0) @@ -44,6 +46,7 @@ AliOADBContainer::AliOADBContainer() : AliOADBContainer::AliOADBContainer(char* name) : TNamed(name, "OADBContainer"), fArray(new TObjArray(100)), + fDefaultList(new TList()), fLowerLimits(), fUpperLimits(), fEntries(0) @@ -61,6 +64,7 @@ AliOADBContainer::~AliOADBContainer() AliOADBContainer::AliOADBContainer(const AliOADBContainer& cont) : TNamed(cont), fArray(cont.fArray), + fDefaultList(cont.fDefaultList), fLowerLimits(cont.fLowerLimits), fUpperLimits(cont.fUpperLimits), fEntries(cont.fEntries) @@ -134,8 +138,21 @@ void AliOADBContainer::UpdateObject(Int_t idx, TObject* obj, Int_t lower, Int_t fArray->AddAt(obj, idx); } +void AliOADBContainer::AddDefaultObject(TNamed* obj) +{ + // Add a default object + fDefaultList->Add(obj); +} + +void AliOADBContainer::CleanDefaultList() +{ + // Clean default list + fDefaultList->Delete(); +} + Int_t AliOADBContainer::GetIndexForRun(Int_t run) const { + // // Find the index for a given run Int_t found = 0; Int_t index = -1; @@ -147,18 +164,53 @@ Int_t AliOADBContainer::GetIndexForRun(Int_t run) const index = i; } } + + if (found > 1) { + AliError(Form("More than one (%5d) object found; return last (%5d) !\n", found, index)); + } else if (index == -1) { + AliWarning(Form("No object found for run %5d !\n", run)); + } + return index; } +TObject* AliOADBContainer::GetObject(Int_t run, char* def) const +{ + // Return object for given run or default if not found + TObject* obj = 0; + Int_t idx = GetIndexForRun(run); + if (idx == -1) { + // no object found, try default + obj = fDefaultList->FindObject(def); + if (!obj) { + AliError("Default Object not found !\n"); + return (0); + } else { + return (obj); + } + } else { + return (fArray->At(idx)); + } +} + +TObject* AliOADBContainer::GetObjectByIndex(Int_t run) const +{ + // Return object for given index + return (fArray->At(run)); +} + void AliOADBContainer::WriteToFile(char* fname) const { + // // Write object to file TFile* f = new TFile(fname, "recreate"); Write(); f->Close(); } + Int_t AliOADBContainer::InitFromFile(char* fname, char* key) { + // // Initialize object from file TFile* file = TFile::Open(fname); if (!file) return (1); @@ -176,7 +228,7 @@ Int_t AliOADBContainer::InitFromFile(char* fname, char* key) for (Int_t i = 0; i < fEntries; i++) { fLowerLimits[i] = cont->LowerLimit(i); fUpperLimits[i] = cont->UpperLimit(i); - fArray->AddAt(cont->GetObject(i), i); + fArray->AddAt(cont->GetObjectByIndex(i), i); } return 0; @@ -186,6 +238,7 @@ Int_t AliOADBContainer::InitFromFile(char* fname, char* key) void AliOADBContainer::List() { + // // List Objects for (Int_t i = 0; i < fEntries; i++) { printf("Lower %5d Upper %5d \n", fLowerLimits[i], fUpperLimits[i]); diff --git a/OADB/AliOADBContainer.h b/OADB/AliOADBContainer.h index 4ab6fb9bfd0..1671f8aad9c 100644 --- a/OADB/AliOADBContainer.h +++ b/OADB/AliOADBContainer.h @@ -29,6 +29,8 @@ class AliOADBContainer : public TNamed { void AppendObject(TObject* obj, Int_t lower, Int_t upper); void UpdateObject(Int_t index, TObject* obj, Int_t lower, Int_t upper); void RemoveObject(Int_t index); + void AddDefaultObject(TNamed* obj); + void CleanDefaultList(); Int_t GetIndexForRun(Int_t run) const; // I/O void WriteToFile(char* fname) const; @@ -37,11 +39,13 @@ class AliOADBContainer : public TNamed { Int_t GetNumberOfEntries() const {return fEntries;} Int_t LowerLimit(Int_t idx) const {return fLowerLimits[idx];} Int_t UpperLimit(Int_t idx) const {return fUpperLimits[idx];} - TObject* GetObject(Int_t idx) const {return fArray->At(idx);} + TObject* GetObject(Int_t run, char* def = "") const; + TObject* GetObjectByIndex(Int_t run) const; // Debugging void List(); private : - TObjArray* fArray; // Array with objects + TObjArray* fArray; // Array with objects corresponding to run ranges + TList* fDefaultList; // List with default arrays TArrayI fLowerLimits; // lower limit of run range TArrayI fUpperLimits; // upper limit of run range Int_t fEntries; // Number of entries