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),
82 fCalibentry(), fLookUpentry(),fSlewCorr()
86 // Default constructor
87 for (Int_t ipmt=0; ipmt<24; ipmt++)
102 //__________________________________________________________________
104 AliT0Parameters::Init()
106 // Initialize the parameters manager. We need to get stuff from the
110 AliCDBManager *stor =AliCDBManager::Instance();
112 fCalibentry = stor->Get("T0/Calib/TimeDelay");
114 fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject();
116 AliFatal(" ALARM !!!! No time delays in CDB ");
121 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
123 fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject();
126 AliFatal(" ALARM !!!! No slewing correction in CDB ");
131 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
133 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
136 AliFatal(" ALARM !!!! No Lookup table in CDB ");
144 //__________________________________________________________________
146 void AliT0Parameters::InitIfOnline()
148 // should be used in online
149 // for switching to this one should write
150 // AliT0RawReader myrawreader(rawReader);
151 // myrawreader.SetOnlineMode(kTRUE);
154 //standart configuration (used for simulation)
155 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
156 // configuration for test Jun07.
157 fgLookUp = new AliT0CalibData("T0");
160 fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs);
161 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
162 for (Int_t ik=0; ik<105; ik++)
164 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
165 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
168 lookvalue->SetTRM(trm);
169 lookvalue->SetTDC(tdc);
170 lookvalue->SetChain(chain);
171 lookvalue->SetChannel(channel);
173 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
174 if (channel<6) channel +=2;
175 else {channel = 0; tdc++;}
176 if(ik==56) { tdc=0; channel=0; chain = 1;}
182 //__________________________________________________________________
184 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
186 // return time delay for CFD channel
190 fTimeDelayCFD = 1000+ipmt*100;
191 return fTimeDelayCFD;
194 return fgCalibData->GetTimeEq(ipmt);
196 //__________________________________________________________________
198 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
201 AliError("No slewing correction is available!");
202 return (TGraph*)fAmpLEDRec.At(ipmt);
204 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
207 //__________________________________________________________________
209 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
212 AliError("No walk correction is available!");
213 return (TGraph*)fWalk.At(ipmt);
215 return fgSlewCorr -> GetWalk(ipmt) ;
218 //__________________________________________________________________
220 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
223 AliError("No walk correction is available!");
224 // return (TGraph*)fQTC.At(ipmt);
227 return fgSlewCorr -> GetQTC(ipmt) ;
230 //__________________________________________________________________
231 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
234 AliError("No walk correction is available!");
235 // return (TGraph*)fQTC.At(ipmt);
238 return fgSlewCorr -> GetAmpLED(ipmt) ;
241 //__________________________________________________________________
243 AliT0Parameters::SetPMTeff(Int_t ipmt)
246 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
247 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
248 0.252276, 0.256267,0.26, 0.27125, 0.281818,
249 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
250 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
251 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
252 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
253 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
254 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
255 0.003875, 0.00190, 0, 0, 0 } ;
256 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
258 TGraph* gr = new TGraph(50,lambda,eff);
259 fPMTeff.AddAtAndExpand(gr,ipmt);
261 //________________________________________________________________
264 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
268 AliT0LookUpValue key(trm,tdc,chain,channel);
269 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
270 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
272 return val->GetKey();
274 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
279 AliError("No look up table has been loader!");
284 //__________________________________________________________________
285 TMap *AliT0Parameters::GetMapLookup()
288 cout<<" No look up table in OCDB";
291 return fgLookUp->GetMapLookup();
293 //__________________________________________________________________
296 AliT0Parameters::GetNumberOfTRMs()
298 // return number of trms
301 // fNumberOfTRMs = 2;
302 return fNumberOfTRMs;
304 return fgLookUp ->GetNumberOfTRMs();
307 //________________________________________________________________________________
308 Double_t AliT0Parameters::GetZPosition(const char* symname){
309 // Get the global z coordinate of the given T0 alignable volume
311 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
316 //________________________________________________________________________________
317 Double_t AliT0Parameters::GetZPosition(const char* symname){
318 // Get the global z coordinate of the given T0 alignable volume
321 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
325 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
327 TGeoHMatrix* hm = pnode->GetMatrix();
328 tr = hm->GetTranslation();
330 const char* path = pne->GetTitle();
331 if(!gGeoManager->cd(path)){
332 AliErrorClass(Form("Volume path %s not valid!",path));
335 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
340 //________________________________________________________________________________
342 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
344 // Get the global z coordinate of the given T0 alignable volume
346 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
349 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
350 Double_t *otr = origmat.GetTranslation();
352 return (tr[2]-otr[2]);