55 mMinDiff = ic.
options().
get<int64_t>(
"mid-merge-fet-bc-diff-min");
56 mMaxDiff = ic.
options().
get<int64_t>(
"mid-merge-fet-bc-diff-max");
61 std::array<gsl::span<const ColumnData>, 3>
data;
62 std::array<gsl::span<const ROFRecord>, 3> dataRof;
64 std::vector<of::InputSpec>
filter = {
70 auto const* dh = framework::DataRefUtils::getHeader<o2::header::DataHeader*>(inputRef);
71 auto subSpecIdx =
static_cast<size_t>(dh->subSpecification);
72 if (of::DataRefUtils::match(inputRef,
"mid_data")) {
73 data[subSpecIdx] = pc.
inputs().
get<gsl::span<o2::mid::ColumnData>>(inputRef);
74 }
else if (of::DataRefUtils::match(inputRef,
"mid_data_rof")) {
75 dataRof[subSpecIdx] = pc.
inputs().
get<gsl::span<o2::mid::ROFRecord>>(inputRef);
85 mNoise.insert(mNoise.end(),
data[0].begin(),
data[0].end());
86 mNoiseROF.insert(mNoiseROF.end(), dataRof[0].begin(), dataRof[0].end());
89 mNoise.insert(mNoise.end(),
data[1].begin(),
data[1].end());
90 mNoiseROF.insert(mNoiseROF.end(), dataRof[1].begin(), dataRof[1].end());
92 mergeChannels(
data[2], dataRof[2],
data[0], dataRof[0]);
103 std::vector<ColumnData> mNoise;
104 std::vector<ROFRecord> mNoiseROF;
105 std::vector<ColumnData> mDead;
106 std::vector<ROFRecord> mDeadROF;
107 int64_t mMinDiff = -1;
108 int64_t mMaxDiff = 1;
110 void mergeChannels(gsl::span<const ColumnData> fetData, gsl::span<const ROFRecord> fetDataRof, gsl::span<const ColumnData> selfTrigData, gsl::span<const ROFRecord> selfTrigDataRof)
116 ColumnDataHandler handler;
120 auto auxRofIt = selfTrigDataRof.begin();
122 for (
auto& rof : fetDataRof) {
124 auto eventFetData = fetData.subspan(rof.firstEntry, rof.nEntries);
125 handler.merge(eventFetData);
126 for (; auxRofIt != selfTrigDataRof.end(); ++auxRofIt) {
127 auto bcDiff = auxRofIt->interactionRecord.differenceInBC(rof.interactionRecord);
128 if (bcDiff > mMaxDiff) {
133 }
else if (bcDiff >= mMinDiff) {
135 auto auxFet = selfTrigData.subspan(auxRofIt->firstEntry, auxRofIt->nEntries);
136 handler.merge(auxFet);
140 mNoise.insert(mNoise.end(), selfTrigData.begin() + auxRofIt->firstEntry, selfTrigData.begin() + auxRofIt->getEndIndex());
141 mNoiseROF.emplace_back(*auxRofIt);
144 auto eventDeadChannels = mFetToDead.
process(handler.getMerged());
145 mDeadROF.emplace_back(rof.interactionRecord, rof.eventType, mDead.size(), eventDeadChannels.size());
146 mDead.insert(mDead.end(), eventDeadChannels.begin(), eventDeadChannels.end());
153 std::vector<of::InputSpec> inputSpecs;
157 std::vector<of::OutputSpec> outputSpecs;
167 of::AlgorithmSpec{of::adaptFromTask<o2::mid::CalibDataProcessorDPL>(feeIdConfig, crateMasks)},
169 {
"mid-merge-fet-bc-diff-min", of::VariantType::Int, -1, {
"Merge to FET if BC-BC_FET >= this value"}},
170 {
"mid-merge-fet-bc-diff-max", of::VariantType::Int, 1, {
"Merge to FET if BC-BC_FET <= this value"}}}};
Device to convert the calibration data into a list of bad channel candidates.
Strip pattern (aka digits)
Utils and constants for calibration and related workflows.
Class to convert the FEE test event into dead channels.
Function to produce the MID masks.
T get(const char *key) const
void snapshot(const Output &spec, T const &object)
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.
void run(of::ProcessingContext &pc)
void init(of::InitContext &ic)
CalibDataProcessorDPL(const FEEIdConfig &feeIdConfig, const CrateMasks &crateMasks)
std::vector< ColumnData > process(gsl::span< const ColumnData > fetData)
void setMasks(const std::vector< ColumnData > &masks)
Sets the masks.
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
constexpr o2::header::DataOrigin gDataOriginMID
Defining PrimaryVertex explicitly as messageable.
std::vector< ConfigParamSpec > Options
framework::DataProcessorSpec getCalibDataProcessorSpec(const FEEIdConfig &feeIdConfig, const CrateMasks &crateMasks)
std::vector< ColumnData > makeDefaultMasksFromCrateConfig(const FEEIdConfig &feeIdConfig=FEEIdConfig(), const CrateMasks &crateMasks=CrateMasks())
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...