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
23 // the START detectors.
24 // Eventually, this class will use the Conditions DB to get the
25 // various parameters, which code can then request from here.
28 #include "AliSTARTParameters.h"
29 #include "AliSTARTCalibData.h"
30 #include <AliCDBManager.h>
31 #include <AliCDBEntry.h>
32 #include <AliCDBStorage.h>
33 #include <Riostream.h>
35 AliSTARTCalibData* AliSTARTParameters::fgCalibData = 0;
36 //====================================================================
37 ClassImp(AliSTARTParameters)
39 ; // This is here to keep Emacs for indenting the next line
42 //____________________________________________________________________
43 AliSTARTParameters* AliSTARTParameters::fgInstance = 0;
44 //____________________________________________________________________
46 AliSTARTParameters::Instance()
48 // Get static instance
49 if (!fgInstance) fgInstance = new AliSTARTParameters;
53 //____________________________________________________________________
54 AliSTARTParameters::AliSTARTParameters()
56 // Default constructor
58 for (Int_t ipmt=0; ipmt<24; ipmt++)
60 SetTimeDelayCablesCFD(ipmt);
61 SetTimeDelayCablesLED(ipmt);
62 SetTimeDelayElectronicCFD(ipmt);
63 SetTimeDelayElectronicLED(ipmt);
64 SetTimeDelayPMT(ipmt);
65 SetVariableDelayLine(ipmt);
82 //__________________________________________________________________
84 AliSTARTParameters::Init()
86 // Initialize the parameters manager. We need to get stuff from the
88 // if (fIsInit) return;
90 AliCDBManager* cdb = AliCDBManager::Instance();
91 // AliCDBStorage *stor = cdb->GetStorage("local://$ALICE_ROOT");
92 fCalibentry = cdb->Get("START/Calib/Gain_TimeDelay_Slewing_Walk");
94 fgCalibData = (AliSTARTCalibData*)fCalibentry->GetObject();
101 //__________________________________________________________________
103 AliSTARTParameters::GetGain(Int_t ipmt) const
105 // Returns the calibrated gain for each PMT
111 return fgCalibData->GetGain(ipmt);
114 //__________________________________________________________________
116 AliSTARTParameters::GetTimeDelayLED(Int_t ipmt)
118 // return time delay for LED channel
121 fTimeDelayLED = fTimeDelayCablesLED[ipmt] + fTimeDelayElectronicLED[ipmt] + fTimeDelayPMT[ipmt];
122 return fTimeDelayLED;
124 return fgCalibData ->GetTimeDelayLED(ipmt);
126 //__________________________________________________________________
128 AliSTARTParameters::GetTimeDelayCFD(Int_t ipmt)
130 // return time delay for CFD channel
134 fTimeDelayCFD = fTimeDelayCablesCFD[ipmt] + fTimeDelayElectronicCFD[ipmt] + fTimeDelayPMT[ipmt] + fVariableDelayLine[ipmt];
135 return fTimeDelayCFD+37;
138 return fgCalibData->GetTimeDelayCFD(ipmt);
141 //__________________________________________________________________
144 AliSTARTParameters::SetSlewingLED(Int_t ipmt)
146 // Set Slweing Correction for LED channel
147 Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300,
148 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
150 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
151 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
154 TGraph* gr = new TGraph(23,mv,y);
155 fSlewingLED.AddAtAndExpand(gr,ipmt);
157 //__________________________________________________________________
159 Float_t AliSTARTParameters::GetSlewingLED(Int_t ipmt, Float_t mv) const
162 return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv);
164 return fgCalibData->GetSlewingLED(ipmt, mv) ;
168 //__________________________________________________________________
170 TGraph *AliSTARTParameters::GetSlew(Int_t ipmt) const
173 return (TGraph*)fSlewingLED.At(ipmt);
175 return fgCalibData -> GetSlew(ipmt) ;
178 //__________________________________________________________________
182 AliSTARTParameters::SetSlewingRec(Int_t ipmt)
184 // Set Slweing Correction for LED channel
185 Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300,
186 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
188 Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
189 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
191 Float_t y1[23], mv1[23];
192 for (Int_t i=0; i<23; i++){
193 y1[i] = y[22-i]; mv1[i] = mv[22-i];}
195 TGraph* gr = new TGraph(23,y1,mv1);
196 fSlewingRec.AddAtAndExpand(gr,ipmt);
199 //__________________________________________________________________
201 Float_t AliSTARTParameters::GetSlewingRec(Int_t ipmt, Float_t mv) const
204 return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv);
206 return fgCalibData -> GetSlewingRec(ipmt, mv) ;
209 //__________________________________________________________________
211 TGraph *AliSTARTParameters::GetSlewRec(Int_t ipmt) const
214 return (TGraph*)fSlewingRec.At(ipmt);
216 return fgCalibData -> GetSlewRec(ipmt) ;
219 //__________________________________________________________________
221 AliSTARTParameters::SetPMTeff(Int_t ipmt)
224 Float_t eff[50 ] = {0, 0, 0.23619, 0.202909, 0.177913,
225 0.175667, 0.17856, 0.190769, 0.206667, 0.230286,
226 0.252276, 0.256267,0.26, 0.27125, 0.281818,
227 0.288118, 0.294057,0.296222, 0.301622, 0.290421,
228 0.276615, 0.2666, 0.248, 0.23619, 0.227814,
229 0.219818, 0.206667,0.194087, 0.184681, 0.167917,
230 0.154367, 0.1364, 0.109412, 0.0834615,0.0725283,
231 0.0642963,0.05861, 0.0465, 0.0413333,0.032069,
232 0.0252203,0.02066, 0.016262, 0.012, 0.00590476,
233 0.003875, 0.00190, 0, 0, 0 } ;
234 for (Int_t i=0; i<50; i++) lambda[i]=200+10*i;
236 TGraph* gr = new TGraph(50,lambda,eff);
237 fPMTeff.AddAtAndExpand(gr,ipmt);