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