73int main(
int argc,
char* argv[])
76 po::options_description
generic(
"Generic options");
77 std::string ulFilenames, bareFilenames, feeIdConfigFilename, crateMasksFilename;
78 std::string outFilename =
"check_ul.txt";
79 unsigned long int nHBFs = 0;
83 (
"help",
"produce help message")
84 (
"ul-filenames", po::value<std::string>(&ulFilenames),
"Comma-separated input raw filenames with CRU User Logic")
85 (
"bare-filenames", po::value<std::string>(&bareFilenames),
"Comma-separated input raw filenames with bare CRU")
86 (
"feeId-config-file", po::value<std::string>(&feeIdConfigFilename),
"Filename with crate FEE ID correspondence")
87 (
"crate-masks-file", po::value<std::string>(&crateMasksFilename),
"Filename with crate masks")
88 (
"electronics-delay-file", po::value<std::string>(),
"Filename with electronics delay")
89 (
"outFilename", po::value<std::string>(&outFilename),
"Output filename")
90 (
"nHBFs", po::value<unsigned long int>(&nHBFs),
"Number of HBFs to test")
91 (
"full", po::value<bool>()->implicit_value(
true),
"Full check");
94 po::options_description hidden(
"hidden options");
96 (
"input", po::value<std::vector<std::string>>(),
"Input filename");
99 po::options_description cmdline;
100 cmdline.add(generic).add(hidden);
102 po::store(po::command_line_parser(argc, argv).options(cmdline).run(), vm);
105 if (vm.count(
"help")) {
106 std::cout <<
"Usage: " << argv[0] <<
"\n";
107 std::cout <<
generic << std::endl;
110 if (ulFilenames.empty() || bareFilenames.empty()) {
111 std::cout <<
"Please specify ul-filenames and bare-filenames" << std::endl;
116 if (!feeIdConfigFilename.empty()) {
121 if (!crateMasksFilename.empty()) {
126 if (vm.count(
"electronics-delay-file")) {
130 auto bareDecoder =
o2::mid::Decoder(
true,
true, electronicsDelay, crateMasks, feeIdConfig);
131 auto ulDecoder =
o2::mid::Decoder(
true,
false, electronicsDelay, crateMasks, feeIdConfig);
133 std::vector<o2::mid::ROBoard> bareData, ulData;
134 std::vector<o2::mid::ROFRecord> bareRofs, ulRofs;
136 auto bareFnames =
split(bareFilenames);
137 auto ulFnames =
split(ulFilenames);
141 for (
auto& fname : bareFnames) {
142 if (!
readFile(fname, bareDecoder, bareData, bareRofs, nHBFs)) {
147 for (
auto& fname : ulFnames) {
148 if (!
readFile(fname, ulDecoder, ulData, ulRofs, bareFnames.size() * nHBFs)) {
157 for (
auto& rof : bareRofs) {
158 rof.interactionRecord.orbit = 0;
161 for (
auto& rof : ulRofs) {
162 rof.interactionRecord.orbit = 0;
166 std::ofstream outFile(outFilename.c_str());
167 if (!outFile.is_open()) {
168 std::cout <<
"Cannot open output file " << outFilename << std::endl;
172 if (checker.
process(bareData, bareRofs, ulData, ulRofs, vm.count(
"full"))) {
173 std::cout <<
"Everything ok!" << std::endl;
175 std::cout <<
"Problems found. See " << outFilename <<
" for details" << std::endl;