BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MucCalibConstSvc.cxx
Go to the documentation of this file.
1//------------------------------------------------------------------------------|
2// [File ]: MucCalibConstSvc.cxx |
3// [Brief ]: Algorithom of MUC calibration constants service |
4// constants read from CalibDataSvc |
5// [Author]: Xie Yuguang, <ygxie@mail.ihep.ac.cn> |
6// [Date ]: Mar 15, 2007 |
7// [Log ]: See ChangLog |
8//------------------------------------------------------------------------------|
9
10#include "GaudiKernel/Bootstrap.h"
11#include "GaudiKernel/DataSvc.h"
12#include "GaudiKernel/IDataProviderSvc.h"
13#include "GaudiKernel/IInterface.h"
14#include "GaudiKernel/ISvcLocator.h"
15#include "GaudiKernel/MsgStream.h"
16#include "GaudiKernel/SmartDataPtr.h"
17#include "GaudiKernel/StatusCode.h"
18
19#include "CalibData/CalibModel.h"
20#include "CalibData/Muc/MucCalibData.h"
21#include "CalibDataSvc/ICalibRootSvc.h"
22
23#include "MucCalibConstSvc.h"
24
25// static SvcFactory<MucCalibConstSvc> s_factory;
26// const ISvcFactory& MucCalibConstSvcFactory = s_factory;
27
29
30MucCalibConstSvc::MucCalibConstSvc( const std::string& name, ISvcLocator* svcloc )
31 : base_class( name, svcloc ), m_pCalibDataSvc( 0 ) {
32 declareProperty( "ConfigMode", m_fConfigMode = 3 );
33 declareProperty( "UniformEff", m_fUniformEff = 0.95 );
34 declareProperty( "UniformCnt", m_fUniformEff = 0.05 );
35 declareProperty( "UniformNos", m_fUniformEff = 0.001 );
36 declareProperty( "UniformNosRatio", m_fUniformNos = 0.05 );
37 declareProperty( "UniformClst", m_fUniformClst = 4 );
38}
39
41
43 MsgStream log( msgSvc(), name() );
44 log << MSG::INFO << endmsg << "initialize()" << endmsg << endmsg;
45 log << MSG::INFO << "Config mode:\t" << m_fConfigMode << endmsg;
46 StatusCode sc = Service::initialize();
47 if ( sc.isFailure() ) return sc;
48
49 sc = service( "CalibDataSvc", m_pCalibDataSvc, true );
50 if ( sc == StatusCode::SUCCESS )
51 { log << MSG::INFO << "Retrieve IDataProviderSvc" << endmsg; }
52 else { log << MSG::FATAL << "can not get IDataProviderSvc" << endmsg; }
53
54 return StatusCode::SUCCESS;
55}
56
58 MsgStream log( msgSvc(), name() );
59 log << MSG::INFO << endmsg << "finalize()" << endmsg << endmsg;
60 return StatusCode::SUCCESS;
61}
62
63//-----------------------------------------------------------------------------------|
64//------------------------------- Access by users -----------------------------------|
65//-----------------------------------------------------------------------------------|
66
67// Get config level
68inline int MucCalibConstSvc::getLevel() const { return m_fConfigMode; }
69
70// Get efficiency(Eff)
71inline double MucCalibConstSvc::getEff( int part, int segment, int layer, int strip ) const {
72 double eff = 0.0;
73 MsgStream log( msgSvc(), name() );
74 // log << MSG::INFO << "In MucCalibDataSvc" << endmsg;
75 std::string fullPath = "/Calib/MucCal";
76 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
77
78 if ( !pMucCalibConst )
79 { log << MSG::ERROR << "getEff() can not access to MucCalibData via SmartPtr" << endmsg; }
80 else
81 {
82 switch ( m_fConfigMode )
83 {
84 case 0:
85 if ( m_fUniformEff < 0 ) eff = pMucCalibConst->getUniformEff();
86 else eff = m_fUniformEff;
87 break;
88 case 1: eff = pMucCalibConst->getLayerEff( layer ); break;
89 case 2: eff = pMucCalibConst->getBoxEff( part, segment, layer ); break;
90 case 3: eff = pMucCalibConst->getStripEff( part, segment, layer, strip ); break;
91 default:;
92 }
93 }
94
95 return eff;
96}
97
98// Get counting rate(Cnt)
99inline double MucCalibConstSvc::getCnt( int part, int segment, int layer, int strip ) const {
100 double cnt = 0.0;
101 MsgStream log( msgSvc(), name() );
102 std::string fullPath = "/Calib/MucCal";
103 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
104 if ( !pMucCalibConst )
105 { log << MSG::ERROR << "getCnt() can not access to MucCalibData via SmartPtr" << endmsg; }
106 else
107 {
108 switch ( m_fConfigMode )
109 {
110 case 0:
111 if ( m_fUniformCnt < 0 ) cnt = pMucCalibConst->getUniformCnt();
112 else cnt = m_fUniformCnt;
113 break;
114 case 1: cnt = pMucCalibConst->getLayerCnt( layer ); break;
115 case 2: cnt = pMucCalibConst->getBoxCnt( part, segment, layer ); break;
116 case 3: cnt = pMucCalibConst->getStripCnt( part, segment, layer, strip ); break;
117 default:;
118 }
119 }
120
121 return cnt;
122}
123
124// Get noise(Nos)
125inline double MucCalibConstSvc::getNos( int part, int segment, int layer, int strip ) const {
126 double nos = 0.0;
127 MsgStream log( msgSvc(), name() );
128 std::string fullPath = "/Calib/MucCal";
129 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
130 if ( !pMucCalibConst )
131 { log << MSG::ERROR << "getNos() can not access to MucCalibData via SmartPtr" << endmsg; }
132 else
133 {
134 switch ( m_fConfigMode )
135 {
136 case 0:
137 if ( m_fUniformNos < 0 ) nos = pMucCalibConst->getUniformNos();
138 else nos = m_fUniformNos;
139 break;
140 case 1: nos = pMucCalibConst->getLayerNos( layer ); break;
141 case 2: nos = pMucCalibConst->getBoxNos( part, segment, layer ); break;
142 case 3: nos = pMucCalibConst->getStripNos( part, segment, layer, strip ); break;
143 default:;
144 }
145 }
146
147 return nos;
148}
149
150// Get noise ratio(NosRatio)
151inline double MucCalibConstSvc::getNosRatio( int part, int segment, int layer,
152 int strip ) const {
153 double nosRatio = 0.0;
154 MsgStream log( msgSvc(), name() );
155 std::string fullPath = "/Calib/MucCal";
156 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
157 if ( !pMucCalibConst )
158 {
159 log << MSG::ERROR << "getNosRatio() can not access to MucCalibData via SmartPtr" << endmsg;
160 }
161 else
162 {
163 switch ( m_fConfigMode )
164 {
165 case 0:
166 if ( m_fUniformNosRatio < 0 ) nosRatio = pMucCalibConst->getUniformNosRatio();
167 else nosRatio = m_fUniformNosRatio;
168 break;
169 case 1: nosRatio = pMucCalibConst->getLayerNosRatio( layer ); break;
170 case 2: nosRatio = pMucCalibConst->getBoxNosRatio( part, segment, layer ); break;
171 case 3: nosRatio = pMucCalibConst->getStripNosRatio( part, segment, layer, strip ); break;
172 default:;
173 }
174 }
175
176 return nosRatio;
177}
178
179// Get cluster size(Clst)
180inline double MucCalibConstSvc::getClst( int part, int segment, int layer,
181 double prob ) const {
182 double cluster = 0.0;
183 MsgStream log( msgSvc(), name() );
184 std::string fullPath = "/Calib/MucCal";
185 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
186 if ( !pMucCalibConst )
187 { log << MSG::ERROR << "getClst() can not access to MucCalibData via SmartPtr" << endmsg; }
188 else
189 {
190 switch ( m_fConfigMode )
191 {
192 case 0:
193 if ( m_fUniformClst < 0 ) cluster = pMucCalibConst->getUniformClst();
194 else cluster = m_fUniformClst;
195 break;
196 case 1: cluster = pMucCalibConst->getLayerClst( layer, prob ); break;
197 case 2: cluster = pMucCalibConst->getBoxClst( part, segment, layer, prob ); break;
198 case 3: cluster = 0.0; break;
199 default:;
200 }
201 }
202
203 return cluster;
204}
205
206// Uniform constants
207inline double MucCalibConstSvc::getUniformEff() const {
208 double fUniformEff = 0.0;
209 MsgStream log( msgSvc(), name() );
210
211 std::string fullPath = "/Calib/MucCal";
212 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
213 if ( !pMucCalibConst )
214 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
215 else { fUniformEff = pMucCalibConst->getUniformEff(); }
216
217 return fUniformEff;
218}
219
220inline double MucCalibConstSvc::getUniformCnt() const {
221 double fUniformCnt = 0.0;
222 MsgStream log( msgSvc(), name() );
223
224 std::string fullPath = "/Calib/MucCal";
225 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
226 if ( !pMucCalibConst )
227 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
228 else { fUniformCnt = pMucCalibConst->getUniformCnt(); }
229
230 return fUniformCnt;
231}
232
234 double fUniformNosRatio = 0.0;
235 MsgStream log( msgSvc(), name() );
236
237 std::string fullPath = "/Calib/MucCal";
238 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
239 if ( !pMucCalibConst )
240 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
241 else { fUniformNosRatio = pMucCalibConst->getUniformNosRatio(); }
242
243 return fUniformNosRatio;
244}
245
246inline double MucCalibConstSvc::getUniformNos() const {
247 double fUniformNos = 0.0;
248 MsgStream log( msgSvc(), name() );
249
250 std::string fullPath = "/Calib/MucCal";
251 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
252 if ( !pMucCalibConst )
253 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
254 else { fUniformNos = pMucCalibConst->getUniformNos(); }
255
256 return fUniformNos;
257}
258
259inline double MucCalibConstSvc::getUniformClst() const {
260 double fUniformClst = 0.0;
261 MsgStream log( msgSvc(), name() );
262
263 std::string fullPath = "/Calib/MucCal";
264 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
265 if ( !pMucCalibConst )
266 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
267 else { fUniformClst = pMucCalibConst->getUniformClst(); }
268
269 return fUniformClst;
270}
271
272// Level0, layer constants
273inline double MucCalibConstSvc::getLayerEff( int layer ) const {
274 double fEff = 0.0;
275 MsgStream log( msgSvc(), name() );
276
277 std::string fullPath = "/Calib/MucCal";
278 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
279 if ( !pMucCalibConst )
280 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
281 else { fEff = pMucCalibConst->getLayerEff( layer ); }
282
283 // log << MSG::DEBUG << "Layer:\t" << layer << "\t" << fEff << endmsg;
284 return fEff;
285}
286
287inline double MucCalibConstSvc::getLayerCnt( int layer ) const {
288 double fCnt = 0.0;
289 MsgStream log( msgSvc(), name() );
290
291 std::string fullPath = "/Calib/MucCal";
292 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
293 if ( !pMucCalibConst )
294 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
295 else { fCnt = pMucCalibConst->getLayerCnt( layer ); }
296
297 return fCnt;
298}
299
300inline double MucCalibConstSvc::getLayerNos( int layer ) const {
301 double fNos = 0.0;
302 MsgStream log( msgSvc(), name() );
303
304 std::string fullPath = "/Calib/MucCal";
305 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
306 if ( !pMucCalibConst )
307 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
308 else { fNos = pMucCalibConst->getLayerNos( layer ); }
309
310 return fNos;
311}
312
313inline double MucCalibConstSvc::getLayerNosRatio( int layer ) const {
314 double fNosRatio = 0.0;
315 MsgStream log( msgSvc(), name() );
316
317 std::string fullPath = "/Calib/MucCal";
318 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
319 if ( !pMucCalibConst )
320 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
321 else { fNosRatio = pMucCalibConst->getLayerNosRatio( layer ); }
322
323 return fNosRatio;
324}
325
326double MucCalibConstSvc::getLayerClst( int layer, double prob ) const {
327 double fClst = 0.0;
328 MsgStream log( msgSvc(), name() );
329
330 std::string fullPath = "/Calib/MucCal";
331 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
332 if ( !pMucCalibConst )
333 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
334 else { fClst = pMucCalibConst->getLayerClst( layer, prob ); }
335
336 return fClst;
337}
338
339// Level1, box constants
340inline double MucCalibConstSvc::getBoxEff( int part, int segment, int layer ) const {
341 double fEff = 0.0;
342 MsgStream log( msgSvc(), name() );
343
344 std::string fullPath = "/Calib/MucCal";
345 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
346 if ( !pMucCalibConst )
347 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
348 else { fEff = pMucCalibConst->getBoxEff( part, segment, layer ); }
349
350 // log << MSG::DEBUG << "Box:\t" << part << "\t" << segment <<"\t" << layer << "\t" << fEff
351 // << endmsg;
352 return fEff;
353}
354
355inline double MucCalibConstSvc::getBoxCnt( int part, int segment, int layer ) const {
356 double fCnt = 0.0;
357 MsgStream log( msgSvc(), name() );
358
359 std::string fullPath = "/Calib/MucCal";
360 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
361 if ( !pMucCalibConst )
362 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
363 else { fCnt = pMucCalibConst->getBoxCnt( part, segment, layer ); }
364
365 return fCnt;
366}
367
368inline double MucCalibConstSvc::getBoxNos( int part, int segment, int layer ) const {
369 double fNos = 0.0;
370 MsgStream log( msgSvc(), name() );
371
372 std::string fullPath = "/Calib/MucCal";
373 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
374 if ( !pMucCalibConst )
375 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
376 else { fNos = pMucCalibConst->getBoxNos( part, segment, layer ); }
377
378 return fNos;
379}
380
381inline double MucCalibConstSvc::getBoxNosRatio( int part, int segment, int layer ) const {
382 double fNosRatio = 0.0;
383 MsgStream log( msgSvc(), name() );
384
385 std::string fullPath = "/Calib/MucCal";
386 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
387 if ( !pMucCalibConst )
388 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
389 else { fNosRatio = pMucCalibConst->getBoxNosRatio( part, segment, layer ); }
390
391 return fNosRatio;
392}
393
394double MucCalibConstSvc::getBoxClst( int part, int segment, int layer, double prob ) const {
395 double fClst = 0.0;
396 MsgStream log( msgSvc(), name() );
397
398 std::string fullPath = "/Calib/MucCal";
399 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
400 if ( !pMucCalibConst )
401 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
402 else { fClst = pMucCalibConst->getBoxClst( part, segment, layer, prob ); }
403
404 return fClst;
405}
406
407// Level2, strip constants
408inline double MucCalibConstSvc::getStripEff( int part, int segment, int layer,
409 int strip ) const {
410 double fEff = 0.0;
411 MsgStream log( msgSvc(), name() );
412
413 log << MSG::INFO << "in MucCalibConstSvc::getStripEff" << endmsg;
414
415 std::string fullPath = "/Calib/MucCal";
416 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
417
418 if ( !pMucCalibConst )
419 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
420 else { fEff = pMucCalibConst->getStripEff( part, segment, layer, strip ); }
421
422 // log << MSG::DEBUG << "Strip:\t" << part << "\t" << segment <<"\t" << layer << "\t" <<
423 // strip << "\t" << fEff << endmsg;
424 return fEff;
425}
426
427inline double MucCalibConstSvc::getStripCnt( int part, int segment, int layer,
428 int strip ) const {
429 double fCnt = 0.0;
430 MsgStream log( msgSvc(), name() );
431
432 std::string fullPath = "/Calib/MucCal";
433 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
434 if ( !pMucCalibConst )
435 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
436 else { fCnt = pMucCalibConst->getStripCnt( part, segment, layer, strip ); }
437
438 return fCnt;
439}
440
441inline double MucCalibConstSvc::getStripNos( int part, int segment, int layer,
442 int strip ) const {
443 double fNos = 0.0;
444 MsgStream log( msgSvc(), name() );
445
446 std::string fullPath = "/Calib/MucCal";
447 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
448 if ( !pMucCalibConst )
449 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
450 else { fNos = pMucCalibConst->getStripNos( part, segment, layer, strip ); }
451
452 return fNos;
453}
454
455inline double MucCalibConstSvc::getStripNosRatio( int part, int segment, int layer,
456 int strip ) const {
457 double fNosRatio = 0.0;
458 MsgStream log( msgSvc(), name() );
459
460 std::string fullPath = "/Calib/MucCal";
461 SmartDataPtr<CalibData::MucCalibData> pMucCalibConst( m_pCalibDataSvc, fullPath );
462 if ( !pMucCalibConst )
463 { log << MSG::ERROR << "can not access to MucCalibData via SmartPtr" << endmsg; }
464 else { fNosRatio = pMucCalibConst->getStripNosRatio( part, segment, layer, strip ); }
465
466 return fNosRatio;
467}
468
469// END
DECLARE_COMPONENT(BesBdkRc)
IMessageSvc * msgSvc()
double getBoxNos(int part, int segment, int layer) const
double getStripNosRatio(int part, int segment, int layer, int strip) const
double getClst(int part, int segment, int layer, double prob) const
double getUniformNos() const
double getBoxClst(int part, int segment, int layer, double prob) const
double getLayerNos(int layer) const
double getCnt(int part, int segment, int layer, int strip) const
double getStripCnt(int part, int segment, int layer, int strip) const
double getBoxEff(int part, int segment, int layer) const
double getEff(int part, int segment, int layer, int strip) const
double getUniformEff() const
virtual StatusCode finalize()
double getLayerEff(int layer) const
MucCalibConstSvc(const std::string &name, ISvcLocator *svcloc)
double getUniformClst() const
double getBoxCnt(int part, int segment, int layer) const
double getBoxNosRatio(int part, int segment, int layer) const
double getUniformCnt() const
double getStripNos(int part, int segment, int layer, int strip) const
double getNosRatio(int part, int segment, int layer, int strip) const
double getLayerNosRatio(int layer) const
double getLayerClst(int layer, double prob) const
double getUniformNosRatio() const
double getLayerCnt(int layer) const
virtual StatusCode initialize()
double getNos(int part, int segment, int layer, int strip) const
double getStripEff(int part, int segment, int layer, int strip) const