1919#include " DataFormatsMCH/DsChannelId.h"
2020#include " MCHRawElecMap/Mapper.h"
2121#include " MCHMappingInterface/Segmentation.h"
22+ #include " MCHGlobalMapping/DsIndex.h"
2223
2324namespace po = boost::program_options;
2425
@@ -50,6 +51,7 @@ void uploadBadChannels(const std::string ccdbUrl,
5051 uint64_t startTimestamp,
5152 uint64_t endTimestamp,
5253 std::vector<uint16_t > solarsToReject,
54+ std::vector<uint16_t > dsToReject,
5355 bool makeDefault)
5456{
5557 BadChannelsVector bv;
@@ -71,12 +73,29 @@ void uploadBadChannels(const std::string ccdbUrl,
7173 }
7274 }
7375
76+ for (auto ds : dsToReject) {
77+ if (ds >= o2::mch::NumberOfDualSampas) {
78+ std::cout << " Error: invalid DS index" << std::endl;
79+ continue ;
80+ }
81+ o2::mch::raw::DsDetId dsDetId = o2::mch::getDsDetId (ds);
82+ o2::mch::mapping::Segmentation seg (dsDetId.deId ());
83+ for (uint8_t channel = 0 ; channel < 64 ; channel++) {
84+ auto dsElecId = det2elec (dsDetId);
85+ auto padId = seg.findPadByFEE (dsDetId.dsId (), channel);
86+ if (seg.isValid (padId)) {
87+ const auto c = o2::mch::DsChannelId (dsElecId->solarId (), dsElecId->elinkId (), channel);
88+ bv.emplace_back (c);
89+ }
90+ }
91+ }
92+
7493 o2::ccdb::CcdbApi api;
7594 api.init (ccdbUrl);
7695 std::map<std::string, std::string> md;
7796 auto dest = ccdbPath (badChannelType);
7897 std::cout << " storing default MCH bad channels (valid from "
79- << startTimestamp << " to " << endTimestamp << " ) to "
98+ << startTimestamp << " to " << endTimestamp << " ) to "
8099 << dest << " \n " ;
81100
82101 if (makeDefault) {
@@ -120,7 +139,8 @@ int main(int argc, char** argv)
120139 (" query,q" ,po::bool_switch (&query)," dump bad channel object from CCDB" )
121140 (" verbose,v" ,po::bool_switch (&verbose)," verbose output" )
122141 (" solar,s" ,po::value<std::vector<uint16_t >>()->multitoken ()," solar ids to reject" )
123- ;
142+ (" dsToReject,d" , po::value<std::vector<uint16_t >>()->multitoken (), " dual sampas indices to reject" )
143+ ;
124144 // clang-format on
125145
126146 po::options_description cmdline;
@@ -152,11 +172,15 @@ int main(int argc, char** argv)
152172
153173 if (put) {
154174 std::vector<uint16_t > solarsToReject;
175+ std::vector<uint16_t > dsToReject;
155176 if (vm.count (" solar" )) {
156177 solarsToReject = vm[" solar" ].as <std::vector<uint16_t >>();
157178 }
179+ if (vm.count (" dsToReject" )) {
180+ dsToReject = vm[" dsToReject" ].as <std::vector<uint16_t >>();
181+ }
158182
159- uploadBadChannels (ccdbUrl, badChannelType, startTimestamp, endTimestamp, solarsToReject, uploadDefault);
183+ uploadBadChannels (ccdbUrl, badChannelType, startTimestamp, endTimestamp, solarsToReject, dsToReject, uploadDefault);
160184 }
161185 return 0 ;
162186}
0 commit comments