Project
Loading...
Searching...
No Matches
FITDCSConfigProcessorSpec.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
16
17#ifndef O2_FIT_DCSCONFIGPROCESSORSPEC_H
18#define O2_FIT_DCSCONFIGPROCESSORSPEC_H
19
20#include "CCDB/CcdbApi.h"
24#include "Framework/Task.h"
26
27#include <chrono>
28#include <gsl/span>
29#include <memory>
30#include <string>
31#include <vector>
32
33using namespace o2::framework;
34
35namespace o2
36{
37namespace fit
38{
39
41{
42 public:
43 FITDCSConfigProcessor(const std::string& detectorName, const o2::header::DataDescription& dataDescriptionDChM)
44 : mDetectorName(detectorName),
45 mDataDescriptionDChM(dataDescriptionDChM) {} // TODO AM: how to pass dd
46
48 {
50 mDCSConfigReader->setFileNameDChM(ic.options().get<string>("filename-dchm"));
51 mDCSConfigReader->setValidDaysDChM(ic.options().get<uint>("valid-days-dchm"));
52 mDCSConfigReader->setCcdbPathDChM(mDetectorName + "/Calib/DeadChannelMap");
53 mVerbose = ic.options().get<bool>("use-verbose-mode");
54 mDCSConfigReader->setVerboseMode(mVerbose);
55 mValidateUpload = !ic.options().get<bool>("no-validate");
56 mDCSConfigReader->setValidateUploadMode(mValidateUpload);
57
58 LOG(info) << "Verbose mode: " << mVerbose;
59 LOG(info) << "Validate upload: " << mValidateUpload;
60 LOG(info) << "Expected dead channel map file name: " << mDCSConfigReader->getFileNameDChM();
61 LOG(info) << "Dead channel maps will be valid for " << mDCSConfigReader->getValidDaysDChM() << " days";
62 }
63
65 {
66 // Get the time of the data
67 auto timeNow = std::chrono::high_resolution_clock::now();
68 long dataTime = (long)(pc.services().get<o2::framework::TimingInfo>().creation);
69 if (dataTime == 0xffffffffffffffff) { // means it is not set
70 dataTime = std::chrono::duration_cast<std::chrono::milliseconds>(timeNow.time_since_epoch()).count(); // in ms
71 }
72
73 // Get the input file
74 gsl::span<const char> configBuf = pc.inputs().get<gsl::span<char>>("inputConfig");
75 std::string configFileName = pc.inputs().get<std::string>("inputConfigFileName");
76 LOG(info) << "Got input file " << configFileName << " of size " << configBuf.size();
77
78 if (!configFileName.compare(mDCSConfigReader->getFileNameDChM())) {
79 // Got dead channel map
80 processDChM(dataTime, configBuf);
81 sendDChMOutput(pc.outputs());
82 mDCSConfigReader->resetStartValidityDChM();
83 mDCSConfigReader->resetDChM();
84 } else {
85 LOG(error) << "Unknown input file: " << configFileName;
86 }
87 }
88
92
93 protected:
96 virtual void initDCSConfigReader()
97 {
98 mDCSConfigReader = std::make_unique<FITDCSConfigReader>(FITDCSConfigReader());
99 }
100
101 std::unique_ptr<FITDCSConfigReader> mDCSConfigReader;
102
103 private:
105 void processDChM(const long& dataTime, gsl::span<const char> configBuf)
106 {
107 if (!mDCSConfigReader->isStartValidityDChMSet()) {
108 if (mVerbose) {
109 LOG(info) << "Start validity for DCS data set to = " << dataTime;
110 }
111 mDCSConfigReader->setStartValidityDChM(dataTime);
112 }
113 mDCSConfigReader->processDChM(configBuf);
114 mDCSConfigReader->updateDChMCcdbObjectInfo();
115 }
116
118 void sendDChMOutput(o2::framework::DataAllocator& output)
119 {
120 const auto& payload = mDCSConfigReader->getDChM();
121 auto& info = mDCSConfigReader->getObjectInfoDChM();
122 auto image = o2::ccdb::CcdbApi::createObjectImage(&payload, &info);
123 LOG(info) << "Sending object " << info.getPath() << "/" << info.getFileName() << " of size " << image->size()
124 << " bytes, valid for " << info.getStartValidityTimestamp() << " : " << info.getEndValidityTimestamp();
125 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBPayload, mDataDescriptionDChM, 0}, *image.get());
126 output.snapshot(Output{o2::calibration::Utils::gDataOriginCDBWrapper, mDataDescriptionDChM, 0}, info);
127 }
128
129 std::string mDetectorName;
130 o2::header::DataDescription mDataDescriptionDChM;
131 bool mVerbose = false;
132 bool mValidateUpload = true;
133};
134
135} // namespace fit
136} // namespace o2
137
138#endif // O2_FIT_DCSCONFIGPROCESSORSPEC_H
Utils and constants for calibration and related workflows.
DCS configuration reader for FIT.
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
Definition CcdbApi.h:103
std::unique_ptr< FITDCSConfigReader > mDCSConfigReader
Reader for the DCS configurations.
void endOfStream(o2::framework::EndOfStreamContext &ec) final
This is invoked whenever we have an EndOfStream event.
FITDCSConfigProcessor(const std::string &detectorName, const o2::header::DataDescription &dataDescriptionDChM)
void init(o2::framework::InitContext &ic) final
void run(o2::framework::ProcessingContext &pc) final
GLeglImageOES image
Definition glcorearb.h:4021
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
TFitResultPtr fit(const size_t nBins, const T *arr, const T xMin, const T xMax, TF1 &func, std::string_view option="")
Definition fit.h:59
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
Definition Utils.h:44
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
Definition Utils.h:43
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"