correct mask for V0 charge decoding in STU payload
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALCalibReference.h
1 #ifndef ALIEMCALCALIBREFERENCE_H
2 #define ALIEMCALCALIBREFERENCE_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id: $ */
8
9 #include <TObject.h>
10 #include <TObjArray.h>
11 #include "AliEMCALGeoParams.h"
12 class TString;
13 class TTree;
14
15 /*
16   Objects of this class contain basis for reference calibrations
17 */
18
19 // total calibration factor is a product of
20 // a) overall calibration factor [fAbsoluteGain]
21 // b) individual gain factor per tower [fRelativeGain]
22 // c) time-dependent correction
23 // In this class we store the needed static ingredients for c)
24
25 // ******* internal class definition *************
26 // values per single tower
27 class AliEMCALCalibReferenceVal : public TObject {
28
29  public:
30   AliEMCALCalibReferenceVal() : TObject(), // just init values
31     fHighLow(0),
32     fLEDAmp(0),
33     fLEDAmpRMS(0)
34     {
35     }
36   
37   void Init() {
38     fHighLow = 0;
39     fLEDAmp = 0;
40     fLEDAmpRMS = 0;
41     return;
42   }
43
44  public:
45   void SetHighLow(Int_t i) { fHighLow = i; }; //
46   Int_t GetHighLow() const { return fHighLow; }; //
47   void SetLEDAmp(Float_t f) { fLEDAmp = f; }; //
48   Float_t GetLEDAmp() const { return fLEDAmp; }; //
49   void SetLEDAmpRMS(Float_t f) { fLEDAmpRMS = f; }; //
50   Float_t GetLEDAmpRMS() const { return fLEDAmpRMS; }; //
51
52  private:
53   Int_t fHighLow; // 0 (low) or 1 (high) gain, used for LEDAmp info
54   Float_t fLEDAmp; // LED amplitude
55   Float_t fLEDAmpRMS; // RMS
56
57   ClassDef(AliEMCALCalibReferenceVal, 1) // help class
58 };
59
60 // 1 SuperModule's worth of info: info on where the different APDs are
61 class AliEMCALSuperModuleCalibReference : public TObject {
62
63  public:
64   AliEMCALSuperModuleCalibReference(const int smNum=0) : TObject(), // just init values
65     fSuperModuleNum(smNum),
66     fReferenceTime(0)
67     {
68       for (int iref=0; iref<AliEMCALGeoParams::fgkEMCALLEDRefs; iref++) {
69         fLEDRefAmp[iref] = 0;
70         fLEDRefAmpRMS[iref] = 0;
71         fLEDRefHighLow[iref] = 0;
72       }
73
74       for (int itemp=0; itemp<AliEMCALGeoParams::fgkEMCALTempSensors; itemp++) {
75         fTemperature[itemp] = 0;
76         fTemperatureRMS[itemp] = 0;
77       }
78
79       for (int icol=0; icol<AliEMCALGeoParams::fgkEMCALCols; icol++) {
80         for (int irow=0; irow<AliEMCALGeoParams::fgkEMCALRows; irow++) {
81           fAPDVal[icol][irow].Init();
82         }
83       }
84     }
85
86  public:
87   // first
88   void SetSuperModuleNum(Int_t i) { fSuperModuleNum = i;}; // 
89   Int_t GetSuperModuleNum() const { return fSuperModuleNum;}; // 
90   void SetReferenceTime(Int_t i) { fReferenceTime = i;}; // 
91   Int_t GetReferenceTime() const { return fReferenceTime;}; // 
92
93   // second
94   void SetLEDRefAmp(int iLEDRef, Float_t f) { fLEDRefAmp[iLEDRef] = f;}; // 
95   Float_t GetLEDRefAmp(int iLEDRef) const { return fLEDRefAmp[iLEDRef];}; // 
96   void SetLEDRefAmpRMS(int iLEDRef, Float_t f) { fLEDRefAmpRMS[iLEDRef] = f;}; // 
97   Float_t GetLEDRefAmpRMS(int iLEDRef) const { return fLEDRefAmpRMS[iLEDRef];}; // 
98   void SetLEDRefHighLow(int iLEDRef, Int_t i) { fLEDRefHighLow[iLEDRef] = i;}; // 
99   Int_t GetLEDRefHighLow(int iLEDRef) const { return fLEDRefHighLow[iLEDRef];}; // 
100
101   void SetTemperature(int itemp, Float_t f) { fTemperature[itemp] = f;}; // 
102   Float_t GetTemperature(int itemp) const { return fTemperature[itemp];}; // 
103   void SetTemperatureRMS(int itemp, Float_t f) { fTemperatureRMS[itemp] = f;}; // 
104   Float_t GetTemperatureRMS(int itemp) const { return fTemperatureRMS[itemp];}; // 
105
106   // third
107   AliEMCALCalibReferenceVal * GetAPDVal(int icol, int irow) 
108     { return &fAPDVal[icol][irow]; };
109
110  private:
111   // first: overall values for the whole SuperModule
112   Int_t fSuperModuleNum; // which SuperModule is this?
113   Int_t fReferenceTime; // t0, unix timestamp
114   
115   // second: additional info for LED Reference and SM temperature
116   Float_t fLEDRefAmp[AliEMCALGeoParams::fgkEMCALLEDRefs]; // LED amplitude at  t0, low gain equivalent
117   Float_t fLEDRefAmpRMS[AliEMCALGeoParams::fgkEMCALLEDRefs]; // RMS
118   Int_t fLEDRefHighLow[AliEMCALGeoParams::fgkEMCALLEDRefs]; // 0 (low) or 1 (high) gain
119   
120   Float_t fTemperature[AliEMCALGeoParams::fgkEMCALTempSensors]; // temperature at t0
121   Float_t fTemperatureRMS[AliEMCALGeoParams::fgkEMCALTempSensors]; // RMS
122   
123   // third: individual info for each tower
124   AliEMCALCalibReferenceVal fAPDVal[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; // at t0
125
126   ClassDef(AliEMCALSuperModuleCalibReference, 1) // help class
127 };
128 // ******* end of internal class definition *************
129
130 class AliEMCALCalibReference : public TObject {
131
132 public:
133
134   enum kProblemType {kNoLED=-999};// code in possible problems
135
136   AliEMCALCalibReference(const int nSM = AliEMCALGeoParams::fgkEMCALModules);
137
138   // Read and Write txt I/O methods are normally not used, but are useful for 
139   // filling the object before it is saved in OCDB 
140   void ReadTextCalibReferenceInfo(Int_t nSM, const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
141   void WriteTextCalibReferenceInfo(const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
142   void ReadRootCalibReferenceInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
143   void ReadTreeCalibReferenceInfo(TTree *tree, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
144   void WriteRootCalibReferenceInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
145
146   virtual ~AliEMCALCalibReference();
147
148   // pointer to stored info.
149   Int_t GetNSuperModule() const { return fNSuperModule; }; 
150
151   // - via the index in the stored array:
152   virtual AliEMCALSuperModuleCalibReference * GetSuperModuleCalibReferenceId(Int_t smIndex) const
153    { return (AliEMCALSuperModuleCalibReference*) fSuperModuleData[smIndex]; };
154
155   // - or via the actual SM number
156   virtual AliEMCALSuperModuleCalibReference * GetSuperModuleCalibReferenceNum(Int_t smNum) const;
157
158 protected:
159
160   Int_t           fNSuperModule; // Number of supermodules.
161   TObjArray fSuperModuleData; // SuperModule data
162
163 private:
164
165   AliEMCALCalibReference(const AliEMCALCalibReference &);
166   AliEMCALCalibReference &operator = (const AliEMCALCalibReference &);
167
168   ClassDef(AliEMCALCalibReference, 1) //CalibReference data info
169 };
170
171 #endif