]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - T0/AliT0Parameters.cxx
Geometry now properly loaded
[u/mrichter/AliRoot.git] / T0 / AliT0Parameters.cxx
... / ...
CommitLineData
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"
30#include "AliT0LookUpValue.h"
31#include <AliCDBManager.h>
32#include <AliCDBEntry.h>
33#include <AliCDBStorage.h>
34#include <TMath.h>
35#include <TSystem.h>
36#include <Riostream.h>
37#include <TGeoManager.h>
38#include <TGeoPhysicalNode.h>
39#include <AliGeomManager.h>
40
41AliT0CalibData* AliT0Parameters::fgCalibData = 0;
42AliT0CalibData* AliT0Parameters::fgLookUp = 0;
43AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
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//____________________________________________________________________
53AliT0Parameters* AliT0Parameters::Instance()
54{
55 // Get static instance
56 if (!fgInstance) {
57 fgInstance = new AliT0Parameters;
58 }
59 return fgInstance;
60}
61
62//____________________________________________________________________
63AliT0Parameters::AliT0Parameters()
64 :fIsInit(kFALSE),
65 fPh2Mip(0),fmV2Mip(0),
66 fChannelWidth(0),fmV2Channel(0),
67 fQTmin(0),fQTmax(0),
68 fAmpLEDRec(0),
69 fPMTeff(),
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
79
80{
81 // Default constructor
82 for (Int_t ipmt=0; ipmt<24; ipmt++)
83 {
84 SetPh2Mip();
85 SetmV2Mip();
86 SetChannelWidth();
87 SetmV2channel();
88 SetQTmin();
89 SetQTmax();
90 SetPMTeff(ipmt);
91 }
92 SetTimeDelayTVD();
93 SetZposition();
94
95}
96
97//__________________________________________________________________
98void
99AliT0Parameters::Init()
100{
101 // Initialize the parameters manager. We need to get stuff from the
102 // CDB here.
103 if (fIsInit) return;
104
105 AliCDBManager *stor =AliCDBManager::Instance();
106
107 //time equalizing
108 fCalibentry = stor->Get("T0/Calib/TimeDelay");
109 if (fCalibentry)
110 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
111 else {
112 AliFatal(" ALARM !!!! No time delays in CDB ");
113 fIsInit = kFALSE;
114 return;
115 }
116 //slewing correction
117 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
118 if (fSlewCorr){
119 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
120 }
121 else {
122 AliFatal(" ALARM !!!! No slewing correction in CDB ");
123 fIsInit = kFALSE;
124 return;
125 }
126 //lookup table
127 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
128 if (fLookUpentry){
129 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
130 }
131 else {
132 AliFatal(" ALARM !!!! No Lookup table in CDB ");
133 fIsInit = kFALSE;
134 return;
135 }
136 fIsInit = kTRUE;
137}
138
139
140//__________________________________________________________________
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
149 if (fIsInit) return;
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.
153 fNumberOfTRMs = 2;
154 Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
155 for (Int_t ik=0; ik<110; ik++)
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);
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);
170 }
171
172 fIsInit=kTRUE;
173}
174//__________________________________________________________________
175
176Float_t
177AliT0Parameters::GetTimeDelayDA(Int_t ipmt)
178{
179 // return time delay for LED channel
180 //
181 if (!fCalibentry) {
182 fTimeDelayDA = 500;
183 return fTimeDelayDA;
184 }
185 return fgCalibData ->GetTimeDelayDA(ipmt);
186}
187//__________________________________________________________________
188Float_t
189AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
190{
191 // return time delay for CFD channel
192 //
193 if (!fCalibentry)
194 {
195 fTimeDelayCFD = 1000+ipmt*100;
196 return fTimeDelayCFD;
197 }
198
199 return fgCalibData->GetTimeDelayCFD(ipmt);
200}
201
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}
215//__________________________________________________________________
216
217TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
218{
219 if (!fSlewCorr) {
220 AliError("No slewing correction is available!");
221 return (TGraph*)fAmpLEDRec.At(ipmt);
222 }
223 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
224}
225
226//__________________________________________________________________
227
228TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
229{
230 if (!fSlewCorr) {
231 AliError("No walk correction is available!");
232 return (TGraph*)fWalk.At(ipmt);
233 }
234 return fgSlewCorr -> GetWalk(ipmt) ;
235}
236
237//__________________________________________________________________
238
239Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
240{
241 if (!fSlewCorr) {
242 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
243 }
244 return fgSlewCorr -> GetWalkVal(ipmt, mv) ;
245}
246
247
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}
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);
277 if (fgLookUp)
278 lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
279 else
280 lookkey = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)lookvalue);
281
282 if (!lookkey ) {
283 AliInfo(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
284 return -1;
285 }
286
287 return lookkey->GetKey();
288
289
290}
291//__________________________________________________________________
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
302Int_t
303AliT0Parameters::GetNumberOfTRMs()
304{
305 // return number of trms
306 //
307 if (!fgLookUp) {
308 // fNumberOfTRMs = 2;
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//
317 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
318
319 return tr[2];
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();
332
333 return (tr[2]-otr[2]);
334}
335