]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EMCAL/AliEMCALTriggerDCSConfigDB.cxx
Fixing memory leaks
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALTriggerDCSConfigDB.cxx
CommitLineData
fff39dd1 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
16#include <TClonesArray.h>
17#include <TObjArray.h>
18
19#include "AliCDBManager.h"
20#include "AliCDBEntry.h"
21#include "AliLog.h"
22
23#include "AliEMCALTriggerDCSConfigDB.h"
24#include "AliEMCALTriggerDCSConfig.h"
25#include "AliEMCALTriggerSTUDCSConfig.h"
26#include "AliEMCALTriggerTRUDCSConfig.h"
27
28ClassImp(AliEMCALTriggerDCSConfigDB)
29
30AliEMCALTriggerDCSConfigDB* AliEMCALTriggerDCSConfigDB::fgInstance = 0;
31Bool_t AliEMCALTriggerDCSConfigDB::fgTerminated = kFALSE;
32
33//_____________________________________________________________________________
34AliEMCALTriggerDCSConfigDB* AliEMCALTriggerDCSConfigDB::Instance()
35{
36 //
37 // Singleton implementation
38 // Returns an instance of this class, it is created if neccessary
39 //
40
41 if (fgTerminated != kFALSE)
42 {
43 return 0;
44 }
45
46 if (fgInstance == 0)
47 {
48 fgInstance = new AliEMCALTriggerDCSConfigDB();
49 }
50
51 return fgInstance;
52}
53
54//_____________________________________________________________________________
55void AliEMCALTriggerDCSConfigDB::Terminate()
56{
57 //
58 // Singleton implementation
59 // Deletes the instance of this class and sets the terminated flag,
60 // instances cannot be requested anymore
61 // This function can be called several times.
62 //
63
64 fgTerminated = kTRUE;
65
66 if (fgInstance != 0)
67 {
68 delete fgInstance;
69 fgInstance = 0;
70 }
71}
72
73//_____________________________________________________________________________
74AliEMCALTriggerDCSConfigDB::AliEMCALTriggerDCSConfigDB() : TObject()
75,fRun(-1)
76{
77 //
78 // Default constructor
79 //
80 // TODO Default runnumber is set to 0, this should be changed later
81 // to an invalid value (e.g. -1) to prevent
82 // TODO invalid calibration data to be used.
83 //
84
85 for (Int_t i = 0; i < kCDBCacheSize; ++i)
86 {
87 fCDBCache[i] = 0;
88 fCDBEntries[i] = 0;
89 }
90}
91
92//_____________________________________________________________________________
93AliEMCALTriggerDCSConfigDB::AliEMCALTriggerDCSConfigDB(const AliEMCALTriggerDCSConfigDB &c) : TObject(c)
94,fRun(-1)
95{
96 //
97 // Copy constructor (not that it make any sense for a singleton...)
98 //
99
100 for (Int_t i = 0; i < kCDBCacheSize; ++i)
101 {
102 fCDBCache[i] = 0;
103 fCDBEntries[i] = 0;
104 }
105}
106
107//_____________________________________________________________________________
108AliEMCALTriggerDCSConfigDB &AliEMCALTriggerDCSConfigDB::operator=(const AliEMCALTriggerDCSConfigDB &c)
109{
110 //
111 // Assignment operator (same as above ...)
112 //
113 if (this != &c)
114 {
115 AliFatal("No assignment operator defined");
116 }
117
118 return *this;
119}
120
121//_____________________________________________________________________________
122AliEMCALTriggerDCSConfigDB::~AliEMCALTriggerDCSConfigDB()
123{
124 //
125 // destructor
126 //
127 Invalidate();
128}
129
130//_____________________________________________________________________________
131const TObject *AliEMCALTriggerDCSConfigDB::GetCachedCDBObject(Int_t id)
132{
133 //
134 // Retrieves a cdb object with the given id. The objects are cached as
135 // long as the run number is not changed.
136 //
137 // Put together the available objects here by using the lines
138 // a) For usual calibration objects:
139 // case kID<Name> :
140 // return CacheCDBEntry(kID<Name>,"TRD/Calib/<Path>");
141 // break;
142 // See function CacheCDBEntry for details.
143 // and
144 // b) For calibration data which depends on two objects: One containing
145 // a value per detector and one the local fluctuations per pad:
146 // case kID<Name> :
147 // return CacheMergeCDBEntry(kID<Name>,"TRD/Calib/<padPath>","TRD/Calib/<chamberPath>");
148 // break;
149 // See function CacheMergeCDBEntry for details.
150 //
151
152 switch (id)
153 {
154 // Parameters defined per pad and chamber
155 case kIDTriggerConfig :
156 return CacheCDBEntry(kIDTriggerConfig, "EMCAL/Config/Trigger");
157 break;
158 default:
159 AliError("Object not found!");
160 break;
161 }
162
163 return 0x0;
164}
165
166//_____________________________________________________________________________
167AliCDBEntry* AliEMCALTriggerDCSConfigDB::GetCDBEntry(const char *cdbPath)
168{
169 //
170 // Retrieves an entry with path <cdbPath> from the CDB.
171 //
172 AliCDBEntry *entry = AliCDBManager::Instance()->Get(cdbPath,fRun);
173
174 if (!entry)
175 {
176 AliError(Form("Failed to get entry: %s",cdbPath));
177 return 0;
178 }
179
180 return entry;
181}
182
183//_____________________________________________________________________________
184const TObject *AliEMCALTriggerDCSConfigDB::CacheCDBEntry(Int_t id, const char *cdbPath)
185{
186 //
187 // Caches the entry <id> with cdb path <cdbPath>
188 //
189
190 if (!fCDBCache[id])
191 {
192 fCDBEntries[id] = GetCDBEntry(cdbPath);
193
194 if (fCDBEntries[id]) fCDBCache[id] = fCDBEntries[id]->GetObject();
195 }
196
197 return fCDBCache[id];
198}
199
200//_____________________________________________________________________________
201void AliEMCALTriggerDCSConfigDB::SetRun(Long64_t run)
202{
203 //
204 // Sets current run number. Calibration data is read from the corresponding file.
205 // When the run number changes the caching is invalidated.
206 //
207
208 if (fRun == run) return;
209
210 fRun = run;
211
212 Invalidate();
213}
214
215//_____________________________________________________________________________
216void AliEMCALTriggerDCSConfigDB::Invalidate()
217{
218 //
219 // Invalidates cache (when run number is changed).
220 //
221 for (Int_t i = 0; i < kCDBCacheSize; ++i)
222 {
223 if (fCDBEntries[i])
224 {
225 if (AliCDBManager::Instance()->GetCacheFlag() == kFALSE)
226 {
227 if ((fCDBEntries[i]->IsOwner() == kFALSE) && (fCDBCache[i])) delete fCDBCache[i];
228
229 delete fCDBEntries[i];
230 }
231
232 fCDBEntries[i] = 0;
233 fCDBCache[i] = 0;
234 }
235 }
236}
237
238//_____________________________________________________________________________
239const AliEMCALTriggerDCSConfig* AliEMCALTriggerDCSConfigDB::GetTriggerDCSConfig()
240{
241 //
242 //
243 //
244 const AliEMCALTriggerDCSConfig* dcsConf = dynamic_cast<const AliEMCALTriggerDCSConfig*>(GetCachedCDBObject(kIDTriggerConfig));
245
246 if (!dcsConf)
247 {
248 AliError("Trigger DCS configuration not found!");
249 return 0x0;
250 }
251 else
252 return dcsConf;
253}
254
255//_____________________________________________________________________________
256void AliEMCALTriggerDCSConfigDB::GetSTUSegmentation(Int_t ss[], Int_t sp[])
257{
258 //
259 //
260 //
261 const AliEMCALTriggerDCSConfig* dcsConf = dynamic_cast<const AliEMCALTriggerDCSConfig*>(GetCachedCDBObject(kIDTriggerConfig));
262
263 AliEMCALTriggerSTUDCSConfig* stuConf = dcsConf->GetSTUDCSConfig();
264
265 Int_t fw = stuConf->GetFw();
266
267 switch ( fw )
268 {
269 case 2223:
270 ss[0] = 4;
271 ss[1] = 4;
272 sp[0] = 2;
273 sp[1] = 2;
274 break;
275 default:
276 AliError("Firmware version do not match!");
277 break;
278 }
279}
280
281//_____________________________________________________________________________
282Int_t AliEMCALTriggerDCSConfigDB::GetTRUGTHRL0(Int_t iTRU)
283{
284 //
285 //
286 //
287 const AliEMCALTriggerDCSConfig* dcsConf = dynamic_cast<const AliEMCALTriggerDCSConfig*>(GetCachedCDBObject(kIDTriggerConfig));
288
289 AliEMCALTriggerTRUDCSConfig* truConf = dcsConf->GetTRUDCSConfig(iTRU);
290
291 return truConf->GetGTHRL0();
292}