Error message, consistent return value (Zubayer)
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibDB.cxx
CommitLineData
c5bbaa2c 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
17///////////////////////////////////////////////////////////////////////////////
18// //
19// Class providing the calibration parameters by accessing the CDB //
20// //
21// Request an instance with AliTPCcalibDB::Instance() //
22// If a new event is processed set the event number with SetRun //
23// Then request the calibration data //
24// //
25///////////////////////////////////////////////////////////////////////////////
26
27
28#include <AliCDBManager.h>
29#include <AliCDBStorage.h>
30#include <AliCDBEntry.h>
31#include <AliLog.h>
32
33#include "AliTPCcalibDB.h"
34
35#include "AliTPCCalROC.h"
36#include "AliTPCCalPad.h"
37#include "AliTPCCalDet.h"
54472e4f 38#include "AliTPCSensorTempArray.h"
c5bbaa2c 39
40ClassImp(AliTPCcalibDB)
41
42AliTPCcalibDB* AliTPCcalibDB::fgInstance = 0;
43Bool_t AliTPCcalibDB::fgTerminated = kFALSE;
44
45
46//_ singleton implementation __________________________________________________
47AliTPCcalibDB* AliTPCcalibDB::Instance()
48{
49 //
50 // Singleton implementation
51 // Returns an instance of this class, it is created if neccessary
52 //
53
54 if (fgTerminated != kFALSE)
55 return 0;
56
57 if (fgInstance == 0)
58 fgInstance = new AliTPCcalibDB();
59
60 return fgInstance;
61}
62
63void AliTPCcalibDB::Terminate()
64{
65 //
66 // Singleton implementation
67 // Deletes the instance of this class and sets the terminated flag, instances cannot be requested anymore
68 // This function can be called several times.
69 //
70
71 fgTerminated = kTRUE;
72
73 if (fgInstance != 0)
74 {
75 delete fgInstance;
76 fgInstance = 0;
77 }
78}
79
80//_____________________________________________________________________________
81AliTPCcalibDB::AliTPCcalibDB()
82{
83 //
84 // constructor
85 //
54472e4f 86 fRun = -1;
87
88 //
89 //
90 //
91 fPadGainFactor = 0;
92 fPadTime0 = 0;
93 fPadPRFWidth = 0;
94 fPadNoise = 0;
95 fPedestals = 0;
96 fTemperature = 0;
97 fParam = 0;
c5bbaa2c 98 Update(); // temporary
99}
100
101//_____________________________________________________________________________
102AliTPCcalibDB::~AliTPCcalibDB()
103{
104 //
105 // destructor
106 //
68751c2c 107
108 // don't delete anything, CDB cache is active!
109 //if (fPadGainFactor) delete fPadGainFactor;
110 //if (fPadTime0) delete fPadTime0;
111 //if (fPadPRFWidth) delete fPadPRFWidth;
112 //if (fPadNoise) delete fPadNoise;
c5bbaa2c 113}
114
115
116//_____________________________________________________________________________
117AliCDBEntry* AliTPCcalibDB::GetCDBEntry(const char* cdbPath)
118{
119 //
120 // Retrieves an entry with path <cdbPath> from the CDB.
121 //
122 char chinfo[1000];
123
68751c2c 124 AliCDBEntry* entry = AliCDBManager::Instance()->Get(cdbPath, fRun);
c5bbaa2c 125 if (!entry)
126 {
127 sprintf(chinfo,"AliTPCcalibDB: Failed to get entry:\t%s ", cdbPath);
128 AliError(chinfo);
129 return 0;
130 }
131 return entry;
132}
133
134
135//_____________________________________________________________________________
136void AliTPCcalibDB::SetRun(Long64_t run)
137{
138 //
139 // Sets current run number. Calibration data is read from the corresponding file.
140 //
141 if (fRun == run)
142 return;
143 fRun = run;
144 Update();
145}
146
147
148
149void AliTPCcalibDB::Update(){
150 //
151 AliCDBEntry * entry=0;
68751c2c 152
153 Bool_t cdbCache = AliCDBManager::Instance()->GetCacheFlag(); // save cache status
154 AliCDBManager::Instance()->SetCacheFlag(kTRUE); // activate CDB cache
155
c5bbaa2c 156 //
157 entry = GetCDBEntry("TPC/Calib/PadGainFactor");
158 if (entry){
68751c2c 159 //if (fPadGainFactor) delete fPadGainFactor;
c5bbaa2c 160 entry->SetOwner(kTRUE);
161 fPadGainFactor = (AliTPCCalPad*)entry->GetObject();
162 }
163 //
164 entry = GetCDBEntry("TPC/Calib/PadTime0");
165 if (entry){
68751c2c 166 //if (fPadTime0) delete fPadTime0;
c5bbaa2c 167 entry->SetOwner(kTRUE);
168 fPadTime0 = (AliTPCCalPad*)entry->GetObject();
169 }
170 //
171 entry = GetCDBEntry("TPC/Calib/PadPRF");
172 if (entry){
68751c2c 173 //if (fPadPRFWidth) delete fPadPRFWidth;
c5bbaa2c 174 entry->SetOwner(kTRUE);
175 fPadPRFWidth = (AliTPCCalPad*)entry->GetObject();
176 }
177 //
178 entry = GetCDBEntry("TPC/Calib/PadNoise");
179 if (entry){
68751c2c 180 //if (fPadNoise) delete fPadNoise;
c5bbaa2c 181 entry->SetOwner(kTRUE);
182 fPadNoise = (AliTPCCalPad*)entry->GetObject();
183 }
8477f500 184
185 entry = GetCDBEntry("TPC/Calib/Pedestals");
186 if (entry){
187 //if (fPedestals) delete fPedestals;
188 entry->SetOwner(kTRUE);
189 fPedestals = (AliTPCCalPad*)entry->GetObject();
190 }
191
54472e4f 192 entry = GetCDBEntry("TPC/Calib/Temperature");
193 if (entry){
194 //if (fTemperature) delete fTemperature;
195 entry->SetOwner(kTRUE);
196 fTemperature = (AliTPCSensorTempArray*)entry->GetObject();
197 }
198
8477f500 199 entry = GetCDBEntry("TPC/Calib/Parameters");
200 if (entry){
54472e4f 201 //if (fPadNoise) delete fPadNoise;
8477f500 202 entry->SetOwner(kTRUE);
a778f7e3 203 fParam = (AliTPCParam*)(entry->GetObject()->Clone());
8477f500 204 }
205
206
c5bbaa2c 207 //
68751c2c 208 AliCDBManager::Instance()->SetCacheFlag(cdbCache); // reset original CDB cache
209
c5bbaa2c 210}