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"
35declareProperty(
"BossRelease",m_bossRelease=
"default");
36declareProperty(
"BossVer",m_sftver=
"default");
37declareProperty(
"ParVer",m_calParVer=
"default");
38declareProperty(
"DbStatus",m_dbStatus=
"OK");
39declareProperty(
"Type",m_type=
"default");
55 MsgStream log(
msgSvc(), name());
56 log << MSG::INFO << name() <<
": Start of run initialisation" << endreq;
58 StatusCode sc = Service::initialize();
59 if ( sc.isFailure() )
return sc;
62 sc = service(
"IncidentSvc", incsvc);
65 incsvc -> addListener(
this,
"NewRun", priority);
69 sc = serviceLocator()->service(
"DatabaseSvc",m_dbsvc,
true);
70 if (sc .isFailure() ) {
71 log << MSG::ERROR <<
"Unable to find DatabaseSvc " << endreq;
76 sc = serviceLocator()->service(
"EventDataSvc", m_eventSvc,
true);
77 if (sc .isFailure() ) {
78 log << MSG::ERROR <<
"Unable to find EventDataSvc " << endreq;
83 log<<MSG::INFO <<
"setProperties()" << endreq;
84 scc = setProperties();
94 MsgStream log(
msgSvc(), name());
95 log << MSG::INFO << name() <<
": End of Run" << endreq;
96 return StatusCode::SUCCESS;
106 MsgStream log( messageService(), name() );
107 log << MSG::DEBUG <<
"handle: " << inc.type() << endreq;
109 SmartDataPtr<Event::EventHeader> eventHeader(m_eventSvc,
"/Event/EventHeader");
110 int run = eventHeader->runNumber();
112 if ( inc.type() ==
"NewRun" ){
113 log << MSG::DEBUG <<
"New Run:" << run << endreq;
120 MsgStream log(messageService(), name());
121 SmartDataPtr<Event::EventHeader> eventHeader(m_eventSvc,
"/Event/EventHeader");
122 int run = eventHeader->runNumber();
124 log << MSG::INFO <<
"This data is the MC sample with the Run Number: " << run << endreq;
127 log << MSG::INFO <<
"Reverse the sign of Run Number" << endreq;
137 if(m_sftver ==
"default" && m_bossRelease ==
"default")
139 log << MSG::FATAL <<
" BossRelease and BossVer for DedxCurve not set!" << endreq;
143 if( (run<m_runFromMax || run>m_runToMin) )
145 if(m_sftver ==
"default")
147 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);
148 std::cout<<stmt1<<std::endl;
150 int row_no = m_dbsvc->
query(
"offlinedb",stmt1,rest);
152 log << MSG::FATAL <<
"can not find result for DedxCur with: " << stmt1 << endreq;
156 log << MSG::FATAL <<
"find more than 1 results for DedxCur with: " << stmt1 << endreq;
161 m_calParVer = recordst->
GetString(
"ParVer");
162 m_runFromMax = atoi((recordst->
GetString(
"RunFrom")).c_str());
163 m_runToMin = atoi((recordst->
GetString(
"RunTo")).c_str());
164 log << MSG::INFO <<
"get from CalVtxLumVer, m_runFromMax: "<< m_runFromMax <<
" m_runToMin: "<<m_runToMin<< endreq;
169 if(m_calParVer!=
"default")
170 sprintf(stmt1,
"select RunFrom, RunTo, DedxCurvePar,DedxSigmaPar, SftVer, CurveFileName 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());
172 sprintf(stmt1,
"select RunFrom, RunTo, DedxCurvePar,DedxSigmaPar, SftVer, CurveFileName 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());
173 std::cout<<stmt1<<std::endl;
176 int row_no = m_dbsvc->
query(
"offlinedb", stmt1, res);
178 log << MSG::FATAL <<
"can not find result for DedxCur with: "<< stmt1 << endreq;
182 log << MSG::FATAL <<
"find more than 1 results for DedxCur with: "<< stmt1 << endreq;
187 int runFrom = atoi((records->
GetString(
"RunFrom")).c_str());
188 int runTo = atoi((records->
GetString(
"RunTo")).c_str());
189 std::cout <<
"before output DedxCurveService version" << endl;
190 std::cout<<
" SftVer is " << records->
GetString(
"SftVer")
192 <<
" File name is "<<records->
GetString(
"CurveFileName")
194 std::cout <<
"after output DedxCurveService version" << endl;
196 if(m_sftver==
"default")
198 m_runFromMax = runFrom>m_runFromMax? runFrom:m_runFromMax;
199 m_runToMin = runTo<m_runToMin? runTo:m_runToMin;
203 m_runFromMax = runFrom;
206 log << MSG::INFO <<
"get from DedxCurvePar runFrom: "<< runFrom <<
" runTo: "<<runTo<< endreq;
207 log << MSG::INFO <<
"m_runFromMax: "<< m_runFromMax <<
" m_runToMin: "<<m_runToMin<< endreq;
209 TBuffer *buf1 =
new TBufferFile(TBuffer::kRead);
210 buf1->SetBuffer((*records)[
"DedxCurvePar"],327680,kFALSE);
211 TBuffer *buf2 =
new TBufferFile(TBuffer::kRead);
212 buf2->SetBuffer((*records)[
"DedxSigmaPar"],327680,kFALSE);
215 TTree* curvetree =
new TTree();
216 curvetree->Streamer(*buf1);
218 TTree* sigmatree =
new TTree();
219 sigmatree->Streamer(*buf2);
230 Int_t nentries_curve = (Int_t)curvetree ->GetEntries();
231 Int_t nentries_sigma = (Int_t)sigmatree ->GetEntries();
234 log << MSG::ERROR<<
"CurveSize larger than designed number"<<endreq;
242 log << MSG::ERROR<<
"SigmaSize larger than designed number"<<endreq;
245 m_sigma[i]=
sigma[i];}
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)
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 &)
virtual int query(const std::string &dbName, const std::string &sql, DatabaseRecordVector &res)=0