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.
28 #include "AliT0Parameters.h"
29 #include "AliT0CalibData.h"
30 #include "AliT0LookUpValue.h"
31 #include <AliCDBManager.h>
32 #include <AliCDBEntry.h>
33 #include <AliCDBStorage.h>
36 #include <Riostream.h>
37 #include <TGeoManager.h>
38 #include <TGeoPhysicalNode.h>
39 #include <AliGeomManager.h>
41 AliT0CalibData* AliT0Parameters::fgCalibData = 0;
42 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
43 AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
44 //====================================================================
45 ClassImp(AliT0Parameters)
47 ; // This is here to keep Emacs for indenting the next line
50 //____________________________________________________________________
51 AliT0Parameters* AliT0Parameters::fgInstance = 0;
52 //____________________________________________________________________
53 AliT0Parameters* AliT0Parameters::Instance()
55 // Get static instance
57 fgInstance = new AliT0Parameters;
62 //____________________________________________________________________
63 AliT0Parameters::AliT0Parameters()
65 fPh2Mip(0),fmV2Mip(0),
66 fChannelWidth(0),fmV2Channel(0),
77 fCalibentry(), fLookUpentry(),fSlewCorr()
81 // Default constructor
82 for (Int_t ipmt=0; ipmt<24; ipmt++)
97 //__________________________________________________________________
99 AliT0Parameters::Init()
101 // Initialize the parameters manager. We need to get stuff from the
105 AliCDBManager *stor =AliCDBManager::Instance();
108 fCalibentry = stor->Get("T0/Calib/TimeDelay");
110 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
112 AliFatal(" ALARM !!!! No time delays in CDB ");
117 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
119 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
122 AliFatal(" ALARM !!!! No slewing correction in CDB ");
127 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
129 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
132 AliFatal(" ALARM !!!! No Lookup table in CDB ");
140 //__________________________________________________________________
142 void AliT0Parameters::InitIfOnline()
144 // should be used in online
145 // for switching to this one should write
146 // AliT0RawReader myrawreader(rawReader);
147 // myrawreader.SetOnlineMode(kTRUE);
150 //standart configuration (used for simulation)
151 //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
152 // configuration for test Jun07.
154 Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
155 for (Int_t ik=0; ik<110; ik++)
157 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
158 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
161 lookvalue->SetTRM(trm);
162 lookvalue->SetTDC(tdc);
163 lookvalue->SetChain(chain);
164 lookvalue->SetChannel(channel);
166 if (channel<6) channel +=2;
167 else {channel = 0; tdc++;}
168 if(ik==57) { tdc=0; channel=0; trm=1;}
169 fLookUp.Add((TObject*)lookvalue,(TObject*)lookkey);
174 //__________________________________________________________________
177 AliT0Parameters::GetTimeDelayDA(Int_t ipmt)
179 // return time delay for LED channel
185 return fgCalibData ->GetTimeDelayDA(ipmt);
187 //__________________________________________________________________
189 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
191 // return time delay for CFD channel
195 fTimeDelayCFD = 1000+ipmt*100;
196 return fTimeDelayCFD;
199 return fgCalibData->GetTimeDelayCFD(ipmt);
202 //__________________________________________________________________
204 AliT0Parameters::GetMeanT0()
206 // return mean of T0 distrubution with vertex=0
213 return fgCalibData->GetMeanT0();
215 //__________________________________________________________________
217 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
220 AliError("No slewing correction is available!");
221 return (TGraph*)fAmpLEDRec.At(ipmt);
223 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
226 //__________________________________________________________________
228 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
231 AliError("No walk correction is available!");
232 return (TGraph*)fWalk.At(ipmt);
234 return fgSlewCorr -> GetWalk(ipmt) ;
237 //__________________________________________________________________
239 Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
242 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
244 return fgSlewCorr -> GetWalkVal(ipmt, mv) ;
248 //__________________________________________________________________
250 AliT0Parameters::SetPMTeff(Int_t ipmt)
253 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
254 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
255 0.252276, 0.256267,0.26, 0.27125, 0.281818,
256 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
257 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
258 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
259 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
260 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
261 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
262 0.003875, 0.00190, 0, 0, 0 } ;
263 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
265 TGraph* gr = new TGraph(50,lambda,eff);
266 fPMTeff.AddAtAndExpand(gr,ipmt);
268 //________________________________________________________________
271 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
275 AliT0LookUpKey * lookkey; //= new AliT0LookUpKey();
276 AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
278 lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
280 lookkey = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)lookvalue);
283 AliInfo(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
287 return lookkey->GetKey();
291 //__________________________________________________________________
292 TMap *AliT0Parameters::GetMapLookup()
295 cout<<" No look up table in OCDB";
298 return fgLookUp->GetMapLookup();
300 //__________________________________________________________________
303 AliT0Parameters::GetNumberOfTRMs()
305 // return number of trms
308 // fNumberOfTRMs = 2;
309 return fNumberOfTRMs;
311 return fgLookUp ->GetNumberOfTRMs();
313 //________________________________________________________________________________
314 Double_t AliT0Parameters::GetZPosition(const char* symname){
315 // Get the global z coordinate of the given T0 alignable volume
317 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
321 //________________________________________________________________________________
323 Double_t AliT0Parameters::GetZPositionShift(const char* symname)
325 // Get the global z coordinate of the given T0 alignable volume
327 Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
330 AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
331 Double_t *otr = origmat.GetTranslation();
333 return (tr[2]-otr[2]);