33 std::string outd = mOutDir;
34 if (outd.back() !=
'/') {
37 LOG(info) <<
"Raw outpud dir:" << mOutDir;
39 LOG(info) <<
"Raw Data padding:" << mPadding;
43 std::string outFileLink0 = mOutputPerLink ? fmt::format(
"{}{}_feeid{}.raw", outd, mCTPRawDataFileName, feeID) : fmt::format(
"{}{}.raw", outd, mCTPRawDataFileName);
44 mWriter.
registerLink(feeID, mCruID, ilink, mEndPointID, outFileLink0);
48 std::string outFileLink1 = mOutputPerLink ? fmt::format(
"{}{}_feeid{}.raw", outd, mCTPRawDataFileName, feeID) : fmt::format(
"{}{}.raw", outd, mCTPRawDataFileName);
49 mWriter.
registerLink(feeID, mCruID, ilink, mEndPointID, outFileLink1);
55 std::unique_ptr<TFile> digiFile(TFile::Open(fileDigitsName.c_str()));
56 if (!digiFile || digiFile->IsZombie()) {
57 LOG(fatal) <<
"Failed to open input digits file " << fileDigitsName;
60 LOG(info) <<
"Processing digits to raw file:" << fileDigitsName;
61 TTree* digiTree = (TTree*)digiFile->Get(
"o2sim");
63 LOG(fatal) <<
"Failed to get digits tree";
66 std::vector<o2::ctp::CTPDigit> CTPDigits, *fCTPDigitsPtr = &CTPDigits;
67 if (digiTree->GetBranch(
"CTPDigits")) {
68 digiTree->SetBranchAddress(
"CTPDigits", &fCTPDigitsPtr);
70 LOG(fatal) <<
"Branch CTPDigits is missing";
78 LOG(info) <<
"Number of entries: " << digiTree->GetEntries();
79 for (
int ient = 0; ient < digiTree->GetEntries(); ient++) {
80 digiTree->GetEntry(ient);
81 int nbc = CTPDigits.size();
82 LOG(
debug) <<
"Entry " << ient <<
" : " << nbc <<
" BCs stored";
83 std::vector<gbtword80_t> hbfIR;
84 std::vector<gbtword80_t> hbfTC;
85 for (
auto const& ctpdig : CTPDigits) {
86 LOG(
debug) << ctpdig.intRecord.bc <<
" bc all orbit " << ctpdig.intRecord.orbit;
87 if ((orbit0 == ctpdig.intRecord.orbit) || firstorbit) {
88 if (firstorbit ==
true) {
90 orbit0 = ctpdig.intRecord.orbit;
91 LOG(info) <<
"First orbit:" << orbit0;
93 LOG(
debug) << ctpdig.intRecord.orbit <<
" orbit bc " << ctpdig.intRecord.bc;
97 LOG(
debug) <<
"ir:" << gbtdigIR <<
" " << (gbtdigIR.to_ullong() & 0xfff);
99 hbfIR.push_back(gbtdigIR);
100 hbfTC.push_back(gbtdigTC);
103 LOG(info) <<
"Packing orbit:" << orbit0 <<
" hbfIR:" << hbfIR.size() <<
" hbfTC:" << hbfTC.size();
104 intRec.
orbit = orbit0;
105 if (mZeroSuppressedIntRec ==
true) {
108 std::vector<gbtword80_t> hbfIRnonZS =
addEmptyBC(hbfIR);
120 orbit0 = ctpdig.intRecord.orbit;
123 LOG(
debug) << ctpdig.intRecord.orbit <<
" orbit bc " << ctpdig.intRecord.bc;
129 hbfIR.push_back(gbtdigIR);
130 hbfTC.push_back(gbtdigTC);
132 intRec = ctpdig.intRecord;
136 LOG(info) <<
"Packing orbit last:" << orbit0;
137 intRec.
orbit = orbit0;
138 if (mZeroSuppressedIntRec ==
true) {
141 std::vector<gbtword80_t> hbfIRnonZS =
addEmptyBC(hbfIR);
240 gbtword |= (pld << size_gbt);
241 if ((size_gbt + Npld) < NGBT) {
247 gbtword = pld >> (NGBT - size_gbt);
248 size_gbt = size_gbt + Npld - NGBT;
274 std::vector<gbtword80_t> hbfIRnonZS;
275 if (hbfIRZS.size() == 0) {
276 LOG(error) <<
"Int record with zero size not expected here.";
279 uint32_t bcnonzero = 0;
280 if (hbfIRZS[0] != 0) {
282 hbfIRnonZS.push_back(bs);
284 for (
auto const& item : hbfIRZS) {
285 uint32_t bcnonzeroNext = (item.to_ulong()) & 0xfff;
286 for (
int i = (bcnonzero + 1);
i < bcnonzeroNext;
i++) {
288 hbfIRnonZS.push_back(bs);
290 bcnonzero = bcnonzeroNext;
291 hbfIRnonZS.push_back(item);
293 for (
int i = (bcnonzero + 1);
i < 3564;
i++) {
295 hbfIRnonZS.push_back(bs);
void addData(uint16_t feeid, uint16_t cru, uint8_t lnk, uint8_t endpoint, const IR &ir, const gsl::span< char > data, bool preformatted=false, uint32_t trigger=0, uint32_t detField=0)