]> git.uio.no Git - u/mrichter/AliRoot.git/blame - T0/AliT0Parameters.cxx
Use AliMUONVTrackStore rather than TClonesArray,
[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.
663b10cd 152 fNumberOfTRMs = 2;
153 Int_t trm=0; 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++;}
167 if(ik==57) { tdc=0; channel=0; trm=1;}
168 fLookUp.Add((TObject*)lookvalue,(TObject*)lookkey);
f8bea420 169 }
74adb36a 170
171 fIsInit=kTRUE;
f8bea420 172}
173//__________________________________________________________________
174
dc7ca31d 175Float_t
94c27e4f 176AliT0Parameters::GetTimeDelayDA(Int_t ipmt)
dc7ca31d 177{
178 // return time delay for LED channel
179 //
180 if (!fCalibentry) {
d530f23a 181 fTimeDelayDA = 500;
94c27e4f 182 return fTimeDelayDA;
dc7ca31d 183 }
94c27e4f 184 return fgCalibData ->GetTimeDelayDA(ipmt);
dc7ca31d 185}
186//__________________________________________________________________
187Float_t
188AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
189{
190 // return time delay for CFD channel
191 //
192 if (!fCalibentry)
193 {
c41ceaac 194 fTimeDelayCFD = 1000+ipmt*100;
195 return fTimeDelayCFD;
dc7ca31d 196 }
197
198 return fgCalibData->GetTimeDelayCFD(ipmt);
199}
200
94c27e4f 201//__________________________________________________________________
202Int_t
203AliT0Parameters::GetMeanT0()
204{
205 // return mean of T0 distrubution with vertex=0
206 //
207 if (!fCalibentry)
208 {
209 return fMeanT0;
210 }
211
212 return fgCalibData->GetMeanT0();
213}
dc7ca31d 214//__________________________________________________________________
215
74adb36a 216TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
dc7ca31d 217{
74adb36a 218 if (!fSlewCorr) {
29d3e0eb 219 AliError("No slewing correction is available!");
220 return (TGraph*)fAmpLEDRec.At(ipmt);
dc7ca31d 221 }
74adb36a 222 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
dc7ca31d 223}
224
225//__________________________________________________________________
226
c41ceaac 227TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
228{
74adb36a 229 if (!fSlewCorr) {
29d3e0eb 230 AliError("No walk correction is available!");
c41ceaac 231 return (TGraph*)fWalk.At(ipmt);
232 }
74adb36a 233 return fgSlewCorr -> GetWalk(ipmt) ;
c41ceaac 234}
235
236//__________________________________________________________________
237
238Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
239{
74adb36a 240 if (!fSlewCorr) {
c41ceaac 241 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
242 }
74adb36a 243 return fgSlewCorr -> GetWalkVal(ipmt, mv) ;
c41ceaac 244}
245
c41ceaac 246
dc7ca31d 247//__________________________________________________________________
248void
249AliT0Parameters::SetPMTeff(Int_t ipmt)
250{
251 Float_t lambda[50];
252 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
253 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
254 0.252276, 0.256267,0.26, 0.27125, 0.281818,
255 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
256 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
257 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
258 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
259 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
260 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
261 0.003875, 0.00190, 0, 0, 0 } ;
262 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
263
264 TGraph* gr = new TGraph(50,lambda,eff);
265 fPMTeff.AddAtAndExpand(gr,ipmt);
266}
e0bba6cc 267//________________________________________________________________
268
269Int_t
270AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
271{
272
e30bc492 273 if (fgLookUp) {
274 AliT0LookUpValue key(trm,tdc,chain,channel);
275 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
276 if (val )
277 return val->GetKey();
278 else {
279 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
280 return -1;
281 }
282 }
283 else {
284 AliError("No look up table has been loader!");
29d3e0eb 285 return -1;
e0bba6cc 286 }
e0bba6cc 287
288}
5325480c 289//__________________________________________________________________
29d3e0eb 290TMap *AliT0Parameters::GetMapLookup()
291{
292 if (!fgLookUp){
293 cout<<" No look up table in OCDB";
294 return 0;
295 }
296 return fgLookUp->GetMapLookup();
297}
298//__________________________________________________________________
299
5325480c 300Int_t
301AliT0Parameters::GetNumberOfTRMs()
302{
303 // return number of trms
304 //
305 if (!fgLookUp) {
29d3e0eb 306 // fNumberOfTRMs = 2;
5325480c 307 return fNumberOfTRMs;
308 }
309 return fgLookUp ->GetNumberOfTRMs();
310}
256d4943 311/*
5325480c 312//________________________________________________________________________________
313Double_t AliT0Parameters::GetZPosition(const char* symname){
314// Get the global z coordinate of the given T0 alignable volume
315//
29d3e0eb 316 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
5325480c 317
5325480c 318 return tr[2];
29d3e0eb 319}
256d4943 320*/
321//________________________________________________________________________________
322Double_t AliT0Parameters::GetZPosition(const char* symname){
323// Get the global z coordinate of the given T0 alignable volume
324//
325 Double_t *tr;
326
327 cout<<symname<<endl;
328 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
329 if (!pne) return 0;
330
331
332 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
333 if(pnode){
334 TGeoHMatrix* hm = pnode->GetMatrix();
335 tr = hm->GetTranslation();
336 }else{
337 const char* path = pne->GetTitle();
338 if(!gGeoManager->cd(path)){
339 AliErrorClass(Form("Volume path %s not valid!",path));
340 return 0;
341 }
342 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
343 }
344 return tr[2];
345
346}
29d3e0eb 347//________________________________________________________________________________
348
349Double_t AliT0Parameters::GetZPositionShift(const char* symname)
350{
351// Get the global z coordinate of the given T0 alignable volume
352//
353 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
354
355 TGeoHMatrix origmat;
356 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
357 Double_t *otr = origmat.GetTranslation();
5325480c 358
29d3e0eb 359 return (tr[2]-otr[2]);
5325480c 360}
361