/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
OnlineDB/EcalCondDB/test/TestRunConfig.cpp
226 строк
5 KB
Giulio Eulisse
Snapshot of CMSSW_6_2_0_pre8.
26 июн 2013, 18:12
26 июн 2013, 18:12
214ab73
Код
Авторство
О чём код?
#include <iostream> #include <string> #include <vector> #include <time.h> #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h" #include "OnlineDB/EcalCondDB/interface/all_monitoring_types.h" #include "OnlineDB/EcalCondDB/interface/all_od_types.h" using namespace std; class CondDBApp { public: /** * App constructor; Makes the database connection */ CondDBApp(string host, string sid, string user, string pass) { try { cout << "Making connection..." << flush; econn = new EcalCondDBInterface( sid, user, pass ); cout << "Done." << endl; } catch (runtime_error &e) { cerr << e.what() << endl; exit(-1); } locations[0] = "H4"; locations[1] = "867-1"; locations[2] = "867-2"; locations[3] = "867-3"; } /** * App destructor; Cleans up database connection */ ~CondDBApp() { delete econn; } RunIOV makeRunIOV(int run_num) { // The objects necessary to identify a dataset LocationDef locdef; RunTypeDef rundef; RunTag runtag; locdef.setLocation("P5_Co"); rundef.setRunType("COSMIC"); runtag.setLocationDef(locdef); runtag.setRunTypeDef(rundef); runtag.setGeneralTag("GLOBAL"); // Our beginning time will be the current GMT time // This is the time zone that should be written to the DB! // (Actually UTC) Tm startTm; startTm.setToCurrentGMTime(); uint64_t microseconds = startTm.microsTime(); startTm.setToMicrosTime(microseconds); // Our beginning run number will be the seconds representation // of that time, and we will increment our IoV based on // a microsecond representation cout << "Run Time: " << startTm.str() << endl; cout << "Run Number: " << run_num << endl; // Set the properties of the iov RunIOV runiov; runiov.setRunNumber(run_num); runiov.setRunStart(startTm); runiov.setRunTag(runtag); return runiov; } /** * Write MonPedestalsDat objects with associated RunTag and RunIOVs * IOVs are written using automatic updating of the 'RunEnd', as if * the time of the end of the run was not known at the time of writing. */ void testWrite(int run_num, string config_tag) { cout << "Writing to database..." << endl; RunIOV runiov = this->makeRunIOV(run_num); RunTag runtag = runiov.getRunTag(); run_t run = runiov.getRunNumber(); // write to the DB cout << "Inserting run..." << flush; econn->insertRunIOV(&runiov); cout << "Done." << endl; printIOV(&runiov); int c = 1; EcalLogicID ecid; ecid = econn->getEcalLogicID("ECAL"); // recuperare last version !!! FEConfigMainInfo cfg_info; cfg_info.setConfigTag(config_tag); econn->fetchConfigSet(&cfg_info); int iversion= cfg_info.getVersion(); // Set the data RunTPGConfigDat cfgdat; map<EcalLogicID, RunTPGConfigDat> dataset; cfgdat.setConfigTag(config_tag); cfgdat.setVersion(iversion); // Fill the dataset dataset[ecid] = cfgdat; // Insert the dataset, identifying by iov cout << "Inserting dataset..." << flush; econn->insertDataSet(&dataset, &runiov); cout << "Done." << endl; cout << "Done." << endl << endl << endl; }; private: CondDBApp(); // hidden default constructor EcalCondDBInterface* econn; string locations[4]; uint64_t startmicros; uint64_t endmicros; run_t startrun; run_t endrun; int tablesTried; int tablesOK; /** * Iterate through the dataset and print some data */ /** * Print out a RunTag */ void printTag( const RunTag* tag) const { cout << endl; cout << "=============RunTag:" << endl; cout << "GeneralTag: " << tag->getGeneralTag() << endl; cout << "Location: " << tag->getLocationDef().getLocation() << endl; cout << "Run Type: " << tag->getRunTypeDef().getRunType() << endl; cout << "====================" << endl; } void printIOV( const RunIOV* iov) const { cout << endl; cout << "=============RunIOV:" << endl; RunTag tag = iov->getRunTag(); printTag(&tag); cout << "Run Number: " << iov->getRunNumber() << endl; cout << "Run Start: " << iov->getRunStart().str() << endl; cout << "Run End: " << iov->getRunEnd().str() << endl; cout << "====================" << endl; } }; int main (int argc, char* argv[]) { string host; string sid; string user; string pass; int run_num; string config_tag; if (argc != 7) { cout << "Usage:" << endl; cout << " " << argv[0] << " <host> <SID> <user> <pass> <run_num> <config_tag>" << endl; exit(-1); } host = argv[1]; sid = argv[2]; user = argv[3]; pass = argv[4]; run_num = atoi(argv[5]); config_tag = argv[6]; try { CondDBApp app(host, sid, user, pass); app.testWrite(run_num, config_tag); } catch (exception &e) { cout << "ERROR: " << e.what() << endl; } catch (...) { cout << "Unknown error caught" << endl; } cout << "All Done." << endl; return 0; }