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>
35 #include <Riostream.h>
37 AliT0CalibData* AliT0Parameters::fgCalibData = 0;
38 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
39 AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
40 //====================================================================
41 ClassImp(AliT0Parameters)
43 ; // This is here to keep Emacs for indenting the next line
46 //____________________________________________________________________
47 AliT0Parameters* AliT0Parameters::fgInstance = 0;
48 //____________________________________________________________________
50 AliT0Parameters::Instance()
52 // Get static instance
53 if (!fgInstance) fgInstance = new AliT0Parameters;
57 //____________________________________________________________________
58 AliT0Parameters::AliT0Parameters()
59 :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()
61 // Default constructor
63 for (Int_t ipmt=0; ipmt<24; ipmt++)
82 //__________________________________________________________________
84 AliT0Parameters::Init()
86 // Initialize the parameters manager. We need to get stuff from the
88 // if (fIsInit) return;
90 // AliCDBManager* cdb = AliCDBManager::Instance();
91 // fCalibentry = cdb->Get("T0/Calib/Gain_TimeDelay_Slewing_Walk");
94 AliCDBStorage *stor =AliCDBManager::Instance()->GetStorage("local://$ALICE_ROOT");
96 AliCDBEntry* fCalibentry = stor->Get("T0/Calib/TimeDelay",0);
98 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
101 { AliError(" ALARM !!!! No time delays in CDB "); }
103 AliCDBEntry* fSlewCorr = stor->Get("T0/Calib/Slewing_Walk",0);
105 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
107 // fLookUpentry = cdb->Get("T0/Calib/LookUp_Table");
108 fLookUpentry = stor->Get("T0/Calib/LookUp_Table",0);
110 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
114 fgLookUp->ReadAsciiLookup("$ALICE_ROOT/T0/lookUpTable.txt");
121 //__________________________________________________________________
123 AliT0Parameters::GetTimeDelayLED(Int_t ipmt)
125 // return time delay for LED channel
129 return fTimeDelayLED;
131 return fgCalibData ->GetTimeDelayLED(ipmt);
133 //__________________________________________________________________
135 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
137 // return time delay for CFD channel
141 fTimeDelayCFD = 1000+ipmt*100;
142 return fTimeDelayCFD;
145 return fgCalibData->GetTimeDelayCFD(ipmt);
148 //__________________________________________________________________
151 AliT0Parameters::SetSlewingLED(Int_t ipmt)
153 // Set Slweing Correction for LED channel
154 Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300,
155 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
157 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
158 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
161 TGraph* gr = new TGraph(23,mv,y);
162 fSlewingLED.AddAtAndExpand(gr,ipmt);
164 //__________________________________________________________________
166 Float_t AliT0Parameters::GetSlewingLED(Int_t ipmt, Float_t mv) const
169 return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv);
171 return fgCalibData->GetSlewingLED(ipmt, mv) ;
175 //__________________________________________________________________
177 TGraph *AliT0Parameters::GetSlew(Int_t ipmt) const
180 return (TGraph*)fSlewingLED.At(ipmt);
182 return fgCalibData -> GetSlew(ipmt) ;
185 //__________________________________________________________________
189 AliT0Parameters::SetSlewingRec(Int_t ipmt)
191 // Set Slweing Correction for LED channel
192 Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300,
193 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
195 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
196 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
198 Float_t y1[23], mv1[23];
199 for (Int_t i=0; i<23; i++){
200 y1[i] = y[22-i]; mv1[i] = mv[22-i];}
202 TGraph* gr = new TGraph(23,y1,mv1);
203 fSlewingRec.AddAtAndExpand(gr,ipmt);
206 //__________________________________________________________________
208 Float_t AliT0Parameters::GetSlewingRec(Int_t ipmt, Float_t mv) const
211 return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv);
213 return fgCalibData -> GetSlewingRec(ipmt, mv) ;
216 //__________________________________________________________________
218 TGraph *AliT0Parameters::GetSlewRec(Int_t ipmt) const
221 return (TGraph*)fSlewingRec.At(ipmt);
223 return fgCalibData -> GetSlewRec(ipmt) ;
227 //________________________________________________________________
228 void AliT0Parameters::SetWalk(Int_t ipmt)
232 Int_t x[70000], y[70000], index[70000];
233 Float_t time[10000],amplitude[10000];
237 ifstream inFile("data/CFD-Amp.txt");
238 // if(!inFile) AliError(Form("Cannot open file %s !",filename));
240 Int_t i=0, i1=0, i2=0;
241 while(getline(inFile,buffer)){
249 TMath::Sort(i, y, index,down);
250 Int_t amp=0, iin=0, isum=0, sum=0;
252 for (Int_t ii=0; ii<70000; ii++)
263 time[isum] = Float_t (sum/(iin));
265 time[isum] =Float_t (x[ind]);
266 amplitude[isum] = Float_t (amp);
268 // cout<<ii<<" "<<ind<<" "<<y[ind]<<" "<<x[ind]<<" iin "<<iin<<" mean "<<time[isum]<<" amp "<< amplitude[isum]<<" "<<isum<<endl;
279 TGraph* gr = new TGraph(isum, amplitude, time);
280 fWalk.AddAtAndExpand(gr,ipmt);
284 //__________________________________________________________________
286 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
289 return (TGraph*)fWalk.At(ipmt);
291 return fgCalibData -> GetWalk(ipmt) ;
294 //__________________________________________________________________
296 Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
299 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
301 return fgCalibData -> GetWalkVal(ipmt, mv) ;
304 //__________________________________________________________________
306 //__________________________________________________________________
308 AliT0Parameters::SetPMTeff(Int_t ipmt)
311 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
312 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
313 0.252276, 0.256267,0.26, 0.27125, 0.281818,
314 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
315 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
316 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
317 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
318 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
319 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
320 0.003875, 0.00190, 0, 0, 0 } ;
321 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
323 TGraph* gr = new TGraph(50,lambda,eff);
324 fPMTeff.AddAtAndExpand(gr,ipmt);
326 //________________________________________________________________
329 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
333 AliT0LookUpKey * lookkey; //= new AliT0LookUpKey();
334 AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
336 lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
338 cout<<" no such address "<<endl; return -1;
342 //cout<<"AliT0Parameters:: key "<<lookkey->GetKey()<<endl;
343 return lookkey->GetKey();