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 //__________________________________________________________________
201 AliT0Parameters:: GetMeanVertex()
209 return fgCalibData->GetMeanVertex();
211 //__________________________________________________________________
213 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
216 AliError("No slewing correction is available!");
217 return (TGraph*)fAmpLEDRec.At(ipmt);
219 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
222 //__________________________________________________________________
224 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
227 AliError("No walk correction is available!");
228 return (TGraph*)fWalk.At(ipmt);
230 return fgSlewCorr -> GetWalk(ipmt) ;
233 //__________________________________________________________________
235 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
238 AliError("No walk correction is available!");
239 // return (TGraph*)fQTC.At(ipmt);
242 return fgSlewCorr -> GetQTC(ipmt) ;
245 //__________________________________________________________________
246 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
249 AliError("No walk correction is available!");
250 // return (TGraph*)fQTC.At(ipmt);
253 return fgSlewCorr -> GetAmpLED(ipmt) ;
256 //__________________________________________________________________
258 AliT0Parameters::SetPMTeff(Int_t ipmt)
261 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
262 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
263 0.252276, 0.256267,0.26, 0.27125, 0.281818,
264 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
265 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
266 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
267 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
268 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
269 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
270 0.003875, 0.00190, 0, 0, 0 } ;
271 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
273 TGraph* gr = new TGraph(50,lambda,eff);
274 fPMTeff.AddAtAndExpand(gr,ipmt);
276 //________________________________________________________________
279 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
283 AliT0LookUpValue key(trm,tdc,chain,channel);
284 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
285 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
287 return val->GetKey();
289 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
294 AliError("No look up table has been loader!");
299 //__________________________________________________________________
300 TMap *AliT0Parameters::GetMapLookup()
303 cout<<" No look up table in OCDB";
306 return fgLookUp->GetMapLookup();
308 //__________________________________________________________________
311 AliT0Parameters::GetNumberOfTRMs()
313 // return number of trms
316 // fNumberOfTRMs = 2;
317 return fNumberOfTRMs;
319 return fgLookUp ->GetNumberOfTRMs();
322 //________________________________________________________________________________
323 Double_t AliT0Parameters::GetZPosition(const char* symname){
324 // Get the global z coordinate of the given T0 alignable volume
326 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
331 //________________________________________________________________________________
332 Double_t AliT0Parameters::GetZPosition(const char* symname){
333 // Get the global z coordinate of the given T0 alignable volume
336 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
340 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
342 TGeoHMatrix* hm = pnode->GetMatrix();
343 tr = hm->GetTranslation();
345 const char* path = pne->GetTitle();
346 if(!gGeoManager->cd(path)){
347 AliErrorClass(Form("Volume path %s not valid!",path));
350 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
355 //________________________________________________________________________________
357 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
359 // Get the global z coordinate of the given T0 alignable volume
361 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
364 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
365 Double_t *otr = origmat.GetTranslation();
367 return (tr[2]-otr[2]);