1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //-------------------------------------------------------------------------
19 // Offline Analysis Database Container and Service Class
20 // Author: Andreas Morsch, CERN
21 //-------------------------------------------------------------------------
26 #include "AliOADBContainer.h"
28 #include <TObjArray.h>
32 ClassImp(AliOADBContainer);
34 //______________________________________________________________________________
35 AliOADBContainer::AliOADBContainer() :
37 fArray(new TObjArray(100)),
44 AliOADBContainer::AliOADBContainer(char* name) :
45 TNamed(name, "OADBContainer"),
46 fArray(new TObjArray(100)),
54 //______________________________________________________________________________
55 AliOADBContainer::~AliOADBContainer()
60 //______________________________________________________________________________
61 AliOADBContainer::AliOADBContainer(const AliOADBContainer& cont) :
64 fLowerLimits(cont.fLowerLimits),
65 fUpperLimits(cont.fUpperLimits),
66 fEntries(cont.fEntries)
71 //______________________________________________________________________________
72 AliOADBContainer& AliOADBContainer::operator=(const AliOADBContainer& cont)
74 // Assignment operator
76 TNamed::operator=(cont);
77 fEntries = cont.fEntries;
78 fLowerLimits.Set(fEntries);
79 fUpperLimits.Set(fEntries);
80 for (Int_t i = 0; i < fEntries; i++) {
81 fLowerLimits[i] = cont.fLowerLimits[i];
82 fUpperLimits[i] = cont.fUpperLimits[i];
83 fArray->AddAt(cont.fArray->At(i), i);
89 void AliOADBContainer::AppendObject(TObject* obj, Int_t lower, Int_t upper)
91 // Append a new object to the list
93 fLowerLimits.Set(fEntries);
94 fUpperLimits.Set(fEntries);
96 fLowerLimits[fEntries - 1] = lower;
97 fUpperLimits[fEntries - 1] = upper;
102 void AliOADBContainer::RemoveObject(Int_t idx)
104 // Remove object from the list
105 if (idx < 0 || idx >= fEntries)
107 AliError(Form("Index out of Range %5d >= %5d", idx, fEntries));
111 TObject* obj = fArray->RemoveAt(idx);
114 for (Int_t i = idx; i < (fEntries-1); i++) {
115 fLowerLimits[i] = fLowerLimits[i + 1];
116 fUpperLimits[i] = fUpperLimits[i + 1];
117 fArray->AddAt(fArray->At(i+1), i);
119 fArray->RemoveAt(fEntries - 1);
123 void AliOADBContainer::UpdateObject(Int_t idx, TObject* obj, Int_t lower, Int_t upper)
125 // Append a new object to the list
126 if (idx < 0 || idx >= fEntries)
128 AliError(Form("Index out of Range %5d >= %5d", idx, fEntries));
132 fLowerLimits[idx] = lower;
133 fUpperLimits[idx] = upper;
134 fArray->AddAt(obj, idx);
137 Int_t AliOADBContainer::GetIndexForRun(Int_t run) const
139 // Find the index for a given run
142 for (Int_t i = 0; i < fEntries; i++)
144 if (run >= fLowerLimits[i] && run <= fUpperLimits[i])
153 void AliOADBContainer::WriteToFile(char* fname) const
155 // Write object to file
156 TFile* f = new TFile(fname, "recreate");
160 Int_t AliOADBContainer::InitFromFile(char* fname, char* key)
162 // Initialize object from file
163 TFile* file = TFile::Open(fname);
164 if (!file) return (1);
165 AliOADBContainer* cont = 0;
166 file->GetObject(key, cont);
169 AliError("Object not found in file \n");
173 fEntries = cont->GetNumberOfEntries();
174 fLowerLimits.Set(fEntries);
175 fUpperLimits.Set(fEntries);
176 for (Int_t i = 0; i < fEntries; i++) {
177 fLowerLimits[i] = cont->LowerLimit(i);
178 fUpperLimits[i] = cont->UpperLimit(i);
179 fArray->AddAt(cont->GetObject(i), i);
187 void AliOADBContainer::List()
190 for (Int_t i = 0; i < fEntries; i++) {
191 printf("Lower %5d Upper %5d \n", fLowerLimits[i], fUpperLimits[i]);
192 (fArray->At(i))->Dump();