Make copy of the TPC parameters (Marian)
[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 {
82   //
83   // constructor
84   //  
85   fRun = -1;
86       
87   //
88   //
89   //
90   fPadGainFactor = 0;
91   fPadTime0      = 0;
92   fPadPRFWidth   = 0;
93   fPadNoise      = 0;
94   fPedestals     = 0;
95   fParam         =0;
96   Update();    // temporary
97 }
98
99 //_____________________________________________________________________________
100 AliTPCcalibDB::~AliTPCcalibDB() 
101 {
102   //
103   // destructor
104   //
105   
106   // don't delete anything, CDB cache is active!
107   //if (fPadGainFactor) delete fPadGainFactor;
108   //if (fPadTime0) delete fPadTime0;
109   //if (fPadPRFWidth) delete fPadPRFWidth;
110   //if (fPadNoise) delete fPadNoise;
111 }
112
113
114 //_____________________________________________________________________________
115 AliCDBEntry* AliTPCcalibDB::GetCDBEntry(const char* cdbPath)
116 {
117   // 
118   // Retrieves an entry with path <cdbPath> from the CDB.
119   //
120   char chinfo[1000];
121     
122   AliCDBEntry* entry = AliCDBManager::Instance()->Get(cdbPath, fRun); 
123   if (!entry) 
124   { 
125     sprintf(chinfo,"AliTPCcalibDB: Failed to get entry:\t%s ", cdbPath);
126     AliError(chinfo); 
127     return 0; 
128   }
129   return entry;
130 }
131
132
133 //_____________________________________________________________________________
134 void AliTPCcalibDB::SetRun(Long64_t run)
135 {
136   //
137   // Sets current run number. Calibration data is read from the corresponding file. 
138   //  
139   if (fRun == run)
140     return;  
141   fRun = run;
142   Update();
143 }
144   
145
146
147 void AliTPCcalibDB::Update(){
148   //
149   AliCDBEntry * entry=0;
150   
151   Bool_t cdbCache = AliCDBManager::Instance()->GetCacheFlag(); // save cache status
152   AliCDBManager::Instance()->SetCacheFlag(kTRUE); // activate CDB cache
153   
154   //
155   entry          = GetCDBEntry("TPC/Calib/PadGainFactor");
156   if (entry){
157     //if (fPadGainFactor) delete fPadGainFactor;
158     entry->SetOwner(kTRUE);
159     fPadGainFactor = (AliTPCCalPad*)entry->GetObject();
160   }
161   //
162   entry          = GetCDBEntry("TPC/Calib/PadTime0");
163   if (entry){
164     //if (fPadTime0) delete fPadTime0;
165     entry->SetOwner(kTRUE);
166     fPadTime0 = (AliTPCCalPad*)entry->GetObject();
167   }
168   //
169   entry          = GetCDBEntry("TPC/Calib/PadPRF");
170   if (entry){
171     //if (fPadPRFWidth) delete fPadPRFWidth;
172     entry->SetOwner(kTRUE);
173     fPadPRFWidth = (AliTPCCalPad*)entry->GetObject();
174   }
175   //
176   entry          = GetCDBEntry("TPC/Calib/PadNoise");
177   if (entry){
178     //if (fPadNoise) delete fPadNoise;
179     entry->SetOwner(kTRUE);
180     fPadNoise = (AliTPCCalPad*)entry->GetObject();
181   }
182
183   entry          = GetCDBEntry("TPC/Calib/Pedestals");
184   if (entry){
185     //if (fPedestals) delete fPedestals;
186     entry->SetOwner(kTRUE);
187     fPedestals = (AliTPCCalPad*)entry->GetObject();
188   }
189
190   entry          = GetCDBEntry("TPC/Calib/Parameters");
191   if (entry){
192     //if (fPadNoise) delete fPadNoise;
193     entry->SetOwner(kTRUE);
194     fParam = (AliTPCParam*)(entry->GetObject()->Clone());
195   }
196
197
198   //
199   AliCDBManager::Instance()->SetCacheFlag(cdbCache); // reset original CDB cache
200   
201 }