Project
Loading...
Searching...
No Matches
convertDigitsToRawZS.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#include <boost/program_options.hpp>
16
17#include <string_view>
18#include <memory>
19#include <vector>
20#include <fmt/format.h>
21#include <filesystem>
22#include "TFile.h"
23#include "TTree.h"
24#include "TROOT.h"
25
26#include "GPUO2InterfaceUtils.h"
27#include "GPUHostDataTypes.h"
28
29#include "Framework/Logger.h"
33#include "TPCBase/Sector.h"
38#include "TPCBase/RDHUtils.h"
46
47namespace bpo = boost::program_options;
48
49using namespace o2::tpc;
50using namespace o2::gpu;
51using namespace o2::dataformats;
52using o2::MCCompLabel;
53
54constexpr static size_t NSectors = o2::tpc::Sector::MAXSECTOR;
55constexpr static size_t NEndpoints = o2::gpu::GPUTrackingInOutZS::NENDPOINTS;
56using DigitArray = std::array<gsl::span<const o2::tpc::Digit>, Sector::MAXSECTOR>;
57
58static constexpr const char* CRU_FLPS[361] = {
59 "alio2-cr1-flp070", "alio2-cr1-flp069", "alio2-cr1-flp070", "alio2-cr1-flp069", "alio2-cr1-flp072", "alio2-cr1-flp071", "alio2-cr1-flp072", "alio2-cr1-flp071", "alio2-cr1-flp072", "alio2-cr1-flp071", "alio2-cr1-flp002", "alio2-cr1-flp001", "alio2-cr1-flp002", "alio2-cr1-flp001", "alio2-cr1-flp004", "alio2-cr1-flp003", "alio2-cr1-flp004", "alio2-cr1-flp003",
60 "alio2-cr1-flp004", "alio2-cr1-flp003", "alio2-cr1-flp006", "alio2-cr1-flp005", "alio2-cr1-flp006", "alio2-cr1-flp005", "alio2-cr1-flp008", "alio2-cr1-flp007", "alio2-cr1-flp008", "alio2-cr1-flp007", "alio2-cr1-flp008", "alio2-cr1-flp007", "alio2-cr1-flp010", "alio2-cr1-flp009", "alio2-cr1-flp010", "alio2-cr1-flp009", "alio2-cr1-flp012", "alio2-cr1-flp011",
61 "alio2-cr1-flp012", "alio2-cr1-flp011", "alio2-cr1-flp012", "alio2-cr1-flp011", "alio2-cr1-flp014", "alio2-cr1-flp013", "alio2-cr1-flp014", "alio2-cr1-flp013", "alio2-cr1-flp016", "alio2-cr1-flp015", "alio2-cr1-flp016", "alio2-cr1-flp015", "alio2-cr1-flp016", "alio2-cr1-flp015", "alio2-cr1-flp018", "alio2-cr1-flp017", "alio2-cr1-flp018", "alio2-cr1-flp017",
62 "alio2-cr1-flp020", "alio2-cr1-flp019", "alio2-cr1-flp020", "alio2-cr1-flp019", "alio2-cr1-flp020", "alio2-cr1-flp019", "alio2-cr1-flp022", "alio2-cr1-flp021", "alio2-cr1-flp022", "alio2-cr1-flp021", "alio2-cr1-flp024", "alio2-cr1-flp023", "alio2-cr1-flp024", "alio2-cr1-flp023", "alio2-cr1-flp024", "alio2-cr1-flp023", "alio2-cr1-flp026", "alio2-cr1-flp025",
63 "alio2-cr1-flp026", "alio2-cr1-flp025", "alio2-cr1-flp028", "alio2-cr1-flp027", "alio2-cr1-flp028", "alio2-cr1-flp027", "alio2-cr1-flp028", "alio2-cr1-flp027", "alio2-cr1-flp030", "alio2-cr1-flp029", "alio2-cr1-flp030", "alio2-cr1-flp029", "alio2-cr1-flp032", "alio2-cr1-flp031", "alio2-cr1-flp032", "alio2-cr1-flp031", "alio2-cr1-flp032", "alio2-cr1-flp031",
64 "alio2-cr1-flp034", "alio2-cr1-flp033", "alio2-cr1-flp034", "alio2-cr1-flp033", "alio2-cr1-flp036", "alio2-cr1-flp035", "alio2-cr1-flp036", "alio2-cr1-flp035", "alio2-cr1-flp036", "alio2-cr1-flp035", "alio2-cr1-flp038", "alio2-cr1-flp037", "alio2-cr1-flp038", "alio2-cr1-flp037", "alio2-cr1-flp040", "alio2-cr1-flp039", "alio2-cr1-flp040", "alio2-cr1-flp039",
65 "alio2-cr1-flp040", "alio2-cr1-flp039", "alio2-cr1-flp042", "alio2-cr1-flp041", "alio2-cr1-flp042", "alio2-cr1-flp041", "alio2-cr1-flp044", "alio2-cr1-flp043", "alio2-cr1-flp044", "alio2-cr1-flp043", "alio2-cr1-flp044", "alio2-cr1-flp043", "alio2-cr1-flp046", "alio2-cr1-flp045", "alio2-cr1-flp046", "alio2-cr1-flp045", "alio2-cr1-flp048", "alio2-cr1-flp047",
66 "alio2-cr1-flp048", "alio2-cr1-flp047", "alio2-cr1-flp048", "alio2-cr1-flp047", "alio2-cr1-flp050", "alio2-cr1-flp049", "alio2-cr1-flp050", "alio2-cr1-flp049", "alio2-cr1-flp052", "alio2-cr1-flp051", "alio2-cr1-flp052", "alio2-cr1-flp051", "alio2-cr1-flp052", "alio2-cr1-flp051", "alio2-cr1-flp054", "alio2-cr1-flp053", "alio2-cr1-flp054", "alio2-cr1-flp053",
67 "alio2-cr1-flp056", "alio2-cr1-flp055", "alio2-cr1-flp056", "alio2-cr1-flp055", "alio2-cr1-flp056", "alio2-cr1-flp055", "alio2-cr1-flp058", "alio2-cr1-flp057", "alio2-cr1-flp058", "alio2-cr1-flp057", "alio2-cr1-flp060", "alio2-cr1-flp059", "alio2-cr1-flp060", "alio2-cr1-flp059", "alio2-cr1-flp060", "alio2-cr1-flp059", "alio2-cr1-flp062", "alio2-cr1-flp061",
68 "alio2-cr1-flp062", "alio2-cr1-flp061", "alio2-cr1-flp064", "alio2-cr1-flp063", "alio2-cr1-flp064", "alio2-cr1-flp063", "alio2-cr1-flp064", "alio2-cr1-flp063", "alio2-cr1-flp066", "alio2-cr1-flp065", "alio2-cr1-flp066", "alio2-cr1-flp065", "alio2-cr1-flp068", "alio2-cr1-flp067", "alio2-cr1-flp068", "alio2-cr1-flp067", "alio2-cr1-flp068", "alio2-cr1-flp067",
69 "alio2-cr1-flp074", "alio2-cr1-flp073", "alio2-cr1-flp074", "alio2-cr1-flp073", "alio2-cr1-flp076", "alio2-cr1-flp075", "alio2-cr1-flp076", "alio2-cr1-flp075", "alio2-cr1-flp076", "alio2-cr1-flp075", "alio2-cr1-flp078", "alio2-cr1-flp077", "alio2-cr1-flp078", "alio2-cr1-flp077", "alio2-cr1-flp080", "alio2-cr1-flp079", "alio2-cr1-flp080", "alio2-cr1-flp079",
70 "alio2-cr1-flp080", "alio2-cr1-flp079", "alio2-cr1-flp082", "alio2-cr1-flp081", "alio2-cr1-flp082", "alio2-cr1-flp081", "alio2-cr1-flp084", "alio2-cr1-flp083", "alio2-cr1-flp084", "alio2-cr1-flp083", "alio2-cr1-flp084", "alio2-cr1-flp083", "alio2-cr1-flp086", "alio2-cr1-flp085", "alio2-cr1-flp086", "alio2-cr1-flp085", "alio2-cr1-flp088", "alio2-cr1-flp087",
71 "alio2-cr1-flp088", "alio2-cr1-flp087", "alio2-cr1-flp088", "alio2-cr1-flp087", "alio2-cr1-flp090", "alio2-cr1-flp089", "alio2-cr1-flp090", "alio2-cr1-flp089", "alio2-cr1-flp092", "alio2-cr1-flp091", "alio2-cr1-flp092", "alio2-cr1-flp091", "alio2-cr1-flp092", "alio2-cr1-flp091", "alio2-cr1-flp094", "alio2-cr1-flp093", "alio2-cr1-flp094", "alio2-cr1-flp093",
72 "alio2-cr1-flp096", "alio2-cr1-flp095", "alio2-cr1-flp096", "alio2-cr1-flp095", "alio2-cr1-flp096", "alio2-cr1-flp095", "alio2-cr1-flp098", "alio2-cr1-flp097", "alio2-cr1-flp098", "alio2-cr1-flp097", "alio2-cr1-flp100", "alio2-cr1-flp099", "alio2-cr1-flp100", "alio2-cr1-flp099", "alio2-cr1-flp100", "alio2-cr1-flp099", "alio2-cr1-flp102", "alio2-cr1-flp101",
73 "alio2-cr1-flp102", "alio2-cr1-flp101", "alio2-cr1-flp104", "alio2-cr1-flp103", "alio2-cr1-flp104", "alio2-cr1-flp103", "alio2-cr1-flp104", "alio2-cr1-flp103", "alio2-cr1-flp106", "alio2-cr1-flp105", "alio2-cr1-flp106", "alio2-cr1-flp105", "alio2-cr1-flp108", "alio2-cr1-flp107", "alio2-cr1-flp108", "alio2-cr1-flp107", "alio2-cr1-flp108", "alio2-cr1-flp107",
74 "alio2-cr1-flp110", "alio2-cr1-flp109", "alio2-cr1-flp110", "alio2-cr1-flp109", "alio2-cr1-flp112", "alio2-cr1-flp111", "alio2-cr1-flp112", "alio2-cr1-flp111", "alio2-cr1-flp112", "alio2-cr1-flp111", "alio2-cr1-flp114", "alio2-cr1-flp113", "alio2-cr1-flp114", "alio2-cr1-flp113", "alio2-cr1-flp116", "alio2-cr1-flp115", "alio2-cr1-flp116", "alio2-cr1-flp115",
75 "alio2-cr1-flp116", "alio2-cr1-flp115", "alio2-cr1-flp118", "alio2-cr1-flp117", "alio2-cr1-flp118", "alio2-cr1-flp117", "alio2-cr1-flp120", "alio2-cr1-flp119", "alio2-cr1-flp120", "alio2-cr1-flp119", "alio2-cr1-flp120", "alio2-cr1-flp119", "alio2-cr1-flp122", "alio2-cr1-flp121", "alio2-cr1-flp122", "alio2-cr1-flp121", "alio2-cr1-flp124", "alio2-cr1-flp123",
76 "alio2-cr1-flp124", "alio2-cr1-flp123", "alio2-cr1-flp124", "alio2-cr1-flp123", "alio2-cr1-flp126", "alio2-cr1-flp125", "alio2-cr1-flp126", "alio2-cr1-flp125", "alio2-cr1-flp128", "alio2-cr1-flp127", "alio2-cr1-flp128", "alio2-cr1-flp127", "alio2-cr1-flp128", "alio2-cr1-flp127", "alio2-cr1-flp130", "alio2-cr1-flp129", "alio2-cr1-flp130", "alio2-cr1-flp129",
77 "alio2-cr1-flp132", "alio2-cr1-flp131", "alio2-cr1-flp132", "alio2-cr1-flp131", "alio2-cr1-flp132", "alio2-cr1-flp131", "alio2-cr1-flp134", "alio2-cr1-flp133", "alio2-cr1-flp134", "alio2-cr1-flp133", "alio2-cr1-flp136", "alio2-cr1-flp135", "alio2-cr1-flp136", "alio2-cr1-flp135", "alio2-cr1-flp136", "alio2-cr1-flp135", "alio2-cr1-flp138", "alio2-cr1-flp137",
78 "alio2-cr1-flp138", "alio2-cr1-flp137", "alio2-cr1-flp140", "alio2-cr1-flp139", "alio2-cr1-flp140", "alio2-cr1-flp139", "alio2-cr1-flp140", "alio2-cr1-flp139", "alio2-cr1-flp142", "alio2-cr1-flp141", "alio2-cr1-flp142", "alio2-cr1-flp141", "alio2-cr1-flp144", "alio2-cr1-flp143", "alio2-cr1-flp144", "alio2-cr1-flp143", "alio2-cr1-flp144", "alio2-cr1-flp143",
79 "alio2-cr1-flp145"};
80
82 std::unique_ptr<unsigned long long int[]> zsoutput;
83 std::vector<unsigned int> sizes;
84 std::function<void(std::vector<o2::tpc::Digit>&)> digitsFilter = nullptr;
86 std::vector<int> inputIds;
87 int version = 2;
88 float zsThreshold = 2.f;
89 bool padding = true;
90 int verbosity = 1;
91};
92
93void convert(DigitArray& inputDigits, ProcessAttributes* processAttributes, o2::raw::RawFileWriter& writer);
95void convertDigitsToZSfinal(std::string_view digitsFile, std::string_view outputPath, std::string_view fileFor,
96 bool sectorBySector, uint32_t rdhV, uint32_t zsV, bool stopPage, bool padding, bool createParentDir)
97{
98 // ===| open file and get tree |==============================================
99 std::unique_ptr<TFile> o2simDigits(TFile::Open(digitsFile.data()));
100 if (!o2simDigits || !o2simDigits->IsOpen() || o2simDigits->IsZombie()) {
101 LOGP(error, "Could not open file {}", digitsFile.data());
102 exit(1);
103 }
104 auto treeSim = (TTree*)o2simDigits->Get("o2sim");
105 if (!treeSim) {
106 LOGP(error, "Could not read digits tree from file {}", digitsFile.data());
107 exit(1);
108 }
109
110 gROOT->cd();
111
112 // ===| set up output directory |=============================================
113 std::string outDir{outputPath};
114 if (outDir.empty()) {
115 outDir = "./";
116 }
117 if (outDir.back() != '/') {
118 outDir += '/';
119 }
120
121 // if needed, create output directory
122 if (!std::filesystem::exists(outDir)) {
123 if (createParentDir) {
125 } else {
126 LOGP(error, "Requested output directory '{}' does not exists, consider removing '-n'", outDir);
127 exit(1);
128 }
129 }
130
131 // ===| set up raw writer |===================================================
132 std::string inputGRP = o2::base::NameConf::getGRPFileName();
133 const auto grp = o2::parameters::GRPObject::loadFrom(inputGRP);
134
135 o2::raw::RawFileWriter writer{"TPC"}; // to set the RDHv6.sourceID if V6 is used
136 writer.useRDHVersion(rdhV);
137 writer.setAddSeparateHBFStopPage(stopPage);
138 writer.setContinuousReadout(grp->isDetContinuousReadOut(o2::detectors::DetID::TPC)); // must be set explicitly
139
140 for (unsigned int i = 0; i < NSectors + 1; i++) {
141 for (unsigned int j = 0; j < NEndpoints; j++) {
142 const unsigned int cruInSector = j / 2;
143 const unsigned int cruID = i * 10 + cruInSector;
144 const unsigned int rdhLink = i == NSectors ? rdh_utils::SACLinkID : 0;
145 const unsigned int feeLink = i == NSectors ? rdh_utils::SACLinkID : zsV <= 2 ? rdh_utils::UserLogicLinkID : zsV == 3 ? rdh_utils::ILBZSLinkID : rdh_utils::DLBZSLinkID;
146 const rdh_utils::FEEIDType feeid = i == NSectors ? 46208 : rdh_utils::getFEEID(cruID, j & 1, feeLink);
147 std::string outfname;
148 if (fileFor == "all") { // single file for all links
149 outfname = fmt::format("{}tpc_all.raw", outDir);
150 } else if (fileFor == "sector") {
151 outfname = i == NSectors ? fmt::format("{}tpc_iac.raw", outDir) : fmt::format("{}tpc_sector{}.raw", outDir, i);
152 } else if (fileFor == "link" || fileFor == "cruendpoint") {
153 outfname = fmt::format("{}TPC_{}_cru{}_{}.raw", outDir, CRU_FLPS[cruID], cruID, j & 1);
154 } else {
155 throw std::runtime_error("invalid option provided for file grouping");
156 }
157 writer.registerLink(feeid, cruID, rdhLink, j & 1, outfname);
158 if (i == NSectors) {
159 break; // Special IAC node
160 }
161 }
162 }
163 if (fileFor != "link") { // in case >1 link goes to the file, we must cache to preserve the TFs ordering
164 writer.useCaching();
165 }
166 writer.doLazinessCheck(false); // LazinessCheck is not thread-safe
167
168 // ===| set up branch addresses |=============================================
169 std::vector<Digit>* vDigitsPerSectorCollection[Sector::MAXSECTOR] = {nullptr}; // container that keeps Digits per sector
170
171 treeSim->SetBranchStatus("*", 0);
172 treeSim->SetBranchStatus("TPCDigit_*", 1);
173
175 attr.padding = padding;
176 attr.version = zsV;
177
179 auto globalConfig = config.ReadConfigurableParam();
180 attr.zsThreshold = config.configReconstruction.tpc.zsThreshold;
181 if (globalConfig.zsOnTheFlyDigitsFilter) {
182 attr.digitsFilter = [](std::vector<o2::tpc::Digit>& digits) {
183 IonTailCorrection itCorr;
185 };
186 }
187
188 for (int iSecBySec = 0; iSecBySec < Sector::MAXSECTOR; ++iSecBySec) {
189 treeSim->ResetBranchAddresses();
190 for (int iSec = 0; iSec < Sector::MAXSECTOR; ++iSec) {
191 if (sectorBySector) {
192 iSec = iSecBySec;
193 }
194 vDigitsPerSectorCollection[iSec] = nullptr;
195 treeSim->SetBranchAddress(TString::Format("TPCDigit_%d", iSec), &vDigitsPerSectorCollection[iSec]);
196 if (sectorBySector) {
197 break;
198 }
199 }
200 for (Long64_t ievent = 0; ievent < treeSim->GetEntries(); ++ievent) {
201 DigitArray inputDigits;
202 if (sectorBySector) {
203 treeSim->GetBranch(TString::Format("TPCDigit_%d", iSecBySec))->GetEntry(ievent);
204 } else {
205 treeSim->GetEntry(ievent);
206 }
207
208 for (int iSec = 0; iSec < Sector::MAXSECTOR; ++iSec) {
209 if (sectorBySector) {
210 iSec = iSecBySec;
211 }
212 inputDigits[iSec] = *vDigitsPerSectorCollection[iSec]; //????
213 if (sectorBySector) {
214 break;
215 }
216 }
217 convert(inputDigits, &attr, writer);
218 for (int iSec = 0; iSec < Sector::MAXSECTOR; ++iSec) {
219 delete vDigitsPerSectorCollection[iSec];
220 vDigitsPerSectorCollection[iSec] = nullptr;
221 }
222 }
223 if (!sectorBySector) {
224 break;
225 }
226 }
227 // for further use we write the configuration file for the output
228 writer.writeConfFile("TPC", "RAWDATA", fmt::format("{}tpcraw.cfg", outDir));
229}
230
231void convert(DigitArray& inputDigits, ProcessAttributes* processAttributes, o2::raw::RawFileWriter& writer)
232{
233 const auto zsThreshold = processAttributes->zsThreshold;
234
236 ir.bc = 0; // By convention the TF starts at BC = 0
237 o2::gpu::GPUO2InterfaceUtils::RunZSEncoder(inputDigits, nullptr, nullptr, &writer, &ir, processAttributes->version, false, zsThreshold, processAttributes->padding, processAttributes->digitsFilter);
238}
239
240int main(int argc, char** argv)
241{
242 bpo::variables_map vm;
243 bpo::options_description opt_general("Usage:\n " + std::string(argv[0]) +
244 " <cmds/options>\n"
245 " Tool will convert simulation digits to raw zero suppressed data\n"
246 "Commands / Options");
247 bpo::options_description opt_hidden("");
248 bpo::options_description opt_all;
249 bpo::positional_options_description opt_pos;
250
251 try {
252 auto add_option = opt_general.add_options();
253 add_option("help,h", "Print this help message");
254 add_option("verbose,v", bpo::value<uint32_t>()->default_value(0), "Select verbosity level [0 = no output]");
255 add_option("input-file,i", bpo::value<std::string>()->default_value("tpcdigits.root"), "Specifies input file.");
256 add_option("output-dir,o", bpo::value<std::string>()->default_value("./"), "Specify output directory");
257 add_option("no-parent-directories,n", "Do not create parent directories recursively");
258 add_option("sector-by-sector,s", bpo::value<bool>()->default_value(false)->implicit_value(true), "Run one TPC sector after another");
259 add_option("file-for,f", bpo::value<std::string>()->default_value("sector"), "single file per: link,sector,cruendpoint,all");
260 add_option("stop-page,p", bpo::value<bool>()->default_value(false)->implicit_value(true), "HBF stop on separate CRU page");
261 add_option("padding", bpo::value<bool>()->default_value(false)->implicit_value(true), "Pad all pages to 8kb");
262 uint32_t defRDH = o2::raw::RDHUtils::getVersion<o2::header::RAWDataHeader>();
263 add_option("hbfutils-config,u", bpo::value<std::string>()->default_value(std::string(o2::base::NameConf::DIGITIZATIONCONFIGFILE)), "config file for HBFUtils (or none)");
264 add_option("rdh-version,r", bpo::value<uint32_t>()->default_value(defRDH), "RDH version to use");
265 add_option("zs-version,r", bpo::value<uint32_t>()->default_value(2), "ZS version to use");
266 add_option("configKeyValues", bpo::value<std::string>()->default_value(""), "comma-separated configKeyValues");
267
268 opt_all.add(opt_general).add(opt_hidden);
269 bpo::store(bpo::command_line_parser(argc, argv).options(opt_all).positional(opt_pos).run(), vm);
270
271 if (vm.count("help") || argc == 1) {
272 std::cout << opt_general << std::endl;
273 exit(0);
274 }
275
276 bpo::notify(vm);
277 } catch (bpo::error& e) {
278 std::cerr << "ERROR: " << e.what() << std::endl
279 << std::endl;
280 std::cerr << opt_general << std::endl;
281 exit(1);
282 } catch (std::exception& e) {
283 std::cerr << e.what() << ", application will now exit" << std::endl;
284 exit(2);
285 }
286
287 std::string confDig = vm["hbfutils-config"].as<std::string>();
288 if (!confDig.empty() && confDig != "none") {
290 }
291 o2::conf::ConfigurableParam::updateFromString(vm["configKeyValues"].as<std::string>());
293 vm["input-file"].as<std::string>(),
294 vm["output-dir"].as<std::string>(),
295 vm["file-for"].as<std::string>(),
296 vm["sector-by-sector"].as<bool>(),
297 vm["rdh-version"].as<uint32_t>(),
298 vm["zs-version"].as<uint32_t>(),
299 vm["stop-page"].as<bool>(),
300 vm["padding"].as<bool>(),
301 !vm.count("no-parent-directories"));
302
304
305 return 0;
306}
uint16_t padding
Definition of the TPC Digit.
Helper class for memory management of TPC Data Formats, external from the actual data type classes to...
int32_t i
Header of the General Run Parameters object.
Implementation of the ion tail correction from TPC digits.
Definition of the Names Generator class.
uint32_t j
Definition RawData.h:0
Utility class to write detectors data to (multiple) raw data file(s) respecting CRU format.
Definitions of TPC Zero Suppression Data Headers.
static std::string getGRPFileName(const std::string_view prefix=STANDARDSIMPREFIX)
Definition NameConf.cxx:58
static constexpr std::string_view DIGITIZATIONCONFIGFILE
Definition NameConf.h:89
static void updateFromFile(std::string const &, std::string const &paramsList="", bool unchangedOnly=false)
static void updateFromString(std::string const &)
static constexpr ID TPC
Definition DetID.h:64
static void RunZSEncoder(const S &in, std::unique_ptr< uint64_t[]> *outBuffer, uint32_t *outSizes, o2::raw::RawFileWriter *raw, const o2::InteractionRecord *ir, int32_t version, bool verify, float threshold=0.f, bool padding=false, std::function< void(std::vector< o2::tpc::Digit > &)> digitsFilter=nullptr)
static GRPObject * loadFrom(const std::string &grpFileName="")
void filterDigitsDirect(std::vector< Digit > &digits)
static constexpr int MAXSECTOR
Definition Sector.h:44
void convert(DigitArray &inputDigits, ProcessAttributes *processAttributes, o2::raw::RawFileWriter &writer)
std::array< gsl::span< const o2::tpc::Digit >, Sector::MAXSECTOR > DigitArray
void convertDigitsToZSfinal(std::string_view digitsFile, std::string_view outputPath, std::string_view fileFor, bool sectorBySector, uint32_t rdhV, uint32_t zsV, bool stopPage, bool padding, bool createParentDir)
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
constexpr int NSectors
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
void assertOutputDirectory(std::string_view outDirName)
uint16_t FEEIDType
Definition RDHUtils.h:26
Global TPC definitions and constants.
Definition SimTraits.h:167
std::function< void(std::vector< o2::tpc::Digit > &)> digitsFilter
std::unique_ptr< unsigned long long int[]> zsoutput
MCLabelContainer mctruthArray
std::vector< unsigned int > sizes
std::vector< int > inputIds
uint16_t bc
bunch crossing ID of interaction
static constexpr uint32_t NENDPOINTS
void print() const
Definition HBFUtils.h:134
IR getFirstSampledTFIR() const
get TF and HB (abs) for this IR
Definition HBFUtils.h:74
#define main
o2::InteractionRecord ir(0, 0)
std::vector< Digit > digits