9#include "GaudiKernel/Kernel.h"
10#include "GaudiKernel/IInterface.h"
11#include "GaudiKernel/StatusCode.h"
12#include "GaudiKernel/SvcFactory.h"
13#include "GaudiKernel/MsgStream.h"
14#include "GaudiKernel/IIncidentSvc.h"
15#include "GaudiKernel/Incident.h"
16#include "GaudiKernel/IIncidentListener.h"
17#include "GaudiKernel/IDataProviderSvc.h"
18#include "GaudiKernel/Service.h"
19#include "GaudiKernel/SmartDataPtr.h"
26#include "TBufferFile.h"
33declareProperty(
"BossRelease",m_bossRelease=
"default");
34declareProperty(
"BossVer",m_sftver=
"default");
35declareProperty(
"ParVer",m_calParVer=
"default");
36declareProperty(
"DbStatus",m_dbStatus=
"OK");
37declareProperty(
"Type",m_type=
"default");
43 if ( IID_IDedxCurSvc.versionMatch(riid) ) {
46 else return Service::queryInterface(riid, ppvInterface) ;
47 return StatusCode::SUCCESS;
53 MsgStream log(
msgSvc(), name());
54 log << MSG::INFO << name() <<
": Start of run initialisation" << endreq;
56 StatusCode sc = Service::initialize();
57 if ( sc.isFailure() )
return sc;
60 sc = service(
"IncidentSvc", incsvc);
63 incsvc -> addListener(
this,
"NewRun", priority);
67 sc = serviceLocator()->service(
"DatabaseSvc",m_dbsvc,
true);
68 if (sc .isFailure() ) {
69 log << MSG::ERROR <<
"Unable to find DatabaseSvc " << endreq;
74 sc = serviceLocator()->service(
"EventDataSvc", m_eventSvc,
true);
75 if (sc .isFailure() ) {
76 log << MSG::ERROR <<
"Unable to find EventDataSvc " << endreq;
81 log<<MSG::INFO <<
"setProperties()" << endreq;
82 scc = setProperties();
92 MsgStream log(
msgSvc(), name());
93 log << MSG::INFO << name() <<
": End of Run" << endreq;
94 return StatusCode::SUCCESS;
104 MsgStream log( messageService(), name() );
105 log << MSG::DEBUG <<
"handle: " << inc.type() << endreq;
107 SmartDataPtr<Event::EventHeader> eventHeader(m_eventSvc,
"/Event/EventHeader");
108 int run = eventHeader->runNumber();
110 if ( inc.type() ==
"NewRun" ){
111 log << MSG::DEBUG <<
"New Run:" << run << endreq;
118 MsgStream log(messageService(), name());
119 SmartDataPtr<Event::EventHeader> eventHeader(m_eventSvc,
"/Event/EventHeader");
120 int run = eventHeader->runNumber();
122 log << MSG::INFO <<
"This data is the MC sample with the Run Number: " << run << endreq;
125 log << MSG::INFO <<
"Reverse the sign of Run Number" << endreq;
135 if(m_sftver ==
"default" && m_bossRelease ==
"default")
137 log << MSG::FATAL <<
" BossRelease and BossVer for DedxCurve not set!" << endreq;
141 if( (run<m_runFromMax || run>m_runToMin) )
143 if(m_sftver ==
"default")
145 sprintf(stmt1,
"select RunFrom, RunTo, SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and RunFrom <= %d and RunTo >= %d and DataType = 'DedxCurve'", m_bossRelease.c_str(), run, run);
146 std::cout<<stmt1<<std::endl;
148 int row_no = m_dbsvc->
query(
"offlinedb",stmt1,rest);
150 log << MSG::FATAL <<
"can not find result for DedxCur with: " << stmt1 << endreq;
154 log << MSG::FATAL <<
"find more than 1 results for DedxCur with: " << stmt1 << endreq;
159 m_calParVer = recordst->
GetString(
"ParVer");
160 m_runFromMax = atoi((recordst->
GetString(
"RunFrom")).c_str());
161 m_runToMin = atoi((recordst->
GetString(
"RunTo")).c_str());
162 log << MSG::INFO <<
"get from CalVtxLumVer, m_runFromMax: "<< m_runFromMax <<
" m_runToMin: "<<m_runToMin<< endreq;
167 if(m_calParVer!=
"default")
168 sprintf(stmt1,
"select RunFrom, RunTo, DedxCurvePar,DedxSigmaPar from DedxCurvePar where SftVer = '%s' and RunFrom <= %d and RunTo >= %d and DedxCurveParVer = %s and Status='%s'",sftver.c_str(),run,run,m_calParVer.c_str(), m_dbStatus.c_str());
170 sprintf(stmt1,
"select RunFrom, RunTo, DedxCurvePar,DedxSigmaPar from DedxCurvePar where SftVer = '%s' and RunFrom <= %d and RunTo >= %d and Status='%s' order by DedxCurveParVer desc",sftver.c_str(),run,run, m_dbStatus.c_str());
171 std::cout<<stmt1<<std::endl;
174 int row_no = m_dbsvc->
query(
"offlinedb", stmt1, res);
176 log << MSG::FATAL <<
"can not find result for DedxCur with: "<< stmt1 << endreq;
180 log << MSG::FATAL <<
"find more than 1 results for DedxCur with: "<< stmt1 << endreq;
185 int runFrom = atoi((records->
GetString(
"RunFrom")).c_str());
186 int runTo = atoi((records->
GetString(
"RunTo")).c_str());
187 if(m_sftver==
"default")
189 m_runFromMax = runFrom>m_runFromMax? runFrom:m_runFromMax;
190 m_runToMin = runTo<m_runToMin? runTo:m_runToMin;
194 m_runFromMax = runFrom;
197 log << MSG::INFO <<
"get from DedxCurvePar runFrom: "<< runFrom <<
" runTo: "<<runTo<< endreq;
198 log << MSG::INFO <<
"m_runFromMax: "<< m_runFromMax <<
" m_runToMin: "<<m_runToMin<< endreq;
200 TBuffer *buf1 =
new TBufferFile(TBuffer::kRead);
201 buf1->SetBuffer((*records)[
"DedxCurvePar"],327680,kFALSE);
202 TBuffer *buf2 =
new TBufferFile(TBuffer::kRead);
203 buf2->SetBuffer((*records)[
"DedxSigmaPar"],327680,kFALSE);
206 TTree* curvetree =
new TTree();
207 curvetree->Streamer(*buf1);
209 TTree* sigmatree =
new TTree();
210 sigmatree->Streamer(*buf2);
221 Int_t nentries_curve = (Int_t)curvetree ->GetEntries();
222 Int_t nentries_sigma = (Int_t)sigmatree ->GetEntries();
225 log << MSG::ERROR<<
"CurveSize larger than designed number"<<endreq;
227 for(
int i=0; i<CurveSize;i++){
233 log << MSG::ERROR<<
"SigmaSize larger than designed number"<<endreq;
235 for(
int i=0; i<SigmaSize;i++){
236 m_sigma[i]=sigma[i];}
237 m_curve_size=CurveSize;
238 m_sigma_size=SigmaSize;
data SetBranchAddress("time",&time)
struct st_mysql_res MYSQL_RES
std::string GetString(std::string key)
virtual StatusCode finalize()
virtual StatusCode initialize()
void handle(const Incident &)
DedxCurSvc(const std::string &name, ISvcLocator *svcloc)
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvUnknown)
virtual int query(const std::string &dbName, const std::string &sql, DatabaseRecordVector &res)=0