32int main(
int argc,
char** argv)
34 bpo::variables_map vm;
35 bpo::options_description opt_general(
"Usage:\n " + std::string(argv[0]) +
36 "Convert CTP digits to CRU raw data\n");
37 bpo::options_description opt_hidden(
"");
38 bpo::options_description opt_all;
39 bpo::positional_options_description opt_pos;
42 auto add_option = opt_general.add_options();
43 add_option(
"help,h",
"Print this help message");
44 add_option(
"verbosity,v", bpo::value<int>()->default_value(0),
"verbosity level");
46 add_option(
"input-file,i", bpo::value<std::string>()->default_value(
"ctpdigits.root"),
"input CTP digits file");
47 add_option(
"file-for,f", bpo::value<std::string>()->default_value(
"all"),
"single file per: all,link,cruendpoint");
48 add_option(
"output-dir,o", bpo::value<std::string>()->default_value(
"./"),
"output directory for raw data");
49 uint32_t defRDH = o2::raw::RDHUtils::getVersion<o2::header::RAWDataHeader>();
50 add_option(
"rdh-version,r", bpo::value<uint32_t>()->default_value(defRDH),
"RDH version to use");
51 add_option(
"no-empty-hbf,e", bpo::value<bool>()->default_value(
false)->implicit_value(
true),
"do not create empty HBF pages (except for HBF starting TF)");
52 add_option(
"no-zs-ir", bpo::value<bool>()->default_value(
false)->implicit_value(
true),
"do not zero-suppress interaction records");
53 add_option(
"no-zs-class", bpo::value<bool>()->default_value(
false)->implicit_value(
true),
"do not zero-suppress trigger class records");
54 add_option(
"enable-padding", bpo::value<bool>()->default_value(
false)->implicit_value(
true),
"pad raw gbt data to 128 bits: 80 bits payload+48 bits 0");
55 add_option(
"cru-page-alignment,a", bpo::value<int>()->default_value(16),
"CRU page alignment");
57 add_option(
"configKeyValues", bpo::value<std::string>()->default_value(
""),
"comma-separated configKeyValues");
59 opt_all.add(opt_general).add(opt_hidden);
60 bpo::store(bpo::command_line_parser(argc, argv).options(opt_all).positional(opt_pos).run(), vm);
62 if (vm.count(
"help")) {
63 std::cout << opt_general << std::endl;
68 }
catch (bpo::error& e) {
69 std::cerr <<
"ERROR: " << e.what() << std::endl
71 std::cerr << opt_general << std::endl;
73 }
catch (std::exception& e) {
74 std::cerr << e.what() <<
", application will now exit" << std::endl;
78 std::string confDig = vm[
"hbfutils-config"].as<std::string>();
79 if (!confDig.empty() && confDig !=
"none") {
83 digi2raw(vm[
"input-file"].as<std::string>(),
84 vm[
"output-dir"].as<std::string>(),
85 vm[
"verbosity"].as<int>(),
86 vm[
"file-for"].as<std::string>(),
87 vm[
"rdh-version"].as<uint32_t>(),
88 vm[
"no-empty-hbf"].as<bool>(),
89 !vm[
"no-zs-ir"].as<bool>(),
90 !vm[
"no-zs-class"].as<bool>(),
91 vm[
"enable-padding"].as<bool>(),
92 vm[
"cru-page-alignment"].as<int>());
99void digi2raw(
const std::string& inpName,
const std::string& outDir,
int verbosity,
const std::string& fileForLink, uint32_t rdhV,
bool noEmptyHBF,
bool zsIR,
bool zsClass,
bool enablePadding,
int cruPageAlignment,
int superPageSizeInB)
110 wr.setSuperPageSize(superPageSizeInB);
111 wr.useRDHVersion(rdhV);
112 wr.setDontFillEmptyHBF(noEmptyHBF);
113 if (rdhV < 7 && !enablePadding) {
114 enablePadding =
true;
115 LOG(info) <<
"padding is always ON for RDH version " << rdhV;
117 std::string outDirName(outDir);
119 if (!std::filesystem::exists(outDirName)) {
121 if (!std::filesystem::create_directories(outDirName, ec)) {
122 LOG(fatal) <<
"could not create output directory " << outDirName <<
": " << ec.message();
124 LOG(info) <<
"created output directory " << outDirName;
127 if (outDirName.back() !=
'/') {
135 if (!enablePadding) {
137 LOG(info) <<
"CRU Page Alignment:" << cruPageAlignment;
void digi2raw(const std::string &inpName, const std::string &outDir, int verbosity, const std::string &fileForLink, uint32_t rdhV=4, bool noEmptyHBF=false, bool zsIR=true, bool zsClass=true, bool enablePadding=true, int cruPageAlignment=16, int superPageSizeInB=1024 *1024)