BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
FieldDBUtil::ConnectionDB Class Reference

#include <ConnectionDB.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

 ConnectionDB ()
 Constructor keeps track of table of interest.
 ~ConnectionDB ()
ConnectionDB::eRet getReadSC_MagnetInfo (std::vector< double > &current, int runNo)
ConnectionDB::eRet getBeamEnergy (std::vector< double > &beamE, int runNo)
bool getReadSC_MagnetInfo (std::map< int, std::vector< double > > &m_mapMagnetInfo, int runFrom, int runTo)
bool getBeamEnergy (std::map< int, std::vector< double > > &m_mapBeamEnergy, int runFrom, int runTo)

Detailed Description

Definition at line 12 of file ConnectionDB.h.

Member Enumeration Documentation

◆ eLevel

Used to form bit masks for dbs queries.

Enumerator
LEVELProd 
LEVELDev 
LEVELTest 
LEVELSuperseded 

Definition at line 34 of file ConnectionDB.h.

◆ eRet

Enumerator
RETOk 
RETBadCnfFile 
RETBadHost 
RETNoConnect 
RETWrongState 
RETBadValue 
RETMySQLError 
RETNoSchemaMatch 

Definition at line 23 of file ConnectionDB.h.

Constructor & Destructor Documentation

◆ ConnectionDB()

FieldDBUtil::ConnectionDB::ConnectionDB ( )

Constructor keeps track of table of interest.

Definition at line 23 of file ConnectionDB.cxx.

23 {
24 StatusCode sc = Gaudi::svcLocator()->service( "DatabaseSvc", m_dbsvc, true );
25 if ( sc.isFailure() )
26 { std::cout << "ERROR: In ConnectionDB()--> Unable to find DatabaseSvc " << std::endl; }
27 }

◆ ~ConnectionDB()

FieldDBUtil::ConnectionDB::~ConnectionDB ( )
inline

Definition at line 21 of file ConnectionDB.h.

21{}

Member Function Documentation

◆ getBeamEnergy() [1/2]

bool FieldDBUtil::ConnectionDB::getBeamEnergy ( std::map< int, std::vector< double > > & m_mapBeamEnergy,
int runFrom,
int runTo )

Definition at line 79 of file ConnectionDB.cxx.

80 {
81 char stmt1[200];
82 int run_From = std::abs( runFrom );
83 int run_To = std::abs( runTo );
84 DatabaseRecordVector results;
85 results.clear();
86
87 IDatabaseSvc* m_dbsvc;
88 StatusCode sc = Gaudi::svcLocator()->service( "DatabaseSvc", m_dbsvc, true );
89 if ( sc.isFailure() )
90 {
91 std::cout << "MSG::ERROR "
92 << "Unable to find DatabaseSvc " << std::endl;
93 exit( 1 );
94 }
95
96 sprintf( stmt1,
97 "select run_number,BPR_PRB,BER_PRB from RunParams where run_number >= %d and "
98 "run_number <= %d ",
99 run_From, run_To );
100 // cout<<stmt1<<endl;
101 int row_no = m_dbsvc->query( "run", stmt1, results );
102 if ( row_no <= 0 )
103 {
104 std::cout << "ERROR:"
105 << "Run:" << run_From << " Can not read the beam energy from the Database"
106 << endl;
107 exit( 1 );
108 }
109
110 /*int RowNumber = results.size();
111 if(RowNumber == 0) {
112 beamE.push_back(1.843); // for positron
113 beamE.push_back(1.843); // for electron
114 std::cout << "No beam energy, so set BPR_PRB=1.843, BER_PRB=1.843"<<std::endl;
115 exit(1);
116 }*/
117 if ( row_no > 0 )
118 {
119 for ( int i = 0; i < row_no; i++ )
120 {
121 DatabaseRecord& dbrec = *results[i];
122 int run_No = dbrec.GetInt( "run_number" );
123 std::vector<double> beamEnergy;
124 beamEnergy.push_back( dbrec.GetDouble( "BPR_PRB" ) );
125 beamEnergy.push_back( dbrec.GetDouble( "BER_PRB" ) );
126 m_mapBeamEnergy[run_No] = beamEnergy;
127 float beam1, beam2;
128 beam1 = beamEnergy[0];
129 beam2 = beamEnergy[1];
130 // cout<<"map of run:"<<run_No<<"BPR_PRB:"<<beam1<<"BER_PRB:"<<beam2<<endl;
131 }
132 return true;
133 }
134
135 std::cerr << __FILE__ << ":" << __LINE__ << ": should not reach here" << std::endl;
136 exit( 1 );
137 }
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)

◆ getBeamEnergy() [2/2]

ConnectionDB::eRet FieldDBUtil::ConnectionDB::getBeamEnergy ( std::vector< double > & beamE,
int runNo )

Definition at line 184 of file ConnectionDB.cxx.

184 {
185 // Read magnetic field map
186 char stmt1[200];
187 int run_No = std::abs( runNo );
188
189 sprintf( stmt1, "select BPR_PRB,BER_PRB from RunParams where run_number = %d ", run_No );
190 // cout<<stmt1<<endl;
191 DatabaseRecordVector results;
192 results.clear();
193 int status = m_dbsvc->query( "run", stmt1, results );
194 if ( status < 0 )
195 {
196 std::cout << "ERROR Read the beam energy from the Database" << endmsg;
197 exit( 1 );
198 }
199
200 int RowNumber = results.size();
201
202 if ( RowNumber == 0 )
203 {
204 beamE.push_back( 1.843 ); // for positron
205 beamE.push_back( 1.843 ); // for electron
206
207 return RETOk;
208 }
209
210 if ( RowNumber != 1 )
211 {
212 std::cout << "ERROR:error searching beam energy in the database, check your selection "
213 "criterions"
214 << std::endl;
215 return RETMySQLError;
216 }
217
218 beamE.push_back( atof( ( *results[0] )["BPR_PRB"] ) ); // for positron
219 beamE.push_back( atof( ( *results[0] )["BER_PRB"] ) ); // for electron
220 float beam1, beam2;
221 beam1 = atof( ( *results[0] )["BPR_PRB"] );
222 beam2 = atof( ( *results[0] )["BER_PRB"] );
223 // cout<<"map of run:"<<run_No<<"BPR_PRB:"<<beam1<<"BER_PRB:"<<beam2<<endl;
224 return RETOk;
225 }
int runNo
Definition DQA_TO_DB.cxx:13

◆ getReadSC_MagnetInfo() [1/2]

bool FieldDBUtil::ConnectionDB::getReadSC_MagnetInfo ( std::map< int, std::vector< double > > & m_mapMagnetInfo,
int runFrom,
int runTo )

Definition at line 139 of file ConnectionDB.cxx.

140 {
141 char stmt1[200];
142 int run_From = std::abs( runFrom );
143 int run_To = std::abs( runTo );
144 DatabaseRecordVector results;
145 results.clear();
146
147 IDatabaseSvc* m_dbsvc;
148 StatusCode sc = Gaudi::svcLocator()->service( "DatabaseSvc", m_dbsvc, true );
149 if ( sc.isFailure() )
150 {
151 std::cout << "MSG::ERROR "
152 << "Unable to find DatabaseSvc " << std::endl;
153 exit( 1 );
154 }
155 sprintf( stmt1,
156 "select run_number,Magnet_Current,SCQL,SCQR from SC_magnet where run_number >= "
157 "%d and run_number<=%d ",
158 run_From, run_To );
159 // cout<<stmt1<<endl;
160 int row_no = m_dbsvc->query( "run", stmt1, results );
161 if ( row_no <= 0 )
162 {
163 std::cout << "ERROR Read the SSM and SCQ current from the Database"
164 << " Run:" << run_From << endl;
165 exit( 1 );
166 }
167 if ( row_no > 0 )
168 {
169 for ( int i = 0; i < row_no; i++ )
170 {
171 DatabaseRecord& dbrec = *results[i];
172 int run_No = dbrec.GetInt( "run_number" );
173 std::vector<double> SCMagnet;
174 SCMagnet.push_back( dbrec.GetDouble( "Magnet_Current" ) );
175 SCMagnet.push_back( dbrec.GetDouble( "SCQL" ) );
176 SCMagnet.push_back( dbrec.GetDouble( "SCQR" ) );
177 m_mapMagnetInfo[run_No] = SCMagnet;
178 // cout<<"map of
179 // run:"<<run_No<<"Magnet_Current:"<<(m_mapMagnetInfo[run_No])[0]<<"SCQL:"<<(m_mapMagnetInfo[run_No])[1]<<"SCQR:"<<(m_mapMagnetInfo[run_No])[2]<<endl;
180 }
181 }
182 return true;
183 }

◆ getReadSC_MagnetInfo() [2/2]

ConnectionDB::eRet FieldDBUtil::ConnectionDB::getReadSC_MagnetInfo ( std::vector< double > & current,
int runNo )

Definition at line 30 of file ConnectionDB.cxx.

31 {
32
33#ifdef BEAN
34 static DatabaseSvc* m_dbsvc = 0;
35
36 if ( !m_dbsvc ) { m_dbsvc = DatabaseSvc::instance(); }
37#endif
38
39 // Read magnetic field map
40 char stmt1[200];
41 int run_No = std::abs( runNo );
42
43 sprintf( stmt1, "select Magnet_Current,SCQL,SCQR from SC_magnet where run_number = %d ",
44 run_No );
45 // cout<<stmt1<<endl;
46 DatabaseRecordVector results;
47 results.clear();
48 int status = m_dbsvc->query( "run", stmt1, results );
49
50 if ( status < 0 )
51 {
52 std::cout << "ERROR Read the SSM and SCQ current from the Database" << endl;
53 exit( 1 );
54 }
55
56 int RowNumber = results.size();
57 if ( RowNumber != 1 )
58 {
59 std::cout << "ERROR:error searching SC_Magnet Data in the database, check your "
60 "selection criterions"
61 << std::endl;
62 return RETMySQLError;
63 }
64
65 DatabaseRecord& rec = *results[0];
66 double ssm_curr = rec.GetDouble( "Magnet_Current" );
67 double scql_curr = rec.GetDouble( "SCQL" );
68 double scqr_curr = rec.GetDouble( "SCQR" );
69
70 // save results in vector
71 current.resize( 3 );
72 current[0] = ssm_curr;
73 current[1] = scql_curr;
74 current[2] = scqr_curr;
75 // cout<<"run:"<<run_No<<"Magnet_Current:"<<current[0]<<"SCQL:"<<current[1]<<"SCQR:"<<current[2]<<endl;
76 return RETOk;
77 }

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