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>
34 #include <Riostream.h>
36 AliT0CalibData* AliT0Parameters::fgCalibData = 0;
37 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
38 AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
39 //====================================================================
40 ClassImp(AliT0Parameters)
42 ; // This is here to keep Emacs for indenting the next line
45 //____________________________________________________________________
46 AliT0Parameters* AliT0Parameters::fgInstance = 0;
47 //____________________________________________________________________
49 AliT0Parameters::Instance()
51 // Get static instance
52 if (!fgInstance) fgInstance = new AliT0Parameters;
56 //____________________________________________________________________
57 AliT0Parameters::AliT0Parameters()
58 :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()
60 // Default constructor
62 for (Int_t ipmt=0; ipmt<24; ipmt++)
81 //__________________________________________________________________
83 AliT0Parameters::Init()
85 // Initialize the parameters manager. We need to get stuff from the
87 // if (fIsInit) return;
89 // AliCDBManager* cdb = AliCDBManager::Instance();
90 // fCalibentry = cdb->Get("T0/Calib/Gain_TimeDelay_Slewing_Walk");
93 AliCDBStorage *stor =AliCDBManager::Instance()->GetStorage("local://$ALICE_ROOT");
95 AliCDBEntry* fCalibentry = stor->Get("T0/Calib/TimeDelay",0);
97 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
100 { AliError(" ALARM !!!! No time delays in CDB "); }
102 AliCDBEntry* fSlewCorr = stor->Get("T0/Calib/Slewing_Walk",0);
104 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
106 // fLookUpentry = cdb->Get("T0/Calib/LookUp_Table");
107 fLookUpentry = stor->Get("T0/Calib/LookUp_Table",0);
109 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
113 fgLookUp->ReadAsciiLookup("$ALICE_ROOT/T0/lookUpTable.txt");
120 //__________________________________________________________________
122 AliT0Parameters::GetTimeDelayLED(Int_t ipmt)
124 // return time delay for LED channel
128 return fTimeDelayLED;
130 return fgCalibData ->GetTimeDelayLED(ipmt);
132 //__________________________________________________________________
134 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
136 // return time delay for CFD channel
140 fTimeDelayCFD = 1000+ipmt*100;
141 return fTimeDelayCFD;
144 return fgCalibData->GetTimeDelayCFD(ipmt);
147 //__________________________________________________________________
150 AliT0Parameters::SetSlewingLED(Int_t ipmt)
152 // Set Slweing Correction for LED channel
153 Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300,
154 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
156 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
157 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
160 TGraph* gr = new TGraph(23,mv,y);
161 fSlewingLED.AddAtAndExpand(gr,ipmt);
163 //__________________________________________________________________
165 Float_t AliT0Parameters::GetSlewingLED(Int_t ipmt, Float_t mv) const
168 return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv);
170 return fgCalibData->GetSlewingLED(ipmt, mv) ;
174 //__________________________________________________________________
176 TGraph *AliT0Parameters::GetSlew(Int_t ipmt) const
179 return (TGraph*)fSlewingLED.At(ipmt);
181 return fgCalibData -> GetSlew(ipmt) ;
184 //__________________________________________________________________
188 AliT0Parameters::SetSlewingRec(Int_t ipmt)
190 // Set Slweing Correction for LED channel
191 Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300,
192 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
194 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
195 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
197 Float_t y1[23], mv1[23];
198 for (Int_t i=0; i<23; i++){
199 y1[i] = y[22-i]; mv1[i] = mv[22-i];}
201 TGraph* gr = new TGraph(23,y1,mv1);
202 fSlewingRec.AddAtAndExpand(gr,ipmt);
205 //__________________________________________________________________
207 Float_t AliT0Parameters::GetSlewingRec(Int_t ipmt, Float_t mv) const
210 return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv);
212 return fgCalibData -> GetSlewingRec(ipmt, mv) ;
215 //__________________________________________________________________
217 TGraph *AliT0Parameters::GetSlewRec(Int_t ipmt) const
220 return (TGraph*)fSlewingRec.At(ipmt);
222 return fgCalibData -> GetSlewRec(ipmt) ;
226 //________________________________________________________________
227 void AliT0Parameters::SetWalk(Int_t ipmt)
231 Int_t x[70000], y[70000], index[70000];
232 Float_t time[10000],amplitude[10000];
236 ifstream inFile("data/CFD-Amp.txt");
237 // if(!inFile) AliError(Form("Cannot open file %s !",filename));
239 Int_t i=0, i1=0, i2=0;
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<70000; 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();