1 /**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 #include <Riostream.h>
20 #include "AliITSCalibrationSDD.h"
23 //////////////////////////////////////////////////////
24 // Calibration class for set:ITS //
25 // Specific subdetector implementation //
26 // for silicon drift detectors //
29 //////////////////////////////////////////////////////
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 ClassImp(AliITSCalibrationSDD)
38 AliITSCalibrationSDD::AliITSCalibrationSDD():
55 // default constructor
58 for(Int_t ian=0;ian<fgkWings*fgkChannels*fgkChips;ian++){
59 fBaseline[ian]=fgkBaselineDefault;
60 fNoise[ian]=fgkNoiseDefault;
62 SetNoiseAfterElectronics(ian);
64 for(Int_t iw=0;iw<fgkWings;iw++){
65 SetZSLowThreshold(iw);
66 SetZSHighThreshold(iw);
67 for(Int_t icp=0;icp<fgkChips;icp++){
68 Int_t chipindex=iw*fgkChips+icp;
69 fIsChipBad[chipindex]=kFALSE;
72 SetTemperature(fgkTemperatureDefault);
73 SetUseCorrectionMaps(kTRUE,kTRUE);
76 //______________________________________________________________________
77 AliITSCalibrationSDD::AliITSCalibrationSDD(const char *dataType):
97 for(Int_t ian=0;ian<fgkWings*fgkChannels*fgkChips;ian++){
98 fBaseline[ian]=fgkBaselineDefault;
99 fNoise[ian]=fgkNoiseDefault;
101 SetNoiseAfterElectronics(ian);
103 for(Int_t iw=0;iw<fgkWings;iw++){
104 SetZSLowThreshold(iw);
105 SetZSHighThreshold(iw);
106 for(Int_t icp=0;icp<fgkChips;icp++){
107 Int_t chipindex=iw*fgkChips+icp;
108 fIsChipBad[chipindex]=kFALSE;
112 SetTemperature(fgkTemperatureDefault);
113 SetUseCorrectionMaps(kTRUE,kTRUE);
114 SetDataType(dataType);
116 //_____________________________________________________________________
117 AliITSCalibrationSDD::~AliITSCalibrationSDD(){
120 if(fMapAW0) delete fMapAW0;
121 if(fMapAW1) delete fMapAW1;
122 if(fMapTW0) delete fMapTW0;
123 if(fMapTW1) delete fMapTW1;
124 if(fDrSpeed0) delete fDrSpeed0;
125 if(fDrSpeed1) delete fDrSpeed1;
128 //______________________________________________________________________
129 void AliITSCalibrationSDD::GiveCompressParam(Int_t cp[4]) const {
130 // give compression param
136 //_____________________________________________________________________
137 void AliITSCalibrationSDD::SetBadChannel(Int_t i,Int_t anode){
138 //Set bad anode (set gain=0 for these channels);
140 if(anode<0 || anode >fgkChannels*fgkChips*fgkWings-1)AliError("Wrong anode number");
141 fBadChannels[i]=anode;
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 Int_t nSide=seg->GetSideFromLocalX(x);
150 // if(nSide==0) devz=fMapAW0->GetCorrection(z,x,seg);
151 // else devz=fMapAW1->GetCorrection(z,x,seg);
155 if(nSide==0) devx=fMapTW0->GetCorrection(z,x,seg);
156 else devx=fMapTW1->GetCorrection(z,x,seg);
160 //______________________________________________________________________
161 void AliITSCalibrationSDD::PrintGains() const{
164 if( GetDeadChips() == 0 &&
165 GetDeadChannels() == 0 )
168 // Print Electronics Gains
169 cout << "**************************************************" << endl;
170 cout << " Print Electronics Gains " << endl;
171 cout << "**************************************************" << endl;
173 // Print SDD electronic gains
174 for(Int_t ian=0; ian<fgkWings*fgkChips*fgkChannels;ian++){
175 printf("Gain for channel %d = %f\n",ian,fGain[ian]);
179 //______________________________________________________________________
180 void AliITSCalibrationSDD::Print(){
181 // Print SDD response Parameters
183 cout << "**************************************************" << endl;
184 cout << " Silicon Drift Detector Response Parameters " << endl;
185 cout << "**************************************************" << endl;
186 cout << "Hardware compression parameters: " << endl;
187 cout << "Noise before electronics (arbitrary units): " << fNoise[0] << endl;
188 cout << "Baseline (ADC units): " << fBaseline[0] << endl;
189 cout << "Noise after electronics (ADC units): " << fNoiseAfterEl[0] << endl;
190 cout << "Temperature: " << Temperature() << " K " << endl;