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;
91 // AliCDBManager* cdb = AliCDBManager::Instance();
92 // fCalibentry = cdb->Get("T0/Calib/Gain_TimeDelay_Slewing_Walk");
95 AliCDBStorage *stor =AliCDBManager::Instance()->GetStorage("local://$ALICE_ROOT");
97 AliCDBEntry* fCalibentry = stor->Get("T0/Calib/TimeDelay",0);
99 fgCalibData = (AliT0CalibData*)fCalibentry->GetObject();
102 { AliError(" ALARM !!!! No time delays in CDB "); }
104 AliCDBEntry* fSlewCorr = stor->Get("T0/Calib/Slewing_Walk",0);
106 fgSlewCorr = (AliT0CalibData*)fSlewCorr->GetObject();
108 // fLookUpentry = cdb->Get("T0/Calib/LookUp_Table");
109 fLookUpentry = stor->Get("T0/Calib/LookUp_Table",0);
111 fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject();
115 fgLookUp->ReadAsciiLookup("$ALICE_ROOT/T0/lookUpTable.txt");
122 //__________________________________________________________________
124 AliT0Parameters::GetTimeDelayLED(Int_t ipmt)
126 // return time delay for LED channel
130 return fTimeDelayLED;
132 return fgCalibData ->GetTimeDelayLED(ipmt);
134 //__________________________________________________________________
136 AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
138 // return time delay for CFD channel
142 fTimeDelayCFD = 1000+ipmt*100;
143 return fTimeDelayCFD;
146 return fgCalibData->GetTimeDelayCFD(ipmt);
149 //__________________________________________________________________
152 AliT0Parameters::SetSlewingLED(Int_t ipmt)
154 // Set Slweing Correction for LED channel
155 Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300,
156 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
158 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
159 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
162 TGraph* gr = new TGraph(23,mv,y);
163 fSlewingLED.AddAtAndExpand(gr,ipmt);
165 //__________________________________________________________________
167 Float_t AliT0Parameters::GetSlewingLED(Int_t ipmt, Float_t mv) const
170 return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv);
172 return fgCalibData->GetSlewingLED(ipmt, mv) ;
176 //__________________________________________________________________
178 TGraph *AliT0Parameters::GetSlew(Int_t ipmt) const
181 return (TGraph*)fSlewingLED.At(ipmt);
183 return fgCalibData -> GetSlew(ipmt) ;
186 //__________________________________________________________________
190 AliT0Parameters::SetSlewingRec(Int_t ipmt)
192 // Set Slweing Correction for LED channel
193 Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300,
194 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
196 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
197 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
199 Float_t y1[23], mv1[23];
200 for (Int_t i=0; i<23; i++){
201 y1[i] = y[22-i]; mv1[i] = mv[22-i];}
203 TGraph* gr = new TGraph(23,y1,mv1);
204 fSlewingRec.AddAtAndExpand(gr,ipmt);
207 //__________________________________________________________________
209 Float_t AliT0Parameters::GetSlewingRec(Int_t ipmt, Float_t mv) const
212 return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv);
214 return fgCalibData -> GetSlewingRec(ipmt, mv) ;
217 //__________________________________________________________________
219 TGraph *AliT0Parameters::GetSlewRec(Int_t ipmt) const
222 return (TGraph*)fSlewingRec.At(ipmt);
224 return fgCalibData -> GetSlewRec(ipmt) ;
228 //________________________________________________________________
229 void AliT0Parameters::SetWalk(Int_t ipmt)
233 Int_t x[70000], y[70000], index[70000];
234 Float_t time[10000],amplitude[10000];
238 const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-Amp.txt");
239 ifstream inFile(filename);
240 // if(!inFile) AliError(Form("Cannot open file %s !",filename));
242 Int_t i=0, i1=0, i2=0;
243 while(getline(inFile,buffer)){
251 TMath::Sort(i, y, index,down);
252 Int_t amp=0, iin=0, isum=0, sum=0;
254 for (Int_t ii=0; ii<i; ii++)
265 time[isum] = Float_t (sum/(iin));
267 time[isum] =Float_t (x[ind]);
268 amplitude[isum] = Float_t (amp);
270 // cout<<ii<<" "<<ind<<" "<<y[ind]<<" "<<x[ind]<<" iin "<<iin<<" mean "<<time[isum]<<" amp "<< amplitude[isum]<<" "<<isum<<endl;
281 TGraph* gr = new TGraph(isum, amplitude, time);
282 fWalk.AddAtAndExpand(gr,ipmt);
286 //__________________________________________________________________
288 TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
291 return (TGraph*)fWalk.At(ipmt);
293 return fgCalibData -> GetWalk(ipmt) ;
296 //__________________________________________________________________
298 Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
301 return ((TGraph*)fWalk.At(ipmt))->Eval(mv);
303 return fgCalibData -> GetWalkVal(ipmt, mv) ;
306 //__________________________________________________________________
308 //__________________________________________________________________
310 AliT0Parameters::SetPMTeff(Int_t ipmt)
313 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
314 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
315 0.252276, 0.256267,0.26, 0.27125, 0.281818,
316 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
317 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
318 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
319 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
320 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
321 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
322 0.003875, 0.00190, 0, 0, 0 } ;
323 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
325 TGraph* gr = new TGraph(50,lambda,eff);
326 fPMTeff.AddAtAndExpand(gr,ipmt);
328 //________________________________________________________________
331 AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel)
335 AliT0LookUpKey * lookkey; //= new AliT0LookUpKey();
336 AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
338 lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
340 cout<<" no such address "<<endl; return -1;
344 //cout<<"AliT0Parameters:: key "<<lookkey->GetKey()<<endl;
345 return lookkey->GetKey();