diff --git a/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/RunManager.h b/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/RunManager.h index 0d624ecd8b892..e0b204e6c4ce5 100644 --- a/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/RunManager.h +++ b/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/RunManager.h @@ -47,7 +47,7 @@ class CTPRunManager : public ctpCCDBManager CTPRunManager() = default; void init(); int loadRun(const std::string& cfg); - int startRun(const std::string& cfg); + int setRunConfigBK(uint32_t runNumber, const std::string& cfg); int stopRun(uint32_t irun, long timeStamp); int addScalers(uint32_t irun, std::time_t time, bool start = 0); int processMessage(std::string& topic, const std::string& message); diff --git a/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/ctpCCDBManager.h b/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/ctpCCDBManager.h index 5fb6d3678f0ba..c968a83183624 100644 --- a/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/ctpCCDBManager.h +++ b/Detectors/CTP/workflowScalers/include/CTPWorkflowScalers/ctpCCDBManager.h @@ -27,12 +27,11 @@ class ctpCCDBManager int saveRunScalersToCCDB(CTPRunScalers& scalers, long timeStart, long timeStop); int saveRunScalersToQCDB(CTPRunScalers& scalers, long timeStart, long timeStop); int saveRunConfigToCCDB(CTPConfiguration* cfg, long timeStart); + int saveSoxOrbit(uint32_t runNumber, uint32_t soxOrbit, long timeStart); + int saveOrbitReset(long timeStamp); static CTPConfiguration getConfigFromCCDB(long timestamp, std::string run, bool& ok); static CTPConfiguration getConfigFromCCDB(long timestamp, std::string run); CTPRunScalers getScalersFromCCDB(long timestamp, std::string, bool& ok); - void setCCDBPathConfig(std::string path) { mCCDBPathCTPConfig = path; }; - void setCCDBPathScalers(std::string path) { mCCDBPathCTPScalers = path; }; - void setQCDBPathScalers(std::string path) { mQCDBPathCTPScalers = path; }; static void setCCDBHost(std::string host) { mCCDBHost = host; }; static void setQCDBHost(std::string host) { mQCDBHost = host; }; @@ -42,9 +41,11 @@ class ctpCCDBManager // std::string mQCDBHost = "http://ali-qcdb.cern.ch:8083"; static std::string mCCDBHost; static std::string mQCDBHost; - std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; - std::string mCCDBPathCTPConfig = "CTP/Config/Config"; - std::string mQCDBPathCTPScalers = "qc/CTP/Scalers"; + const std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; + // std::string mCCDBPathCTPConfig = "CTP/Config/Config"; - in Configuration.h + const std::string mQCDBPathCTPScalers = "qc/CTP/Scalers"; + const std::string mCCDBPathSoxOrbit = "CTP/Calib/FirstRunOrbit"; + const std::string mCCDBPathOrbitReset = "CTP/Calib/OrbitReset"; ClassDefNV(ctpCCDBManager, 1); }; } // namespace ctp diff --git a/Detectors/CTP/workflowScalers/src/RunManager.cxx b/Detectors/CTP/workflowScalers/src/RunManager.cxx index e6861e6cb4b38..9af5b5e104120 100644 --- a/Detectors/CTP/workflowScalers/src/RunManager.cxx +++ b/Detectors/CTP/workflowScalers/src/RunManager.cxx @@ -57,7 +57,7 @@ int CTPActiveRun::send2BK(std::unique_ptr& BKClient, size_t ts, bool std::string clsname = cfg.getClassNameFromHWIndex(cls.first); // clsname = std::to_string(runOri) + "_" + clsname; try { - BKClient->triggerCounters()->createOrUpdateForRun(runNumber, clsname, ts, cntsbk[0], cntsbk[1], cntsbk[2], cntsbk[3], cntsbk[4], cntsbk[5]); + BKClient->ctpTriggerCounters()->createOrUpdateForRun(runNumber, clsname, ts, cntsbk[0], cntsbk[1], cntsbk[2], cntsbk[3], cntsbk[4], cntsbk[5]); } catch (std::runtime_error& error) { std::cerr << "An error occurred: " << error.what() << std::endl; return 1; @@ -124,8 +124,19 @@ int CTPRunManager::loadRun(const std::string& cfg) return 0; } -int CTPRunManager::startRun(const std::string& cfg) +int CTPRunManager::setRunConfigBK(uint32_t runNumber, const std::string& cfg) { + std::cout << "Printing cfg:" << cfg << std::endl; + if (mBKClient) { + try { + uint32_t runNumber = 1; + mBKClient->run()->setRawCtpTriggerConfiguration(runNumber, cfg); + } catch (std::runtime_error& error) { + std::cerr << "An error occurred: " << error.what() << std::endl; + return 1; + } + LOG(info) << "Run BK:" << runNumber << " CFG:" << cfg; + } return 0; } int CTPRunManager::stopRun(uint32_t irun, long timeStamp) @@ -221,6 +232,13 @@ int CTPRunManager::processMessage(std::string& topic, const std::string& message loadRun(message); return 0; } + if (topic.find("soxorbit") != std::string::npos) { + return 0; + } + if (topic.find("orbitreset") != std::string::npos) { + return 0; + } + static int nerror = 0; if (topic.find("sox") != std::string::npos) { // get config size_t irun = message.find("run"); @@ -230,17 +248,15 @@ int CTPRunManager::processMessage(std::string& topic, const std::string& message } LOG(info) << "SOX received, Run keyword position:" << irun; std::string cfg = message.substr(irun, message.size() - irun); - startRun(cfg); firstcounters = message.substr(0, irun); - } - if (topic.find("eox") != std::string::npos) { + } else if (topic.find("eox") != std::string::npos) { LOG(info) << "EOX received"; mEOX = 1; - } - static int nerror = 0; - if (topic == "rocnts") { - if (nerror < 1) { - LOG(warning) << "Skipping topic rocnts"; + } else if (topic.find("cnts") != std::string::npos) { + // just continue + } else { + if (nerror < 10) { + LOG(warning) << "Skipping topic:" << topic; nerror++; } return 0; @@ -293,6 +309,7 @@ int CTPRunManager::processMessage(std::string& topic, const std::string& message mActiveRunNumbers[i] = mCounters[i]; mActiveRuns[i] = run->second; mRunsLoaded.erase(run); + setRunConfigBK(mActiveRuns[i]->cfg.getRunNumber(), mActiveRuns[i]->cfg.getConfigString()); addScalers(i, tt, 1); saveRunScalersToQCDB(mActiveRuns[i]->scalers, tt * 1000, tt * 1000); } else { diff --git a/Detectors/CTP/workflowScalers/src/ctpCCDBManager.cxx b/Detectors/CTP/workflowScalers/src/ctpCCDBManager.cxx index 3484cb97279b5..0d81b896b3e91 100644 --- a/Detectors/CTP/workflowScalers/src/ctpCCDBManager.cxx +++ b/Detectors/CTP/workflowScalers/src/ctpCCDBManager.cxx @@ -107,6 +107,65 @@ int ctpCCDBManager::saveRunConfigToCCDB(CTPConfiguration* cfg, long timeStart) } return ret; } +int ctpCCDBManager::saveSoxOrbit(uint32_t runNumber, uint32_t soxOrbit, long timestamp) +{ + // data base + if (mCCDBHost == "none") { + LOG(info) << "SOX Orbit not written to CCDB none"; + return 0; + } + std::vector vect; + if (timestamp == 0) { + auto now = std::chrono::system_clock::now(); + timestamp = std::chrono::duration_cast(now.time_since_epoch()).count(); + } + vect.push_back(timestamp); + vect.push_back((uint64_t)runNumber); + vect.push_back((uint64_t)soxOrbit); + long tmin = timestamp; + long tmax = tmin + 381928219; + o2::ccdb::CcdbApi api; + map metadata; // can be empty + metadata["runNumber"] = std::to_string(runNumber); + api.init(mCCDBHost.c_str()); // or http://localhost:8080 for a local installation + + // store abitrary user object in strongly typed manner + int ret = api.storeAsTFileAny(&vect, mCCDBPathSoxOrbit, metadata, tmin, tmax); + if (ret == 0) { + LOG(info) << "SOX orbit saved in ccdb:" << mCCDBHost << " run:" << runNumber << " tmin:" << tmin << " tmax:" << tmax; + } else { + LOG(fatal) << "SOX orbit Problem writing to database ret:" << ret; + } + return 0; +} +int ctpCCDBManager::saveOrbitReset(long timeStamp) +{ + // data base + if (mCCDBHost == "none") { + LOG(info) << "Orbit Reset not written to CCDB none"; + return 0; + } + std::vector vect; + if (timeStamp == 0) { + auto now = std::chrono::system_clock::now(); + timeStamp = std::chrono::duration_cast(now.time_since_epoch()).count(); + } + vect.push_back(timeStamp); + long tmin = timeStamp; + long tmax = tmin + 381928219; + o2::ccdb::CcdbApi api; + map metadata; // can be empty + api.init(mCCDBHost.c_str()); // or http://localhost:8080 for a local installation + + // store abitrary user object in strongly typed manner + int ret = api.storeAsTFileAny(&vect, mCCDBPathOrbitReset, metadata, tmin, tmax); + if (ret == 0) { + LOG(info) << "Orbit reset saved in ccdb:" << mCCDBHost << " tmin:" << tmin << " tmax:" << tmax; + } else { + LOG(fatal) << "Orbit reset Problem writing to database ret:" << ret; + } + return 0; +} CTPConfiguration ctpCCDBManager::getConfigFromCCDB(long timestamp, std::string run, bool& ok) { auto& mgr = o2::ccdb::BasicCCDBManager::instance();