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();
190 lookvalue->SetTRM(trm);
191 lookvalue->SetTDC(tdc);
192 lookvalue->SetChain(chain);
193 lookvalue->SetChannel(channel);
195 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
196 if (channel<6) channel +=2;
197 else {channel = 0; tdc++;}
198 if(ik==56) { tdc=0; channel=0; chain = 1;}
204 //__________________________________________________________________
206 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
208 // return time delay for CFD channel
212 fTimeDelayCFD = 1000+ipmt*100;
213 return fTimeDelayCFD;
216 return fgCalibData->GetTimeEq(ipmt);
219 //__________________________________________________________________
221 AliT0Parameters::GetLatencyHPTDC()
223 // return LatencyHPTDC for CFD channel
227 return fLatencyHPTDC;
230 return fgLatency->GetLatencyHPTDC();
232 //__________________________________________________________________
234 AliT0Parameters::GetLatencyL1()
236 // return time delay for CFD channel
238 return fgLatency->GetLatencyL1();
241 //__________________________________________________________________
243 AliT0Parameters::GetLatencyL1A()
245 // return time delay for CFD channel
247 return fgLatency->GetLatencyL1A();
250 //__________________________________________________________________
252 AliT0Parameters::GetLatencyL1C()
254 // return time delay for CFD channel
256 return fgLatency->GetLatencyL1C();
258 //__________________________________________________________________
261 AliT0Parameters:: GetMeanVertex()
269 return fgCalibData->GetMeanVertex();
271 //__________________________________________________________________
273 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
276 AliError("No slewing correction is available!");
277 return (TGraph*)fAmpLEDRec.At(ipmt);
279 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
282 //__________________________________________________________________
284 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
287 AliError("No walk correction is available!");
288 return (TGraph*)fWalk.At(ipmt);
290 return fgSlewCorr -> GetWalk(ipmt) ;
293 //__________________________________________________________________
295 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
298 AliError("No walk correction is available!");
299 // return (TGraph*)fQTC.At(ipmt);
302 return fgSlewCorr -> GetQTC(ipmt) ;
305 //__________________________________________________________________
306 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
309 AliError("No walk correction is available!");
310 // return (TGraph*)fQTC.At(ipmt);
313 return fgSlewCorr -> GetAmpLED(ipmt) ;
316 //__________________________________________________________________
318 AliT0Parameters::SetPMTeff(Int_t ipmt)
321 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
322 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
323 0.252276, 0.256267,0.26, 0.27125, 0.281818,
324 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
325 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
326 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
327 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
328 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
329 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
330 0.003875, 0.00190, 0, 0, 0 } ;
331 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
333 TGraph* gr = new TGraph(50,lambda,eff);
334 fPMTeff.AddAtAndExpand(gr,ipmt);
336 //________________________________________________________________
339 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
343 AliT0LookUpValue key(trm,tdc,chain,channel);
344 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
345 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
347 return val->GetKey();
349 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
354 AliError("No look up table has been loader!");
359 //__________________________________________________________________
360 TMap *AliT0Parameters::GetMapLookup()
363 cout<<" No look up table in OCDB";
366 return fgLookUp->GetMapLookup();
368 //__________________________________________________________________
371 AliT0Parameters::GetNumberOfTRMs()
373 // return number of trms
376 // fNumberOfTRMs = 2;
377 return fNumberOfTRMs;
379 return fgLookUp ->GetNumberOfTRMs();
382 //________________________________________________________________________________
383 Double_t AliT0Parameters::GetZPosition(const char* symname){
384 // Get the global z coordinate of the given T0 alignable volume
386 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
391 //________________________________________________________________________________
392 Double_t AliT0Parameters::GetZPosition(const char* symname){
393 // Get the global z coordinate of the given T0 alignable volume
396 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
400 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
402 TGeoHMatrix* hm = pnode->GetMatrix();
403 tr = hm->GetTranslation();
405 const char* path = pne->GetTitle();
406 if(!gGeoManager->cd(path)){
407 AliErrorClass(Form("Volume path %s not valid!",path));
410 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
415 //________________________________________________________________________________
417 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
419 // Get the global z coordinate of the given T0 alignable volume
421 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
424 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
425 Double_t *otr = origmat.GetTranslation();
427 return (tr[2]-otr[2]);