]> git.uio.no Git - u/mrichter/AliRoot.git/blame - T0/AliT0Parameters.cxx
New QA classes by Sylwester
[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();
74adb36a 106 //time equalizing
256d4943 107 fCalibentry = stor->Get("T0/Calib/TimeDelay");
108 if (fCalibentry)
109 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
110 else {
111 AliFatal(" ALARM !!!! No time delays in CDB ");
112 fIsInit = kFALSE;
113 return;
114 }
c41ceaac 115 //slewing correction
74adb36a 116 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
5325480c 117 if (fSlewCorr){
118 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
c41ceaac 119 }
3b7f37fd 120 else {
256d4943 121 AliFatal(" ALARM !!!! No slewing correction in CDB ");
3b7f37fd 122 fIsInit = kFALSE;
123 return;
124 }
74adb36a 125 //lookup table
6eac39a1 126 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
e0bba6cc 127 if (fLookUpentry){
128 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
e0bba6cc 129 }
3b7f37fd 130 else {
256d4943 131 AliFatal(" ALARM !!!! No Lookup table in CDB ");
3b7f37fd 132 fIsInit = kFALSE;
133 return;
134 }
dc7ca31d 135 fIsInit = kTRUE;
136}
137
138
dc7ca31d 139//__________________________________________________________________
f8bea420 140
141void AliT0Parameters::InitIfOnline()
142{
143// should be used in online
144// for switching to this one should write
145 // AliT0RawReader myrawreader(rawReader);
146// myrawreader.SetOnlineMode(kTRUE);
147
f8bea420 148 if (fIsInit) return;
29d3e0eb 149 //standart configuration (used for simulation)
150 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
151 // configuration for test Jun07.
0d72dc5b 152 fNumberOfTRMs = 1;
153 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
79e04c5f 154 for (Int_t ik=0; ik<105; ik++)
f8bea420 155 {
156 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
157 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
158
159
160 lookvalue->SetTRM(trm);
161 lookvalue->SetTDC(tdc);
162 lookvalue->SetChain(chain);
163 lookvalue->SetChannel(channel);
164 lookkey->SetKey(ik);
663b10cd 165 if (channel<6) channel +=2;
166 else {channel = 0; tdc++;}
0d72dc5b 167 if(ik==57) { tdc=0; channel=0; chain = 1;}
3a06b1d2 168 // fLookUp.Add((TObject*)lookvalue,(TObject*)lookkey);
169 fgLookUp->GetMapLookup()->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
e30bc492 274 if (fgLookUp) {
275 AliT0LookUpValue key(trm,tdc,chain,channel);
3a06b1d2 276 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
277 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
e30bc492 278 if (val )
279 return val->GetKey();
280 else {
281 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
282 return -1;
283 }
284 }
285 else {
286 AliError("No look up table has been loader!");
29d3e0eb 287 return -1;
e0bba6cc 288 }
e0bba6cc 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}
256d4943 313/*
5325480c 314//________________________________________________________________________________
315Double_t AliT0Parameters::GetZPosition(const char* symname){
316// Get the global z coordinate of the given T0 alignable volume
317//
29d3e0eb 318 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
5325480c 319
5325480c 320 return tr[2];
29d3e0eb 321}
256d4943 322*/
323//________________________________________________________________________________
324Double_t AliT0Parameters::GetZPosition(const char* symname){
325// Get the global z coordinate of the given T0 alignable volume
326//
327 Double_t *tr;
328
329 cout<<symname<<endl;
330 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
331 if (!pne) return 0;
332
333
334 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
335 if(pnode){
336 TGeoHMatrix* hm = pnode->GetMatrix();
337 tr = hm->GetTranslation();
338 }else{
339 const char* path = pne->GetTitle();
340 if(!gGeoManager->cd(path)){
341 AliErrorClass(Form("Volume path %s not valid!",path));
342 return 0;
343 }
344 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
345 }
346 return tr[2];
347
348}
29d3e0eb 349//________________________________________________________________________________
350
351Double_t AliT0Parameters::GetZPositionShift(const char* symname)
352{
353// Get the global z coordinate of the given T0 alignable volume
354//
355 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
356
357 TGeoHMatrix origmat;
358 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
359 Double_t *otr = origmat.GetTranslation();
5325480c 360
29d3e0eb 361 return (tr[2]-otr[2]);
5325480c 362}
363