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),
85 fCalibentry(), fLookUpentry(),fSlewCorr()
89 // Default constructor
90 for (Int_t ipmt=0; ipmt<24; ipmt++)
105 //__________________________________________________________________
107 AliT0Parameters::Init()
109 // Initialize the parameters manager. We need to get stuff from the
113 AliCDBManager *stor =AliCDBManager::Instance();
115 fCalibentry = stor->Get("T0/Calib/TimeDelay");
117 fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject();
119 AliFatal(" ALARM !!!! No time delays in CDB ");
124 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
126 fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject();
129 AliFatal(" ALARM !!!! No slewing correction in CDB ");
134 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
136 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
139 AliFatal(" ALARM !!!! No Lookup table in CDB ");
147 //__________________________________________________________________
149 void AliT0Parameters::InitIfOnline()
151 // should be used in online
152 // for switching to this one should write
153 // AliT0RawReader myrawreader(rawReader);
154 // myrawreader.SetOnlineMode(kTRUE);
157 //standart configuration (used for simulation)
158 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
159 // configuration for test Jun07.
160 fgLookUp = new AliT0CalibData("T0");
163 fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs);
164 Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
165 for (Int_t ik=0; ik<105; ik++)
167 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
168 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
171 lookvalue->SetTRM(trm);
172 lookvalue->SetTDC(tdc);
173 lookvalue->SetChain(chain);
174 lookvalue->SetChannel(channel);
176 fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey);
177 if (channel<6) channel +=2;
178 else {channel = 0; tdc++;}
179 if(ik==56) { tdc=0; channel=0; chain = 1;}
185 //__________________________________________________________________
187 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
189 // return time delay for CFD channel
193 fTimeDelayCFD = 1000+ipmt*100;
194 return fTimeDelayCFD;
197 return fgCalibData->GetTimeEq(ipmt);
199 //__________________________________________________________________
202 AliT0Parameters:: GetMeanVertex()
210 return fgCalibData->GetMeanVertex();
212 //__________________________________________________________________
214 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
217 AliError("No slewing correction is available!");
218 return (TGraph*)fAmpLEDRec.At(ipmt);
220 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
223 //__________________________________________________________________
225 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
228 AliError("No walk correction is available!");
229 return (TGraph*)fWalk.At(ipmt);
231 return fgSlewCorr -> GetWalk(ipmt) ;
234 //__________________________________________________________________
236 TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const
239 AliError("No walk correction is available!");
240 // return (TGraph*)fQTC.At(ipmt);
243 return fgSlewCorr -> GetQTC(ipmt) ;
246 //__________________________________________________________________
247 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
250 AliError("No walk correction is available!");
251 // return (TGraph*)fQTC.At(ipmt);
254 return fgSlewCorr -> GetAmpLED(ipmt) ;
257 //__________________________________________________________________
259 AliT0Parameters::SetPMTeff(Int_t ipmt)
262 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
263 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
264 0.252276, 0.256267,0.26, 0.27125, 0.281818,
265 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
266 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
267 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
268 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
269 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
270 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
271 0.003875, 0.00190, 0, 0, 0 } ;
272 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
274 TGraph* gr = new TGraph(50,lambda,eff);
275 fPMTeff.AddAtAndExpand(gr,ipmt);
277 //________________________________________________________________
280 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
284 AliT0LookUpValue key(trm,tdc,chain,channel);
285 AliT0LookUpKey *val = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)&key);
286 // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key);
288 return val->GetKey();
290 AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
295 AliError("No look up table has been loader!");
300 //__________________________________________________________________
301 TMap *AliT0Parameters::GetMapLookup()
304 cout<<" No look up table in OCDB";
307 return fgLookUp->GetMapLookup();
309 //__________________________________________________________________
312 AliT0Parameters::GetNumberOfTRMs()
314 // return number of trms
317 // fNumberOfTRMs = 2;
318 return fNumberOfTRMs;
320 return fgLookUp ->GetNumberOfTRMs();
323 //________________________________________________________________________________
324 Double_t AliT0Parameters::GetZPosition(const char* symname){
325 // Get the global z coordinate of the given T0 alignable volume
327 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
332 //________________________________________________________________________________
333 Double_t AliT0Parameters::GetZPosition(const char* symname){
334 // Get the global z coordinate of the given T0 alignable volume
337 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
341 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
343 TGeoHMatrix* hm = pnode->GetMatrix();
344 tr = hm->GetTranslation();
346 const char* path = pne->GetTitle();
347 if(!gGeoManager->cd(path)){
348 AliErrorClass(Form("Volume path %s not valid!",path));
351 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();
356 //________________________________________________________________________________
358 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
360 // Get the global z coordinate of the given T0 alignable volume
362 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
365 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
366 Double_t *otr = origmat.GetTranslation();
368 return (tr[2]-otr[2]);