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),
87 fCalibentry(), fLookUpentry(),fSlewCorr()
91 // Default constructor
92 for (Int_t ipmt=0; ipmt<24; ipmt++)
107 //__________________________________________________________________
109 AliT0Parameters::Init()
111 // Initialize the parameters manager. We need to get stuff from the
115 AliCDBManager *stor =AliCDBManager::Instance();
117 fCalibentry = stor->Get("T0/Calib/TimeDelay");
119 fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject();
121 AliFatal(" ALARM !!!! No time delays in CDB ");
126 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
128 fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject();
131 AliFatal(" ALARM !!!! No slewing correction in CDB ");
136 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
138 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
141 AliFatal(" ALARM !!!! No Lookup table in CDB ");
147 fLatency = stor->Get("T0/Calib/Latency");
149 fgLatency = (AliT0CalibLatency*)fLatency->GetObject();
152 AliWarning(" !!! no latency in CDB ");
160 //__________________________________________________________________
162 void AliT0Parameters::InitIfOnline()
164 // should be used in online
165 // for switching to this one should write
166 // AliT0RawReader myrawreader(rawReader);
167 // myrawreader.SetOnlineMode(kTRUE);
170 //standart configuration (used for simulation)
171 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
172 // configuration for test Jun07.
173 fgLookUp = new AliT0CalibData("T0");
176 fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs);
177 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
178 for (Int_t ik=0; ik<105; ik++)
180 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
181 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
184 lookvalue->SetTRM(trm);
185 lookvalue->SetTDC(tdc);
186 lookvalue->SetChain(chain);
187 lookvalue->SetChannel(channel);
189 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
190 if (channel<6) channel +=2;
191 else {channel = 0; tdc++;}
192 if(ik==56) { tdc=0; channel=0; chain = 1;}
198 //__________________________________________________________________
200 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
202 // return time delay for CFD channel
206 fTimeDelayCFD = 1000+ipmt*100;
207 return fTimeDelayCFD;
210 return fgCalibData->GetTimeEq(ipmt);
213 //__________________________________________________________________
215 AliT0Parameters::GetLatencyHPTDC()
217 // return LatencyHPTDC for CFD channel
221 return fLatencyHPTDC;
224 return fgLatency->GetLatencyHPTDC();
226 //__________________________________________________________________
228 AliT0Parameters::GetLatencyL1()
230 // return time delay for CFD channel
232 return fgLatency->GetLatencyL1();
235 //__________________________________________________________________
237 AliT0Parameters::GetLatencyL1A()
239 // return time delay for CFD channel
241 return fgLatency->GetLatencyL1A();
244 //__________________________________________________________________
246 AliT0Parameters::GetLatencyL1C()
248 // return time delay for CFD channel
250 return fgLatency->GetLatencyL1C();
252 //__________________________________________________________________
255 AliT0Parameters:: GetMeanVertex()
263 return fgCalibData->GetMeanVertex();
265 //__________________________________________________________________
267 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
270 AliError("No slewing correction is available!");
271 return (TGraph*)fAmpLEDRec.At(ipmt);
273 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
276 //__________________________________________________________________
278 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
281 AliError("No walk correction is available!");
282 return (TGraph*)fWalk.At(ipmt);
284 return fgSlewCorr -> GetWalk(ipmt) ;
287 //__________________________________________________________________
289 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
292 AliError("No walk correction is available!");
293 // return (TGraph*)fQTC.At(ipmt);
296 return fgSlewCorr -> GetQTC(ipmt) ;
299 //__________________________________________________________________
300 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
303 AliError("No walk correction is available!");
304 // return (TGraph*)fQTC.At(ipmt);
307 return fgSlewCorr -> GetAmpLED(ipmt) ;
310 //__________________________________________________________________
312 AliT0Parameters::SetPMTeff(Int_t ipmt)
315 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
316 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
317 0.252276, 0.256267,0.26, 0.27125, 0.281818,
318 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
319 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
320 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
321 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
322 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
323 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
324 0.003875, 0.00190, 0, 0, 0 } ;
325 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
327 TGraph* gr = new TGraph(50,lambda,eff);
328 fPMTeff.AddAtAndExpand(gr,ipmt);
330 //________________________________________________________________
333 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
337 AliT0LookUpValue key(trm,tdc,chain,channel);
338 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
339 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
341 return val->GetKey();
343 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
348 AliError("No look up table has been loader!");
353 //__________________________________________________________________
354 TMap *AliT0Parameters::GetMapLookup()
357 cout<<" No look up table in OCDB";
360 return fgLookUp->GetMapLookup();
362 //__________________________________________________________________
365 AliT0Parameters::GetNumberOfTRMs()
367 // return number of trms
370 // fNumberOfTRMs = 2;
371 return fNumberOfTRMs;
373 return fgLookUp ->GetNumberOfTRMs();
376 //________________________________________________________________________________
377 Double_t AliT0Parameters::GetZPosition(const char* symname){
378 // Get the global z coordinate of the given T0 alignable volume
380 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
385 //________________________________________________________________________________
386 Double_t AliT0Parameters::GetZPosition(const char* symname){
387 // Get the global z coordinate of the given T0 alignable volume
390 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
394 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
396 TGeoHMatrix* hm = pnode->GetMatrix();
397 tr = hm->GetTranslation();
399 const char* path = pne->GetTitle();
400 if(!gGeoManager->cd(path)){
401 AliErrorClass(Form("Volume path %s not valid!",path));
404 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
409 //________________________________________________________________________________
411 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
413 // Get the global z coordinate of the given T0 alignable volume
415 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
418 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
419 Double_t *otr = origmat.GetTranslation();
421 return (tr[2]-otr[2]);