2#include "GaudiKernel/IInterface.h"
3#include "GaudiKernel/Kernel.h"
4#include "GaudiKernel/MsgStream.h"
5#include "GaudiKernel/StatusCode.h"
7#include "GaudiKernel/Bootstrap.h"
8#include "GaudiKernel/ISvcLocator.h"
10#include "GaudiKernel/DataSvc.h"
11#include "GaudiKernel/IDataProviderSvc.h"
12#include "GaudiKernel/PropertyMgr.h"
13#include "GaudiKernel/SmartDataPtr.h"
15#include "CalibData/CalibModel.h"
16#include "CalibData/Emc/EmcCalibData.h"
17#include "EmcGeneralClass/EmcStructure.h"
19#include "EmcSatuDeadEnSvc/IEmcSatuDeadEnSvc.h"
20#include "GaudiKernel/IIncidentListener.h"
21#include "GaudiKernel/IIncidentSvc.h"
22#include "GaudiKernel/Incident.h"
27#include "EventModel/Event.h"
28#include "EventModel/EventHeader.h"
29#include "EventModel/EventModel.h"
34 : base_class( name, svcloc ) {
35 declareProperty(
"ReadSatuDeadEnDb", m_readSatuDeadEnDb =
true );
37 for (
int i = 0; i < 6240; i++ )
42 if ( m_readSatuDeadEnDb ==
true )
49 if ( m_readSatuDeadEnDb ==
false )
62 for (
int i = 0; i < 6240; i++ )
81 string paraPath = getenv(
"EMCCALIBCONSTSVCROOT" );
82 paraPath +=
"/share/emax_data.dat";
84 in.open( paraPath.c_str() );
87 while ( in.peek() != EOF )
90 in >> ixtal >> emaxData;
101 string paraPath2 = getenv(
"EMCCALIBCONSTSVCROOT" );
102 paraPath2 +=
"/share/emax_data_2.dat";
105 in2.open( paraPath2.c_str() );
109 while ( in2.peek() != EOF )
112 in2 >> ixtal >> emaxData;
124 string paraPath4740 = getenv(
"EMCCALIBCONSTSVCROOT" );
125 paraPath4740 +=
"/share/emax_data_4740.dat";
128 in4740.open( paraPath4740.c_str() );
132 while ( in4740.peek() != EOF )
135 in4740 >> ixtal >> emaxData;
147 string paraPath4750 = getenv(
"EMCCALIBCONSTSVCROOT" );
148 paraPath4750 +=
"/share/emax_data_4750.dat";
151 in4750.open( paraPath4750.c_str() );
155 while ( in4750.peek() != EOF )
158 in4750 >> ixtal >> emaxData;
170 string paraPath4780 = getenv(
"EMCCALIBCONSTSVCROOT" );
171 paraPath4780 +=
"/share/emax_data_4780.dat";
174 in4780.open( paraPath4780.c_str() );
178 while ( in4780.peek() != EOF )
181 in4780 >> ixtal >> emaxData;
193 string paraPath4840 = getenv(
"EMCCALIBCONSTSVCROOT" );
194 paraPath4840 +=
"/share/emax_data_4840.dat";
197 in4840.open( paraPath4840.c_str() );
201 while ( in4840.peek() != EOF )
204 in4840 >> ixtal >> emaxData;
216 string paraPath4914 = getenv(
"EMCCALIBCONSTSVCROOT" );
217 paraPath4914 +=
"/share/emax_data_4914.dat";
220 in4914.open( paraPath4914.c_str() );
224 while ( in4914.peek() != EOF )
227 in4914 >> ixtal >> emaxData;
239 string paraPath4946 = getenv(
"EMCCALIBCONSTSVCROOT" );
240 paraPath4946 +=
"/share/emax_data_4946.dat";
243 in4946.open( paraPath4946.c_str() );
247 while ( in4946.peek() != EOF )
250 in4946 >> ixtal >> emaxData;
262 string paraPath3 = getenv(
"EMCCALIBCONSTSVCROOT" );
263 paraPath3 +=
"/share/DeadThresholdEcut_2020.conf";
266 in3.open( paraPath3.c_str() );
271 double DeltaEcut = 0.0;
273 while ( in3.peek() != EOF )
276 in3 >> ixtal >> satuEn >> Ecut;
277 if ( ( Ecut - satuEn ) > DeltaEcut )
300 MsgStream log(
msgSvc(), name() );
301 log << MSG::INFO <<
"EmcCalibConstSvc::initialize()" << endmsg;
303 StatusCode sc = Service::initialize();
304 if ( sc.isFailure() )
return sc;
306 IIncidentSvc* incsvc;
307 sc = service(
"IncidentSvc", incsvc );
309 if ( sc.isSuccess() ) { incsvc->addListener(
this,
"NewRun", priority ); }
311 sc = serviceLocator()->service(
"EventDataSvc", m_eventSvc,
true );
312 if ( sc.isFailure() )
314 log << MSG::ERROR <<
"Unable to find EventDataSvc " << endmsg;
319 if ( sc == StatusCode::SUCCESS )
320 { log << MSG::INFO <<
"Retrieve IDataProviderSvc" << endmsg; }
321 else { log << MSG::FATAL <<
"can not get IDataProviderSvc" << endmsg; }
332 ISvcLocator* svcLocator = Gaudi::svcLocator();
333 sc = svcLocator->service(
"EmcSatuDeadEnSvc", m_EmcSatuDeadEnSvc );
336 if ( sc == StatusCode::SUCCESS )
339 std::cout <<
"Retrieve EmcSatuDeadEnSvc" << endl;
341 else { log << MSG::FATAL <<
"can not get EmcSatuDeadEnSvc" << endmsg; }
345 return StatusCode::SUCCESS;
352 MsgStream log(
msgSvc(), name() );
353 log << MSG::INFO <<
"EmcCalibConstSvc::finalize()" << endmsg;
354 return StatusCode::SUCCESS;
358 MsgStream log(
msgSvc(), name() );
359 log << MSG::DEBUG <<
"handle: " << inc.type() << endmsg;
361 if ( inc.type() ==
"NewRun" )
363 log << MSG::DEBUG <<
"NewRun" << endmsg;
365 SmartDataPtr<Event::EventHeader> eventHeader( m_eventSvc,
"/Event/EventHeader" );
366 int run = eventHeader->runNumber();
368 log << MSG::DEBUG <<
"handle: "
369 <<
"Run in handle is: " << run << endmsg;
371 if ( m_readSatuDeadEnDb ==
true )
374 if ( run < 0 ) run = -run;
376 if ( run >= m_runFrom && run <= m_runTo ) { m_inFlag =
true; }
377 else { m_inFlag =
false; }
378 if ( m_inFlag ==
false )
381 getSatuDead = m_EmcSatuDeadEnSvc->getEmcSatuDeadEnSvcInfo();
382 if ( !getSatuDead ) { log << MSG::ERROR <<
"can not get EmcSatuDeadEnSvc" << endmsg; }
385 m_runFrom = m_EmcSatuDeadEnSvc->getRunFrom();
386 m_runTo = m_EmcSatuDeadEnSvc->getRunTo();
389 cout <<
"current run=" << run << endl;
390 cout <<
"RunFrom=" << m_runFrom <<
",RunTo=" << m_runTo << endl;
391 cout <<
"in EmcCalibConstSvc open getSatuEnFile()= "
392 << m_EmcSatuDeadEnSvc->getSatuEnFile() << endl;
393 cout <<
"open getDeadEnFile()= " << m_EmcSatuDeadEnSvc->getDeadEnFile() << endl;
394 string aEmcSatuEnFile;
395 string aEmcDeadEnFile;
396 aEmcSatuEnFile = m_EmcSatuDeadEnSvc->getSatuEnFile();
397 aEmcDeadEnFile = m_EmcSatuDeadEnSvc->getDeadEnFile();
400 inSatuEn.open( aEmcSatuEnFile.c_str() );
403 if ( inSatuEn.is_open() )
408 while ( inSatuEn.peek() != EOF )
410 inSatuEn >> ixtal >> emaxData;
417 std::cout <<
"EmcCalibConstSvc ERROR::Could not open the file of "
418 << aEmcSatuEnFile << endl;
423 inDeadEn.open( aEmcDeadEnFile.c_str() );
425 if ( inDeadEn.is_open() )
429 double satuEn, deadEn;
430 while ( inDeadEn.peek() != EOF )
432 inDeadEn >> ixtal >> satuEn >> deadEn;
443 std::cout <<
"EmcCalibConstSvc ERROR::Could not open the file of "
444 << aEmcDeadEnFile << endl;
454 if ( m_readSatuDeadEnDb ==
false )
458 if ( run < 0 ) run = -run;
460 log << MSG::DEBUG <<
"handle: "
461 <<
"Run in handle is: " << run << endmsg;
464 <<
"Run in handle is: " << run << endl;
481 <<
"111111111111111" << endl;
498 <<
"emax data from topup data 4680@2020" << endl;
516 <<
"emax data from 4740data@2021" << endl;
534 <<
"emax data from 4750data@2021" << endl;
552 <<
"emax data from 4780data@2021" << endl;
570 <<
"emax data from 4840data@2021" << endl;
588 <<
"emax data from 4914data@2021" << endl;
606 <<
"emax data from 4946data@2021" << endl;
614 <<
"DeadEcutVersion="
629 double digiCalibConst = 0.0;
630 MsgStream log(
msgSvc(), name() );
632 std::string fullPath =
"/Calib/EmcCal";
633 SmartDataPtr<CalibData::EmcCalibData> calConst(
m_calDataSvc, fullPath );
635 { log << MSG::ERROR <<
"can not access to EmcDigi CalibData via SmartPtr" << endmsg; }
636 else { digiCalibConst = calConst->getDigiCalibConst( No ); }
638 return digiCalibConst;
642 int IxtalNumber = 999999;
643 MsgStream log(
msgSvc(), name() );
645 std::string fullPath =
"/Calib/EmcCal";
646 SmartDataPtr<CalibData::EmcCalibData> calConst(
m_calDataSvc, fullPath );
648 { log << MSG::ERROR <<
"can not access to EmcDigi CalibData via SmartPtr" << endmsg; }
649 else { IxtalNumber = calConst->getIxtalNumber( No ); }
655 int digiCalibConstNo = 0;
656 MsgStream log(
msgSvc(), name() );
658 std::string fullPath =
"/Calib/EmcCal";
659 SmartDataPtr<CalibData::EmcCalibData> calConst(
m_calDataSvc, fullPath );
661 { log << MSG::ERROR <<
"can not access to EmcDigiNo CalibData via SmartPtr" << endmsg; }
662 else { digiCalibConstNo = calConst->getDigiCalibConstNo(); }
664 return digiCalibConstNo;
668 int IxtalNumberNo = 0;
669 MsgStream log(
msgSvc(), name() );
671 std::string fullPath =
"/Calib/EmcCal";
672 SmartDataPtr<CalibData::EmcCalibData> calConst(
m_calDataSvc, fullPath );
674 { log << MSG::ERROR <<
"can not access to EmcDigiNo CalibData via SmartPtr" << endmsg; }
675 else { IxtalNumberNo = calConst->getIxtalNumberNo(); }
677 return IxtalNumberNo;
681 unsigned int PhiIndex )
const {
682 return m_theEmcStruc->getGeomIndex( PartId, ThetaIndex, PhiIndex );
704 double CrystalDeadEcut;
706 return CrystalDeadEcut;
711 for (
int iNo = 0; iNo < 6; iNo++ )
734 for (
int i = 480; i < 600; i++ )
DECLARE_COMPONENT(BesBdkRc)
double m_CrystalEmaxData_4740[6240]
EmcCalibConstSvc(const std::string &name, ISvcLocator *svcloc)
double m_CrystalDeadEcut_2020[6240]
void handle(const Incident &)
double m_CrystalEmaxData_2[6240]
virtual StatusCode finalize()
double m_CrystalEmaxData[6240]
void setCrystalDeadEcut(double CrystalDeadEcut[6240])
bool m_DeadEcutVersion2020
double m_CrystalEmaxData_4946[6240]
int getIndex(unsigned int PartId, unsigned int ThetaIndex, unsigned int PhiIndex) const
virtual StatusCode initialize()
double m_CrystalEmaxData_1[6240]
int getIxtalNumberNo() const
unsigned int getPartID(int Index) const
double m_CrystalDeadEcut[6240]
void setCrystalEmaxData(double CrystalEmaxData[6240])
int getDigiCalibConstNo() const
double m_CrystalEmaxData_4840[6240]
double m_CrystalEmaxData_4750[6240]
int getIxtalNumber(int No) const
double getCrystalEmaxData(int Index) const
EmcStructure * m_theEmcStruc
unsigned int getPhiIndex(int Index) const
IDataProviderSvc * m_calDataSvc
unsigned int getThetaIndex(int Index) const
double m_CrystalEmaxData_4914[6240]
double m_CrystalEmaxData_4780[6240]
double getDigiCalibConst(int No) const
double getCrystalDeadEcut(int Index) const