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>
40 AliT0CalibData* AliT0Parameters::fgCalibData = 0;
41 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
42 AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
43 //====================================================================
44 ClassImp(AliT0Parameters)
46 ; // This is here to keep Emacs for indenting the next line
49 //____________________________________________________________________
50 AliT0Parameters* AliT0Parameters::fgInstance = 0;
51 //____________________________________________________________________
52 AliT0Parameters* AliT0Parameters::Instance()
54 // Get static instance
56 fgInstance = new AliT0Parameters;
57 // fgInstance->Init();
62 //____________________________________________________________________
63 AliT0Parameters::AliT0Parameters()
65 fPh2Mip(0),fmV2Mip(0),
66 fChannelWidth(0),fmV2Channel(0),
69 fCalibentry(), fLookUpentry(),fSlewCorr(),
70 fLookUp(0), fNumberOfTRMs(2)
73 // Default constructor
74 for (Int_t ipmt=0; ipmt<24; ipmt++)
89 //__________________________________________________________________
91 AliT0Parameters::Init()
93 // Initialize the parameters manager. We need to get stuff from the
97 AliCDBManager *stor =AliCDBManager::Instance();
100 fCalibentry = stor->Get("T0/Calib/TimeDelay");
102 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
104 AliFatal(" ALARM !!!! No time delays in CDB ");
109 fSlewCorr = stor->Get("T0/Calib/Slewing_Walk");
111 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
114 AliFatal(" ALARM !!!! No slewing correction in CDB ");
119 fLookUpentry = stor->Get("T0/Calib/LookUp_Table");
121 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
124 AliFatal(" ALARM !!!! No Lookup table in CDB ");
132 //__________________________________________________________________
134 void AliT0Parameters::InitIfOnline()
136 // should be used in online
137 // for switching to this one should write
138 // AliT0RawReader myrawreader(rawReader);
139 // myrawreader.SetOnlineMode(kTRUE);
144 Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
145 for (Int_t ik=0; ik<110; ik++)
147 AliT0LookUpKey * lookkey= new AliT0LookUpKey();
148 AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
151 lookvalue->SetTRM(trm);
152 lookvalue->SetTDC(tdc);
153 lookvalue->SetChain(chain);
154 lookvalue->SetChannel(channel);
156 if(ik==55) { trm=1; tdc=0; channel=0;}
157 if (channel<6) channel +=2;
158 else {channel = 0; tdc++;}
159 fLookUp.Add((TObject*)lookvalue,(TObject*)lookkey);
164 //__________________________________________________________________
167 AliT0Parameters::GetTimeDelayDA(Int_t ipmt)
169 // return time delay for LED channel
175 return fgCalibData ->GetTimeDelayDA(ipmt);
177 //__________________________________________________________________
179 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
181 // return time delay for CFD channel
185 fTimeDelayCFD = 1000+ipmt*100;
186 return fTimeDelayCFD;
189 return fgCalibData->GetTimeDelayCFD(ipmt);
192 //__________________________________________________________________
194 AliT0Parameters::GetMeanT0()
196 // return mean of T0 distrubution with vertex=0
203 return fgCalibData->GetMeanT0();
205 //__________________________________________________________________
207 TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const
210 return (TGraph*)fAmpLED.At(ipmt);
212 return fgSlewCorr -> GetAmpLED(ipmt) ;
215 //__________________________________________________________________
217 TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
220 cout<<"AliT0Parameters::GetSlewingRec !fSlewCorr"<<endl;
221 return (TGraph*)fAmpLEDRec.At(ipmt);
223 return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
226 //__________________________________________________________________
228 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
231 cout<<" AliT0Parameters::GetWalk "<<fSlewCorr<<endl;
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 cout<<" no such address "<<endl; return -1;
287 //cout<<"AliT0Parameters:: key "<<lookkey->GetKey()<<endl;
288 return lookkey->GetKey();
292 //__________________________________________________________________
294 AliT0Parameters::GetNumberOfTRMs()
296 // return number of trms
300 return fNumberOfTRMs;
302 return fgLookUp ->GetNumberOfTRMs();
304 //________________________________________________________________________________
305 Double_t AliT0Parameters::GetZPosition(const char* symname){
306 // Get the global z coordinate of the given T0 alignable volume
311 TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname);
315 TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
317 TGeoHMatrix* hm = pnode->GetMatrix();
318 tr = hm->GetTranslation();
320 const char* path = pne->GetTitle();
321 if(!gGeoManager->cd(path)){
322 AliErrorClass(Form("Volume path %s not valid!",path));
325 tr = gGeoManager->GetCurrentMatrix()->GetTranslation();