11#include "GaudiKernel/Bootstrap.h"
12#include "GaudiKernel/IDataProviderSvc.h"
13#include "GaudiKernel/IIncidentListener.h"
14#include "GaudiKernel/IIncidentSvc.h"
15#include "GaudiKernel/IInterface.h"
16#include "GaudiKernel/ISvcLocator.h"
17#include "GaudiKernel/Incident.h"
18#include "GaudiKernel/Kernel.h"
19#include "GaudiKernel/MsgStream.h"
20#include "GaudiKernel/PropertyMgr.h"
21#include "GaudiKernel/SmartDataPtr.h"
22#include "GaudiKernel/StatusCode.h"
24#include "EventModel/Event.h"
25#include "EventModel/EventHeader.h"
26#include "EventModel/EventModel.h"
37 : base_class( name, svcloc ) {
39 declareProperty(
"Host", host = std::string(
"bes3db2.ihep.ac.cn" ) );
40 declareProperty(
"DbName", dbName = std::string(
"offlinedb" ) );
41 declareProperty(
"UserName", userName = std::string(
"guest" ) );
42 declareProperty(
"Password", password = std::string(
"guestpass" ) );
43 declareProperty(
"BossRelease", m_bossRelease = std::string(
"default" ) );
44 declareProperty(
"EmcShEnCalibPar", m_calPar =
"default" );
45 declareProperty(
"EmcShEnCalibBossVer", m_bossVer =
"default" );
63 MsgStream log(
msgSvc(), name() );
64 log << MSG::INFO <<
"EmcShEnCalibSvc::initialize()" << endmsg;
66 StatusCode sc = Service::initialize();
67 if ( sc.isFailure() )
return sc;
70 sc = service(
"IncidentSvc", incsvc );
72 if ( sc.isSuccess() ) { incsvc->addListener(
this,
"NewRun", priority ); }
74 sc = serviceLocator()->service(
"DatabaseSvc",
m_dbsvc,
true );
77 log << MSG::ERROR <<
"Unable to find DatabaseSvc " << endmsg;
81 sc = serviceLocator()->service(
"EventDataSvc", m_eventSvc,
true );
84 log << MSG::ERROR <<
"Unable to find EventDataSvc " << endmsg;
88 return StatusCode::SUCCESS;
92 MsgStream log(
msgSvc(), name() );
93 log << MSG::INFO <<
"EmcShEnCalibSvc::finalize()" << endmsg;
95 return StatusCode::SUCCESS;
99 MsgStream log(
msgSvc(), name() );
100 log << MSG::DEBUG <<
"handle: " << inc.type() << endmsg;
102 if ( inc.type() ==
"NewRun" )
104 log << MSG::DEBUG <<
"NewRun" << endmsg;
106 SmartDataPtr<Event::EventHeader> eventHeader( m_eventSvc,
"/Event/EventHeader" );
107 int run = eventHeader->runNumber();
109 if ( run < 0 ) run = -run;
110 log << MSG::DEBUG <<
"handle: "
111 <<
"Run in handle is: " << run << endmsg;
115 if ( run >= m_RunFrom && run <= m_RunTo && m_ReadPar ==
true )
125 { log << MSG::ERROR <<
"can not initilize Shower energy Calib Constants" << endmsg; }
139 int& runfrm,
int& runto,
int RunNo,
140 std::string BossRelease, std::string DataType ) {
141 MsgStream log(
msgSvc(),
"EmcShEnCalibSvc" );
147 StatusCode sc = serviceLocator()->service(
"DatabaseSvc",
m_dbsvc,
true );
148 if ( sc.isFailure() )
150 log << MSG::ERROR <<
" Unable to find DatabaseSvc " << endmsg;
154 const char* bossRelease = BossRelease.c_str();
155 const char* dataType = DataType.c_str();
158 "select RunFrom,RunTo,SftVer,ParVer from CalVtxLumVer where BossRelease = '%s' and "
159 "RunFrom <= %d and RunTo "
160 ">= %d and DataType='%s' ",
161 bossRelease, run_No, run_No, dataType );
164 int row_no =
m_dbsvc->query(
"offlinedb", stmt, res );
168 std::cout <<
"ERROR:error searching with:" << stmt << std::endl;
174 runfrm = records1->
GetInt(
"RunFrom" );
175 runto = records1->
GetInt(
"RunTo" );
179 CalParVer = records1->
GetString(
"ParVer" );
184 cout <<
"ERROR: " << dataType <<
" set overlapped run number in the table CalVtxLumVer"
188 return StatusCode::SUCCESS;
192 MsgStream log(
msgSvc(), name() );
193 SmartDataPtr<Event::EventHeader> eventHeader( m_eventSvc,
"/Event/EventHeader" );
194 int run = eventHeader->runNumber();
211 if ( m_bossRelease ==
"default" ) m_bossRelease = getenv(
"BES_RELEASE" );
213 cType =
"EmcShEnCalib";
215 st1 =
getSftParVer( m_bossVer, m_calPar, runfrm1, runto1, run, m_bossRelease, cType );
218 "select RunFrom,RunTo,singleGammaCalib,pi0Calib from EmcShEnCalibConst where "
219 "SftVer = '%s' and RunFrom <= "
220 "%d and RunTo >= %d ",
221 m_bossVer.c_str(), run, run );
224 int row_no =
m_dbsvc->query(
"offlinedb", stmt1, res );
229 m_SingleGammaCalibFile = dbrec.
GetString(
"singleGammaCalib" );
230 m_Pi0CalibFile = dbrec.
GetString(
"pi0Calib" );
231 m_RunFrom = dbrec.
GetInt(
"RunFrom" );
232 m_RunTo = dbrec.
GetInt(
"RunTo" );
245 else if ( row_no <= 0 )
247 cout <<
" EmcShEnCalibSvc:: can not found EmcShEnCalibSvc information of run:" << run
248 <<
", boss version " << m_bossRelease << endl;
DECLARE_COMPONENT(BesBdkRc)
struct st_mysql_res MYSQL_RES
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
int GetInt(std::string key)
std::string GetString(std::string key)
EmcShEnCalibSvc(const std::string &name, ISvcLocator *svcloc)
StatusCode getSftParVer(std::string &SftVer, std::string &CalParVer, int &runfrm, int &runto, int RunNo, std::string BossRelease, std::string DataType)
bool getEmcShEnCalibSvcInfo()
virtual StatusCode finalize()
void handle(const Incident &)
virtual StatusCode initialize()