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;
65 data[subSpec] = pc.
inputs().
get<gsl::span<o2::mid::ColumnData>>(fmt::format(
"mid_data_{}", subSpec));
66 dataRof[subSpec] = pc.
inputs().
get<gsl::span<o2::mid::ROFRecord>>(fmt::format(
"mid_data_rof_{}", subSpec));
75 mNoise.insert(mNoise.end(),
data[0].begin(),
data[0].end());
76 mNoiseROF.insert(mNoiseROF.end(), dataRof[0].begin(), dataRof[0].end());
79 mNoise.insert(mNoise.end(),
data[1].begin(),
data[1].end());
80 mNoiseROF.insert(mNoiseROF.end(), dataRof[1].begin(), dataRof[1].end());
82 mergeChannels(
data[2], dataRof[2],
data[0], dataRof[0]);
93 std::vector<ColumnData> mNoise;
94 std::vector<ROFRecord> mNoiseROF;
95 std::vector<ColumnData> mDead;
96 std::vector<ROFRecord> mDeadROF;
97 int64_t mMinDiff = -1;
100 void mergeChannels(gsl::span<const ColumnData> fetData, gsl::span<const ROFRecord> fetDataRof, gsl::span<const ColumnData> selfTrigData, gsl::span<const ROFRecord> selfTrigDataRof)
106 ColumnDataHandler handler;
110 auto auxRofIt = selfTrigDataRof.begin();
112 for (
auto& rof : fetDataRof) {
114 auto eventFetData = fetData.subspan(rof.firstEntry, rof.nEntries);
115 handler.merge(eventFetData);
116 for (; auxRofIt != selfTrigDataRof.end(); ++auxRofIt) {
117 auto bcDiff = auxRofIt->interactionRecord.differenceInBC(rof.interactionRecord);
118 if (bcDiff > mMaxDiff) {
123 }
else if (bcDiff >= mMinDiff) {
125 auto auxFet = selfTrigData.subspan(auxRofIt->firstEntry, auxRofIt->nEntries);
126 handler.merge(auxFet);
130 mNoise.insert(mNoise.end(), selfTrigData.begin() + auxRofIt->firstEntry, selfTrigData.begin() + auxRofIt->getEndIndex());
131 mNoiseROF.emplace_back(*auxRofIt);
134 auto eventDeadChannels = mFetToDead.
process(handler.getMerged());
135 mDeadROF.emplace_back(rof.interactionRecord, rof.eventType, mDead.size(), eventDeadChannels.size());
136 mDead.insert(mDead.end(), eventDeadChannels.begin(), eventDeadChannels.end());
143 std::vector<of::InputSpec> inputSpecs;
145 inputSpecs.emplace_back(fmt::format(
"mid_data_{}", subSpec),
header::gDataOriginMID,
"DATA", subSpec, of::Lifetime::Timeframe);
146 inputSpecs.emplace_back(fmt::format(
"mid_data_rof_{}", subSpec),
header::gDataOriginMID,
"DATAROF", subSpec, of::Lifetime::Timeframe);
149 std::vector<of::OutputSpec> outputSpecs;
159 of::AlgorithmSpec{of::adaptFromTask<o2::mid::CalibDataProcessorDPL>(feeIdConfig, crateMasks)},
161 {
"mid-merge-fet-bc-diff-min", of::VariantType::Int, -1, {
"Merge to FET if BC-BC_FET >= this value"}},
162 {
"mid-merge-fet-bc-diff-max", of::VariantType::Int, 1, {
"Merge to FET if BC-BC_FET <= this value"}}}};
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.