]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONCalibrationData.cxx
Add path for buspatch cable length file
[u/mrichter/AliRoot.git] / MUON / AliMUONCalibrationData.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 // $Id$
17
18 #include "AliMUONCalibrationData.h"
19
20 #include "AliCDBEntry.h"
21 #include "AliCDBManager.h"
22 #include "AliLog.h"
23 #include "AliMUONTriggerEfficiencyCells.h"
24 #include "AliMUONTriggerLut.h"
25 #include "AliMUONVStore.h"
26 #include "AliMUONVStore.h"
27 #include "AliMUONVCalibParam.h"
28 #include "Riostream.h"
29 #include "TMap.h"
30
31 /// \class AliMUONCalibrationData
32 ///
33 /// For the moment, this class stores pedestals, gains, hv (for tracker)
34 /// and lut, masks and efficiencies (for trigger) that are fetched from the CDB.
35 ///
36 /// This class is to be considered as a convenience class.
37 /// Its aim is to ease retrieval of calibration data from the 
38 /// condition database.
39 ///
40 /// It acts as a "facade" to a bunch of underlying 
41 /// containers/calibration classes.
42 ///
43 /// \author Laurent Aphecetche
44
45 /// \cond CLASSIMP
46 ClassImp(AliMUONCalibrationData)
47 /// \endcond
48
49 //_____________________________________________________________________________
50 AliMUONCalibrationData::AliMUONCalibrationData(Int_t runNumber, 
51                                                Bool_t deferredInitialization) 
52 : TObject(), 
53 fIsValid(kTRUE),
54 fRunNumber(runNumber), 
55 fGains(0x0), 
56 fPedestals(0x0),
57 fHV(0x0),
58 fLocalTriggerBoardMasks(0x0),
59 fRegionalTriggerBoardMasks(0x0),
60 fGlobalTriggerBoardMasks(0x0),
61 fTriggerLut(0x0),
62 fTriggerEfficiency(0x0),
63 fCapacitances(0x0),
64 fNeighbours(0x0)
65 {
66 /// Default ctor.
67
68   // If deferredInitialization is false, we read *all* calibrations
69   // at once.
70   // So when using this class to access only one kind of calibrations (e.g.
71   // only pedestals), you should put deferredInitialization to kTRUE, which
72   // will instruct this object to fetch the data only when neeeded.
73
74   if ( deferredInitialization == kFALSE )
75   {
76     Gains();
77     Pedestals();
78     HV();
79     LocalTriggerBoardMasks(0);
80     RegionalTriggerBoardMasks(0);
81     GlobalTriggerBoardMasks();
82     TriggerLut();
83     TriggerEfficiency();
84     Capacitances();
85     Neighbours();
86   }
87 }
88
89 //_____________________________________________________________________________
90 AliMUONCalibrationData::~AliMUONCalibrationData()
91 {
92   /// Destructor. Note that we're the owner of our pointers.
93   Reset();
94 }
95
96 //_____________________________________________________________________________
97 AliMUONVStore*
98 AliMUONCalibrationData::Capacitances() const
99 {
100   /// Create (if needed) and return the internal store for capacitances.
101   
102   if (!fCapacitances)
103   {
104     fCapacitances = CreateCapacitances(fRunNumber);
105   }
106   return fCapacitances;
107 }
108
109 //_____________________________________________________________________________
110 AliMUONVStore*
111 AliMUONCalibrationData::CreateCapacitances(Int_t runNumber)
112 {
113   /// Create capa store from OCDB for a given run
114   
115   return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Capacitances"));
116 }
117
118 //_____________________________________________________________________________
119 AliMUONVStore*
120 AliMUONCalibrationData::CreateGains(Int_t runNumber)
121 {
122   /// Create a new gain store from the OCDB for a given run
123   return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Gains"));
124 }
125
126 //_____________________________________________________________________________
127 AliMUONVCalibParam*
128 AliMUONCalibrationData::CreateGlobalTriggerBoardMasks(Int_t runNumber)
129 {
130   /// Create the internal store for GlobalTriggerBoardMasks from OCDB
131   
132   return dynamic_cast<AliMUONVCalibParam*>(CreateObject(runNumber,"MUON/Calib/GlobalTriggerBoardMasks"));
133 }
134
135 //_____________________________________________________________________________
136 TMap*
137 AliMUONCalibrationData::CreateHV(Int_t runNumber)
138 {
139   /// Create a new HV map from the OCDB for a given run
140   return dynamic_cast<TMap*>(CreateObject(runNumber,"MUON/Calib/HV"));
141 }
142
143 //_____________________________________________________________________________
144 AliMUONVStore*
145 AliMUONCalibrationData::CreateLocalTriggerBoardMasks(Int_t runNumber)
146 {
147   /// Get the internal store for LocalTriggerBoardMasks from OCDB
148   
149   return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/LocalTriggerBoardMasks"));
150 }
151
152 //_____________________________________________________________________________
153 AliMUONVStore*
154 AliMUONCalibrationData::CreateNeighbours(Int_t runNumber)
155 {
156   /// Create a neighbour store from the OCDB for a given run
157   return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Neighbours"));
158 }
159
160 //_____________________________________________________________________________
161 TObject*
162 AliMUONCalibrationData::CreateObject(Int_t runNumber, const char* path)
163 {
164   /// Access the CDB for a given path (e.g. MUON/Calib/Pedestals),
165   /// and return the corresponding TObject.
166   
167   AliCDBManager* man = AliCDBManager::Instance();
168   
169   Bool_t cacheStatus = man->GetCacheFlag();
170   
171   man->SetCacheFlag(kFALSE);
172   
173   AliCDBEntry* entry =  AliCDBManager::Instance()->Get(path,runNumber);
174   
175   man->SetCacheFlag(cacheStatus);
176   
177   if (entry)
178   {
179     return entry->GetObject();
180   }
181   
182   return 0x0;
183 }
184
185 //_____________________________________________________________________________
186 AliMUONVStore*
187 AliMUONCalibrationData::CreatePedestals(Int_t runNumber)
188 {
189   /// Create a new pedestal store from the OCDB for a given run
190   return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Pedestals"));
191 }
192
193 //_____________________________________________________________________________
194 AliMUONVStore*
195 AliMUONCalibrationData::CreateRegionalTriggerBoardMasks(Int_t runNumber)
196 {
197   /// Create the internal store for RegionalTriggerBoardMasks from OCDB
198   
199   return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/RegionalTriggerBoardMasks"));
200 }
201
202 //_____________________________________________________________________________
203 AliMUONTriggerEfficiencyCells* 
204 AliMUONCalibrationData::CreateTriggerEfficiency(Int_t runNumber)
205 {
206   /// Create trigger efficiency object from OCBD
207   
208   return dynamic_cast<AliMUONTriggerEfficiencyCells*>(CreateObject(runNumber,"MUON/Calib/TriggerEfficiency"));
209 }
210
211 //_____________________________________________________________________________
212 AliMUONTriggerLut* 
213 AliMUONCalibrationData::CreateTriggerLut(Int_t runNumber)
214 {
215   /// Create trigger LUT from OCDB
216   
217   return dynamic_cast<AliMUONTriggerLut*>(CreateObject(runNumber,"MUON/Calib/TriggerLut"));
218 }
219
220 //_____________________________________________________________________________
221 AliMUONVStore*
222 AliMUONCalibrationData::Gains() const
223 {
224   /// Create (if needed) and return the internal store for gains.
225   if (!fGains)
226   {
227     fGains = CreateGains(fRunNumber);
228   }
229   return fGains;
230 }
231
232 //_____________________________________________________________________________
233 AliMUONVCalibParam*
234 AliMUONCalibrationData::Gains(Int_t detElemId, Int_t manuId) const
235 {
236 /// Return the gains for a given (detElemId, manuId) pair
237 /// Note that, unlike the DeadChannel case, if the result is 0x0, that's an
238 /// error (meaning that we should get gains for all channels).
239
240   AliMUONVStore* gains = Gains();
241   if (!gains)
242   {
243     return 0x0;
244   }
245   
246   return static_cast<AliMUONVCalibParam*>(gains->FindObject(detElemId,manuId));
247 }
248
249 //_____________________________________________________________________________
250 AliMUONVCalibParam* 
251 AliMUONCalibrationData::GlobalTriggerBoardMasks() const
252 {
253   /// Return the masks for the global trigger board.
254   
255   if (!fGlobalTriggerBoardMasks)
256   {
257     fGlobalTriggerBoardMasks = CreateGlobalTriggerBoardMasks(fRunNumber);
258   }
259   return fGlobalTriggerBoardMasks;
260 }
261
262 //_____________________________________________________________________________
263 TMap*
264 AliMUONCalibrationData::HV() const
265 {
266   /// Return the calibration for a given (detElemId, manuId) pair
267   
268   if (!fHV)
269   {
270     fHV = CreateHV(fRunNumber);
271   }
272   return fHV;
273 }
274
275 //_____________________________________________________________________________
276 AliMUONVStore*
277 AliMUONCalibrationData::Neighbours() const
278 {
279   /// Create (if needed) and return the internal store for neighbours.
280   if (!fNeighbours)
281   {
282     fNeighbours = CreateNeighbours(fRunNumber);
283   }
284   return fNeighbours;
285 }
286
287 //_____________________________________________________________________________
288 AliMUONVCalibParam* 
289 AliMUONCalibrationData::LocalTriggerBoardMasks(Int_t localBoardNumber) const
290 {
291 /// Return the masks for a given trigger local board.
292
293   if (!fLocalTriggerBoardMasks)
294   {
295     fLocalTriggerBoardMasks = CreateLocalTriggerBoardMasks(fRunNumber);
296   }
297
298   if ( fLocalTriggerBoardMasks ) 
299   {
300     AliMUONVCalibParam* ltbm = 
301       static_cast<AliMUONVCalibParam*>(fLocalTriggerBoardMasks->FindObject(localBoardNumber));
302     if (!ltbm)
303     {
304       AliError(Form("Could not get mask for localBoardNumber=%d",localBoardNumber));
305     }
306     return ltbm;  
307   }
308   return 0x0;
309 }
310
311 //_____________________________________________________________________________
312 AliMUONVStore*
313 AliMUONCalibrationData::Pedestals() const
314 {
315   /// Return pedestals
316   if (!fPedestals)
317   {
318     fPedestals = CreatePedestals(fRunNumber);
319   }
320   return fPedestals;
321 }
322
323 //_____________________________________________________________________________
324 AliMUONVCalibParam*
325 AliMUONCalibrationData::Pedestals(Int_t detElemId, Int_t manuId) const
326 {
327   /// Return the pedestals for a given (detElemId, manuId) pair.
328   /// A return value of 0x0 is considered an error, meaning we should get
329   /// pedestals for all channels.
330   
331   AliMUONVStore* pedestals = Pedestals();
332   if (!pedestals) 
333   {
334     return 0x0;
335   }
336   
337   return static_cast<AliMUONVCalibParam*>(pedestals->FindObject(detElemId,manuId));
338 }
339
340 //_____________________________________________________________________________
341 void
342 AliMUONCalibrationData::Print(Option_t*) const
343 {
344   /// A very basic dump of our guts.
345
346   cout << "RunNumber " << RunNumber()
347   << " fGains=" << fGains
348   << " fPedestals=" << fPedestals
349   << " fHV=" << fHV
350   << " fLocalTriggerBoardMasks=" << fLocalTriggerBoardMasks
351   << " fRegionalTriggerBoardMasks=" << fRegionalTriggerBoardMasks
352   << " fGlobalTriggerBoardMasks=" << fGlobalTriggerBoardMasks
353   << " fTriggerLut=" << fTriggerLut
354   << endl;
355 }
356
357 //_____________________________________________________________________________
358 AliMUONVCalibParam* 
359 AliMUONCalibrationData::RegionalTriggerBoardMasks(Int_t regionalBoardNumber) const
360 {
361 /// Return the masks for a given trigger regional board.
362
363   if ( !fRegionalTriggerBoardMasks ) 
364   {
365     fRegionalTriggerBoardMasks = CreateRegionalTriggerBoardMasks(fRunNumber);
366   }
367   
368   if ( fRegionalTriggerBoardMasks ) 
369   {
370     AliMUONVCalibParam* rtbm = 
371       static_cast<AliMUONVCalibParam*>(fRegionalTriggerBoardMasks->FindObject(regionalBoardNumber));
372     
373     if (!rtbm)
374     {
375       AliError(Form("Could not get mask for regionalBoard index=%d",index));
376     }
377     return rtbm;  
378   }
379   return 0x0;
380 }
381
382 //_____________________________________________________________________________
383 AliMUONTriggerEfficiencyCells*
384 AliMUONCalibrationData::TriggerEfficiency() const
385 {
386 /// Return the trigger efficiency.
387
388   if (!fTriggerEfficiency)
389   {
390     fTriggerEfficiency = CreateTriggerEfficiency(fRunNumber);
391   }
392   return fTriggerEfficiency;
393 }
394
395
396 //_____________________________________________________________________________
397 AliMUONTriggerLut*
398 AliMUONCalibrationData::TriggerLut() const
399 {
400 /// Return the trigger look up table.
401
402   if (!fTriggerLut)
403   {
404     fTriggerLut = CreateTriggerLut(fRunNumber);
405   }
406   return fTriggerLut;
407 }
408
409 //_____________________________________________________________________________
410 void
411 AliMUONCalibrationData::Reset()
412 {
413 /// Reset all data
414
415   delete fPedestals;
416   fPedestals = 0x0;
417   delete fGains;
418   fGains = 0x0;
419   delete fHV;
420   fHV = 0x0;
421   delete fLocalTriggerBoardMasks;
422   fLocalTriggerBoardMasks = 0x0;
423   delete fRegionalTriggerBoardMasks;
424   fRegionalTriggerBoardMasks = 0x0;
425   delete fGlobalTriggerBoardMasks;
426   fGlobalTriggerBoardMasks = 0x0;
427   delete fTriggerLut;
428   fTriggerLut = 0x0;
429   delete fTriggerEfficiency;
430   fTriggerEfficiency = 0x0;
431   delete fCapacitances;
432   fCapacitances = 0x0;
433   delete fNeighbours;
434   fNeighbours = 0x0;
435 }
436
437
438