Services for default objects added.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 15 Jan 2011 21:57:48 +0000 (21:57 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 15 Jan 2011 21:57:48 +0000 (21:57 +0000)
OADB/AliOADBContainer.cxx
OADB/AliOADBContainer.h

index 527ad881cf5ea49d928b76b70bfa6068fc3365fb..ffd32789a7f129c77ecb905005252972876412f7 100644 (file)
@@ -28,6 +28,7 @@
 #include <TObjArray.h>
 #include <TArrayI.h>
 #include <TFile.h>
+#include <TList.h>
 
 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]);
index 4ab6fb9bfd0560c586e7147d70d96c9fd7e38798..1671f8aad9ce92ab16ba9cf1a280783892d5cbff 100644 (file)
@@ -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