Skip to content

Commit ddb531b

Browse files
dstoccoaphecetche
authored andcommitted
Write MID masks to file in the format expected from DCS
1 parent eca32ff commit ddb531b

4 files changed

Lines changed: 48 additions & 69 deletions

File tree

Detectors/MUON/MID/Filtering/exe/mask-maker.cxx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,13 @@
2929
#include "MIDRaw/ColumnDataToLocalBoard.h"
3030
#include "MIDFiltering/ChannelMasksHandler.h"
3131
#include "MIDFiltering/ChannelScalers.h"
32+
#include "MIDFiltering/ColumnDataMaskToROMask.h"
3233
#include "MIDFiltering/FetToDead.h"
3334
#include "MIDFiltering/MaskMaker.h"
3435

3536
namespace po = boost::program_options;
3637

37-
bool processScalers(const o2::mid::ChannelScalers& scalers, unsigned long nEvents, double threshold, const std::vector<o2::mid::ColumnData>& refMasks)
38+
bool processScalers(const o2::mid::ChannelScalers& scalers, unsigned long nEvents, double threshold, const std::vector<o2::mid::ColumnData>& refMasks, const char* outFilename)
3839
{
3940
auto masks = o2::mid::makeMasks(scalers, nEvents, threshold, refMasks);
4041
if (masks.empty()) {
@@ -47,15 +48,17 @@ bool processScalers(const o2::mid::ChannelScalers& scalers, unsigned long nEvent
4748
std::cout << mask << std::endl;
4849
}
4950

51+
o2::mid::ColumnDataMaskToROMask colMasksToRO;
52+
o2::mid::ChannelMasksHandler masksHandler;
53+
masksHandler.setFromChannelMasks(masks);
54+
5055
std::cout << "\nCorresponding boards masks:" << std::endl;
51-
o2::mid::ColumnDataToLocalBoard colToBoard;
52-
colToBoard.setDebugMode(true);
53-
colToBoard.process(masks);
54-
for (auto& mapIt : colToBoard.getData()) {
55-
for (auto& board : mapIt.second) {
56-
std::cout << board << std::endl;
57-
}
56+
auto roMasks = colMasksToRO.convert(masks);
57+
for (auto& board : roMasks) {
58+
std::cout << board << std::endl;
5859
}
60+
std::cout << "\nMask file produced: " << outFilename << std::endl;
61+
colMasksToRO.write(masksHandler.getMasksFull(o2::mid::makeDefaultMasks()), outFilename);
5962
return false;
6063
}
6164

@@ -154,7 +157,7 @@ int main(int argc, char* argv[])
154157

155158
bool isOk = true;
156159
std::cout << "\nCHECKING NOISY CHANNELS:" << std::endl;
157-
isOk &= processScalers(scalers[0], nEvents, threshold, refMasks);
160+
isOk &= processScalers(scalers[0], nEvents, threshold, refMasks, "calib_mask.txt");
158161

159162
o2::mid::FetToDead fetToDead;
160163
fetToDead.setMasks(refMasks);
@@ -169,7 +172,7 @@ int main(int argc, char* argv[])
169172
}
170173
}
171174
std::cout << "\nCHECKING DEAD CHANNELS:" << std::endl;
172-
isOk &= processScalers(scalers[1], nEvents, threshold, refMasks);
175+
isOk &= processScalers(scalers[1], nEvents, threshold, refMasks, "FEE_mask.txt");
173176

174177
return isOk ? 0 : 1;
175178
}

Detectors/MUON/MID/Filtering/include/MIDFiltering/ChannelMasksHandler.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,17 @@ class ChannelMasksHandler
3333
void switchOffChannels(const ColumnData& dead);
3434
bool setFromChannelMask(const ColumnData& mask);
3535
bool setFromChannelMasks(const std::vector<ColumnData>& masks);
36-
// void setReferenceMasks(const std::vector<ColumnData>& masks);
3736
bool applyMask(ColumnData& data) const;
3837

3938
std::vector<ColumnData> getMasks() const;
40-
std::vector<ColumnData> getReferenceMasks() const;
39+
std::vector<ColumnData> getMasksFull(std::vector<ColumnData> referenceMask) const;
4140

4241
/// Comparison operator
4342
bool operator==(const ChannelMasksHandler& right) const { return mMasks == right.mMasks; }
4443

4544
private:
4645
ColumnData& getMask(uint8_t deId, uint8_t columnId);
4746
std::unordered_map<uint16_t, ColumnData> mMasks{}; // Channel masks
48-
// std::unordered_map<uint16_t, ColumnData> mReferenceMasks{}; // Channel masks reference
4947
};
5048

5149
} // namespace mid

Detectors/MUON/MID/Filtering/src/ChannelMasksHandler.cxx

Lines changed: 9 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ ColumnData& ChannelMasksHandler::getMask(uint8_t deId, uint8_t columnId)
3232
newMask.columnId = columnId;
3333
newMask.patterns.fill(0xFFFF);
3434
return newMask;
35-
36-
// newMask = mReferenceMasks[uniqueId];
37-
// return newMask;
3835
}
3936
return maskIt->second;
4037
}
@@ -90,24 +87,20 @@ std::vector<ColumnData> ChannelMasksHandler::getMasks() const
9087
return masks;
9188
}
9289

93-
// std::vector<ColumnData> ChannelMasksHandler::getReferenceMasks() const
94-
// {
95-
// /// Gets the masks
96-
// std::vector<ColumnData> masks;
97-
// for (auto& maskIt : mReferenceMasks) {
98-
// masks.emplace_back(maskIt.second);
99-
// }
100-
// return masks;
101-
// }
90+
std::vector<ColumnData> ChannelMasksHandler::getMasksFull(std::vector<ColumnData> referenceMask) const
91+
{
92+
/// Returns the computed masks merged with the reference masks,
93+
/// which are the masks for non-existent channels
94+
for (auto& mask : referenceMask) {
95+
applyMask(mask);
96+
}
97+
return referenceMask;
98+
}
10299

103100
bool ChannelMasksHandler::setFromChannelMask(const ColumnData& mask)
104101
{
105102
/// Sets the mask from a channel mask
106103
auto uniqueColumnId = getColumnDataUniqueId(mask.deId, mask.columnId);
107-
// auto ref = mReferenceMasks.find(uniqueColumnId);
108-
// if (mask == ref->second) {
109-
// return false;
110-
// }
111104
mMasks[uniqueColumnId] = mask;
112105
return true;
113106
}
@@ -121,35 +114,5 @@ bool ChannelMasksHandler::setFromChannelMasks(const std::vector<ColumnData>& mas
121114
}
122115
return isDone;
123116
}
124-
125-
// void ChannelMasksHandler::setReferenceMasks(const std::vector<ColumnData>& masks)
126-
// {
127-
// /// Sets the reference mask
128-
// for (auto& mask : masks) {
129-
// mReferenceMasks[getColumnDataUniqueId(mask.deId, mask.columnId)] = mask;
130-
// }
131-
// }
132-
133-
// ChannelMasksHandler buildDefaultChannelMasksHandler()
134-
// {
135-
// /// Builds the default channel mask
136-
// Mapping mapping;
137-
// ChannelMasksHandler ChannelMasksHandler;
138-
// for (int ide = 0; ide < detparams::NDetectionElements; ++ide) {
139-
// for (int icol = mapping.getFirstColumn(ide); icol < 7; ++icol) {
140-
// ColumnData mask;
141-
// mask.deId = ide;
142-
// mask.columnId = icol;
143-
// for (int iline = mapping.getFirstBoardBP(icol, ide); iline <= mapping.getLastBoardBP(icol, ide); ++iline) {
144-
// mask.setBendPattern(0xFFFF, iline);
145-
// }
146-
// for (int istrip = 0; istrip < mapping.getNStripsNBP(icol, ide); ++istrip) {
147-
// mask.addStrip(istrip, 1, 0);
148-
// }
149-
// ChannelMasksHandler.setFromChannelMasksHandler(mask);
150-
// }
151-
// }
152-
// return ChannelMasksHandler;
153-
// }
154117
} // namespace mid
155118
} // namespace o2

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

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <array>
2020
#include <vector>
21+
#include <map>
2122
#include <chrono>
2223
#include <gsl/gsl>
2324
#include "Framework/ConfigParamRegistry.h"
@@ -27,8 +28,9 @@
2728
#include "Framework/Task.h"
2829
#include "DataFormatsMID/ColumnData.h"
2930
#include "DataFormatsMID/ROFRecord.h"
30-
#include "MIDRaw/ColumnDataToLocalBoard.h"
3131
#include "MIDFiltering/ChannelMasksHandler.h"
32+
#include "MIDFiltering/ColumnDataMaskToROMask.h"
33+
#include "MIDFiltering/MaskMaker.h"
3234

3335
namespace of = o2::framework;
3436

@@ -43,6 +45,8 @@ class MaskHandlerDeviceDPL
4345
void init(o2::framework::InitContext& ic)
4446
{
4547

48+
mOutFilename = ic.options().get<std::string>("mid-mask-outfile");
49+
4650
auto stop = [this]() {
4751
printSummary();
4852
};
@@ -52,8 +56,7 @@ class MaskHandlerDeviceDPL
5256
void printSummary()
5357
{
5458
std::string name = "calib";
55-
o2::mid::ColumnDataToLocalBoard colToBoard;
56-
colToBoard.setDebugMode(true);
59+
o2::mid::ColumnDataMaskToROMask colMasksToRO;
5760

5861
for (auto& masks : mMasksHandlers) {
5962
auto maskVec = masks.getMasks();
@@ -65,18 +68,27 @@ class MaskHandlerDeviceDPL
6568
LOG(INFO) << mask;
6669
}
6770
std::cout << "\nCorresponding boards masks:" << std::endl;
68-
colToBoard.process(maskVec);
69-
for (auto& mapIt : colToBoard.getData()) {
70-
for (auto& board : mapIt.second) {
71-
std::cout << board << std::endl;
72-
}
71+
auto roMasks = colMasksToRO.convert(maskVec);
72+
for (auto& board : roMasks) {
73+
std::cout << board << std::endl;
7374
}
7475
}
76+
77+
if (!mOutFilename.empty()) {
78+
auto idx = mOutFilename.find_last_of("/");
79+
auto insertIdx = (idx == std::string::npos) ? 0 : idx + 1;
80+
std::string outFilename = mOutFilename;
81+
outFilename.insert(insertIdx, "_");
82+
outFilename.insert(insertIdx, name.c_str());
83+
colMasksToRO.write(masks.getMasksFull(o2::mid::makeDefaultMasks()), outFilename.c_str());
84+
}
85+
7586
name = "FET";
7687
}
7788
}
7889

79-
void run(o2::framework::ProcessingContext& pc)
90+
void
91+
run(o2::framework::ProcessingContext& pc)
8092
{
8193
auto tStart = std::chrono::high_resolution_clock::now();
8294

@@ -112,6 +124,7 @@ class MaskHandlerDeviceDPL
112124
std::array<ChannelMasksHandler, 2> mMasksHandlers{}; ///< Output masks
113125
std::chrono::duration<double> mTimer{0}; ///< full timer
114126
std::chrono::duration<double> mTimerMaskHandler{0}; ///< mask handler timer
127+
std::string mOutFilename{}; ///< output filename
115128
};
116129

117130
framework::DataProcessorSpec getMaskHandlerSpec()
@@ -124,7 +137,9 @@ framework::DataProcessorSpec getMaskHandlerSpec()
124137
"MIDMaskHandler",
125138
{inputSpecs},
126139
{},
127-
of::AlgorithmSpec{of::adaptFromTask<o2::mid::MaskHandlerDeviceDPL>()}};
140+
of::AlgorithmSpec{of::adaptFromTask<o2::mid::MaskHandlerDeviceDPL>()},
141+
of::Options{
142+
{"mid-mask-outfile", of::VariantType::String, "", {"Output filename"}}}};
128143
}
129144
} // namespace mid
130145
} // namespace o2

0 commit comments

Comments
 (0)