File indexing completed on 2023-03-17 11:15:12
0001 #include <stdexcept>
0002 #include <string>
0003 #include "OnlineDB/Oracle/interface/Oracle.h"
0004
0005 #include "OnlineDB/EcalCondDB/interface/DCULVRVoltagesDat.h"
0006 #include "OnlineDB/EcalCondDB/interface/RunTag.h"
0007 #include "OnlineDB/EcalCondDB/interface/RunIOV.h"
0008
0009 using namespace std;
0010 using namespace oracle::occi;
0011
0012 DCULVRVoltagesDat::DCULVRVoltagesDat() {
0013 m_env = nullptr;
0014 m_conn = nullptr;
0015 m_writeStmt = nullptr;
0016 m_readStmt = nullptr;
0017
0018 m_vfe1_A = 0;
0019 m_vfe2_A = 0;
0020 m_vfe3_A = 0;
0021 m_vfe4_A = 0;
0022 m_vfe5_A = 0;
0023 m_VCC = 0;
0024 m_vfe4_5_D = 0;
0025 m_vfe1_2_3_D = 0;
0026 m_buffer = 0;
0027 m_fenix = 0;
0028 m_V43_A = 0;
0029 m_OCM = 0;
0030 m_GOH = 0;
0031 m_INH = 0;
0032 m_V43_D = 0;
0033 }
0034
0035 DCULVRVoltagesDat::~DCULVRVoltagesDat() {}
0036
0037 void DCULVRVoltagesDat::prepareWrite() noexcept(false) {
0038 this->checkConnection();
0039
0040 try {
0041 m_writeStmt = m_conn->createStatement();
0042 m_writeStmt->setSQL(
0043 "INSERT INTO dcu_lvr_voltages_dat (iov_id, logic_id, "
0044 "vfe1_A, vfe2_A, vfe3_A, vfe4_A, vfe5_A, VCC, vfe4_5_D, vfe1_2_3_D, buffer, fenix, V43_A, OCM, GOH, INH, "
0045 "V43_D) "
0046 "VALUES (:iov_id, :logic_id, "
0047 ":3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17)");
0048 } catch (SQLException& e) {
0049 throw(std::runtime_error("DCULVRVoltagesDat::prepareWrite(): " + e.getMessage()));
0050 }
0051 }
0052
0053 void DCULVRVoltagesDat::writeDB(const EcalLogicID* ecid, const DCULVRVoltagesDat* item, DCUIOV* iov) noexcept(false) {
0054 this->checkConnection();
0055 this->checkPrepare();
0056
0057 int iovID = iov->fetchID();
0058 if (!iovID) {
0059 throw(std::runtime_error("DCULVRVoltagesDat::writeDB: IOV not in DB"));
0060 }
0061
0062 int logicID = ecid->getLogicID();
0063 if (!logicID) {
0064 throw(std::runtime_error("DCULVRVoltagesDat::writeDB: Bad EcalLogicID"));
0065 }
0066
0067 try {
0068 m_writeStmt->setInt(1, iovID);
0069 m_writeStmt->setInt(2, logicID);
0070
0071 m_writeStmt->setFloat(3, item->getVFE1_A());
0072 m_writeStmt->setFloat(4, item->getVFE2_A());
0073 m_writeStmt->setFloat(5, item->getVFE3_A());
0074 m_writeStmt->setFloat(6, item->getVFE4_A());
0075 m_writeStmt->setFloat(7, item->getVFE5_A());
0076 m_writeStmt->setFloat(8, item->getVCC());
0077 m_writeStmt->setFloat(9, item->getVFE4_5_D());
0078 m_writeStmt->setFloat(10, item->getVFE1_2_3_D());
0079 m_writeStmt->setFloat(11, item->getBuffer());
0080 m_writeStmt->setFloat(12, item->getFenix());
0081 m_writeStmt->setFloat(13, item->getV43_A());
0082 m_writeStmt->setFloat(14, item->getOCM());
0083 m_writeStmt->setFloat(15, item->getGOH());
0084 m_writeStmt->setFloat(16, item->getINH());
0085 m_writeStmt->setFloat(17, item->getV43_D());
0086
0087 m_writeStmt->executeUpdate();
0088 } catch (SQLException& e) {
0089 throw(std::runtime_error("DCULVRVoltagesDat::writeDB(): " + e.getMessage()));
0090 }
0091 }
0092
0093 void DCULVRVoltagesDat::fetchData(std::map<EcalLogicID, DCULVRVoltagesDat>* fillMap, DCUIOV* iov) noexcept(false) {
0094 this->checkConnection();
0095 fillMap->clear();
0096
0097 iov->setConnection(m_env, m_conn);
0098 int iovID = iov->fetchID();
0099 if (!iovID) {
0100
0101 return;
0102 }
0103
0104 try {
0105 m_readStmt->setSQL(
0106 "SELECT cv.name, cv.logic_id, cv.id1, cv.id2, cv.id3, cv.maps_to, "
0107 "d.vfe1_A, d.vfe2_A, d.vfe3_A, d.vfe4_A, d.vfe5_A, d.VCC, d.vfe4_5_D, d.vfe1_2_3_D, d.buffer, d.fenix, "
0108 "d.V43_A, d.OCM, d.GOH, d.INH, d.V43_D "
0109 "FROM channelview cv JOIN dcu_lvr_voltages_dat d "
0110 "ON cv.logic_id = d.logic_id AND cv.name = cv.maps_to "
0111 "WHERE d.iov_id = :iov_id");
0112 m_readStmt->setInt(1, iovID);
0113 ResultSet* rset = m_readStmt->executeQuery();
0114
0115 std::pair<EcalLogicID, DCULVRVoltagesDat> p;
0116 DCULVRVoltagesDat dat;
0117 while (rset->next()) {
0118 p.first = EcalLogicID(rset->getString(1),
0119 rset->getInt(2),
0120 rset->getInt(3),
0121 rset->getInt(4),
0122 rset->getInt(5),
0123 rset->getString(6));
0124
0125 dat.setVFE1_A(rset->getFloat(7));
0126 dat.setVFE2_A(rset->getFloat(8));
0127 dat.setVFE3_A(rset->getFloat(9));
0128 dat.setVFE4_A(rset->getFloat(10));
0129 dat.setVFE5_A(rset->getFloat(11));
0130 dat.setVCC(rset->getFloat(12));
0131 dat.setVFE4_5_D(rset->getFloat(13));
0132 dat.setVFE1_2_3_D(rset->getFloat(14));
0133 dat.setBuffer(rset->getFloat(15));
0134 dat.setFenix(rset->getFloat(16));
0135 dat.setV43_A(rset->getFloat(17));
0136 dat.setOCM(rset->getFloat(18));
0137 dat.setGOH(rset->getFloat(19));
0138 dat.setINH(rset->getFloat(20));
0139 dat.setV43_D(rset->getFloat(21));
0140
0141 p.second = dat;
0142 fillMap->insert(p);
0143 }
0144 } catch (SQLException& e) {
0145 throw(std::runtime_error("DCULVRVoltagesDat::fetchData(): " + e.getMessage()));
0146 }
0147 }
0148 void DCULVRVoltagesDat::writeArrayDB(const std::map<EcalLogicID, DCULVRVoltagesDat>* data,
0149 DCUIOV* iov) noexcept(false) {
0150 this->checkConnection();
0151 this->checkPrepare();
0152
0153 int iovID = iov->fetchID();
0154 if (!iovID) {
0155 throw(std::runtime_error("DCULVRVoltagesDat::writeArrayDB: IOV not in DB"));
0156 }
0157
0158 int nrows = data->size();
0159 int* ids = new int[nrows];
0160 int* iovid_vec = new int[nrows];
0161 float* xx = new float[nrows];
0162 float* yy = new float[nrows];
0163 float* zz = new float[nrows];
0164 float* ww = new float[nrows];
0165 float* uu = new float[nrows];
0166 float* tt = new float[nrows];
0167 float* rr = new float[nrows];
0168 float* pp = new float[nrows];
0169 float* ll = new float[nrows];
0170 float* mm = new float[nrows];
0171 float* nn = new float[nrows];
0172 float* qq = new float[nrows];
0173 float* ss = new float[nrows];
0174 float* vv = new float[nrows];
0175 float* hh = new float[nrows];
0176
0177 ub2* ids_len = new ub2[nrows];
0178 ub2* iov_len = new ub2[nrows];
0179 ub2* x_len = new ub2[nrows];
0180 ub2* y_len = new ub2[nrows];
0181 ub2* z_len = new ub2[nrows];
0182 ub2* w_len = new ub2[nrows];
0183 ub2* u_len = new ub2[nrows];
0184 ub2* t_len = new ub2[nrows];
0185 ub2* r_len = new ub2[nrows];
0186 ub2* p_len = new ub2[nrows];
0187 ub2* l_len = new ub2[nrows];
0188 ub2* m_len = new ub2[nrows];
0189 ub2* n_len = new ub2[nrows];
0190 ub2* q_len = new ub2[nrows];
0191 ub2* s_len = new ub2[nrows];
0192 ub2* v_len = new ub2[nrows];
0193 ub2* h_len = new ub2[nrows];
0194
0195 const EcalLogicID* channel;
0196 const DCULVRVoltagesDat* dataitem;
0197 int count = 0;
0198 typedef map<EcalLogicID, DCULVRVoltagesDat>::const_iterator CI;
0199 for (CI p = data->begin(); p != data->end(); ++p) {
0200 channel = &(p->first);
0201 int logicID = channel->getLogicID();
0202 if (!logicID) {
0203 throw(std::runtime_error("DCULVRVoltagesDat::writeArrayDB: Bad EcalLogicID"));
0204 }
0205 ids[count] = logicID;
0206 iovid_vec[count] = iovID;
0207
0208 dataitem = &(p->second);
0209
0210 float x = dataitem->getVFE1_A();
0211 float y = dataitem->getVFE2_A();
0212 float z = dataitem->getVFE3_A();
0213 float w = dataitem->getVFE4_A();
0214 float u = dataitem->getVFE5_A();
0215 float t = dataitem->getVCC();
0216 float r = dataitem->getVFE4_5_D();
0217 float pi = dataitem->getVFE1_2_3_D();
0218 float l = dataitem->getBuffer();
0219 float m = dataitem->getFenix();
0220 float n = dataitem->getV43_A();
0221 float q = dataitem->getOCM();
0222 float s = dataitem->getGOH();
0223 float v = dataitem->getINH();
0224 float h = dataitem->getV43_D();
0225
0226 xx[count] = x;
0227 yy[count] = y;
0228 zz[count] = z;
0229 ww[count] = w;
0230 uu[count] = u;
0231 tt[count] = t;
0232 rr[count] = r;
0233 pp[count] = pi;
0234 ll[count] = l;
0235 mm[count] = m;
0236 nn[count] = n;
0237 qq[count] = q;
0238 ss[count] = s;
0239 vv[count] = v;
0240 hh[count] = h;
0241
0242 ids_len[count] = sizeof(ids[count]);
0243 iov_len[count] = sizeof(iovid_vec[count]);
0244
0245 x_len[count] = sizeof(xx[count]);
0246 y_len[count] = sizeof(yy[count]);
0247 z_len[count] = sizeof(zz[count]);
0248 w_len[count] = sizeof(ww[count]);
0249 u_len[count] = sizeof(uu[count]);
0250 t_len[count] = sizeof(tt[count]);
0251 r_len[count] = sizeof(rr[count]);
0252 p_len[count] = sizeof(pp[count]);
0253 l_len[count] = sizeof(ll[count]);
0254 m_len[count] = sizeof(mm[count]);
0255 n_len[count] = sizeof(nn[count]);
0256 q_len[count] = sizeof(qq[count]);
0257 s_len[count] = sizeof(ss[count]);
0258 v_len[count] = sizeof(vv[count]);
0259 h_len[count] = sizeof(hh[count]);
0260 count++;
0261 }
0262 try {
0263 m_writeStmt->setDataBuffer(1, (dvoid*)iovid_vec, OCCIINT, sizeof(iovid_vec[0]), iov_len);
0264 m_writeStmt->setDataBuffer(2, (dvoid*)ids, OCCIINT, sizeof(ids[0]), ids_len);
0265 m_writeStmt->setDataBuffer(3, (dvoid*)xx, OCCIFLOAT, sizeof(xx[0]), x_len);
0266 m_writeStmt->setDataBuffer(4, (dvoid*)yy, OCCIFLOAT, sizeof(yy[0]), y_len);
0267 m_writeStmt->setDataBuffer(5, (dvoid*)zz, OCCIFLOAT, sizeof(zz[0]), z_len);
0268 m_writeStmt->setDataBuffer(6, (dvoid*)ww, OCCIFLOAT, sizeof(ww[0]), w_len);
0269 m_writeStmt->setDataBuffer(7, (dvoid*)uu, OCCIFLOAT, sizeof(uu[0]), u_len);
0270 m_writeStmt->setDataBuffer(8, (dvoid*)tt, OCCIFLOAT, sizeof(tt[0]), t_len);
0271 m_writeStmt->setDataBuffer(9, (dvoid*)rr, OCCIFLOAT, sizeof(rr[0]), r_len);
0272 m_writeStmt->setDataBuffer(10, (dvoid*)pp, OCCIFLOAT, sizeof(pp[0]), p_len);
0273 m_writeStmt->setDataBuffer(11, (dvoid*)ll, OCCIFLOAT, sizeof(ll[0]), l_len);
0274 m_writeStmt->setDataBuffer(12, (dvoid*)mm, OCCIFLOAT, sizeof(mm[0]), m_len);
0275 m_writeStmt->setDataBuffer(13, (dvoid*)nn, OCCIFLOAT, sizeof(nn[0]), n_len);
0276 m_writeStmt->setDataBuffer(14, (dvoid*)qq, OCCIFLOAT, sizeof(qq[0]), q_len);
0277 m_writeStmt->setDataBuffer(15, (dvoid*)ss, OCCIFLOAT, sizeof(ss[0]), s_len);
0278 m_writeStmt->setDataBuffer(16, (dvoid*)vv, OCCIFLOAT, sizeof(vv[0]), v_len);
0279 m_writeStmt->setDataBuffer(17, (dvoid*)hh, OCCIFLOAT, sizeof(hh[0]), h_len);
0280
0281 m_writeStmt->executeArrayUpdate(nrows);
0282
0283 delete[] ids;
0284 delete[] iovid_vec;
0285 delete[] xx;
0286 delete[] yy;
0287 delete[] zz;
0288 delete[] ww;
0289 delete[] uu;
0290 delete[] tt;
0291 delete[] rr;
0292 delete[] pp;
0293 delete[] ll;
0294 delete[] mm;
0295 delete[] nn;
0296 delete[] qq;
0297 delete[] ss;
0298 delete[] vv;
0299 delete[] hh;
0300
0301 delete[] ids_len;
0302 delete[] iov_len;
0303 delete[] x_len;
0304 delete[] y_len;
0305 delete[] z_len;
0306 delete[] w_len;
0307 delete[] u_len;
0308 delete[] t_len;
0309 delete[] r_len;
0310 delete[] p_len;
0311 delete[] l_len;
0312 delete[] m_len;
0313 delete[] n_len;
0314 delete[] q_len;
0315 delete[] s_len;
0316 delete[] v_len;
0317 delete[] h_len;
0318
0319 } catch (SQLException& e) {
0320 throw(std::runtime_error("DCULVRVoltagesDat::writeArrayDB(): " + e.getMessage()));
0321 }
0322 }