]> git.uio.no Git - u/mrichter/AliRoot.git/blame - T0/AliT0Parameters.cxx
correction lokk-up table online
[u/mrichter/AliRoot.git] / T0 / AliT0Parameters.cxx
CommitLineData
dc7ca31d 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//____________________________________________________________________
19//
20// T0 - T0.
21//
22// This class is a singleton that handles various parameters of
23// the T0 detectors.
24// Eventually, this class will use the Conditions DB to get the
25// various parameters, which code can then request from here.
26//
27#include "AliLog.h"
28#include "AliT0Parameters.h"
29#include "AliT0CalibData.h"
e0bba6cc 30#include "AliT0LookUpValue.h"
dc7ca31d 31#include <AliCDBManager.h>
32#include <AliCDBEntry.h>
7d95281b 33#include <AliCDBStorage.h>
aae44346 34#include <TMath.h>
35#include <TSystem.h>
dc7ca31d 36#include <Riostream.h>
5325480c 37#include <TGeoManager.h>
38#include <TGeoPhysicalNode.h>
29d3e0eb 39#include <AliGeomManager.h>
dc7ca31d 40
41AliT0CalibData* AliT0Parameters::fgCalibData = 0;
e0bba6cc 42AliT0CalibData* AliT0Parameters::fgLookUp = 0;
c41ceaac 43AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
dc7ca31d 44//====================================================================
45ClassImp(AliT0Parameters)
46#if 0
47 ; // This is here to keep Emacs for indenting the next line
48#endif
49
50//____________________________________________________________________
51AliT0Parameters* AliT0Parameters::fgInstance = 0;
52//____________________________________________________________________
3b7f37fd 53AliT0Parameters* AliT0Parameters::Instance()
dc7ca31d 54{
55 // Get static instance
76f3b07a 56 if (!fgInstance) {
57 fgInstance = new AliT0Parameters;
76f3b07a 58 }
dc7ca31d 59 return fgInstance;
60}
61
62//____________________________________________________________________
63AliT0Parameters::AliT0Parameters()
5325480c 64 :fIsInit(kFALSE),
65 fPh2Mip(0),fmV2Mip(0),
66 fChannelWidth(0),fmV2Channel(0),
67 fQTmin(0),fQTmax(0),
29d3e0eb 68 fAmpLEDRec(0),
5325480c 69 fPMTeff(),
29d3e0eb 70 fWalk(0),
71 fTimeDelayDA(0),
72 fTimeDelayCFD(0),
73 fTimeDelayTVD(0),
74 fMeanT0(500),
75 fLookUp(0),
76 fNumberOfTRMs(2),
77 fCalibentry(), fLookUpentry(),fSlewCorr()
78
74adb36a 79
dc7ca31d 80{
81 // Default constructor
dc7ca31d 82 for (Int_t ipmt=0; ipmt<24; ipmt++)
83 {
dc7ca31d 84 SetPh2Mip();
85 SetmV2Mip();
86 SetChannelWidth();
87 SetmV2channel();
dc7ca31d 88 SetQTmin();
89 SetQTmax();
90 SetPMTeff(ipmt);
74adb36a 91 }
dc7ca31d 92 SetTimeDelayTVD();
93 SetZposition();
74adb36a 94
dc7ca31d 95}
96
97//__________________________________________________________________
98void
99AliT0Parameters::Init()
100{
101 // Initialize the parameters manager. We need to get stuff from the
102 // CDB here.
94c27e4f 103 if (fIsInit) return;
6ba20b30 104
74adb36a 105 AliCDBManager *stor =AliCDBManager::Instance();
106
107 //time equalizing
108 fCalibentry = stor->Get("T0/Calib/TimeDelay");
5325480c 109 if (fCalibentry)
dc7ca31d 110 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
6eac39a1 111 else {
74adb36a 112 AliFatal(" ALARM !!!! No time delays in CDB ");
6eac39a1 113 fIsInit = kFALSE;
114 return;
115 }
c41ceaac 116 //slewing correction
74adb36a 117 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
5325480c 118 if (fSlewCorr){
119 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
c41ceaac 120 }
3b7f37fd 121 else {
74adb36a 122 AliFatal(" ALARM !!!! No slewing correction in CDB ");
3b7f37fd 123 fIsInit = kFALSE;
124 return;
125 }
74adb36a 126 //lookup table
6eac39a1 127 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
e0bba6cc 128 if (fLookUpentry){
129 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
e0bba6cc 130 }
3b7f37fd 131 else {
74adb36a 132 AliFatal(" ALARM !!!! No Lookup table in CDB ");
3b7f37fd 133 fIsInit = kFALSE;
134 return;
135 }
dc7ca31d 136 fIsInit = kTRUE;
137}
138
139
dc7ca31d 140//__________________________________________________________________
f8bea420 141
142void AliT0Parameters::InitIfOnline()
143{
144// should be used in online
145// for switching to this one should write
146 // AliT0RawReader myrawreader(rawReader);
147// myrawreader.SetOnlineMode(kTRUE);
148
f8bea420 149 if (fIsInit) return;
29d3e0eb 150 //standart configuration (used for simulation)
151 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
152 // configuration for test Jun07.
663b10cd 153 fNumberOfTRMs = 2;
154 Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
79e04c5f 155 for (Int_t ik=0; ik<105; ik++)
f8bea420 156 {
157 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
158 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
159
160
161 lookvalue->SetTRM(trm);
162 lookvalue->SetTDC(tdc);
163 lookvalue->SetChain(chain);
164 lookvalue->SetChannel(channel);
165 lookkey->SetKey(ik);
663b10cd 166 if (channel<6) channel +=2;
167 else {channel = 0; tdc++;}
168 if(ik==57) { tdc=0; channel=0; trm=1;}
169 fLookUp.Add((TObject*)lookvalue,(TObject*)lookkey);
f8bea420 170 }
74adb36a 171
172 fIsInit=kTRUE;
f8bea420 173}
174//__________________________________________________________________
175
dc7ca31d 176Float_t
94c27e4f 177AliT0Parameters::GetTimeDelayDA(Int_t ipmt)
dc7ca31d 178{
179 // return time delay for LED channel
180 //
181 if (!fCalibentry) {
d530f23a 182 fTimeDelayDA = 500;
94c27e4f 183 return fTimeDelayDA;
dc7ca31d 184 }
94c27e4f 185 return fgCalibData ->GetTimeDelayDA(ipmt);
dc7ca31d 186}
187//__________________________________________________________________
188Float_t
189AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
190{
191 // return time delay for CFD channel
192 //
193 if (!fCalibentry)
194 {
c41ceaac 195 fTimeDelayCFD = 1000+ipmt*100;
196 return fTimeDelayCFD;
dc7ca31d 197 }
198
199 return fgCalibData->GetTimeDelayCFD(ipmt);
200}
201
94c27e4f 202//__________________________________________________________________
203Int_t
204AliT0Parameters::GetMeanT0()
205{
206 // return mean of T0 distrubution with vertex=0
207 //
208 if (!fCalibentry)
209 {
210 return fMeanT0;
211 }
212
213 return fgCalibData->GetMeanT0();
214}
dc7ca31d 215//__________________________________________________________________
216
74adb36a 217TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
dc7ca31d 218{
74adb36a 219 if (!fSlewCorr) {
29d3e0eb 220 AliError("No slewing correction is available!");
221 return (TGraph*)fAmpLEDRec.At(ipmt);
dc7ca31d 222 }
74adb36a 223 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
dc7ca31d 224}
225
226//__________________________________________________________________
227
c41ceaac 228TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
229{
74adb36a 230 if (!fSlewCorr) {
29d3e0eb 231 AliError("No walk correction is available!");
c41ceaac 232 return (TGraph*)fWalk.At(ipmt);
233 }
74adb36a 234 return fgSlewCorr -> GetWalk(ipmt) ;
c41ceaac 235}
236
237//__________________________________________________________________
238
239Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
240{
74adb36a 241 if (!fSlewCorr) {
c41ceaac 242 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
243 }
74adb36a 244 return fgSlewCorr -> GetWalkVal(ipmt, mv) ;
c41ceaac 245}
246
c41ceaac 247
dc7ca31d 248//__________________________________________________________________
249void
250AliT0Parameters::SetPMTeff(Int_t ipmt)
251{
252 Float_t lambda[50];
253 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
254 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
255 0.252276, 0.256267,0.26, 0.27125, 0.281818,
256 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
257 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
258 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
259 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
260 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
261 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
262 0.003875, 0.00190, 0, 0, 0 } ;
263 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
264
265 TGraph* gr = new TGraph(50,lambda,eff);
266 fPMTeff.AddAtAndExpand(gr,ipmt);
267}
e0bba6cc 268//________________________________________________________________
269
270Int_t
271AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
272{
273
274
275 AliT0LookUpKey * lookkey; //= new AliT0LookUpKey();
276 AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
f8bea420 277 if (fgLookUp)
278 lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
279 else
280 lookkey = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)lookvalue);
281
e0bba6cc 282 if (!lookkey ) {
29d3e0eb 283 AliInfo(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
284 return -1;
e0bba6cc 285 }
286
e0bba6cc 287 return lookkey->GetKey();
288
289
290}
5325480c 291//__________________________________________________________________
29d3e0eb 292TMap *AliT0Parameters::GetMapLookup()
293{
294 if (!fgLookUp){
295 cout<<" No look up table in OCDB";
296 return 0;
297 }
298 return fgLookUp->GetMapLookup();
299}
300//__________________________________________________________________
301
5325480c 302Int_t
303AliT0Parameters::GetNumberOfTRMs()
304{
305 // return number of trms
306 //
307 if (!fgLookUp) {
29d3e0eb 308 // fNumberOfTRMs = 2;
5325480c 309 return fNumberOfTRMs;
310 }
311 return fgLookUp ->GetNumberOfTRMs();
312}
313//________________________________________________________________________________
314Double_t AliT0Parameters::GetZPosition(const char* symname){
315// Get the global z coordinate of the given T0 alignable volume
316//
29d3e0eb 317 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
5325480c 318
5325480c 319 return tr[2];
29d3e0eb 320}
321//________________________________________________________________________________
322
323Double_t AliT0Parameters::GetZPositionShift(const char* symname)
324{
325// Get the global z coordinate of the given T0 alignable volume
326//
327 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
328
329 TGeoHMatrix origmat;
330 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
331 Double_t *otr = origmat.GetTranslation();
5325480c 332
29d3e0eb 333 return (tr[2]-otr[2]);
5325480c 334}
335