1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 //____________________________________________________________________
22 // This class is a singleton that handles various parameters of
24 // Eventually, this class will use the Conditions DB to get the
25 // various parameters, which code can then request from here.
29 #include "AliT0Parameters.h"
30 #include "AliT0CalibData.h"
31 #include "AliT0CalibWalk.h"
32 #include "AliT0CalibTimeEq.h"
33 #include "AliT0CalibLatency.h"
34 #include "AliT0LookUpKey.h"
35 #include "AliT0LookUpValue.h"
36 #include <AliCDBManager.h>
37 #include <AliCDBEntry.h>
38 #include <AliCDBStorage.h>
41 //#include <Riostream.h>
42 #include <TGeoManager.h>
43 #include <TGeoPhysicalNode.h>
44 #include <TGeoMatrix.h>
45 #include <AliGeomManager.h>
47 AliT0CalibTimeEq* AliT0Parameters::fgCalibData = 0;
48 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
49 AliT0CalibWalk* AliT0Parameters::fgSlewCorr =0;
50 AliT0CalibLatency *AliT0Parameters::fgLatency=0;
51 //====================================================================
52 ClassImp(AliT0Parameters)
54 ; // This is here to keep Emacs for indenting the next line
57 //____________________________________________________________________
58 AliT0Parameters* AliT0Parameters::fgInstance = 0;
59 //____________________________________________________________________
60 AliT0Parameters* AliT0Parameters::Instance()
62 // Get static instance
64 fgInstance = new AliT0Parameters;
69 //____________________________________________________________________
70 AliT0Parameters::AliT0Parameters()
72 fPh2Mip(0),fmV2Mip(0),
73 fChannelWidth(0),fmV2Channel(0),
97 // Default constructor
98 for (Int_t ipmt=0; ipmt<24; ipmt++)
113 //__________________________________________________________________
115 AliT0Parameters::Init()
117 // Initialize the parameters manager. We need to get stuff from the
121 AliCDBManager *stor =AliCDBManager::Instance();
123 fCalibentry = stor->Get("T0/Calib/TimeDelay");
125 fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject();
127 AliFatal(" ALARM !!!! No time delays in CDB ");
132 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
134 fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject();
137 AliFatal(" ALARM !!!! No slewing correction in CDB ");
142 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
144 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
147 AliFatal(" ALARM !!!! No Lookup table in CDB ");
153 fLatency = stor->Get("T0/Calib/Latency");
155 fgLatency = (AliT0CalibLatency*)fLatency->GetObject();
158 AliWarning(" !!! no latency in CDB ");
166 //__________________________________________________________________
168 void AliT0Parameters::InitIfOnline()
170 // should be used in online
171 // for switching to this one should write
172 // AliT0RawReader myrawreader(rawReader);
173 // myrawreader.SetOnlineMode(kTRUE);
176 //standart configuration (used for simulation)
177 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
178 // configuration for test Jun07.
179 fgLookUp = new AliT0CalibData("T0");
182 fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs);
183 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
184 for (Int_t ik=0; ik<105; ik++)
186 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
187 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
188 lookvalue->SetTRM(trm);
189 lookvalue->SetTDC(tdc);
190 lookvalue->SetChain(chain);
191 lookvalue->SetChannel(channel);
193 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
194 if (channel<6) channel +=2;
195 else {channel = 0; tdc++;}
196 if(ik==56) { tdc=0; channel=0; chain = 1;}
198 //2 recent open channels
199 trm=7; tdc=14; channel=2; chain=0;
200 for (Int_t ik=105; ik<107; ik++)
202 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
203 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
205 lookvalue->SetTRM(trm);
206 lookvalue->SetTDC(tdc);
207 lookvalue->SetChain(chain);
208 lookvalue->SetChannel(channel);
210 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
211 if (channel<6) channel +=2;
212 else {channel = 0; tdc++;}
217 //__________________________________________________________________
219 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
221 // return time delay for CFD channel
225 fTimeDelayCFD = 1000+ipmt*100;
226 return fTimeDelayCFD;
229 return fgCalibData->GetTimeEq(ipmt);
231 //__________________________________________________________________
233 AliT0Parameters::GetCFD(Int_t ipmt)
235 // return CFD channel
237 return fgCalibData->GetCFDvalue(ipmt,0);
240 //__________________________________________________________________
242 AliT0Parameters::GetLatencyHPTDC()
244 // return LatencyHPTDC for CFD channel
248 return fLatencyHPTDC;
251 return fgLatency->GetLatencyHPTDC();
253 //__________________________________________________________________
255 AliT0Parameters::GetLatencyL1()
257 // return time delay for CFD channel
259 return fgLatency->GetLatencyL1();
262 //__________________________________________________________________
264 AliT0Parameters::GetLatencyL1A()
266 // return time delay for CFD channel
268 return fgLatency->GetLatencyL1A();
271 //__________________________________________________________________
273 AliT0Parameters::GetLatencyL1C()
275 // return time delay for CFD channel
277 return fgLatency->GetLatencyL1C();
279 //__________________________________________________________________
282 AliT0Parameters:: GetMeanVertex()
290 return fgCalibData->GetMeanVertex();
292 //__________________________________________________________________
294 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
297 AliError("No slewing correction is available!");
298 return (TGraph*)fAmpLEDRec.At(ipmt);
300 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
303 //__________________________________________________________________
305 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
308 AliError("No walk correction is available!");
309 return (TGraph*)fWalk.At(ipmt);
311 return fgSlewCorr -> GetWalk(ipmt) ;
314 //__________________________________________________________________
316 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
319 AliError("No walk correction is available!");
320 // return (TGraph*)fQTC.At(ipmt);
323 return fgSlewCorr -> GetQTC(ipmt) ;
326 //__________________________________________________________________
327 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
330 AliError("No walk correction is available!");
331 // return (TGraph*)fQTC.At(ipmt);
334 return fgSlewCorr -> GetAmpLED(ipmt) ;
337 //__________________________________________________________________
339 AliT0Parameters::SetPMTeff(Int_t ipmt)
342 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
343 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
344 0.252276, 0.256267,0.26, 0.27125, 0.281818,
345 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
346 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
347 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
348 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
349 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
350 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
351 0.003875, 0.00190, 0, 0, 0 } ;
352 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
354 TGraph* gr = new TGraph(50,lambda,eff);
355 fPMTeff.AddAtAndExpand(gr,ipmt);
357 //________________________________________________________________
360 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
364 AliT0LookUpValue key(trm,tdc,chain,channel);
365 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
366 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
368 return val->GetKey();
370 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
375 AliError("No look up table has been loader!");
380 //__________________________________________________________________
381 TMap *AliT0Parameters::GetMapLookup()
384 cout<<" No look up table in OCDB";
387 return fgLookUp->GetMapLookup();
389 //__________________________________________________________________
392 AliT0Parameters::GetNumberOfTRMs()
394 // return number of trms
397 // fNumberOfTRMs = 2;
398 return fNumberOfTRMs;
400 return fgLookUp ->GetNumberOfTRMs();
403 //________________________________________________________________________________
404 Double_t AliT0Parameters::GetZPosition(const char* symname){
405 // Get the global z coordinate of the given T0 alignable volume
407 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
412 //________________________________________________________________________________
413 Double_t AliT0Parameters::GetZPosition(const char* symname){
414 // Get the global z coordinate of the given T0 alignable volume
417 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
421 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
423 TGeoHMatrix* hm = pnode->GetMatrix();
424 tr = hm->GetTranslation();
426 const char* path = pne->GetTitle();
427 if(!gGeoManager->cd(path)){
428 AliErrorClass(Form("Volume path %s not valid!",path));
431 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
436 //________________________________________________________________________________
438 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
440 // Get the global z coordinate of the given T0 alignable volume
442 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
445 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
446 Double_t *otr = origmat.GetTranslation();
448 return (tr[2]-otr[2]);