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>
38 AliT0CalibData* AliT0Parameters::fgCalibData = 0;
39 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
40 AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
41 //====================================================================
42 ClassImp(AliT0Parameters)
44 ; // This is here to keep Emacs for indenting the next line
47 //____________________________________________________________________
48 AliT0Parameters* AliT0Parameters::fgInstance = 0;
49 //____________________________________________________________________
51 AliT0Parameters::Instance()
53 // Get static instance
54 if (!fgInstance) fgInstance = new AliT0Parameters;
58 //____________________________________________________________________
59 AliT0Parameters::AliT0Parameters()
60 :fIsInit(kFALSE),fPh2Mip(0),fmV2Mip(0),fChannelWidth(0),fmV2Channel(0),fQTmin(0),fQTmax(0),fSlewingLED(),fSlewingRec(),fPMTeff(),fTimeDelayLED(0),fTimeDelayCFD(0),fTimeDelayTVD(0),fCalibentry(), fLookUpentry(),fSlewCorr()
62 // Default constructor
64 for (Int_t ipmt=0; ipmt<24; ipmt++)
83 //__________________________________________________________________
85 AliT0Parameters::Init()
87 // Initialize the parameters manager. We need to get stuff from the
89 // if (fIsInit) return;
92 AliCDBStorage *stor =AliCDBManager::Instance()->GetStorage("local://$ALICE_ROOT");
94 AliCDBEntry* fCalibentry = stor->Get("T0/Calib/TimeDelay",0);
96 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
99 { AliError(" ALARM !!!! No time delays in CDB "); }
101 AliCDBEntry* fSlewCorr = stor->Get("T0/Calib/Slewing_Walk",0);
103 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
105 fLookUpentry = stor->Get("T0/Calib/LookUp_Table",0);
107 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
110 const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/lookUpTable.txt");
111 ifstream inFile(filename);
112 fgLookUp->ReadAsciiLookup(filename);
119 //__________________________________________________________________
121 AliT0Parameters::GetTimeDelayLED(Int_t ipmt)
123 // return time delay for LED channel
127 return fTimeDelayLED;
129 return fgCalibData ->GetTimeDelayLED(ipmt);
131 //__________________________________________________________________
133 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
135 // return time delay for CFD channel
139 fTimeDelayCFD = 1000+ipmt*100;
140 return fTimeDelayCFD;
143 return fgCalibData->GetTimeDelayCFD(ipmt);
146 //__________________________________________________________________
149 AliT0Parameters::SetSlewingLED(Int_t ipmt)
151 // Set Slweing Correction for LED channel
152 Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300,
153 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
155 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
156 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
159 TGraph* gr = new TGraph(23,mv,y);
160 fSlewingLED.AddAtAndExpand(gr,ipmt);
162 //__________________________________________________________________
164 Float_t AliT0Parameters::GetSlewingLED(Int_t ipmt, Float_t mv) const
167 return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv);
169 return fgCalibData->GetSlewingLED(ipmt, mv) ;
173 //__________________________________________________________________
175 TGraph *AliT0Parameters::GetSlew(Int_t ipmt) const
178 return (TGraph*)fSlewingLED.At(ipmt);
180 return fgCalibData -> GetSlew(ipmt) ;
183 //__________________________________________________________________
187 AliT0Parameters::SetSlewingRec(Int_t ipmt)
189 // Set Slweing Correction for LED channel
190 Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300,
191 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
193 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
194 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
196 Float_t y1[23], mv1[23];
197 for (Int_t i=0; i<23; i++){
198 y1[i] = y[22-i]; mv1[i] = mv[22-i];}
200 TGraph* gr = new TGraph(23,y1,mv1);
201 fSlewingRec.AddAtAndExpand(gr,ipmt);
204 //__________________________________________________________________
206 Float_t AliT0Parameters::GetSlewingRec(Int_t ipmt, Float_t mv) const
209 return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv);
211 return fgCalibData -> GetSlewingRec(ipmt, mv) ;
214 //__________________________________________________________________
216 TGraph *AliT0Parameters::GetSlewRec(Int_t ipmt) const
219 return (TGraph*)fSlewingRec.At(ipmt);
221 return fgCalibData -> GetSlewRec(ipmt) ;
225 //________________________________________________________________
226 void AliT0Parameters::SetWalk(Int_t ipmt)
230 Int_t x[70000], y[70000], index[70000];
231 Float_t time[10000],amplitude[10000];
235 const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-Amp.txt");
236 ifstream inFile(filename);
237 // if(!inFile) AliError(Form("Cannot open file %s !",filename));
240 while(getline(inFile,buffer)){
248 TMath::Sort(i, y, index,down);
249 Int_t amp=0, iin=0, isum=0, sum=0;
251 for (Int_t ii=0; ii<i; ii++)
262 time[isum] = Float_t (sum/(iin));
264 time[isum] =Float_t (x[ind]);
265 amplitude[isum] = Float_t (amp);
267 // cout<<ii<<" "<<ind<<" "<<y[ind]<<" "<<x[ind]<<" iin "<<iin<<" mean "<<time[isum]<<" amp "<< amplitude[isum]<<" "<<isum<<endl;
278 TGraph* gr = new TGraph(isum, amplitude, time);
279 fWalk.AddAtAndExpand(gr,ipmt);
283 //__________________________________________________________________
285 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
288 return (TGraph*)fWalk.At(ipmt);
290 return fgCalibData -> GetWalk(ipmt) ;
293 //__________________________________________________________________
295 Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
298 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
300 return fgCalibData -> GetWalkVal(ipmt, mv) ;
303 //__________________________________________________________________
305 //__________________________________________________________________
307 AliT0Parameters::SetPMTeff(Int_t ipmt)
310 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
311 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
312 0.252276, 0.256267,0.26, 0.27125, 0.281818,
313 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
314 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
315 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
316 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
317 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
318 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
319 0.003875, 0.00190, 0, 0, 0 } ;
320 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
322 TGraph* gr = new TGraph(50,lambda,eff);
323 fPMTeff.AddAtAndExpand(gr,ipmt);
325 //________________________________________________________________
328 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
332 AliT0LookUpKey * lookkey; //= new AliT0LookUpKey();
333 AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
335 lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
337 cout<<" no such address "<<endl; return -1;
341 //cout<<"AliT0Parameters:: key "<<lookkey->GetKey()<<endl;
342 return lookkey->GetKey();