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 "AliT0LookUpKey.h"
34 #include "AliT0LookUpValue.h"
35 #include <AliCDBManager.h>
36 #include <AliCDBEntry.h>
37 #include <AliCDBStorage.h>
40 //#include <Riostream.h>
41 #include <TGeoManager.h>
42 #include <TGeoPhysicalNode.h>
43 #include <TGeoMatrix.h>
44 #include <AliGeomManager.h>
46 AliT0CalibTimeEq* AliT0Parameters::fgCalibData = 0;
47 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
48 AliT0CalibWalk* AliT0Parameters::fgSlewCorr =0;
49 //====================================================================
50 ClassImp(AliT0Parameters)
52 ; // This is here to keep Emacs for indenting the next line
55 //____________________________________________________________________
56 AliT0Parameters* AliT0Parameters::fgInstance = 0;
57 //____________________________________________________________________
58 AliT0Parameters* AliT0Parameters::Instance()
60 // Get static instance
62 fgInstance = new AliT0Parameters;
67 //____________________________________________________________________
68 AliT0Parameters::AliT0Parameters()
70 fPh2Mip(0),fmV2Mip(0),
71 fChannelWidth(0),fmV2Channel(0),
84 fCalibentry(), fLookUpentry(),fSlewCorr()
88 // Default constructor
89 for (Int_t ipmt=0; ipmt<24; ipmt++)
104 //__________________________________________________________________
106 AliT0Parameters::Init()
108 // Initialize the parameters manager. We need to get stuff from the
112 AliCDBManager *stor =AliCDBManager::Instance();
114 fCalibentry = stor->Get("T0/Calib/TimeDelay");
116 fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject();
118 AliFatal(" ALARM !!!! No time delays in CDB ");
123 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
125 fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject();
128 AliFatal(" ALARM !!!! No slewing correction in CDB ");
133 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
135 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
138 AliFatal(" ALARM !!!! No Lookup table in CDB ");
146 //__________________________________________________________________
148 void AliT0Parameters::InitIfOnline()
150 // should be used in online
151 // for switching to this one should write
152 // AliT0RawReader myrawreader(rawReader);
153 // myrawreader.SetOnlineMode(kTRUE);
156 //standart configuration (used for simulation)
157 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
158 // configuration for test Jun07.
159 fgLookUp = new AliT0CalibData("T0");
162 fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs);
163 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
164 for (Int_t ik=0; ik<105; ik++)
166 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
167 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
170 lookvalue->SetTRM(trm);
171 lookvalue->SetTDC(tdc);
172 lookvalue->SetChain(chain);
173 lookvalue->SetChannel(channel);
175 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
176 if (channel<6) channel +=2;
177 else {channel = 0; tdc++;}
178 if(ik==56) { tdc=0; channel=0; chain = 1;}
184 //__________________________________________________________________
186 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
188 // return time delay for CFD channel
192 fTimeDelayCFD = 1000+ipmt*100;
193 return fTimeDelayCFD;
196 return fgCalibData->GetTimeEq(ipmt);
198 //__________________________________________________________________
200 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
203 AliError("No slewing correction is available!");
204 return (TGraph*)fAmpLEDRec.At(ipmt);
206 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
209 //__________________________________________________________________
211 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
214 AliError("No walk correction is available!");
215 return (TGraph*)fWalk.At(ipmt);
217 return fgSlewCorr -> GetWalk(ipmt) ;
220 //__________________________________________________________________
222 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
225 AliError("No walk correction is available!");
226 // return (TGraph*)fQTC.At(ipmt);
229 return fgSlewCorr -> GetQTC(ipmt) ;
232 //__________________________________________________________________
233 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
236 AliError("No walk correction is available!");
237 // return (TGraph*)fQTC.At(ipmt);
240 return fgSlewCorr -> GetAmpLED(ipmt) ;
243 //__________________________________________________________________
245 AliT0Parameters::SetPMTeff(Int_t ipmt)
248 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
249 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
250 0.252276, 0.256267,0.26, 0.27125, 0.281818,
251 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
252 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
253 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
254 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
255 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
256 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
257 0.003875, 0.00190, 0, 0, 0 } ;
258 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
260 TGraph* gr = new TGraph(50,lambda,eff);
261 fPMTeff.AddAtAndExpand(gr,ipmt);
263 //________________________________________________________________
266 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
270 AliT0LookUpValue key(trm,tdc,chain,channel);
271 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
272 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
274 return val->GetKey();
276 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
281 AliError("No look up table has been loader!");
286 //__________________________________________________________________
287 TMap *AliT0Parameters::GetMapLookup()
290 cout<<" No look up table in OCDB";
293 return fgLookUp->GetMapLookup();
295 //__________________________________________________________________
298 AliT0Parameters::GetNumberOfTRMs()
300 // return number of trms
303 // fNumberOfTRMs = 2;
304 return fNumberOfTRMs;
306 return fgLookUp ->GetNumberOfTRMs();
309 //________________________________________________________________________________
310 Double_t AliT0Parameters::GetZPosition(const char* symname){
311 // Get the global z coordinate of the given T0 alignable volume
313 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
318 //________________________________________________________________________________
319 Double_t AliT0Parameters::GetZPosition(const char* symname){
320 // Get the global z coordinate of the given T0 alignable volume
323 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
327 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
329 TGeoHMatrix* hm = pnode->GetMatrix();
330 tr = hm->GetTranslation();
332 const char* path = pne->GetTitle();
333 if(!gGeoManager->cd(path)){
334 AliErrorClass(Form("Volume path %s not valid!",path));
337 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
342 //________________________________________________________________________________
344 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
346 // Get the global z coordinate of the given T0 alignable volume
348 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
351 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
352 Double_t *otr = origmat.GetTranslation();
354 return (tr[2]-otr[2]);