1#include "GaudiKernel/MsgStream.h"
2#include "GaudiKernel/SvcFactory.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/SmartDataPtr.h"
5#include "GaudiKernel/Bootstrap.h"
7#include "EmcCalibConstSvc/EmcCalibConstSvc.h"
8#include "GaudiKernel/MsgStream.h"
9#include "GaudiKernel/SvcFactory.h"
10#include "GaudiKernel/ISvcLocator.h"
11#include "GaudiKernel/Bootstrap.h"
12#include "RealizationSvc/ConnectionProvider.h"
13#include "facilities/Util.h"
16#include <boost/lexical_cast.hpp>
23 #define _T(str) ("\'"+str+"\'")
24 typedef basic_string<char>::size_type
S_T;
25 static const S_T npos = -1;
29 if( src.empty() || delimit.empty() )
throw "split: empty string\0";
31 S_T deli_len = delimit.size();
32 long index = npos, last_search_position = 0;
33 while( (index=src.find(delimit, last_search_position))!=npos )
35 if(index==last_search_position)
36 v.push_back(null_subst);
38 v.push_back( src.substr(last_search_position, index-
39 last_search_position) );
40 last_search_position = index + deli_len;
42 string last_one = src.substr(last_search_position);
43 v.push_back( last_one.empty()? null_subst:last_one );
51 int run_No =std::abs(
runNo);
52 sprintf(stmt1,
"select EQM_fileid,EMCGain from RunParams where run_number = %d",run_No);
56 int rowNumber = m_dbsvc->
query(
"run",stmt1,results);
58 std::cout <<
"ERROR Read EQM_fileid from the Database, exit." << endreq;
62 int fileid = std::atoi((*results[0])[
"EQM_fileid"]);
64 string gainnum((*results[0])[
"EMCGain"]);
66 sprintf(stmt1,
"select OID,Position,Channel1,Channel2,Channel3,Channel4,Channel5,Channel6,Channel7,Channel8,Channel9,Channel10,Channel11,Channel12,Channel13,Channel14,Channel15,Channel16,Channel17,Channel18,Channel19,Channel20,Channel21,Channel22,Channel23,Channel24,Channel25,Channel26,Channel27,Channel28,Channel29,Channel30,Channel31,Channel32 from EQM where FileId=%d", fileid);
69 rowNumber = m_dbsvc->
query(
"run",stmt1,results);
71 std::cout <<
"ERROR Read EQM from the Database, exit." << endreq;
75 std::map<std::string, std::vector<std::string> > map_EQM;
77 for(
int i=0;i<rowNumber;i++)
78 {
for(
int j=2;j<34;j++)
80 std::vector<std::string> vec_tmp;
82 vec_tmp.push_back(toString<int>(j-1));
83 vec_tmp.push_back((*results[i])[
"OID"]);
84 vec_tmp.push_back((*results[i])[
"Position"]);
85 typedef pair<std::string, std::vector<std::string> > vpair;
86 map_EQM.insert(vpair((*results[i])[
"Channel"+toString<int>(j-1)], vec_tmp));
91 vector<string>
id =
split(ids,
",",
"<null>");
94 for(
unsigned int m=0;m<
id.size();m++){
95 if(
id[m] ==
"0") { std::cout <<
" error: No." << m+1 <<
" id=0,please delete it! " << std::endl;
break; }
96 if(
id[m] ==
"NULL") { std::cout <<
" end of loop! " << std::endl;
break; }
97 string channelnum,oid,modu;
98 bool if_found =
false;
99 for(std::map<std::string,std::vector<std::string> >::iterator
iter = map_EQM.begin();
iter != map_EQM.end();
iter++)
101 if(
iter->first ==
id[m]) {
103 channelnum =
iter->second[0];
104 oid =
iter->second[1];
105 modu =
iter->second[2];
109 if(!if_found) { std::cout <<
"can not find id " <<
id[m] <<
" in EQM, exit." << std::endl; exit(1); }
113 for(
int i=0;i<4;i++){
118 string a[16][2]={{
"E3_1",
"96"},{
"E2_0",
"97"},{
"E2_1",
"98"},{
"E1_0",
"99"},{
"E1_1",
"100"},{
"E3_0",
"101"},{
"E2_2",
"102"},{
"E3_2",
"103"},{
"W3_1",
"112"},{
"W2_0",
"113"},{
"W2_1",
"114"},{
"W1_0",
"115"},{
"W1_1",
"116"},{
"W3_0",
"117"},{
"W2_2",
"118"},{
"W3_2",
"119"}};
119 string trgCrate[16]={
"0x60",
"0x61",
"0x62",
"0x63",
"0x64",
"0x65",
"0x66",
"0x67",
"0x70",
"0x71",
"0x72",
"0x73",
"0x74",
"0x75",
"0x76",
"0x77"};
121 for(
int i=0;i<16;i++){
122 if(b.compare(a[i][0]))
continue;
124 trgcratenum = trgCrate[i];
128 std::string query_name =
"select gain from EMC_Gain where run_id="+gainnum+
" and ppc_id=\""+trgcratenum+
"\" and Qmodule_no="+modu+
" and Qchannel_no="+channelnum;
130 rowNumber = m_dbsvc->
query(
"run",query_name.c_str(),results);
132 std::cout <<
"ERROR Read gain from EMC_Gain Database, exit." << endreq;
138 trgGain[m] =
new std::string((*results[0])[
"gain"]);
145 StatusCode sc = Gaudi::svcLocator()->service(
"DatabaseSvc", m_dbsvc,
true);
146 if (sc .isFailure() ) {
147 std::cout <<
"ERROR: In ConnectionProvider()--> Unable to find DatabaseSvc " << std::endl;
159 int run_No =std::abs(
runNo);
162 if(SftVer ==
"default") {
163 if(BossRelease ==
"default") {
164 std::cout <<
"ERROR BossRelease must be set! Current value is " << BossRelease <<
"." << endreq;
168 sprintf(stmt1,
"select SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and RunFrom <= %d and RunTo >= %d and DataType = 'LumVtx'", BossRelease.c_str(), run_No, run_No);
171 int rowNo = m_dbsvc->
query(
"offlinedb",stmt1,records);
173 std::cout <<
"ERROR: can not find records for run = " << run_No <<
" and BossRelease = " << BossRelease << endreq;
179 std::cout <<
"Using the new SftVer and ParVer (" << SftVer <<
", " << ParVer <<
") for run " << run_No <<
". " << endreq;
184 sprintf(stmt1,
"select OfflineTwoGam,SftVer,ParVer from OfflineLum where RunNo = %d",run_No);
195 int status = m_dbsvc->
query(
"offlinedb",stmt1,results);
197 std::cout <<
"ERROR Read the luminosity from the Database" << endreq;
201 int RowNumber = results.size();
203 std::cout<<
"WARNING: No Luminosity Data in this run, return 0."<<std::endl;
210 if(std::atoi(ParVer.c_str()) == 0) {
211 for(
int i = 0; i < RowNumber; i++) {
212 if((std::atoi((*results[i])[
"ParVer"]) > ParVerID)&&((*results[i])[
"SftVer"]==SftVer)) { Lum = (*results[i])[
"OfflineTwoGam"]; ParVerID = std::atoi((*results[i])[
"ParVer"]); RecordNo++;}
217 for(
int i = 0; i < RowNumber; i++) {
218 if((std::atoi((*results[i])[
"ParVer"]) == std::atoi(ParVer.c_str()))&&((*results[i])[
"SftVer"]==SftVer)) { Lum = (*results[i])[
"OfflineTwoGam"]; ParVerID = std::atoi((*results[i])[
"ParVer"]); RecordNo++;}
225 std::cout<<
"WARNING: No Luminosity infor. found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
231 if(RecordNo >= 2 && std::atoi(ParVer.c_str()) != 0) {
232 std::cout<<
"ERROR: More than two Lum. records found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
242 int run_No =std::abs(
runNo);
244 if(SftVer ==
"default") {
245 if(BossRelease ==
"default") {
246 std::cout <<
"ERROR BossRelease must be set! Current value is " << BossRelease <<
"." << endreq;
250 sprintf(stmt1,
"select SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and RunFrom <= %d and RunTo >= %d and DataType = 'LumVtx'", BossRelease.c_str(), run_No, run_No);
253 int rowNo = m_dbsvc->
query(
"offlinedb",stmt1,records);
255 std::cout <<
"ERROR: can not find records for run = " << run_No <<
" and BossRelease = " << BossRelease << endreq;
261 std::cout <<
"Using the new SftVer and ParVer (" << SftVer <<
", " << ParVer <<
") for run " << run_No <<
". " << endreq;
265 sprintf(stmt1,
"select runTime,Tau_Value,SftVer,ParVer from OfflineLum where RunNo = %d",run_No);
269 int status = m_dbsvc->
query(
"offlinedb",stmt1,results);
271 std::cout <<
"ERROR Read the luminosity curve parameters from the Database" << endreq;
275 int RowNumber = results.size();
277 std::cout<<
"ERROR: No Luminosity curve parameters in this run, aborted."<<std::endl;
283 if(std::atoi(ParVer.c_str()) == 0) {
284 for(
int i = 0; i < RowNumber; i++) {
285 if((std::atoi((*results[i])[
"ParVer"]) > ParVerID)&&((*results[i])[
"SftVer"]==SftVer)) {
286 runTotalTime = (*results[i])[
"runTime"];
287 tau_value = (*results[i])[
"Tau_Value"];
288 ParVerID = std::atoi((*results[i])[
"ParVer"]);
295 for(
int i = 0; i < RowNumber; i++) {
296 if((std::atoi((*results[i])[
"ParVer"]) == std::atoi(ParVer.c_str()))&&((*results[i])[
"SftVer"]==SftVer)) {
297 runTotalTime = (*results[i])[
"runTime"];
298 tau_value = (*results[i])[
"Tau_Value"];
299 ParVerID = std::atoi((*results[i])[
"ParVer"]);
305 std::cout<<
"ERROR: No Luminosity curve parameters found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
309 if(RecordNo >= 2 && std::atoi(ParVer.c_str()) != 0) {
310 std::cout<<
"ERROR: More than two Lum. curve parameters records found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
320 int run_No =std::abs(
runNo);
322 if(SftVer ==
"default") {
323 if(BossRelease ==
"default") {
324 std::cout <<
"ERROR BossRelease must be set! Current value is " << BossRelease <<
"." << endreq;
328 sprintf(stmt1,
"select SftVer, ParVer from CalVtxLumVer where BossRelease = '%s' and RunFrom <= %d and RunTo >= %d and DataType = 'LumVtx'", BossRelease.c_str(), run_No, run_No);
331 int rowNo = m_dbsvc->
query(
"offlinedb",stmt1,records);
333 std::cout <<
"ERROR: can not find records for run = " << run_No <<
" and BossRelease = " << BossRelease << endreq;
339 std::cout <<
"Using the new SftVer and ParVer (" << SftVer <<
", " << ParVer <<
") for run " << run_No <<
". " << endreq;
343 sprintf(stmt1,
"select Vx,Vy,Vz,AcSigmaVx,AcSigmaVy,SigmaVz,SftVer,ParVer from BeamPar where runNo = %d",run_No);
355 int status = m_dbsvc->
query(
"offlinedb",stmt1,results);
357 std::cout <<
"ERROR Read the bunch from the Database" << endreq;
361 int RowNumber = results.size();
363 std::cout<<
"WARNING: No bunch Data in this run! Please check your selection criteria (runNo, SftVer, ParVer)"<<std::endl;
369 if(std::atoi(ParVer.c_str()) == 0) {
370 for(
int i = 0; i < RowNumber; i++) {
371 if((std::atoi((*results[i])[
"ParVer"]) > ParVerID)&&((*results[i])[
"SftVer"]==SftVer)) {
373 bunch.push_back((*results[i])[
"Vx"]);
374 bunch.push_back((*results[i])[
"Vy"]);
375 bunch.push_back((*results[i])[
"Vz"]);
376 bunch.push_back((*results[i])[
"AcSigmaVx"]);
377 bunch.push_back((*results[i])[
"AcSigmaVy"]);
378 bunch.push_back((*results[i])[
"SigmaVz"]);
379 ParVerID = std::atoi((*results[i])[
"ParVer"]);
386 for(
int i = 0; i < RowNumber; i++) {
387 if((std::atoi((*results[i])[
"ParVer"]) == std::atoi(ParVer.c_str()))&&((*results[i])[
"SftVer"]==SftVer)) {
389 bunch.push_back((*results[i])[
"Vx"]);
390 bunch.push_back((*results[i])[
"Vy"]);
391 bunch.push_back((*results[i])[
"Vz"]);
392 bunch.push_back((*results[i])[
"AcSigmaVx"]);
393 bunch.push_back((*results[i])[
"AcSigmaVy"]);
394 bunch.push_back((*results[i])[
"SigmaVz"]);
401 std::cout<<
"WARNING: No bunch infor. found in this run, it will use other run's"<<std::endl;
405 if(RecordNo >= 2 && std::atoi(ParVer.c_str()) != 0) {
406 std::cout<<
"ERROR: More than two bunch records found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
416 int run_No =std::abs(
runNo);
418 sprintf(stmt1,
"select trgtable_id from RunParams where run_number = %d ",run_No);
422 int status = m_dbsvc->
query(
"run",stmt1,results);
424 std::cout <<
"ERROR Read the trigger table from the Database" << endreq;
428 int RowNumber = results.size();
430 std::cout<<
"ERROR:error searching Trigger Type Data in the database, check your selection criteria"<<std::endl;
433 int i_trgTpye = std::atoi((*results[0])[
"trgtable_id"]);
434 std::cout<<
"Obj_id is "<<i_trgTpye<<std::endl;
437 if(i_trgTpye == m_trgTpye) {
438 std::cout<<
"Don't need to update trigger table, it is same with the last run!"<<std::endl;
441 m_trgTpye = i_trgTpye;
444 sprintf(stmt1,
"select EventChannelEnableRegister from TrgTable where Obj_id = %d ", i_trgTpye);
445 int status1 = m_dbsvc->
query(
"run",stmt1,results);
447 std::cout <<
"ERROR Read the trigger table from the Database 1" << endreq;
450 RowNumber = results.size();
452 std::cout<<
"ERROR:error searching Trigger Type Data in the database, check your selection criterions"<<std::endl;
455 m_trgTable.push_back((*results[0])[
"EventChannelEnableRegister"]);
459 for(
int i = 1; i < 17; i++)
460 for(
int j = 1; j < 5; j++) {
461 if(i < 10) sprintf(stmt1,
"select TrgTable_CH0%d_%d from TrgTable where Obj_id = %d ", i, j, i_trgTpye);
462 else sprintf(stmt1,
"select TrgTable_CH%d_%d from TrgTable where Obj_id = %d ", i, j, i_trgTpye);
463 int status2 = m_dbsvc->
query(
"run",stmt1,results);
465 std::cout <<
"ERROR Read the trigger table from the Database 2" << endreq;
468 RowNumber = results.size();
470 std::cout<<
"ERROR:error searching TrgTable Data in the database, check your selection criterions"<<std::endl;
473 if(i<10) sprintf(stmt1,
"TrgTable_CH0%d_%d", i, j);
474 else sprintf(stmt1,
"TrgTable_CH%d_%d", i, j);
475 m_trgTable.push_back((*results[0])[stmt1]);
479 trgTable = m_trgTable;
487 ISvcLocator* svcLocator = Gaudi::svcLocator();
488 StatusCode sc = svcLocator->service(
"EmcCalibConstSvc",emcCalibConstSvc);
489 if(sc!=StatusCode::SUCCESS) {
490 cout <<
"ConnectionProvider Error: Can't get EmcCalibConstSvc." << endl;
499 for(
int i=idBegin;i<idEnd;i++) {
500 unsigned int npart = emcCalibConstSvc->
getPartID(i);
502 unsigned int nphi = emcCalibConstSvc->
getPhiIndex(i);
504 int triPart,triTheta,triPhi;
508 }
else if(npart==1&&ntheta<22) {
511 }
else if(npart==1&&ntheta>=22) {
520 ostringstream ssTheta;
521 if(triPart==1&&triTheta<10) {
522 ssTheta<<
"0"<<triTheta;
530 }
else if(triPhi<100) {
537 str<<ssTheta.str()<<ssPhi.str();
539 str<<triPart<<ssTheta.str()<<ssPhi.str();
555 for(
int i=0;i<id_num;i++) {
556 istringstream isin(*trgGain[i]);
559 value = ((50./255.)*(value)/60.)*5*0.5;
560 emcGain.push_back(value);
571 int run_No =std::abs(
runNo);
573 sprintf(stmt1,
"select Trg_fileid from RunParams where run_number = %d ",run_No);
577 int rowNumber = m_dbsvc->
query(
"run",stmt1,results);
579 std::cout <<
"ERROR: Read the Trg_fileid from RunParams, exit." << endl;
584 std::cout<<
"WARNNING: there are more than one record for Trg_fileid in run " <<
runNo <<
", the first one will be selected."<<std::endl;
586 int trg_fileid = std::atoi((*results[0])[
"Trg_fileid"]);
588 sprintf(stmt1,
"select EtotDataSteps,VthBEtotH,VthEEtotH,VthEtotL,VthEtotM,VthBLZ,VthDiffB,VthDiffE,VthBalBLK,VthBalEEMC,VthDiffMin from Trg_EACC where FileId = %d ", trg_fileid);
591 rowNumber = m_dbsvc->
query(
"run",stmt1,results);
593 std::cout <<
"ERROR: Read the EACC config infor. from Trg_EACC, exit." << endl;
598 std::cout<<
"WARNNING: there are more than one record for EACC in run " <<
runNo <<
", the first one will be selected."<<std::endl;
601 m_EtotDataSteps = std::atoi((*results[0])[
"EtotDataSteps"]);
602 m_VthBEtotH = std::atoi((*results[0])[
"VthBEtotH"]);
603 m_VthEEtotH = std::atoi((*results[0])[
"VthEEtotH"]);
604 m_VthEtotL = std::atoi((*results[0])[
"VthEtotL"]);
605 m_VthEtotM = std::atoi((*results[0])[
"VthEtotM"]);
606 m_VthBLZ = std::atoi((*results[0])[
"VthBLZ"]);
607 m_VthDiffB = std::atoi((*results[0])[
"VthDiffB"]);
608 m_VthDiffE = std::atoi((*results[0])[
"VthDiffE"]);
609 m_VthBalBLK = std::atoi((*results[0])[
"VthBalBLK"]);
610 m_VthBalEEMC = std::atoi((*results[0])[
"VthBalEEMC"]);
611 m_VthDiffMin = std::atoi((*results[0])[
"VthDiffMin"]);
621 int run_No =std::abs(
runNo);
624 sprintf(stmt1,
"select FilePath,FileName from RanTrgData where RunNo = %d ",run_No);
628 int status = m_dbsvc->
query(
"offlinedb",stmt1,results);
630 std::cout <<
"ERROR Read the background file from the Database" << endreq;
634 int RowNumber = results.size();
636 std::cout<<
"WARNING: No Bg infor. in this run!"<<std::endl;
641 for(
int i = 0; i < RowNumber; i++) {
646 fileInfor.push_back((*results[i])[
"FilePath"]);
647 fileInfor.push_back((*results[i])[
"FileName"]);
651 if(fileInfor.size() == 0) {
652 std::cout<<
"WARNING: the total bg event number in run " <<
runNo <<
" is zero, it will use other run's bg" << std::endl;
669 int status = m_dbsvc->
query(
"offlinedb",stmt1,results);
671 std::cout <<
"ERROR Read the background file from the Database" << endreq;
674 int RowNumber = results.size();
676 std::cout<<
"ERROR:error searching background Data in the database, check your selection criterions"<<std::endl;
681 for(
int i = 0; i < RowNumber; i++) {
686 fileInfor.push_back((*results[i])[
"FilePath"]);
687 fileInfor.push_back((*results[i])[
"FileName"]);
691 if(fileInfor.size() == 0) {
692 std::cout<<
"WARNING: the total bg event number in your selected bg files is zero, it will abort after error message" << std::endl;
702 int run_No =std::abs(
runNo);
704 sprintf(stmt1,
"select TFEE_fileid from RunParams where run_number = %d ",run_No);
708 int status = m_dbsvc->
query(
"run",stmt1,results);
710 std::cout <<
"ERROR Read the Tof threshold from the Database" << endreq;
713 int RowNumber = results.size();
715 std::cout<<
"ERROR:error searching TFEE_fileid Data in the database, check your selection criterions"<<std::endl;
718 int i_tfee_fileid = std::atoi((*results[0])[
"TFEE_fileid"]);
719 std::cout<<
"TFEE file id is "<<i_tfee_fileid<<std::endl;
722 if(i_tfee_fileid == m_tfee_fileid) {
723 std::cout<<
"Don't need to update TOF FEE threshold, it is same with the last run!"<<std::endl;
726 m_tfee_fileid = i_tfee_fileid;
729 sprintf(stmt1,
"select PhysAddress,BarrelEnd,HighThreshold,LowThreshold from TFEE where FileId = %d ",i_tfee_fileid);
730 int status1 = m_dbsvc->
query(
"run",stmt1,results);
732 std::cout <<
"ERROR Read the Tof threshold from the Database 1" << endreq;
735 int RowNumber = results.size();
737 std::cout<<
"WARNING: No TFEE infor. in this run!"<<std::endl;
740 for(
int i = 0; i < RowNumber; i++) {
741 m_tofThresh.push_back((*results[i])[
"PhysAddress"]);
742 m_tofThresh.push_back((*results[i])[
"BarrelEnd"]);
743 m_tofThresh.push_back((*results[i])[
"HighThreshold"]);
744 m_tofThresh.push_back((*results[i])[
"LowThreshold"]);
749 tofThresh = m_tofThresh;
757 int run_No =std::abs(
runNo);
759 sprintf(stmt1,
"select R_TM_BPR_PatNum,R_TM_BER_PatNum,S_R3O_BI_DCCT_current,E_R3O_BI_DCCT_current,AV_R3O_BI_DCCT_current,S_R4O_BI_DCCT_current,E_R4O_BI_DCCT_current,AV_R4O_BI_DCCT_current,S_BPR_LIFE,E_BPR_LIFE,AV_BPR_LIFE,S_BER_LIFE,E_BER_LIFE,AV_BER_LIFE from RunParams where run_number = %d ",run_No);
763 int status = m_dbsvc->
query(
"run",stmt1,results);
765 std::cout <<
"ERROR Read the run information from the Database" << endreq;
768 int RowNumber = results.size();
770 std::cout<<
"WARNING: No run information in this run!"<<std::endl;
774 for(
int i = 0; i < RowNumber; i++) {
775 for(std::map<std::string,char*>::iterator
iter = (*results[i]).begin();
iter != (*results[i]).end();
iter++) {
776 runInfo.push_back(
iter->second);
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
std::string GetString(std::string key)
virtual int query(const std::string &dbName, const std::string &sql, DatabaseRecordVector &res)=0
virtual unsigned int getPartID(int Index) const =0
virtual unsigned int getPhiIndex(int Index) const =0
virtual unsigned int getThetaIndex(int Index) const =0
ConnectionProvider::eRet getRunInfo(std::vector< std::string > &runInfo, int runNo)
std::vector< std::string > split(const std::string &src, std::string delimit, std::string null_subst="")
ConnectionProvider()
Constructor keeps track of table of interest.
ConnectionProvider::eRet getReadBunchInfo(std::vector< std::string > &bunch, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
ConnectionProvider::eRet getLumCurvePar(std::string &runTotalTime, std::string &tau_value, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
ConnectionProvider::eRet getTrgConfigInfo(int runNo)
ConnectionProvider::eRet getReadLumInfo(std::string &Lum, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
ConnectionProvider::eRet getEmcGain(std::vector< double > &emcGain, int runNo)
ConnectionProvider::eRet getReadTrgTableInfo(std::vector< std::string > &trgTable, int runNo)
bool getcal(int runNo, std::string ids)
ConnectionProvider::eRet getReadBackgroundInfo(std::vector< std::string > &fileInfor, int runNo)
ConnectionProvider::eRet getReadTofThreshInfo(std::vector< std::string > &tofThresh, int runNo)
basic_string< char >::size_type S_T