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 "AliT0LookUpValue.h"
34 #include "AliT0LookUpKey.h"
35 #include <AliCDBManager.h>
36 #include <AliCDBEntry.h>
38 #include <TGeoManager.h>
39 #include <TGeoPhysicalNode.h>
40 #include <AliGeomManager.h>
41 #include <TGeoMatrix.h>
43 AliT0CalibTimeEq* AliT0Parameters::fgCalibData = 0;
44 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
45 AliT0CalibWalk* AliT0Parameters::fgSlewCorr =0;
46 //====================================================================
47 ClassImp(AliT0Parameters)
49 ; // This is here to keep Emacs for indenting the next line
52 //____________________________________________________________________
53 AliT0Parameters* AliT0Parameters::fgInstance = 0;
54 //____________________________________________________________________
55 AliT0Parameters* AliT0Parameters::Instance()
57 // Get static instance
59 fgInstance = new AliT0Parameters;
64 //____________________________________________________________________
65 AliT0Parameters::AliT0Parameters()
67 fPh2Mip(0),fmV2Mip(0),
68 fChannelWidth(0),fmV2Channel(0),
79 fCalibentry(), fLookUpentry(),fSlewCorr()
83 // Default constructor
84 for (Int_t ipmt=0; ipmt<24; ipmt++)
99 //__________________________________________________________________
101 AliT0Parameters::Init()
103 // Initialize the parameters manager. We need to get stuff from the
107 AliCDBManager *stor =AliCDBManager::Instance();
109 fCalibentry = stor->Get("T0/Calib/TimeDelay");
111 fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject();
113 AliFatal(" ALARM !!!! No time delays in CDB ");
118 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
120 fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject();
123 AliFatal(" ALARM !!!! No slewing correction in CDB ");
128 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
130 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
133 AliFatal(" ALARM !!!! No Lookup table in CDB ");
141 //__________________________________________________________________
143 void AliT0Parameters::InitIfOnline()
145 // should be used in online
146 // for switching to this one should write
147 // AliT0RawReader myrawreader(rawReader);
148 // myrawreader.SetOnlineMode(kTRUE);
151 //standart configuration (used for simulation)
152 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
153 // configuration for test Jun07.
154 fgLookUp = new AliT0CalibData("T0");
157 fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs);
158 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
159 for (Int_t ik=0; ik<105; ik++)
161 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
162 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
165 lookvalue->SetTRM(trm);
166 lookvalue->SetTDC(tdc);
167 lookvalue->SetChain(chain);
168 lookvalue->SetChannel(channel);
170 if (channel<6) channel +=2;
171 else {channel = 0; tdc++;}
172 if(ik==57) { tdc=0; channel=0; chain = 1;}
174 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
179 //__________________________________________________________________
181 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
183 // return time delay for CFD channel
187 fTimeDelayCFD = 1000+ipmt*100;
188 return fTimeDelayCFD;
191 return fgCalibData->GetTimeEq(ipmt);
193 //__________________________________________________________________
195 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
197 // get walk correction by LED-CFD vs CFD graph
199 AliError("No slewing correction is available!");
200 return (TGraph*)fAmpLEDRec.At(ipmt);
202 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
205 //__________________________________________________________________
207 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
209 // get walk correction by QTC vs CFD
211 AliError("No walk correction is available!");
212 return (TGraph*)fWalk.At(ipmt);
214 return fgSlewCorr -> GetWalk(ipmt) ;
217 //__________________________________________________________________
219 Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
221 // get walk correction by QTC vs CFD
223 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
225 return fgSlewCorr -> GetWalkVal(ipmt, mv) ;
229 //__________________________________________________________________
231 AliT0Parameters::SetPMTeff(Int_t ipmt)
233 // PMT quantum efficiency
235 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
236 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
237 0.252276, 0.256267,0.26, 0.27125, 0.281818,
238 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
239 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
240 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
241 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
242 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
243 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
244 0.003875, 0.00190, 0, 0, 0 } ;
245 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
247 TGraph* gr = new TGraph(50,lambda,eff);
248 fPMTeff.AddAtAndExpand(gr,ipmt);
250 //________________________________________________________________
253 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
255 // get logical number of channel according physical address
258 AliT0LookUpValue key(trm,tdc,chain,channel);
259 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
260 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
262 return val->GetKey();
264 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
269 AliError("No look up table has been loader!");
274 //__________________________________________________________________
275 TMap *AliT0Parameters::GetMapLookup()
280 cout<<" No look up table in OCDB";
283 return fgLookUp->GetMapLookup();
285 //__________________________________________________________________
288 AliT0Parameters::GetNumberOfTRMs()
290 // return number of trms
293 // fNumberOfTRMs = 2;
294 return fNumberOfTRMs;
296 return fgLookUp ->GetNumberOfTRMs();
299 //________________________________________________________________________________
300 Double_t AliT0Parameters::GetZPosition(const char* symname){
301 // Get the global z coordinate of the given T0 alignable volume
303 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
308 //________________________________________________________________________________
309 Double_t AliT0Parameters::GetZPosition(const char* symname){
310 // Get the global z coordinate of the given T0 alignable volume
313 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
317 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
319 TGeoHMatrix* hm = pnode->GetMatrix();
320 tr = hm->GetTranslation();
322 const char* path = pne->GetTitle();
323 if(!gGeoManager->cd(path)){
324 AliErrorClass(Form("Volume path %s not valid!",path));
327 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
332 //________________________________________________________________________________
334 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
336 // Get the global z coordinate of the given T0 alignable volume
338 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
341 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
342 Double_t *otr = origmat.GetTranslation();
344 return (tr[2]-otr[2]);