BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Calibration/calibUtil/include/calibUtil/Metadata.h
Go to the documentation of this file.
1// $Header: /bes/bes/BossCvs/Calibration/calibUtil/calibUtil/Metadata.h,v 1.22 2020/09/28
2// 05:22:41 maqm Exp $
3#ifndef CALIBUTIL_METADATA_H
4#define CALIBUTIL_METADATA_H
5
6#include "DatabaseSvc/IDatabaseSvc.h"
7#include "facilities/Timestamp.h"
8#include "rdbModel/Db/Connection.h"
9#include "rdbModel/Tables/Assertion.h"
10
11namespace rdbModel {
12 class Rdb;
13 class Manager;
14} // namespace rdbModel
15
16namespace calibUtil {
17 /** Provide interface between calibration clients and the
18 MySQL database for calibration metadata. Supported operations
19 include writing a new record, looking for the serial number of
20 a "best match" record (findBest), and a method for retrieving
21 the information necessary to read the data set corresponding to
22 a particular metadata record (getReadInfo). Writing a record
23 is done in stages: open the record (openRecord), add certain
24 fields (addValidInterval, addNotes, etc.), and finally to write
25 the full record to the database (insertRecord).
26
27 The class contains definitions for several enumerated types,
28 corresponding to possible entries for columns in a metadata record.
29 Within the MySQL database the values are kept as strings. The
30 enumerated types are provided to insulate clients from these
31 details; enumerations are easier to document and to check for validity.
32 */
33 class Metadata {
34 public:
45 /// Used to form bit masks for dbs queries
46 enum eLevel { LEVELProd = 1, LEVELDev = 2, LEVELTest = 4, LEVELSuperseded = 8 };
47
48 /* Someday provide option of reading in description of table. In case
49 it is used, can check that it matches dbs we're connected to, and
50 can check column values.
51 */
52
53 /// Constructor keeps track of table of interest
54 Metadata( const std::string& host = "bes3db2.ihep.ac.cn", const std::string& table = "*",
55 const std::string& dbName = "calib" );
56
57 ~Metadata();
58
59 /** Return serial number for calibration which is best match to
60 criteria, using strings for calibType and instrument arguments.
61 This method may be useful for development when a particular
62 instrument or calibration type is not officially supported.
63 @param ser serial number of best match
64 as integer or zero if no matches
65 (output)
66 @param calibType type of data, must match
67 @param timestamp must be within validity interval;
68 closer to center is better
69 @param levelMask acceptable levels ("production"
70 better than "dev" better than "test"
71 better than "superseded")
72 @param instrument e.g. LAT, EM, CU,...
73 @param flavor optionally specify non-standard
74 calibration flavor
75 @return status. Should be RETOk.
76
77
78 If there are multiple calibrations which are not distinguished
79 by the above, pick the one most recently written.
80 */
81 /*maqm eRet findBest(unsigned int *ser,
82 const std::string& calibType,
83 const facilities::Timestamp& timestamp,
84 unsigned int levelMask,
85 const std::string& instrument,
86 const std::string& flavor="VANILLA");
87 maqm*/
88 // maqm modify
89 eRet findBest( unsigned int* ser, const std::string& calibType, const std::string& sft_ver,
90 const std::string& cal_ver, const std::string& cal_par,
91 const std::string& rec_alg, const std::string& rec_par,
92 const std::string& machine, const std::string& flavor = "VANILLA" );
93
94 /** Similar to findBest above, but here caller constrains the update_time
95 of the calibration by specifying an earliest and (optional) latest
96 time for it. The serial number of the calibration meeting all
97 other conditions, and with the earliest update_time, will be returned.
98 @param ser serial number of best match
99 as integer or zero if no matches
100 (output)
101 @param calibType type of data, must match
102 @param update_start ptr to time; early bound for update_time
103 @param update_end ptr to late bound for update_time (may be 0)
104 @param levelMask acceptable levels ("production"
105 better than "dev" better than "test"
106 better than "superseded")
107 @param instrument e.g. LAT, EM, CU,...
108 @param flavor optionally specify non-standard
109 calibration flavor
110 @return status. Should be RETOk.
111
112 */
113 eRet findSoonAfter( unsigned int* ser, const std::string& calibType,
114 const std::string& sft_ver, const std::string& cal_ver,
115 const std::string& cal_par, const std::string& rec_alg,
116 const std::string& rec_par, const std::string& machine,
117 const std::string& flavor = "VANILLA" );
118
119 // const std::string* const getCalibTypeStr(eCalibType cType);
120 // const std::string* const getDataFmtStr(eDataFmt fmt);
121 // const std::string* const getInstrumentStr(eInstrument inst);
122
123 /// Get validity interval for a particular calibration
124 eRet getInterval( unsigned int serialNo, facilities::Timestamp*& since,
125 facilities::Timestamp*& till );
126
127 // Might also want a "findAll" which would just return a list
128 // of serial numbers, and a "getRecord" which would either
129 // just return the full row as a string or parse it into
130 // its separate columns
131
132 /** Given a calibration serial number, return information needed for
133 caller to read in the data.
134 @param serialNo [input]
135 @param dataFormat
136 @param fmtVersion
137 @param filename
138 @return true if serialNo exists in dbs and "filename" has
139 non-null value; else false.
140 */
141 eRet getReadInfo( unsigned int serialNo, int* runFrm, int* runTo, std::string& dataFmt,
142 // std::string& fmtVersion,
143 std::string& dataIdent );
144
145 eRet getReadTOFInfo( unsigned int serialNo, int* runFrm, int* runTo,
146 std::string& calParVer, DatabaseRecordVector& res, int runNo,
147 std::string& sftver );
148
149 eRet getReadEMCInfo( unsigned int serialNo, int* runFrm, int* runTo,
150 std::string& calParVer, DatabaseRecordVector& res, int runNo,
151 std::string& sftver );
152
153 eRet getReadDedxInfo( unsigned int serialNo, int* runFrm, int* runTo,
154 std::string& calParVer, DatabaseRecordVector& res, int runNo,
155 std::string& sftver );
156
157 eRet getReadMDCInfo( unsigned int serialNo, int* runFrm, int* runTo,
158 std::string& calParVer, DatabaseRecordVector& res, int runNo,
159 std::string& sftver );
160 // Top_up Qiumei Ma
161 eRet getReadInjSigIntervalInfo( unsigned int serialNo, int* runFrm, int* runTo,
162 std::string& calParVer, DatabaseRecordVector& res,
163 int runNo, std::string& sftver );
164
165 eRet getReadInjSigTimeInfo( unsigned int serialNo, int* runFrm, int* runTo,
166 std::string& calParVer, DatabaseRecordVector& res, int runNo,
167 std::string& sftver );
168
169 eRet getReadOffEvtFilterInfo( unsigned int serialNo, int* runFrm, int* runTo,
170 std::string& calParVer, DatabaseRecordVector& res, int runNo,
171 std::string& sftver );
172
173 eRet getReadCorrectedETSInfo( unsigned int serialNo, int runNo, int FirstEvent,
174 std::string& Version, DatabaseRecordVector& res );
175
176 eRet getReadMUCInfo( unsigned int serialNo, int* runFrm, int* runTo,
177 std::string& calParVer, DatabaseRecordVector& res, int runNo,
178 std::string& sftver );
179
180 eRet getReadEsTimeInfo( unsigned int serialNo, int* runFrm, int* runTo,
181 std::string& calParVer, DatabaseRecordVector& res, int runNo,
182 std::string& sftver );
183
184 eRet getReadEstTofInfo( unsigned int serialNo, int* runFrm, int* runTo,
185 std::string& calParVer, DatabaseRecordVector& res, int runNo,
186 std::string& sftver );
187 eRet getReadMdcAlignInfo( unsigned int serialNo, int* runFrm, int* runTo,
188 std::string& calParVer, DatabaseRecordVector& res, int runNo,
189 std::string& sftver );
190 eRet getReadMdcDataConstInfo( unsigned int serialNo, int* runFrm, int* runTo,
191 std::string& calParVer, DatabaseRecordVector& res, int runNo,
192 std::string& sftver );
193 eRet getReadTofQElecInfo( unsigned int serialNo, int* runFrm, int* runTo,
194 std::string& calParVer, DatabaseRecordVector& res, int runNo,
195 std::string& sftver );
196 eRet getReadTofSimInfo( unsigned int serialNo, int* runFrm, int* runTo,
197 std::string& calParVer, DatabaseRecordVector& res, int runNo,
198 std::string& sftver );
199 eRet getReadDedxSimInfo( unsigned int serialNo, int* runFrm, int* runTo,
200 std::string& calParVer, DatabaseRecordVector& res, int runNo,
201 std::string& sftver );
202
203 // Insert a new record; return serial number if successful
204 int registerCalib( const std::string& inst, const std::string& flavor,
205 const std::string& calib_type, const std::string& data_ident,
206 const std::string& data_format, unsigned int& runfrm,
207 unsigned int& runto, const std::string& input_desc,
208 const std::string& notes, const std::string& proc_level,
209 const std::string& locale, const std::string& fmt_version = "",
210 const std::string& completion = "OK" );
211
212 bool connectRead( eRet& err );
213
214 bool checkValues( const rdbModel::StringVector& cols,
215 const rdbModel::StringVector& vals ) const;
216
217 bool checkNulls( const rdbModel::StringVector& cols ) const;
218
220
221 // Should probably be const
222 rdbModel::Rdb* getRdb() { return m_rdb; }
223 const std::string& getTable() { return m_table; }
224
225 // Might make these private
226 void disconnectRead();
227 void disconnectWrite();
228
229 private:
230 rdbModel::Connection* m_readCxt;
231 rdbModel::Connection* m_writeCxt;
232
233 // these could be static
234 rdbModel::Assertion* m_findBest;
235 rdbModel::Assertion* m_findSoonest;
236
237 // For each pre-existing row satisfying certain conditions,
238 // set its vend = vstart of new row
239 unsigned adjustVend( int newSer );
240
241 /*
242 Set val to string representation of "next" bit in levelMask
243 (one of "PROD", "DEV", "TEST" or "SUPSED"),
244 and mask off that bit in levelMask.
245 */
246 bool fetchLevel( std::string& val, unsigned int* levelMask );
247
248 // void initConditions(std::vector<rdbModel::Operator *> conditions);
249
250 // bool addLevel(std::string& q, unsigned int *levelMask);
251
252 /* Use rdbModel::MysqlConnection::open( .. ) to do most of the work */
253
254 // static bool connect(rdbModel::MysqlConnection* conn,
255 static bool connect( rdbModel::Connection* conn, std::string& host,
256 const std::string& user, const std::string& pw, eRet& err,
257 const std::string& dbName );
258
259 bool connectWrite( eRet& err );
260
261 eRet compareSchema( rdbModel::Connection* conn, const std::string& schema );
262 // Find 'best' calibration, based on conditions and levelMask; store
263 // serial number.
264 // maqm fix
265 // eRet Metadata::doSelect(unsigned levelMask,
266 eRet doSelect( std::vector<rdbModel::Assertion::Operator*>& conditions,
267 rdbModel::StringVector& orderBy, unsigned*& ser );
268
269 /// Discover username and store in caller-supplied string
270 eRet fetchUser( std::string& user );
271
272 /// Compare schema described in xml file (schema argument) with
273 /// actual database. If schema="", derive file name from
274 /// database name.
275 // eRet compareSchema(const std::string& schema="");
276
277 // Won't need followin enum or bit mask if we eliminate multi-step
278 // insert procedure
279 /** Keep track of which columns in row have been initialized
280 with bit mask */
281 /*
282 enum eRow {
283 eOpened = 1,
284 eValid = 2,
285 eInputDesc = 4,
286 eComment = 8,
287 eFlavor = 0x10,
288 eLocale = 0x20,
289 eCreator = 0x40 };
290 */
291 /// Constant bit mask indicating all necessary fields have been set
292 // static const unsigned int s_rowReady;
293
294 // std::string m_row; // place to keep row as it's being built
295 // unsigned int m_rowStatus;
296 std::string m_host;
297 std::string m_table;
298 std::string m_dbName;
299 rdbModel::Manager* m_man;
300 rdbModel::Rdb* m_rdb;
301 IDatabaseSvc* m_dbsvc;
302 bool m_match; // true if succeeded. If not attempted, m_rdb is 0
303 };
304} // namespace calibUtil
305
306#endif
int runNo
Definition DQA_TO_DB.cxx:13
eRet getReadMdcDataConstInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
bool checkValues(const rdbModel::StringVector &cols, const rdbModel::StringVector &vals) const
eRet getReadEsTimeInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:787
bool checkNulls(const rdbModel::StringVector &cols) const
eRet getReadInjSigTimeInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:419
eRet findBest(unsigned int *ser, const std::string &calibType, const std::string &sft_ver, const std::string &cal_ver, const std::string &cal_par, const std::string &rec_alg, const std::string &rec_par, const std::string &machine, const std::string &flavor="VANILLA")
Definition Metadata.cxx:252
eRet getReadTOFInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:535
eRet getReadInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &dataFmt, std::string &dataIdent)
Definition Metadata.cxx:316
bool connectRead(eRet &err)
Definition Metadata.cxx:114
eRet getReadDedxSimInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:937
Metadata(const std::string &host="bes3db2.ihep.ac.cn", const std::string &table="*", const std::string &dbName="calib")
Constructor keeps track of table of interest.
Definition Metadata.cxx:38
eRet getReadMUCInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:582
eRet getReadEstTofInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:833
eRet getReadTofSimInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:885
eRet getReadOffEvtFilterInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:464
eLevel
Used to form bit masks for dbs queries.
eRet getReadDedxInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:736
eRet getReadInjSigIntervalInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:373
eRet getReadCorrectedETSInfo(unsigned int serialNo, int runNo, int FirstEvent, std::string &Version, DatabaseRecordVector &res)
Definition Metadata.cxx:509
eRet getReadMdcAlignInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:981
int registerCalib(const std::string &inst, const std::string &flavor, const std::string &calib_type, const std::string &data_ident, const std::string &data_format, unsigned int &runfrm, unsigned int &runto, const std::string &input_desc, const std::string &notes, const std::string &proc_level, const std::string &locale, const std::string &fmt_version="", const std::string &completion="OK")
eRet getInterval(unsigned int serialNo, facilities::Timestamp *&since, facilities::Timestamp *&till)
Get validity interval for a particular calibration.
eRet getReadMDCInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:635
eRet getReadTofQElecInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
eRet findSoonAfter(unsigned int *ser, const std::string &calibType, const std::string &sft_ver, const std::string &cal_ver, const std::string &cal_par, const std::string &rec_alg, const std::string &rec_par, const std::string &machine, const std::string &flavor="VANILLA")
Definition Metadata.cxx:187
eRet getReadEMCInfo(unsigned int serialNo, int *runFrm, int *runTo, std::string &calParVer, DatabaseRecordVector &res, int runNo, std::string &sftver)
Definition Metadata.cxx:689
Module implements methods for clients to get generic services.