Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 2007-2009, 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 <Riostream.h>
19 : #include <TRandom.h>
20 : #include "AliITSCalibrationSDD.h"
21 : #include "AliLog.h"
22 :
23 : //////////////////////////////////////////////////////
24 : // Calibration class for set:ITS //
25 : // Specific subdetector implementation //
26 : // for silicon drift detectors //
27 : // //
28 : // //
29 : //////////////////////////////////////////////////////
30 :
31 : const Float_t AliITSCalibrationSDD::fgkTemperatureDefault = 296.;
32 : const Float_t AliITSCalibrationSDD::fgkNoiseDefault = 2.38;
33 : const Float_t AliITSCalibrationSDD::fgkGainDefault = 1.;
34 : const Float_t AliITSCalibrationSDD::fgkBaselineDefault = 20.;
35 : //______________________________________________________________________
36 :
37 : using std::endl;
38 : using std::cout;
39 118 : ClassImp(AliITSCalibrationSDD)
40 :
41 : AliITSCalibrationSDD::AliITSCalibrationSDD():
42 780 : AliITSCalibration(),
43 780 : fZeroSupp(kTRUE),
44 780 : fAMAt20MHz(kFALSE),
45 780 : fDeadChips(0),
46 780 : fDeadChannels(0),
47 780 : fIsBad(kFALSE),
48 780 : fBadChannels(),
49 780 : fMapAW0(0),
50 780 : fMapAW1(0),
51 780 : fMapTW0(0),
52 780 : fMapTW1(0),
53 780 : fDrSpeed0(0),
54 780 : fDrSpeed1(0)
55 3900 : {
56 : // default constructor
57 :
58 780 : SetDeadChannels();
59 800280 : for(Int_t ian=0;ian<fgkWings*fgkChannels*fgkChips;ian++){
60 399360 : fBaseline[ian]=fgkBaselineDefault;
61 399360 : fNoise[ian]=fgkNoiseDefault;
62 399360 : fGain[ian]=1.;
63 399360 : SetNoiseAfterElectronics(ian);
64 : }
65 4680 : for(Int_t iw=0;iw<fgkWings;iw++){
66 1560 : SetZSLowThreshold(iw);
67 1560 : SetZSHighThreshold(iw);
68 15600 : for(Int_t icp=0;icp<fgkChips;icp++){
69 6240 : Int_t chipindex=iw*fgkChips+icp;
70 6240 : fIsChipBad[chipindex]=kFALSE;
71 : }
72 : }
73 780 : SetTemperature(fgkTemperatureDefault);
74 780 : SetDataType();
75 1560 : }
76 : //______________________________________________________________________
77 : AliITSCalibrationSDD::AliITSCalibrationSDD(const char *dataType):
78 0 : AliITSCalibration(),
79 0 : fZeroSupp(kTRUE),
80 0 : fAMAt20MHz(kFALSE),
81 0 : fDeadChips(0),
82 0 : fDeadChannels(0),
83 0 : fIsBad(kFALSE),
84 0 : fBadChannels(),
85 0 : fMapAW0(0),
86 0 : fMapAW1(0),
87 0 : fMapTW0(0),
88 0 : fMapTW1(0),
89 0 : fDrSpeed0(0),
90 0 : fDrSpeed1(0)
91 0 : {
92 : // constructor
93 :
94 0 : SetDeadChannels();
95 0 : for(Int_t ian=0;ian<fgkWings*fgkChannels*fgkChips;ian++){
96 0 : fBaseline[ian]=fgkBaselineDefault;
97 0 : fNoise[ian]=fgkNoiseDefault;
98 0 : fGain[ian]=1.;
99 0 : SetNoiseAfterElectronics(ian);
100 : }
101 0 : for(Int_t iw=0;iw<fgkWings;iw++){
102 0 : SetZSLowThreshold(iw);
103 0 : SetZSHighThreshold(iw);
104 0 : for(Int_t icp=0;icp<fgkChips;icp++){
105 0 : Int_t chipindex=iw*fgkChips+icp;
106 0 : fIsChipBad[chipindex]=kFALSE;
107 : }
108 : }
109 :
110 0 : SetTemperature(fgkTemperatureDefault);
111 0 : SetDataType(dataType);
112 0 : }
113 : //_____________________________________________________________________
114 0 : AliITSCalibrationSDD::~AliITSCalibrationSDD(){
115 :
116 : //destructor
117 0 : if(fMapAW0) delete fMapAW0;
118 0 : if(fMapAW1) delete fMapAW1;
119 0 : if(fMapTW0) delete fMapTW0;
120 0 : if(fMapTW1) delete fMapTW1;
121 0 : if(fDrSpeed0) delete fDrSpeed0;
122 0 : if(fDrSpeed1) delete fDrSpeed1;
123 0 : }
124 :
125 : //______________________________________________________________________
126 : void AliITSCalibrationSDD::GiveCompressParam(Int_t cp[4]) const {
127 : // give compression param
128 0 : cp[0]=fZSTH[0];
129 0 : cp[1]=fZSTL[0];
130 0 : cp[2]=fZSTH[1];
131 0 : cp[3]=fZSTL[1];
132 0 : }
133 : //_____________________________________________________________________
134 : void AliITSCalibrationSDD::SetBadChannel(Int_t i,Int_t anode){
135 : //Set bad anode (set gain=0 for these channels);
136 :
137 0 : if(anode<0 || anode >fgkChannels*fgkChips*fgkWings-1){
138 0 : AliError("Wrong anode number");
139 0 : return;
140 : }
141 0 : fBadChannels[i]=anode;
142 0 : fGain[anode]=0;
143 0 : }
144 : //______________________________________________________________________
145 : void AliITSCalibrationSDD::GetCorrections(Float_t z, Float_t x, Float_t &devz, Float_t &devx, AliITSsegmentationSDD* seg){
146 : //correction of coordinates using the maps stored in the DB
147 456 : Int_t nSide=seg->GetSideFromLocalX(x);
148 228 : devz=0;
149 : // if(nSide==0) devz=fMapAW0->GetCorrection(z,x,seg);
150 : // else devz=fMapAW1->GetCorrection(z,x,seg);
151 228 : devx=0;
152 348 : if(nSide==0) devx=fMapTW0->GetCorrection(z,x,seg);
153 108 : else devx=fMapTW1->GetCorrection(z,x,seg);
154 : return;
155 228 : }
156 : //______________________________________________________________________
157 : void AliITSCalibrationSDD::GetShiftsForSimulation(Float_t z, Float_t x, Float_t &devz, Float_t &devx, AliITSsegmentationSDD* seg){
158 : //correction of coordinates using the maps stored in the DB
159 580 : Int_t nSide=seg->GetSideFromLocalX(x);
160 290 : devz=0;
161 : // if(nSide==0) devz=fMapAW0->GetCorrection(z,x,seg);
162 : // else devz=fMapAW1->GetCorrection(z,x,seg);
163 290 : devx=0;
164 430 : if(nSide==0) devx=fMapTW0->GetShiftForSimulation(z,x,seg);
165 150 : else devx=fMapTW1->GetShiftForSimulation(z,x,seg);
166 : return;
167 290 : }
168 : //______________________________________________________________________
169 : void AliITSCalibrationSDD::PrintGains() const{
170 : // Print Gains
171 :
172 0 : if( GetDeadChips() == 0 &&
173 0 : GetDeadChannels() == 0 )
174 : return;
175 :
176 : // Print Electronics Gains
177 0 : cout << "**************************************************" << endl;
178 0 : cout << " Print Electronics Gains " << endl;
179 0 : cout << "**************************************************" << endl;
180 :
181 : // Print SDD electronic gains
182 0 : for(Int_t ian=0; ian<fgkWings*fgkChips*fgkChannels;ian++){
183 0 : printf("Gain for channel %d = %f\n",ian,fGain[ian]);
184 : }
185 0 : }
186 :
187 : //______________________________________________________________________
188 : void AliITSCalibrationSDD::Print(){
189 : // Print SDD response Parameters
190 :
191 0 : cout << "**************************************************" << endl;
192 0 : cout << " Silicon Drift Detector Response Parameters " << endl;
193 0 : cout << "**************************************************" << endl;
194 0 : cout << "Hardware compression parameters: " << endl;
195 0 : cout << "Noise before electronics (arbitrary units): " << fNoise[0] << endl;
196 0 : cout << "Baseline (ADC units): " << fBaseline[0] << endl;
197 0 : cout << "Noise after electronics (ADC units): " << fNoiseAfterEl[0] << endl;
198 0 : cout << "Temperature: " << Temperature() << " K " << endl;
199 0 : PrintGains();
200 :
201 0 : }
|