File indexing completed on 2024-04-06 12:23:14
0001 #include <iostream>
0002
0003 #include <fstream>
0004 #include <string>
0005 #include <vector>
0006 #include <time.h>
0007 #include <cstdlib>
0008
0009 #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h"
0010 #include "OnlineDB/EcalCondDB/interface/all_cali_types.h"
0011
0012
0013 using namespace std;
0014
0015 class CondDBApp {
0016 public:
0017
0018
0019
0020
0021 CondDBApp(string sid, string user, string pass)
0022 {
0023 try {
0024 cout << "Making connection..." << flush;
0025 econn = new EcalCondDBInterface( sid, user, pass );
0026 cout << "Done." << endl;
0027 } catch (runtime_error &e) {
0028 cerr << e.what() << endl;
0029 exit(-1);
0030 }
0031
0032
0033 }
0034
0035
0036
0037
0038
0039
0040 ~CondDBApp()
0041 {
0042 delete econn;
0043 }
0044
0045
0046
0047 CaliIOV makeCaliIOV()
0048 {
0049 LocationDef locdef;
0050 locdef.setLocation("LAB");
0051 CaliTag calitag;
0052 calitag.setLocationDef(locdef);
0053 calitag.setDataType("TEMP_SENSOR");
0054 calitag.setMethod("COSMICS");
0055 calitag.setVersion("OFFSET");
0056 calitag.setGeneralTag("EB_with_offset_in_situ");
0057
0058
0059
0060
0061 Tm since ;
0062 since.setToGMTime(1);
0063
0064
0065
0066
0067 uint64_t microseconds = since.microsTime();
0068 startmicros = microseconds;
0069
0070
0071 CaliIOV caliiov;
0072
0073 caliiov.setSince(since);
0074 caliiov.setCaliTag(calitag);
0075
0076 return caliiov;
0077 }
0078
0079
0080 int convertFromConstructionSMToSlot(int sm_constr,int sm_slot){
0081
0082
0083
0084
0085 int slot_to_constr[37]={-1,12,17,10,1,8,4,27,20,23,25,6,34,35,15,18,30,21,9
0086 ,24,22,13,31,26,16,2,11,5,0,29,28,14,33,32,3,7,19};
0087 int constr_to_slot[36]={28,4,25,34,6,27,11,35,5,18,3,26,1,21,31,14,24,2,15,
0088 36,8,17,20,9,19,10,23,7,30,29,16,22,33,32,12,13 };
0089
0090 int result=0;
0091 if(sm_constr!=-1) {
0092 result=constr_to_slot[sm_constr];
0093 } else if(sm_slot!=-1) {
0094 result=slot_to_constr[sm_slot];
0095 }
0096 return result;
0097 }
0098
0099
0100
0101
0102
0103
0104
0105 void testWrite(std::string filename)
0106 {
0107
0108 cout << "read calibration file " << filename << endl;
0109 ifstream fin;
0110 fin.open(filename.c_str());
0111
0112 std::string ch_line;
0113
0114
0115 float temp_vec[61200];
0116 float beta_vec[61200];
0117 float r25_vec[61200];
0118 float nic_vec[61200];
0119 for(int ic=0; ic<61200; ic++){
0120 beta_vec[ic]=0;
0121 r25_vec[ic]=0;
0122 temp_vec[ic]=0;
0123 nic_vec[ic]=0;
0124 }
0125
0126
0127 int sm,i;
0128 float beta, r25, nic;
0129
0130 while( fin.peek() != EOF )
0131 {
0132
0133
0134 fin >> sm>>i>>beta>>r25>>nic;
0135
0136
0137 if(i<10) cout << "sm/i/beta/r25/offset="<<sm<<"/"<<i<<"/"<<beta<<"/"<<r25<<"/"<<nic<< endl;
0138
0139
0140 int ic=(sm-1)*170+i-1;
0141
0142
0143
0144 beta_vec[ic]=beta;
0145 r25_vec[ic]=r25;
0146 temp_vec[ic]=1.0;
0147 nic_vec[ic]=nic;
0148 }
0149
0150 fin.close();
0151
0152 cout << "Writing CaliCrystalIntercalDat objects to database..." << endl;
0153 cout << "Making a CaliIOV..." << flush;
0154 CaliIOV caliiov = this->makeCaliIOV();
0155 cout << "Done." << endl;
0156
0157 this->printIOV(&caliiov);
0158
0159 Tm eventTm = caliiov.getSince();
0160 CaliTag calitag = caliiov.getCaliTag();
0161
0162
0163 vector<EcalLogicID> ecid_vec;
0164
0165
0166
0167
0168 ecid_vec = econn->getEcalLogicIDSetOrdered("EB_T_capsule", 1,36, 1, 170,EcalLogicID::NULLID,
0169 EcalLogicID::NULLID, "EB_T_capsule",12);
0170
0171
0172 map<EcalLogicID, CaliTempDat> dataset;
0173 int count=0;
0174
0175 for (int ii=0; ii<6120; ii++){
0176 CaliTempDat capTemp;
0177 if(temp_vec[ii]!=0 ){
0178
0179 float val1 = beta_vec[ii] ;
0180 float val2 = r25_vec[ii];
0181
0182 capTemp.setBeta(val1);
0183 capTemp.setR25(val2);
0184 capTemp.setOffset(nic_vec[ii]);
0185 capTemp.setTaskStatus(1) ;
0186
0187
0188
0189 dataset[ecid_vec[ ii] ] = capTemp;
0190 if(ii/100==0) cout<< "filling DB for "<<ii<<" count="<<count<<endl;
0191 count++;
0192 }
0193 }
0194
0195
0196
0197 cout << "Inserting dataset..." << flush;
0198 econn->insertDataArraySet(&dataset, &caliiov);
0199 cout << "Done." << endl;
0200
0201
0202 };
0203
0204
0205
0206
0207
0208
0209 template<class DATT, class IOVT>
0210 void testTable(DATT* data, IOVT* iov, EcalLogicID* ecid)
0211 {
0212 tablesTried++;
0213 try {
0214 cout << "Table " << tablesTried << "..." << flush;
0215 map<EcalLogicID, DATT> dataset;
0216 dataset[*ecid] = *data;
0217 econn->insertDataSet(&dataset, iov);
0218 cout << "write OK..." << flush;
0219 dataset.clear();
0220 econn->fetchDataSet(&dataset, iov);
0221 if (!dataset.size()) {
0222 throw(runtime_error("Zero rows read back"));
0223 }
0224 cout << "read OK" << endl;
0225 tablesOK++;
0226 } catch (runtime_error &e) {
0227 cout << "testTable FAILED: " << e.what() << endl;
0228 } catch (...) {
0229 cout << "testTable FAILED: unknown exception" << endl;
0230 }
0231 }
0232
0233
0234
0235
0236
0237
0238 void testAllTables()
0239 {
0240 cout << "Testing writing to all tables..." << endl;
0241 tablesTried = 0;
0242 tablesOK = 0;
0243
0244
0245 EcalLogicID logicID = econn->getEcalLogicID(-1);
0246
0247
0248 CaliIOV caliiov = this->makeCaliIOV();
0249
0250 CaliGeneralDat table01;
0251 testTable(&table01, &caliiov, &logicID);
0252
0253 CaliCrystalIntercalDat table02;
0254 testTable(&table02, &caliiov, &logicID);
0255
0256 CaliHVScanRatioDat table03;
0257 testTable(&table03, &caliiov, &logicID);
0258
0259 cout << "Test of writing to all tables complete" << endl;
0260 cout << tablesOK << " of " << tablesTried << " written to successfully" << endl << endl << endl;
0261 };
0262
0263
0264
0265 private:
0266 CondDBApp();
0267 EcalCondDBInterface* econn;
0268 uint64_t startmicros;
0269 uint64_t endmicros;
0270 run_t startrun;
0271 run_t endrun;
0272
0273 int tablesTried;
0274 int tablesOK;
0275
0276
0277
0278
0279 void printDataSet( const map<EcalLogicID, CaliCrystalIntercalDat>* dataset, int limit = 0 ) const
0280 {
0281 cout << "==========printDataSet()" << endl;
0282 if (dataset->size() == 0) {
0283 cout << "No data in map!" << endl;
0284 }
0285 EcalLogicID ecid;
0286 CaliCrystalIntercalDat crystalCal;;
0287
0288 int count = 0;
0289 typedef map< EcalLogicID, CaliCrystalIntercalDat >::const_iterator CI;
0290 for (CI p = dataset->begin(); p != dataset->end(); p++) {
0291 count++;
0292 if (limit && count > limit) { return; }
0293 ecid = p->first;
0294 crystalCal = p->second;
0295
0296 cout << "SM: " << ecid.getID1() << endl;
0297 cout << "Xtal: " << ecid.getID2() << endl;
0298 cout << "calibration: " << crystalCal.getCali() << endl;
0299 cout << "calibration rms: " << crystalCal.getCaliRMS() << endl;
0300 cout << "num events: " << crystalCal.getNumEvents() << endl;
0301 cout << "task status: " << crystalCal.getTaskStatus() << endl;
0302 cout << "========================" << endl;
0303 }
0304 cout << endl;
0305 }
0306
0307
0308
0309
0310
0311 void printTag( const CaliTag* tag) const
0312 {
0313 cout << endl;
0314 cout << "=============CaliTag:" << endl;
0315 cout << "GeneralTag: " << tag->getGeneralTag() << endl;
0316 cout << "Location: " << tag->getLocationDef().getLocation() << endl;
0317 cout << "Method: " << tag->getMethod() << endl;
0318 cout << "Version: " << tag->getVersion() << endl;
0319 cout << "Data Type: " << tag->getDataType() << endl;
0320 cout << "====================" << endl;
0321 }
0322
0323 void printIOV( const CaliIOV* iov) const
0324 {
0325 cout << endl;
0326 cout << "=============CaliIOV:" << endl;
0327 CaliTag tag = iov->getCaliTag();
0328 printTag(&tag);
0329 cout << "since: " << iov->getSince().str() << endl;
0330 cout << "till: " << iov->getTill().str() << endl;
0331 cout << "====================" << endl;
0332 }
0333 };
0334
0335
0336
0337 int main (int argc, char* argv[])
0338 {
0339 string host;
0340 string sid;
0341 string user;
0342 string pass;
0343 string filename;
0344
0345 if (argc != 6) {
0346 cout << "Usage:" << endl;
0347 cout << " " << argv[0] << " <host> <SID> <user> <pass> <filename>" << endl;
0348 exit(-1);
0349 }
0350
0351 host = argv[1];
0352 sid = argv[2];
0353 user = argv[3];
0354 pass = argv[4];
0355 filename = argv[5];
0356
0357 try {
0358 CondDBApp app(sid, user, pass);
0359
0360 app.testWrite(filename);
0361
0362 } catch (exception &e) {
0363 cout << "ERROR: " << e.what() << endl;
0364 } catch (...) {
0365 cout << "Unknown error caught" << endl;
0366 }
0367
0368 cout << "All Done." << endl;
0369
0370 return 0;
0371 }