40#include "TObjString.h"
63 for (
auto& calib : mCalibrators) {
65 calib.setUpdateAtTheEndOfRunOnly();
72 LOG(info) <<
"Update fake dead channels";
73 auto* fakeDead =
static_cast<std::vector<ColumnData>*
>(obj);
75 mFakeDead = *fakeDead;
87 if (mHasAlreadySent) {
91 updateTimeDependentParams(pc);
93 std::array<gsl::span<const ColumnData>, 2> calibData{pc.
inputs().
get<gsl::span<ColumnData>>(
"mid_noise"), pc.
inputs().
get<gsl::span<ColumnData>>(
"mid_dead")};
94 auto deadRof = pc.
inputs().
get<gsl::span<ROFRecord>>(
"mid_dead_rof");
96 mNCalibTriggers += deadRof.size();
98 for (
size_t idx = 0; idx < calibData.size(); ++idx) {
100 mCalibrators[idx].addTimeOrTriggers(timeOrTriggers[idx]);
101 mCalibrators[idx].process(calibData[idx]);
107 LOG(info) <<
"Ready to send data";
109 mHasAlreadySent =
true;
113 LOG(info) <<
"Run stop requested, finalizing";
115 mHasAlreadySent =
true;
122 if (mHasAlreadySent) {
125 LOG(info) <<
"EOS sent, finalizing";
130 std::array<ChannelCalibrator, 2> mCalibrators{};
131 std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
132 std::vector<ColumnData> mRefMasks{};
133 std::vector<ColumnData> mFakeDead{};
134 bool mHasAlreadySent =
false;
135 unsigned long int mNCalibTriggers = 0;
141 static bool initOnceDone =
false;
144 pc.
inputs().
get<std::vector<ColumnData>*>(
"mid_fake_dead");
150 for (
auto& calib : mCalibrators) {
156 std::vector<ColumnData> removeFakeDead(std::vector<ColumnData> dead)
158 ChannelMasksHandler fakeDeadHandler;
159 for (
auto&
col : mFakeDead) {
160 fakeDeadHandler.switchOffChannels(
col);
162 std::vector<ColumnData> realDead;
163 for (
auto&
col : dead) {
164 fakeDeadHandler.applyMask(
col);
165 if (!
col.isEmpty()) {
166 realDead.emplace_back(
col);
176 auto dead = removeFakeDead(mCalibrators[1].getBadChannels());
181 ChannelCalibratorFinalizer finalizer;
182 finalizer.setReferenceMasks(mRefMasks);
183 finalizer.process(mCalibrators[0].getBadChannels(), dead);
184 sendOutput(
output, finalizer.getBadChannels(), mCalibrators[1].getCurrentTFInfo(),
"MID/Calib/BadChannels", 0);
186 TObjString masks(finalizer.getMasksAsString().c_str());
187 sendOutput(
output, masks, mCalibrators[1].getCurrentTFInfo(),
"MID/Calib/ElectronicsMasks", 1);
191 for (
auto& calib : mCalibrators) {
196 template <
typename T>
200 std::map<std::string, std::string> md;
212 std::vector<of::InputSpec> inputSpecs;
218 auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(
true,
225 std::vector<of::OutputSpec> outputSpecs;
235 "MIDChannelCalibrator",
238 of::AlgorithmSpec{of::adaptFromTask<o2::mid::ChannelCalibratorDeviceDPL>(feeIdConfig, crateMasks, ccdbRequest)}};
MID noise and dead channels calibrator finalizer.
Noise and dead channels calibrator spec for MID.
MID noise and dead channels calibrator.
MID channels masks handler.
Converter from ColumnData to raw local boards.
Strip pattern (aka digits)
Utils and constants for calibration and related workflows.
Helper for geometry and GRP related CCDB requests.
Function to produce the MID masks.
void checkUpdates(o2::framework::ProcessingContext &pc)
bool finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
static GRPGeomHelper & instance()
void setRequest(std::shared_ptr< GRPGeomRequest > req)
static constexpr TFType INFINITE_TF
static std::unique_ptr< std::vector< char > > createObjectImage(const T *obj, CcdbObjectInfo *info=nullptr)
long getEndValidityTimestamp() const
const std::string & getPath() const
static constexpr long DAY
long getStartValidityTimestamp() const
const std::string & getFileName() const
static const ChannelCalibratorParam & Instance()
DataAllocator & outputs()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
TransitionHandlingState transitionState() const
void finaliseCCDB(o2::framework::ConcreteDataMatcher &matcher, void *obj)
void run(of::ProcessingContext &pc)
void endOfStream(of::EndOfStreamContext &ec)
ChannelCalibratorDeviceDPL(const FEEIdConfig &feeIdConfig, const CrateMasks &crateMasks, std::shared_ptr< o2::base::GRPGeomRequest > req)
void init(of::InitContext &ic)
GLsizei const GLchar *const * path
constexpr o2::header::DataOrigin gDataOriginMID
constexpr TFType INFINITE_TF
constexpr double LHCOrbitNS
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
std::vector< ColumnData > makeDefaultMasksFromCrateConfig(const FEEIdConfig &feeIdConfig=FEEIdConfig(), const CrateMasks &crateMasks=CrateMasks())
framework::DataProcessorSpec getChannelCalibratorSpec(const FEEIdConfig &feeIdConfig, const CrateMasks &crateMasks)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static void fillTFIDInfo(o2::framework::ProcessingContext &pc, o2::dataformats::TFIDInfo &ti)
static void prepareCCDBobjectInfo(T &obj, o2::ccdb::CcdbObjectInfo &info, const std::string &path, const std::map< std::string, std::string > &md, long start, long end=-1)
static constexpr o2::header::DataOrigin gDataOriginCDBWrapper
static constexpr o2::header::DataOrigin gDataOriginCDBPayload
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"