1818#include < boost/test/data/monomorphic.hpp>
1919
2020#include " MCHGlobalMapping/ChannelCode.h"
21+ #include " MCHGlobalMapping/DsIndex.h"
2122#include " MCHStatus/StatusMap.h"
2223#include < fmt/format.h>
2324
@@ -39,6 +40,12 @@ std::vector<o2::mch::ChannelCode> cc{
3940 {1025 , 8 },
4041 {515 , 1863 }};
4142
43+ o2::mch::DsIndex ds = 246 ; // 56 pads, contains chid[1]
44+
45+ uint16_t de = 1025 ; // 6976 pads, contains cc[2]
46+
47+ uint32_t badMask = 1 << 3 ;
48+
4249BOOST_AUTO_TEST_CASE (ClearShouldGiveEmptyMap)
4350{
4451 o2::mch::StatusMap statusMap;
@@ -50,21 +57,35 @@ BOOST_AUTO_TEST_CASE(ClearShouldGiveEmptyMap)
5057BOOST_AUTO_TEST_CASE (AddChannelIdWithInvalidMaskShouldThrow)
5158{
5259 o2::mch::StatusMap statusMap;
53- BOOST_CHECK_THROW (statusMap.add (chid, 4 ), std::runtime_error);
60+ BOOST_CHECK_THROW (statusMap.add (chid, badMask ), std::runtime_error);
5461}
5562
5663BOOST_AUTO_TEST_CASE (AddChannelCodeWithInvalidMaskShouldThrow)
5764{
5865 o2::mch::StatusMap statusMap;
59- BOOST_CHECK_THROW (statusMap.add (cc, 4 ), std::runtime_error);
66+ BOOST_CHECK_THROW (statusMap.add (cc, badMask ), std::runtime_error);
6067}
6168
62- std::array<uint32_t , 3 > maskList = {
69+ BOOST_AUTO_TEST_CASE (AddDSWithInvalidMaskShouldThrow)
70+ {
71+ o2::mch::StatusMap statusMap;
72+ BOOST_CHECK_THROW (statusMap.addDS (0 , badMask), std::runtime_error);
73+ }
74+
75+ BOOST_AUTO_TEST_CASE (AddDEWithInvalidMaskShouldThrow)
76+ {
77+ o2::mch::StatusMap statusMap;
78+ BOOST_CHECK_THROW (statusMap.addDE (100 , badMask), std::runtime_error);
79+ }
80+
81+ std::array<uint32_t , 5 > maskList = {
6382 o2::mch::StatusMap::kBadPedestal ,
6483 o2::mch::StatusMap::kRejectList ,
65- o2::mch::StatusMap::kRejectList + o2::mch::StatusMap::kBadPedestal };
84+ o2::mch::StatusMap::kBadHV ,
85+ o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kBadHV ,
86+ o2::mch::StatusMap::kRejectList | o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kBadHV };
6687
67- BOOST_DATA_TEST_CASE (CheckAddedChannelsGetTheRightMask, bdata::xrange(maskList.size() + 1 ), maskIndex)
88+ BOOST_DATA_TEST_CASE (CheckAddedChannelsGetTheRightMask, bdata::xrange(maskList.size()), maskIndex)
6889{
6990 o2::mch::StatusMap statusMap;
7091 auto mask = maskList[maskIndex];
@@ -74,15 +95,62 @@ BOOST_DATA_TEST_CASE(CheckAddedChannelsGetTheRightMask, bdata::xrange(maskList.s
7495 }
7596}
7697
98+ BOOST_AUTO_TEST_CASE (CheckChannelStatusCombination)
99+ {
100+ auto size = [](const o2::mch::StatusMap& statusMap) {
101+ int n = 0 ;
102+ for (const auto & status : statusMap) {
103+ ++n;
104+ }
105+ return n;
106+ };
107+ o2::mch::StatusMap statusMap;
108+ statusMap.add (cc, o2::mch::StatusMap::kBadPedestal );
109+ BOOST_CHECK_EQUAL (size (statusMap), 4 );
110+ statusMap.add (chid, o2::mch::StatusMap::kRejectList );
111+ BOOST_CHECK_EQUAL (size (statusMap), 4 );
112+ statusMap.addDS (ds, o2::mch::StatusMap::kBadHV );
113+ BOOST_CHECK_EQUAL (size (statusMap), 59 );
114+ statusMap.addDE (de, o2::mch::StatusMap::kBadHV );
115+ BOOST_CHECK_EQUAL (size (statusMap), 7034 );
116+ BOOST_CHECK_EQUAL (statusMap.status (cc[0 ]), o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kRejectList );
117+ BOOST_CHECK_EQUAL (statusMap.status (cc[1 ]), o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kRejectList | o2::mch::StatusMap::kBadHV );
118+ BOOST_CHECK_EQUAL (statusMap.status (cc[2 ]), o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kBadHV );
119+ BOOST_CHECK_EQUAL (statusMap.status (cc[3 ]), o2::mch::StatusMap::kBadPedestal );
120+ }
121+
77122BOOST_AUTO_TEST_CASE (ApplyMaskShouldReturnASubsetDependingOnMask)
78123{
124+ auto size = [](const std::map<int , std::vector<int >>& badChannels) {
125+ int n = 0 ;
126+ for (const auto & channels : badChannels) {
127+ n += channels.second .size ();
128+ }
129+ return n;
130+ };
79131 o2::mch::StatusMap statusMap;
80132 statusMap.add (cc, o2::mch::StatusMap::kBadPedestal );
81133 statusMap.add (chid, o2::mch::StatusMap::kRejectList );
134+ statusMap.addDS (ds, o2::mch::StatusMap::kBadHV );
135+ statusMap.addDE (de, o2::mch::StatusMap::kBadHV );
82136 auto badPed = applyMask (statusMap, o2::mch::StatusMap::kBadPedestal );
83137 auto rejectList = applyMask (statusMap, o2::mch::StatusMap::kRejectList );
84- auto all = applyMask (statusMap, o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kRejectList );
85- BOOST_CHECK_EQUAL (badPed.size (), cc.size ());
86- BOOST_CHECK_EQUAL (rejectList.size (), chid.size ());
87- BOOST_CHECK_EQUAL (all.size (), 4 );
138+ auto badHV = applyMask (statusMap, o2::mch::StatusMap::kBadHV );
139+ auto badHVOrRL = applyMask (statusMap, o2::mch::StatusMap::kBadHV | o2::mch::StatusMap::kRejectList );
140+ auto any = applyMask (statusMap, o2::mch::StatusMap::kBadPedestal | o2::mch::StatusMap::kRejectList | o2::mch::StatusMap::kBadHV );
141+ BOOST_CHECK_EQUAL (badPed.size (), 4 );
142+ BOOST_CHECK_EQUAL (size (badPed), 4 );
143+ BOOST_CHECK_EQUAL (badPed[1025 ][0 ], 8 );
144+ BOOST_CHECK_EQUAL (rejectList.size (), 2 );
145+ BOOST_CHECK_EQUAL (size (rejectList), 2 );
146+ BOOST_CHECK_EQUAL (rejectList[100 ][0 ], 15665 );
147+ BOOST_CHECK_EQUAL (badHV.size (), 2 );
148+ BOOST_CHECK_EQUAL (size (badHV), 7032 );
149+ BOOST_CHECK_EQUAL (badHV[1025 ].size (), 6976 );
150+ BOOST_CHECK_EQUAL (badHVOrRL.size (), 3 );
151+ BOOST_CHECK_EQUAL (size (badHVOrRL), 7033 );
152+ BOOST_CHECK_EQUAL (badHVOrRL[515 ].size (), 0 );
153+ BOOST_CHECK_EQUAL (any.size (), 4 );
154+ BOOST_CHECK_EQUAL (size (any), 7034 );
155+ BOOST_CHECK_EQUAL (any[302 ][0 ], 20117 );
88156}
0 commit comments