Line data Source code
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 : #include "AliTRDCalOnlineGainTableMCM.h"
17 : #include "AliTRDCalOnlineGainTable.h"
18 :
19 : //////////////////////////////////////////////////////////////////////////////////////////////
20 : //
21 : // Data structure to store gaintables of the online calibration in the OCDB
22 : // consisting of three classes:
23 : // AliTRDCalOnlineGainTable
24 : // AliTRDCalOnlineGainTableROC
25 : // AliTRDCalOnlineGainTableMCM
26 : //
27 : // AliTRDCalOnlineGainTable is the main class from which all stored data can be accessed.
28 : // The two sub-classes AliTRDCalOnlineGainTableROC and AliTRDCalOnlineGainTableMCM
29 : // contain the gaintables on ROC level and on the MCM level respectively.
30 : //
31 : // The online calibration is used to compensate gain deviations on the pad level.
32 : // For the offline reconstruction the online calibration has to be undone.
33 : // The corresponding gain correction factor that was used by the online gain filter can be accessed
34 : // via the functions AliTRDCalOnlineGainTable::GetGainCorrectionFactor(Int_t det, Int_t row, Int_t col)
35 : // and AliTRDCalOnlineGainTable::GetGainCorrectionFactor(Int_t sector, Int_t stack, Int_t layer, Int_t row, Int_t col).
36 : //
37 : // With the class AliTRDCalOnlineGainTablesMCM all values used for the
38 : // online calibration can be set and accessed on the MCM/channel level
39 : //
40 : //////////////////////////////////////////////////////////////////////////////////////////////
41 :
42 48 : ClassImp(AliTRDCalOnlineGainTableMCM);
43 :
44 : //_____________________________________________________________________________
45 : AliTRDCalOnlineGainTableMCM::AliTRDCalOnlineGainTableMCM()
46 917248 : :TObject()
47 917248 : ,fAdcdac(0)
48 917248 : ,fMCMGain(0.0)
49 4586240 : {
50 : //
51 : // constructor
52 : //
53 :
54 917248 : fAdcdac = -1;
55 917248 : fMCMGain = AliTRDCalOnlineGainTable::UnDef;
56 :
57 40358912 : for (int i=0; i<21;i++) {
58 :
59 19262208 : fFGFN[i] = -1;
60 19262208 : fFGAN[i] = -1;
61 : }
62 :
63 1834496 : }
64 :
65 : //_____________________________________________________________________________
66 : AliTRDCalOnlineGainTableMCM::~AliTRDCalOnlineGainTableMCM()
67 0 : {
68 : //
69 : // destructor
70 : //
71 :
72 0 : }
73 :
74 : //_____________________________________________________________________________
75 : Float_t AliTRDCalOnlineGainTableMCM::GetGainCorrectionFactor(Int_t channel)
76 : {
77 : //
78 : // returns the Gain Correction Factor of the given channel that was used by the online gain filter
79 : // 1.0 means no correction
80 : // 0.9 means a correction of -10%
81 : // 1.1 means a correction of +10% etc.
82 : //
83 :
84 0 : if (fAdcdac == 0){
85 0 : if (fFGFN[channel] < 0){
86 0 : return -1.;
87 : }
88 0 : else if(fFGFN[channel] > 511){
89 0 : return -999.;
90 : }
91 : else{
92 0 : return (fFGFN[channel]/2048.)+0.875;
93 :
94 : }
95 : }
96 : else{
97 : // if the reference voltage of the ADC is not the default value
98 : // this taken into account for the Gain Correction Factor
99 0 : Float_t fAdcdac_Correction = ( 1./(1.+((Float_t)fAdcdac/31.)*(0.4/1.05)));
100 0 : return (fAdcdac_Correction*((fFGFN[channel]/2048.)+0.875));
101 : }
102 :
103 0 : }
104 :
105 : //_____________________________________________________________________________
106 : Short_t AliTRDCalOnlineGainTableMCM::GetAdcdac()
107 : {
108 : //
109 : // returns an integer between 0 and 31 which corresponds to an ADC reference voltage between 1.05V and 1.45V
110 : // U_Ref = (1.05V + (fAdcdac/31)*0.4V
111 : // fAdcdac is the same value for all ADCs within one MCM
112 : //
113 :
114 0 : return fAdcdac;
115 :
116 : }
117 :
118 : //_____________________________________________________________________________
119 : Float_t AliTRDCalOnlineGainTableMCM::GetMCMGain()
120 : {
121 : //
122 : // returns the Gain Factor which would lead to a Gain Correction Factor of 1.0
123 : // this value is the same for all channels within one MCM
124 : // this value is used for the online PID
125 : //
126 :
127 0 : return fMCMGain;
128 :
129 : }
130 :
131 : //_____________________________________________________________________________
132 : Short_t AliTRDCalOnlineGainTableMCM::GetFGAN(Int_t channel)
133 : {
134 : //
135 : // returns the Gain Correction Filter Additive as an interger between 0 and 15
136 : // as it is loaded into the TRAP
137 : //
138 :
139 0 : if (fFGAN[channel] < 0){
140 0 : return -1;
141 : }
142 0 : else if(fFGAN[channel] > 511){
143 0 : return -999;
144 : }
145 : else{
146 0 : return fFGAN[channel];
147 :
148 : }
149 :
150 0 : }
151 :
152 : //_____________________________________________________________________________
153 : Short_t AliTRDCalOnlineGainTableMCM::GetFGFN(Int_t channel)
154 : {
155 : //
156 : // returns the Gain Correction Filter Factors as an interger between 0 and 511
157 : // as it is loaded into the TRAP
158 : //
159 :
160 0 : if (fFGFN[channel] < 0){
161 0 : return -1;
162 : }
163 0 : else if(fFGFN[channel] > 511){
164 0 : return -999;
165 : }
166 : else{
167 0 : return fFGFN[channel];
168 :
169 : }
170 :
171 0 : }
172 :
|