BOSS 7.0.9
BESIII Offline Software System
Loading...
Searching...
No Matches
RealDBUtil::ConnectionProvider Class Reference

#include <ConnectionProvider.h>

Public Types

enum  eRet {
  RETOk = 0 , RETBadCnfFile = 1 , RETBadHost = 2 , RETNoConnect = 3 ,
  RETWrongState = 4 , RETBadValue = 5 , RETMySQLError = 6 , RETNoSchemaMatch = 7
}
 
enum  eLevel { LEVELProd = 1 , LEVELDev = 2 , LEVELTest = 4 , LEVELSuperseded = 8 }
 Used to form bit masks for dbs queries. More...
 

Public Member Functions

 ConnectionProvider ()
 Constructor keeps track of table of interest.
 
 ~ConnectionProvider ()
 
ConnectionProvider::eRet getReadLumInfo (std::string &Lum, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
 
ConnectionProvider::eRet getReadBunchInfo (std::vector< std::string > &bunch, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
 
ConnectionProvider::eRet getReadTrgTableInfo (std::vector< std::string > &trgTable, int runNo)
 
ConnectionProvider::eRet getReadBackgroundInfo (std::vector< std::string > &fileInfor, int runNo)
 
ConnectionProvider::eRet getReadBackgroundInfo (std::vector< std::string > &fileInfor, std::string query)
 
ConnectionProvider::eRet getReadTofThreshInfo (std::vector< std::string > &tofThresh, int runNo)
 
ConnectionProvider::eRet getRunInfo (std::vector< std::string > &runInfo, int runNo)
 
ConnectionProvider::eRet getLumCurvePar (std::string &runTotalTime, std::string &tau_value, int runNo, std::string SftVer, std::string ParVer, std::string BossRelease)
 
ConnectionProvider::eRet getEmcGain (std::vector< double > &emcGain, int runNo)
 
std::vector< std::string > split (const std::string &src, std::string delimit, std::string null_subst="")
 
bool getcal (int runNo, std::string ids)
 
ConnectionProvider::eRet getTrgConfigInfo (int runNo)
 
int getEtotDataSteps ()
 
int getVthBEtotH ()
 
int getVthEEtotH ()
 
int getVthEtotL ()
 
int getVthEtotM ()
 
int getVthBLZ ()
 
int getVthDiffB ()
 
int getVthDiffE ()
 
int getVthBalBLK ()
 
int getVthBalEEMC ()
 
int getVthDiffMin ()
 

Detailed Description

Definition at line 20 of file ConnectionProvider.h.

Member Enumeration Documentation

◆ eLevel

Used to form bit masks for dbs queries.

Enumerator
LEVELProd 
LEVELDev 
LEVELTest 
LEVELSuperseded 

Definition at line 42 of file ConnectionProvider.h.

◆ eRet

Enumerator
RETOk 
RETBadCnfFile 
RETBadHost 
RETNoConnect 
RETWrongState 
RETBadValue 
RETMySQLError 
RETNoSchemaMatch 

Definition at line 31 of file ConnectionProvider.h.

Constructor & Destructor Documentation

◆ ConnectionProvider()

RealDBUtil::ConnectionProvider::ConnectionProvider ( )

Constructor keeps track of table of interest.

Definition at line 144 of file ConnectionProvider.cxx.

144 {
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;
148 }
149 m_trgTpye = -1;
150 m_tfee_fileid = -1;
151 }

◆ ~ConnectionProvider()

RealDBUtil::ConnectionProvider::~ConnectionProvider ( )

Definition at line 153 of file ConnectionProvider.cxx.

153 {
154 }

Member Function Documentation

◆ getcal()

bool RealDBUtil::ConnectionProvider::getcal ( int  runNo,
std::string  ids 
)

Definition at line 47 of file ConnectionProvider.cxx.

47 {
48
49 //Read Luminosity information
50 char stmt1[1024];
51 int run_No =std::abs(runNo);
52 sprintf(stmt1,"select EQM_fileid,EMCGain from RunParams where run_number = %d",run_No);
53
55 results.clear();
56 int rowNumber = m_dbsvc->query("run",stmt1,results);
57 if(rowNumber <= 0){
58 std::cout << "ERROR Read EQM_fileid from the Database, exit." << endreq;
59 exit(1);
60 }
61
62 int fileid = std::atoi((*results[0])["EQM_fileid"]);
63
64 string gainnum((*results[0])["EMCGain"]);
65
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);
67
68 results.clear();
69 rowNumber = m_dbsvc->query("run",stmt1,results);
70 if(rowNumber <= 0){
71 std::cout << "ERROR Read EQM from the Database, exit." << endreq;
72 exit(1);
73 }
74
75 std::map<std::string, std::vector<std::string> > map_EQM;
76 map_EQM.clear();
77 for(int i=0;i<rowNumber;i++)
78 { for(int j=2;j<34;j++)
79 {
80 std::vector<std::string> vec_tmp;
81 vec_tmp.clear();
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));
87
88 }
89 }
90
91 vector<string> id = split(ids, ",", "<null>");
92 id_num=id.size();
93
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++)
100 {
101 if(iter->first == id[m]) {
102 if_found = true;
103 channelnum = iter->second[0];
104 oid = iter->second[1];
105 modu = iter->second[2];
106 }
107 }
108
109 if(!if_found) { std::cout << "can not find id " << id[m] << " in EQM, exit." << std::endl; exit(1); }
110
111 string b="AAAA";
112 string trgcratenum;
113 for(int i=0;i<4;i++){
114 b[i] =oid[i+4];
115 }
116
117 //change oid to cratenum
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"};
120
121 for(int i=0;i<16;i++){
122 if(b.compare(a[i][0])) continue;
123 else {
124 trgcratenum = trgCrate[i];
125 }
126 }
127
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;
129 results.clear();
130 rowNumber = m_dbsvc->query("run",query_name.c_str(),results);
131 if(rowNumber <= 0){
132 std::cout << "ERROR Read gain from EMC_Gain Database, exit." << endreq;
133 exit(1);
134 }
135
136 //std::cout << "run_id: " << gainnum << " ppc_id: " << trgcratenum << " Qmodule_no: " << modu << " Qchannel_no: " << channelnum << " m: " << m << std::endl;
137
138 trgGain[m] = new std::string((*results[0])["gain"]);
139 //std::cout << "gain: " << *trgGain[m] << std::endl;
140 }
141 return true;
142 }
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 runNo
Definition: DQA_TO_DB.cxx:12
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
virtual int query(const std::string &dbName, const std::string &sql, DatabaseRecordVector &res)=0
std::vector< std::string > split(const std::string &src, std::string delimit, std::string null_subst="")
const double b
Definition: slope.cxx:9

Referenced by getEmcGain().

◆ getEmcGain()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getEmcGain ( std::vector< double > &  emcGain,
int  runNo 
)

Definition at line 484 of file ConnectionProvider.cxx.

484 {
485 // Get EmcCalibConstSvc.
486 IEmcCalibConstSvc *emcCalibConstSvc;
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;
491 }
492
493 string ids="128005";
494
495 ostringstream str;
496 int idBegin=0;
497 int idEnd=6240;
498
499 for(int i=idBegin;i<idEnd;i++) {
500 unsigned int npart = emcCalibConstSvc->getPartID(i);
501 unsigned int ntheta = emcCalibConstSvc->getThetaIndex(i);
502 unsigned int nphi = emcCalibConstSvc->getPhiIndex(i);
503
504 int triPart,triTheta,triPhi;
505 if(npart==0) {
506 triPart=0;
507 triTheta=23+ntheta;
508 } else if(npart==1&&ntheta<22) {
509 triPart=0;
510 triTheta=22-ntheta;
511 } else if(npart==1&&ntheta>=22) {
512 triPart=1;
513 triTheta=ntheta-21;
514 } else { //npart==2
515 triPart=1;
516 triTheta=23+ntheta;
517 }
518 triPhi=nphi+1;
519
520 ostringstream ssTheta;
521 if(triPart==1&&triTheta<10) {
522 ssTheta<<"0"<<triTheta;
523 } else {
524 ssTheta<<triTheta;
525 }
526
527 ostringstream ssPhi;
528 if(triPhi<10) {
529 ssPhi<<"00"<<triPhi;
530 } else if(triPhi<100) {
531 ssPhi<<"0"<<triPhi;
532 } else {
533 ssPhi<<triPhi;
534 }
535
536 if(triPart==0) {
537 str<<ssTheta.str()<<ssPhi.str();
538 } else {
539 str<<triPart<<ssTheta.str()<<ssPhi.str();
540 }
541 if(i!=idEnd-1) {
542 str<<",";
543 }
544
545 //cout<<npart<<"\t"<<ntheta<<"\t"<<nphi<<endl;
546
547 }
548
549 ids=str.str();
550 //cout<<ids<<endl;
551
552 getcal( runNo, ids);
553
554 emcGain.clear();
555 for(int i=0;i<id_num;i++) {
556 istringstream isin(*trgGain[i]);
557 double value;
558 isin>>value;
559 value = ((50./255.)*(value)/60.)*5*0.5;
560 emcGain.push_back(value);
561 delete trgGain[i];
562 }
563
564 return RETOk;
565 }
virtual unsigned int getPartID(int Index) const =0
virtual unsigned int getPhiIndex(int Index) const =0
virtual unsigned int getThetaIndex(int Index) const =0
bool getcal(int runNo, std::string ids)

Referenced by RealizationSvc::readDB().

◆ getEtotDataSteps()

int RealDBUtil::ConnectionProvider::getEtotDataSteps ( )
inline

Definition at line 67 of file ConnectionProvider.h.

67{ return m_EtotDataSteps; }

Referenced by RealizationSvc::readDB().

◆ getLumCurvePar()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getLumCurvePar ( std::string &  runTotalTime,
std::string &  tau_value,
int  runNo,
std::string  SftVer,
std::string  ParVer,
std::string  BossRelease 
)

Definition at line 239 of file ConnectionProvider.cxx.

239 {
240 //Read Luminosity curve parameters
241 char stmt1[200];
242 int run_No =std::abs(runNo);
243
244 if(SftVer == "default") {
245 if(BossRelease == "default") {
246 std::cout << "ERROR BossRelease must be set! Current value is " << BossRelease << "." << endreq;
247 exit(1);
248 }
249 else {
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);
251
252 DatabaseRecordVector records;
253 int rowNo = m_dbsvc->query("offlinedb",stmt1,records);
254 if(rowNo == 0) {
255 std::cout << "ERROR: can not find records for run = " << run_No << " and BossRelease = " << BossRelease << endreq;
256 exit(1);
257 }
258 DatabaseRecord* recordst = records[0];
259 SftVer = recordst->GetString("SftVer");
260 ParVer = recordst->GetString("ParVer");
261 std::cout << "Using the new SftVer and ParVer (" << SftVer << ", " << ParVer << ") for run " << run_No << ". " << endreq;
262 }
263 }
264
265 sprintf(stmt1,"select runTime,Tau_Value,SftVer,ParVer from OfflineLum where RunNo = %d",run_No);
266
267 DatabaseRecordVector results;
268 results.clear();
269 int status = m_dbsvc->query("offlinedb",stmt1,results);
270 if(status<0){
271 std::cout << "ERROR Read the luminosity curve parameters from the Database" << endreq;
272 exit(1);
273 }
274
275 int RowNumber = results.size();
276 if(RowNumber == 0){
277 std::cout<<"ERROR: No Luminosity curve parameters in this run, aborted."<<std::endl;
278 exit(1);
279 }
280
281 int ParVerID = 0;
282 int RecordNo = 0;
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"]);
289 RecordNo++;
290 }
291 }
292 }
293 else {
294 RecordNo = 0;
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"]);
300 RecordNo++;
301 }
302 }
303 }
304 if(RecordNo == 0) {
305 std::cout<<"ERROR: No Luminosity curve parameters found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
306 exit(1);
307 }
308
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;
311 exit(1);
312 }
313
314 return RETOk;
315 }
char * SftVer
Definition: DQA_TO_DB.cxx:18
char * ParVer
Definition: DQA_TO_DB.cxx:19
std::string GetString(std::string key)

Referenced by RealizationSvc::readDB().

◆ getReadBackgroundInfo() [1/2]

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getReadBackgroundInfo ( std::vector< std::string > &  fileInfor,
int  runNo 
)

Definition at line 618 of file ConnectionProvider.cxx.

618 {
619 //Read background file
620 char stmt1[200];
621 int run_No =std::abs(runNo);
622
623 //sprintf(stmt1,"select FilePath,FileName,NumEvent from RanTrgData where RunNo = %d ",run_No);
624 sprintf(stmt1,"select FilePath,FileName from RanTrgData where RunNo = %d ",run_No);
625
626 DatabaseRecordVector results;
627 results.clear();
628 int status = m_dbsvc->query("offlinedb",stmt1,results);
629 if(status<0){
630 std::cout << "ERROR Read the background file from the Database" << endreq;
631 exit(1);
632 }
633
634 int RowNumber = results.size();
635 if(RowNumber == 0){
636 std::cout<<"WARNING: No Bg infor. in this run!"<<std::endl;
637 return RETNoSchemaMatch;
638 }
639 //vRanTrgEvtNum.clear();
640 fileInfor.clear();
641 for(int i = 0; i < RowNumber; i++) {
642 //int RanTrgEvtNum = 0;
643 //RanTrgEvtNum = std::atoi((*results[i])["NumEvent"]);
644 //if(RanTrgEvtNum != 0) vRanTrgEvtNum.push_back(RanTrgEvtNum);
645 //if(RanTrgEvtNum != 0) {
646 fileInfor.push_back((*results[i])["FilePath"]);
647 fileInfor.push_back((*results[i])["FileName"]);
648 //}
649 }
650
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;
653 return RETNoSchemaMatch;
654 }
655
656 return RETOk;
657 }

Referenced by RealizationSvc::getBgFileName(), and RealizationSvc::readDB().

◆ getReadBackgroundInfo() [2/2]

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getReadBackgroundInfo ( std::vector< std::string > &  fileInfor,
std::string  query 
)

Definition at line 660 of file ConnectionProvider.cxx.

660 {
661 //Read background file
662 //char stmt1[200];
663 //int run_No =runNo;
664
665 //sprintf(stmt1,"select FilePath,FileName from RanTrgData where RunNo = %d ",run_No);
666
667 DatabaseRecordVector results;
668 results.clear();
669 int status = m_dbsvc->query("offlinedb",stmt1,results);
670 if(status<0){
671 std::cout << "ERROR Read the background file from the Database" << endreq;
672 exit(1);
673 }
674 int RowNumber = results.size();
675 if(RowNumber == 0){
676 std::cout<<"ERROR:error searching background Data in the database, check your selection criterions"<<std::endl;
677 return RETMySQLError;
678 }
679 //vRanTrgEvtNum.clear();
680 fileInfor.clear();
681 for(int i = 0; i < RowNumber; i++) {
682 //int RanTrgEvtNum = 0;
683 //RanTrgEvtNum = std::atoi((*results[i])["NumEvent"]);
684 //if(RanTrgEvtNum != 0) vRanTrgEvtNum.push_back(RanTrgEvtNum);
685 //if(RanTrgEvtNum != 0) {
686 fileInfor.push_back((*results[i])["FilePath"]);
687 fileInfor.push_back((*results[i])["FileName"]);
688 //}
689 }
690
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;
693 return RETNoSchemaMatch;
694 }
695
696 return RETOk;
697 }

◆ getReadBunchInfo()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getReadBunchInfo ( std::vector< std::string > &  bunch,
int  runNo,
std::string  SftVer,
std::string  ParVer,
std::string  BossRelease 
)

Definition at line 317 of file ConnectionProvider.cxx.

317 {
318 //Read bunch size information
319 char stmt1[200];
320 int run_No =std::abs(runNo);
321
322 if(SftVer == "default") {
323 if(BossRelease == "default") {
324 std::cout << "ERROR BossRelease must be set! Current value is " << BossRelease << "." << endreq;
325 exit(1);
326 }
327 else {
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);
329
330 DatabaseRecordVector records;
331 int rowNo = m_dbsvc->query("offlinedb",stmt1,records);
332 if(rowNo == 0) {
333 std::cout << "ERROR: can not find records for run = " << run_No << " and BossRelease = " << BossRelease << endreq;
334 exit(1);
335 }
336 DatabaseRecord* recordst = records[0];
337 SftVer = recordst->GetString("SftVer");
338 ParVer = recordst->GetString("ParVer");
339 std::cout << "Using the new SftVer and ParVer (" << SftVer << ", " << ParVer << ") for run " << run_No << ". " << endreq;
340 }
341 }
342
343 sprintf(stmt1,"select Vx,Vy,Vz,AcSigmaVx,AcSigmaVy,SigmaVz,SftVer,ParVer from BeamPar where runNo = %d",run_No);
344/*
345 if(std::atoi(ParVer.c_str()) == 0) {
346 sprintf(stmt1,"select Vx,Vy,Vz,AcSigmaVx,AcSigmaVy,SigmaVz,ParVer from BeamPar where runNo = %d && SftVer = \"%s\"",run_No,SftVer.c_str());
347 }
348 else {
349 sprintf(stmt1,"select Vx,Vy,Vz,AcSigmaVx,AcSigmaVy,SigmaVz from BeamPar where runNo = %d && SftVer = \"%s\" && ParVer = \"%s\"",run_No,SftVer.c_str(),ParVer.c_str());
350 }
351*/
352
353 DatabaseRecordVector results;
354 results.clear();
355 int status = m_dbsvc->query("offlinedb",stmt1,results);
356 if(status<0){
357 std::cout << "ERROR Read the bunch from the Database" << endreq;
358 exit(1);
359 }
360
361 int RowNumber = results.size();
362 if(RowNumber == 0){
363 std::cout<<"WARNING: No bunch Data in this run! Please check your selection criteria (runNo, SftVer, ParVer)"<<std::endl;
364 return RETNoSchemaMatch;
365 }
366
367 int ParVerID = 0;
368 int RecordNo = 0;
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)) {
372 bunch.clear();
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"]);
380 RecordNo++;
381 }
382 }
383 }
384 else {
385 RecordNo = 0;
386 for(int i = 0; i < RowNumber; i++) {
387 if((std::atoi((*results[i])["ParVer"]) == std::atoi(ParVer.c_str()))&&((*results[i])["SftVer"]==SftVer)) {
388 bunch.clear();
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"]);
395 RecordNo++;
396 }
397 }
398 }
399
400 if(RecordNo == 0) {
401 std::cout<<"WARNING: No bunch infor. found in this run, it will use other run's"<<std::endl;
402 return RETNoSchemaMatch;
403 }
404
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;
407 exit(1);
408 }
409
410 return RETOk;
411 }

Referenced by RealizationSvc::readDB().

◆ getReadLumInfo()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getReadLumInfo ( std::string &  Lum,
int  runNo,
std::string  SftVer,
std::string  ParVer,
std::string  BossRelease 
)

Definition at line 156 of file ConnectionProvider.cxx.

156 {
157 //Read Luminosity information
158 char stmt1[200];
159 int run_No =std::abs(runNo);
160
161
162 if(SftVer == "default") {
163 if(BossRelease == "default") {
164 std::cout << "ERROR BossRelease must be set! Current value is " << BossRelease << "." << endreq;
165 exit(1);
166 }
167 else {
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);
169
170 DatabaseRecordVector records;
171 int rowNo = m_dbsvc->query("offlinedb",stmt1,records);
172 if(rowNo == 0) {
173 std::cout << "ERROR: can not find records for run = " << run_No << " and BossRelease = " << BossRelease << endreq;
174 exit(1);
175 }
176 DatabaseRecord* recordst = records[0];
177 SftVer = recordst->GetString("SftVer");
178 ParVer = recordst->GetString("ParVer");
179 std::cout << "Using the new SftVer and ParVer (" << SftVer << ", " << ParVer << ") for run " << run_No << ". " << endreq;
180 }
181 }
182
183
184 sprintf(stmt1,"select OfflineTwoGam,SftVer,ParVer from OfflineLum where RunNo = %d",run_No);
185/*
186 if(std::atoi(ParVer.c_str()) == 0) {
187 sprintf(stmt1,"select OfflineTwoGam,ParVer from OfflineLum where RunNo = %d && SftVer = \"%s\"",run_No,SftVer.c_str());
188 }
189 else {
190 sprintf(stmt1,"select OfflineTwoGam from OfflineLum where RunNo = %d && SftVer = \"%s\" && ParVer = \"%s\"",run_No,SftVer.c_str(),ParVer.c_str());
191 }
192*/
193 DatabaseRecordVector results;
194 results.clear();
195 int status = m_dbsvc->query("offlinedb",stmt1,results);
196 if(status<0){
197 std::cout << "ERROR Read the luminosity from the Database" << endreq;
198 exit(1);
199 }
200
201 int RowNumber = results.size();
202 if(RowNumber == 0){
203 std::cout<<"WARNING: No Luminosity Data in this run, return 0."<<std::endl;
204 Lum = "0";
205 return RETOk;
206 }
207
208 int ParVerID = 0;
209 int RecordNo = 0;
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++;}
213 }
214 }
215 else {
216 RecordNo = 0;
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++;}
219 }
220 }
221
222 if(RecordNo == 0) {
223 //std::cout<<"ERROR: No Luminosity infor. found by your selection criteria, please check it (SftVer, ParVer)"<<std::endl;
224 //std::abort();
225 std::cout<<"WARNING: No Luminosity infor. found by your selection criteria, please check it (<<SftVer, <<ParVer)"<<std::endl;
226 Lum = "0";
227 return RETOk;
228
229 }
230
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;
233 exit(1);
234 }
235
236 return RETOk;
237}

Referenced by RealizationSvc::getLuminosity().

◆ getReadTofThreshInfo()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getReadTofThreshInfo ( std::vector< std::string > &  tofThresh,
int  runNo 
)

Definition at line 699 of file ConnectionProvider.cxx.

699 {
700 //Read tof FEE threshold
701 char stmt1[200];
702 int run_No =std::abs(runNo);
703
704 sprintf(stmt1,"select TFEE_fileid from RunParams where run_number = %d ",run_No);
705
706 DatabaseRecordVector results;
707 results.clear();
708 int status = m_dbsvc->query("run",stmt1,results);
709 if(status<0){
710 std::cout << "ERROR Read the Tof threshold from the Database" << endreq;
711 exit(1);
712 }
713 int RowNumber = results.size();
714 if(RowNumber!=1){
715 std::cout<<"ERROR:error searching TFEE_fileid Data in the database, check your selection criterions"<<std::endl;
716 return RETMySQLError;
717 }
718 int i_tfee_fileid = std::atoi((*results[0])["TFEE_fileid"]);
719 std::cout<<"TFEE file id is "<<i_tfee_fileid<<std::endl;
720 results.clear();
721
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;
724 }
725 else {
726 m_tfee_fileid = i_tfee_fileid;
727 m_tofThresh.clear();
728
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);
731 if(status1<0){
732 std::cout << "ERROR Read the Tof threshold from the Database 1" << endreq;
733 exit(1);
734 }
735 int RowNumber = results.size();
736 if(RowNumber == 0){
737 std::cout<<"WARNING: No TFEE infor. in this run!"<<std::endl;
738 return RETNoSchemaMatch;
739 }
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"]);
745 }
746 results.clear();
747 }
748
749 tofThresh = m_tofThresh;
750
751 return RETOk;
752 }

Referenced by RealizationSvc::readDB().

◆ getReadTrgTableInfo()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getReadTrgTableInfo ( std::vector< std::string > &  trgTable,
int  runNo 
)

Definition at line 413 of file ConnectionProvider.cxx.

413 {
414 //Read trigger table used in trigger simulation
415 char stmt1[200];
416 int run_No =std::abs(runNo);
417
418 sprintf(stmt1,"select trgtable_id from RunParams where run_number = %d ",run_No);
419
420 DatabaseRecordVector results;
421 results.clear();
422 int status = m_dbsvc->query("run",stmt1,results);
423 if(status<0){
424 std::cout << "ERROR Read the trigger table from the Database" << endreq;
425 exit(1);
426 }
427
428 int RowNumber = results.size();
429 if(RowNumber!=1){
430 std::cout<<"ERROR:error searching Trigger Type Data in the database, check your selection criteria"<<std::endl;
431 return RETMySQLError;
432 }
433 int i_trgTpye = std::atoi((*results[0])["trgtable_id"]);
434 std::cout<<"Obj_id is "<<i_trgTpye<<std::endl;
435 results.clear();
436
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;
439 }
440 else {
441 m_trgTpye = i_trgTpye;
442 m_trgTable.clear();
443 //retrieve EventChannelEnableRegister from database
444 sprintf(stmt1,"select EventChannelEnableRegister from TrgTable where Obj_id = %d ", i_trgTpye);
445 int status1 = m_dbsvc->query("run",stmt1,results);
446 if(status1<0){
447 std::cout << "ERROR Read the trigger table from the Database 1" << endreq;
448 exit(1);
449 }
450 RowNumber = results.size();
451 if(RowNumber!=1){
452 std::cout<<"ERROR:error searching Trigger Type Data in the database, check your selection criterions"<<std::endl;
453 return RETMySQLError;
454 }
455 m_trgTable.push_back((*results[0])["EventChannelEnableRegister"]);
456 results.clear();
457
458 //retrieve TrgTable_Channel from database
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);
464 if(status2<0){
465 std::cout << "ERROR Read the trigger table from the Database 2" << endreq;
466 exit(1);
467 }
468 RowNumber = results.size();
469 if(RowNumber!=1){
470 std::cout<<"ERROR:error searching TrgTable Data in the database, check your selection criterions"<<std::endl;
471 return RETMySQLError;
472 }
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]);
476 results.clear();
477 }
478 }
479 trgTable = m_trgTable;
480
481 return RETOk;
482 }

Referenced by RealizationSvc::readDB().

◆ getRunInfo()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getRunInfo ( std::vector< std::string > &  runInfo,
int  runNo 
)

Definition at line 754 of file ConnectionProvider.cxx.

754 {
755 //Read run information
756 char stmt1[500];
757 int run_No =std::abs(runNo);
758
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);
760
761 DatabaseRecordVector results;
762 results.clear();
763 int status = m_dbsvc->query("run",stmt1,results);
764 if(status<0){
765 std::cout << "ERROR Read the run information from the Database" << endreq;
766 exit(1);
767 }
768 int RowNumber = results.size();
769 if(RowNumber == 0){
770 std::cout<<"WARNING: No run information in this run!"<<std::endl;
771 return RETNoSchemaMatch;
772 }
773
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);
777 }
778 }
779
780 return RETOk;
781 }

Referenced by RealizationSvc::readDB().

◆ getTrgConfigInfo()

ConnectionProvider::eRet RealDBUtil::ConnectionProvider::getTrgConfigInfo ( int  runNo)

Definition at line 568 of file ConnectionProvider.cxx.

568 {
569 //Read trigger configure information
570 char stmt1[1024];
571 int run_No =std::abs(runNo);
572
573 sprintf(stmt1,"select Trg_fileid from RunParams where run_number = %d ",run_No);
574
575 DatabaseRecordVector results;
576 results.clear();
577 int rowNumber = m_dbsvc->query("run",stmt1,results);
578 if( rowNumber <= 0){
579 std::cout << "ERROR: Read the Trg_fileid from RunParams, exit." << endl;
580 exit(1);
581 }
582
583 if(rowNumber > 1){
584 std::cout<<"WARNNING: there are more than one record for Trg_fileid in run " << runNo << ", the first one will be selected."<<std::endl;
585 }
586 int trg_fileid = std::atoi((*results[0])["Trg_fileid"]);
587
588 sprintf(stmt1,"select EtotDataSteps,VthBEtotH,VthEEtotH,VthEtotL,VthEtotM,VthBLZ,VthDiffB,VthDiffE,VthBalBLK,VthBalEEMC,VthDiffMin from Trg_EACC where FileId = %d ", trg_fileid);
589
590 results.clear();
591 rowNumber = m_dbsvc->query("run",stmt1,results);
592 if( rowNumber <= 0){
593 std::cout << "ERROR: Read the EACC config infor. from Trg_EACC, exit." << endl;
594 exit(1);
595 }
596
597 if(rowNumber > 1){
598 std::cout<<"WARNNING: there are more than one record for EACC in run " << runNo << ", the first one will be selected."<<std::endl;
599 }
600
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"]);
612
613 return RETOk;
614 }

Referenced by RealizationSvc::readDB().

◆ getVthBalBLK()

int RealDBUtil::ConnectionProvider::getVthBalBLK ( )
inline

Definition at line 75 of file ConnectionProvider.h.

75{ return m_VthBalBLK; }

Referenced by RealizationSvc::readDB().

◆ getVthBalEEMC()

int RealDBUtil::ConnectionProvider::getVthBalEEMC ( )
inline

Definition at line 76 of file ConnectionProvider.h.

76{ return m_VthBalEEMC; }

Referenced by RealizationSvc::readDB().

◆ getVthBEtotH()

int RealDBUtil::ConnectionProvider::getVthBEtotH ( )
inline

Definition at line 68 of file ConnectionProvider.h.

68{ return m_VthBEtotH; }

Referenced by RealizationSvc::readDB().

◆ getVthBLZ()

int RealDBUtil::ConnectionProvider::getVthBLZ ( )
inline

Definition at line 72 of file ConnectionProvider.h.

72{ return m_VthBLZ; }

Referenced by RealizationSvc::readDB().

◆ getVthDiffB()

int RealDBUtil::ConnectionProvider::getVthDiffB ( )
inline

Definition at line 73 of file ConnectionProvider.h.

73{ return m_VthDiffB; }

Referenced by RealizationSvc::readDB().

◆ getVthDiffE()

int RealDBUtil::ConnectionProvider::getVthDiffE ( )
inline

Definition at line 74 of file ConnectionProvider.h.

74{ return m_VthDiffE; }

Referenced by RealizationSvc::readDB().

◆ getVthDiffMin()

int RealDBUtil::ConnectionProvider::getVthDiffMin ( )
inline

Definition at line 77 of file ConnectionProvider.h.

77{ return m_VthDiffMin; }

Referenced by RealizationSvc::readDB().

◆ getVthEEtotH()

int RealDBUtil::ConnectionProvider::getVthEEtotH ( )
inline

Definition at line 69 of file ConnectionProvider.h.

69{ return m_VthEEtotH; }

Referenced by RealizationSvc::readDB().

◆ getVthEtotL()

int RealDBUtil::ConnectionProvider::getVthEtotL ( )
inline

Definition at line 70 of file ConnectionProvider.h.

70{ return m_VthEtotL; }

Referenced by RealizationSvc::readDB().

◆ getVthEtotM()

int RealDBUtil::ConnectionProvider::getVthEtotM ( )
inline

Definition at line 71 of file ConnectionProvider.h.

71{ return m_VthEtotM; }

Referenced by RealizationSvc::readDB().

◆ split()

std::vector< std::string > RealDBUtil::ConnectionProvider::split ( const std::string &  src,
std::string  delimit,
std::string  null_subst = "" 
)

Definition at line 27 of file ConnectionProvider.cxx.

28 {
29 if( src.empty() || delimit.empty() ) throw "split: empty string\0";
30 vector<string> v;
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 )
34 {
35 if(index==last_search_position)
36 v.push_back(null_subst);
37 else
38 v.push_back( src.substr(last_search_position, index-
39 last_search_position) );
40 last_search_position = index + deli_len;
41 }
42 string last_one = src.substr(last_search_position);
43 v.push_back( last_one.empty()? null_subst:last_one );
44 return v;
45 }
**********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
Definition: KarLud.h:35
basic_string< char >::size_type S_T

Referenced by getcal().


The documentation for this class was generated from the following files: