33#include <unordered_map>
41using Duration = std::chrono::duration<double, std::ratio<1, 1>>;
48 mDPsUpdateInterval = ic.
options().
get<int64_t>(
"DPs-update-interval");
49 if (mDPsUpdateInterval == 0) {
50 LOG(error) <<
mDetectorName <<
" DPs update interval set to zero seconds --> changed to 10 min.";
51 mDPsUpdateInterval = 600;
54 std::vector<DPID> vect;
56 const bool useCcdbToConfigure = ic.
options().
get<
bool>(
"use-ccdb-to-configure");
57 if (useCcdbToConfigure) {
58 LOG(info) <<
"Configuring via CCDB";
62 long timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
63 std::unordered_map<DPID, std::string>* dpid2DataDesc = mgr.getForTimeStamp<std::unordered_map<DPID, std::string>>(
mDetectorName +
"/Config/DCSDPconfig", timestamp);
64 for (
auto&
i : *dpid2DataDesc) {
65 vect.push_back(
i.first);
68 LOG(info) <<
"Configuring via hardcoded strings";
74 for (
auto&
i : vect) {
79 mDataReader = std::make_unique<o2::fit::FITDCSDataReader>();
82 mDataReader->init(vect);
83 mTimer = HighResClock::now();
88 auto timeNow = HighResClock::now();
91 if (dataTime == 0xffffffffffffffff) {
92 dataTime = std::chrono::duration_cast<std::chrono::milliseconds>(timeNow.time_since_epoch()).count();
95 if (!mDataReader->isStartValiditySet()) {
97 LOG(info) <<
"Start valitidy for DPs changed to = " << dataTime;
99 mDataReader->setStartValidity(dataTime);
101 auto dps = pc.
inputs().
get<gsl::span<DPCOM>>(
"input");
102 mDataReader->process(dps);
103 Duration elapsedTime = timeNow - mTimer;
104 if (elapsedTime.count() >= mDPsUpdateInterval) {
122 mDataReader->updateCcdbObjectInfo();
123 const auto& payload = mDataReader->getDpData();
124 auto& info = mDataReader->getccdbDPsInfo();
126 LOG(info) <<
"Sending object " << info.getPath() <<
"/" << info.getFileName() <<
" of size " <<
image->size()
127 <<
" bytes, valid for " << info.getStartValidityTimestamp() <<
" : " << info.getEndValidityTimestamp();
130 mDataReader->resetDpData();
131 mDataReader->resetStartValidity();
Utils and constants for calibration and related workflows.
std::chrono::duration< double, std::ratio< 1, 1 > > Duration
std::chrono::high_resolution_clock HighResClock
Task for processing FIT DCS data.
DCS data point reader for FIT.
std::string ccdbPath(const std::string badChannelType)
static BasicCCDBManager & instance()
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
virtual std::vector< o2::dcs::DataPointIdentifier > getHardCodedDPIDs()=0
std::string mDetectorName
Detector name.
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
bool mVerbose
Verbose mode.
void setVerboseMode(bool verboseMode=true)
void run(o2::framework::ProcessingContext &pc) final
bool getVerboseMode() const
const std::string & getDetectorName() const
void init(o2::framework::InitContext &ic) final
T get(const char *key) const
DataAllocator & outputs()
ConfigParamRegistry const & options()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
ServiceRegistryRef services()
The services registry associated with this processing context.
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"