Skip to content

Commit 2e4cdbc

Browse files
dstoccoalcaliva
authored andcommitted
Take MID fake dead channels into account when building the masks
1 parent e175df4 commit 2e4cdbc

File tree

1 file changed

+48
-8
lines changed

1 file changed

+48
-8
lines changed

Detectors/MUON/MID/Workflow/src/ChannelCalibratorSpec.cxx

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,11 @@
1919
#include <array>
2020
#include <vector>
2121
#include <gsl/gsl>
22-
#include "Framework/ConfigParamRegistry.h"
23-
#include "Framework/ControlService.h"
24-
#include "Framework/DataRefUtils.h"
2522
#include "Framework/DeviceStateEnums.h"
26-
#include "Framework/InputRecordWalker.h"
2723
#include "Framework/InputSpec.h"
2824
#include "Framework/Logger.h"
2925
#include "Framework/Task.h"
26+
#include "Framework/CCDBParamSpec.h"
3027
#include "DetectorsCalibration/Utils.h"
3128
#include "CCDB/CcdbObjectInfo.h"
3229
#include "DataFormatsMID/ColumnData.h"
@@ -71,15 +68,27 @@ class ChannelCalibratorDeviceDPL
7168

7269
void finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj)
7370
{
74-
o2::base::GRPGeomHelper::instance().finaliseCCDB(matcher, obj);
71+
if (matcher == of::ConcreteDataMatcher(header::gDataOriginMID, "FAKE_DEAD", 0)) {
72+
LOG(info) << "Update fake dead channels";
73+
auto* fakeDead = static_cast<std::vector<ColumnData>*>(obj);
74+
if (fakeDead) {
75+
mFakeDead = *fakeDead;
76+
}
77+
return;
78+
}
79+
80+
if (o2::base::GRPGeomHelper::instance().finaliseCCDB(matcher, obj)) {
81+
return;
82+
}
7583
}
7684

7785
void run(of::ProcessingContext& pc)
7886
{
7987
if (mHasAlreadySent) {
8088
return;
8189
}
82-
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
90+
91+
updateTimeDependentParams(pc);
8392

8493
std::array<gsl::span<const ColumnData>, 2> calibData{pc.inputs().get<gsl::span<ColumnData>>("mid_noise"), pc.inputs().get<gsl::span<ColumnData>>("mid_dead")};
8594
auto deadRof = pc.inputs().get<gsl::span<ROFRecord>>("mid_dead_rof");
@@ -121,9 +130,21 @@ class ChannelCalibratorDeviceDPL
121130
std::array<ChannelCalibrator, 2> mCalibrators{}; ///! Channels calibrators
122131
std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest; ///! CCDB request
123132
std::vector<ColumnData> mRefMasks{}; ///! Reference masks
133+
std::vector<ColumnData> mFakeDead{}; ///! Fake dead channels
124134
bool mHasAlreadySent = false; ///! Flag that the object was already sent
125135
unsigned long int mNCalibTriggers = 0; ///! Number of calibration triggers since last send
126136

137+
void updateTimeDependentParams(o2::framework::ProcessingContext& pc)
138+
{
139+
// Triggers finalizeCCDB
140+
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
141+
static bool initOnceDone = false;
142+
if (!initOnceDone) {
143+
initOnceDone = true;
144+
pc.inputs().get<std::vector<ColumnData>*>("mid_fake_dead");
145+
}
146+
}
147+
127148
void finalise(of::DataAllocator& output)
128149
{
129150
for (auto& calib : mCalibrators) {
@@ -132,16 +153,34 @@ class ChannelCalibratorDeviceDPL
132153
sendOutput(output);
133154
}
134155

156+
std::vector<ColumnData> removeFakeDead(std::vector<ColumnData> dead)
157+
{
158+
ChannelMasksHandler fakeDeadHandler;
159+
for (auto& col : mFakeDead) {
160+
fakeDeadHandler.switchOffChannels(col);
161+
}
162+
std::vector<ColumnData> realDead;
163+
for (auto& col : dead) {
164+
fakeDeadHandler.applyMask(col);
165+
if (!col.isEmpty()) {
166+
realDead.emplace_back(col);
167+
}
168+
}
169+
return realDead;
170+
}
171+
135172
void sendOutput(of::DataAllocator& output)
136173
{
137174
// extract CCDB infos and calibration objects, convert it to TMemFile and send them to the output
138175

176+
auto dead = removeFakeDead(mCalibrators[1].getBadChannels());
177+
139178
output.snapshot(of::Output{header::gDataOriginMID, "NOISY_CHANNELS", 0}, mCalibrators[0].getBadChannels());
140-
output.snapshot(of::Output{header::gDataOriginMID, "DEAD_CHANNELS", 0}, mCalibrators[1].getBadChannels());
179+
output.snapshot(of::Output{header::gDataOriginMID, "DEAD_CHANNELS", 0}, dead);
141180

142181
ChannelCalibratorFinalizer finalizer;
143182
finalizer.setReferenceMasks(mRefMasks);
144-
finalizer.process(mCalibrators[0].getBadChannels(), mCalibrators[1].getBadChannels());
183+
finalizer.process(mCalibrators[0].getBadChannels(), dead);
145184
sendOutput(output, finalizer.getBadChannels(), mCalibrators[1].getCurrentTFInfo(), "MID/Calib/BadChannels", 0);
146185

147186
TObjString masks(finalizer.getMasksAsString().c_str());
@@ -175,6 +214,7 @@ of::DataProcessorSpec getChannelCalibratorSpec(const FEEIdConfig& feeIdConfig, c
175214
inputSpecs.emplace_back("mid_noise_rof", header::gDataOriginMID, "NOISEROF");
176215
inputSpecs.emplace_back("mid_dead", header::gDataOriginMID, "DEAD");
177216
inputSpecs.emplace_back("mid_dead_rof", header::gDataOriginMID, "DEADROF");
217+
inputSpecs.emplace_back("mid_fake_dead", header::gDataOriginMID, "FAKE_DEAD", 0, of::Lifetime::Condition, of::ccdbParamSpec("MID/Calib/FakeDeadChannels"));
178218
auto ccdbRequest = std::make_shared<o2::base::GRPGeomRequest>(true, // orbitResetTime
179219
true, // GRPECS=true
180220
false, // GRPLHCIF

0 commit comments

Comments
 (0)