17#define BOOST_TEST_MODULE midFiltering
18#define BOOST_TEST_DYN_LINK
19#include <boost/test/unit_test.hpp>
21#include <boost/test/data/test_case.hpp>
42 std::random_device
rd;
43 std::mt19937
mt(
rd());
44 std::uniform_int_distribution<uint8_t> deIds(0, 71);
45 std::uniform_int_distribution<uint8_t> colIds(0, 6);
46 std::uniform_int_distribution<uint16_t> patterns(0, 0xFFFF);
48 std::vector<ColumnData>
data;
49 for (
size_t idata = 0; idata < nData; ++idata) {
52 col.columnId = colIds(
mt);
53 for (
int iline = 0; iline < 4; ++iline) {
54 col.setBendPattern(patterns(
mt), iline);
56 col.setNonBendPattern(patterns(
mt));
71 auto maskVec = masksHandler.
getMasks();
73 for (
auto mask : maskVec) {
74 for (
int iline = 0; iline < 4; ++iline) {
92 BOOST_REQUIRE(sc1.size() == 1);
93 for (
auto& sc : sc1) {
108 BOOST_REQUIRE(sc2.size() == 1);
109 for (
auto& sc : sc2) {
122 std::vector<ColumnData> refMasks{};
126 auto masks =
makeMasks(cs, 1, 0., refMasks);
128 for (
auto&
mask : masks) {
129 for (
int iline = 0; iline < 4; ++iline) {
130 BOOST_TEST(
mask.getBendPattern(iline) ==
static_cast<uint16_t
>(~
col.getBendPattern(iline)));
132 BOOST_TEST(
mask.getNonBendPattern() ==
static_cast<uint16_t
>(~
col.getNonBendPattern()));
145 uint16_t fullPattern = 0xFFFF;
146 for (
auto&
col : fets) {
147 if (
col.deId == 3 &&
col.columnId == 0) {
148 col.setBendPattern(fullPattern & ~0x1, 0);
149 col.setBendPattern(fullPattern, 1);
150 col.setBendPattern(fullPattern, 2);
152 col.setBendPattern(fullPattern & ~0x1, 3);
153 col.setNonBendPattern(fullPattern);
158 auto inverted = fetToDead.
process(fets);
163 BOOST_TEST(inverted.back().getBendPattern(0) == 1);
164 BOOST_TEST(inverted.back().getBendPattern(1) == 0);
165 BOOST_TEST(inverted.back().getBendPattern(2) == 0);
168 BOOST_TEST(inverted.back().getBendPattern(3) == 0);
169 BOOST_TEST(inverted.back().getNonBendPattern() == 0);
181 bcFill.
setBC(collBC1);
182 bcFill.
setBC(collBC2);
187 std::vector<ROFRecord> rofs;
197 ir.
bc = collBC1 + bcDiffHigh;
201 ir.
bc = collBC1 + bcDiffHigh + 1;
208 auto filteredROFs = filterBC.
process(rofs);
210 BOOST_REQUIRE(filteredROFs.size() == 2);
213 BOOST_TEST(filteredROFs.front().interactionRecord.bc == collBC1);
214 BOOST_TEST(filteredROFs.front().nEntries == nColBC1_1 + nColBC1_2);
217 BOOST_TEST(filteredROFs.back().interactionRecord.bc == collBC2);
218 BOOST_TEST(filteredROFs.back().nEntries == nColBC2);
MID channels masks handler.
Strip pattern (aka digits)
Class to convert the FEE test event into dead channels.
Function to produce the MID masks.
void setBC(int bcID, bool active=true, int dir=-1)
std::vector< ColumnData > getMasks() const
Gets the masks.
void switchOffChannels(const ColumnData &badChannels)
void count(const ColumnData &patterns)
const std::unordered_map< uint32_t, uint32_t > & getScalers() const
Gets the scalers.
uint8_t getCathode(uint32_t uniqueId) const
Gets cathode from unique Id.
uint8_t getLineId(uint32_t uniqueId) const
Gets lineId from unique Id.
void reset()
Resets scalers.
uint8_t getDeId(uint32_t uniqueId) const
Gets deId from unique Id.
uint8_t getColumnId(uint32_t uniqueId) const
Gets columnId from unique Id.
uint8_t getStrip(uint32_t uniqueId) const
Gets strip from unique Id.
std::vector< ColumnData > process(gsl::span< const ColumnData > fetData)
Filtering algorithm for MID.
void setBCDiffLow(int bcDiffLow)
Set the maximum BC diff in the lower side.
void setBunchFilling(const BunchFilling &bunchFilling)
Sets the bunch filling scheme.
std::vector< ROFRecord > process(gsl::span< const ROFRecord > rofRecords)
Filters the data BC.
void setBCDiffHigh(int bcDiffHigh)
Set the maximum BC diff in the upper side.
std::vector< ColumnData > makeDefaultMasks()
std::vector< ColumnData > generateData(size_t nData=10)
std::vector< ColumnData > makeMasks(const ChannelScalers &scalers, double timeOrTriggers, double threshold, const std::vector< ColumnData > &refMasks={})
BOOST_TEST(clusters.size()==clusterizer.getClusters().size())
BOOST_AUTO_TEST_CASE(mask)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
uint16_t bc
bunch crossing ID of interaction
Column data structure for MID.
uint8_t columnId
Column in DE.
uint16_t getBendPattern(int line) const
Gets the bending plane pattern.
uint8_t deId
Index of the detection element.
void setNonBendPattern(uint16_t pattern)
Sets the non-bending plane pattern.
void setBendPattern(uint16_t pattern, int line)
Sets the bending plane pattern.
uint16_t getNonBendPattern() const
Gets the non-bending plane pattern.
o2::InteractionRecord ir(0, 0)