31 mRawWriter->setCarryOverCallBack(
this);
32 mRawWriter->setApplyCarryOverToLastPage(
true);
37 short flp, crorc, link;
41 std::string rawfilename = mOutputLocation;
44 rawfilename +=
"/phos.raw";
47 rawfilename += fmt::format(
"/PHS_alio2-cr1-flp{:d}_crorc{:d}.raw", flp, crorc);
50 rawfilename += fmt::format(
"/PHS_alio2-cr1-flp{:d}_crorc{:d}_{:d}.raw", flp, crorc, link);
52 mRawWriter->registerLink(iddl, crorc, link, 0, rawfilename.data());
59 mSRUdata.push_back(srucont);
63 mTRUdata.push_back(trucont);
96 currentIR += ctpOffsets.LM_L0;
99 auto srucont = mSRUdata.begin();
100 while (srucont != mSRUdata.end()) {
101 srucont->mChannels.clear();
104 auto trucont = mTRUdata.begin();
105 while (trucont != mTRUdata.end()) {
106 trucont->mChannels.clear();
111 short absId = dig.getTRUId();
115 LOG(error) <<
"Wrong truId=" << absId;
118 auto celldata = mTRUdata[ddl].mChannels.find(absId);
119 if (celldata == mTRUdata[ddl].mChannels.end()) {
120 const auto it = mTRUdata[ddl].mChannels.insert(celldata, {absId, std::vector<o2::phos::Digit*>()});
121 it->second.push_back(&dig);
123 celldata->second.push_back(&dig);
126 short absId = dig.getAbsId();
130 LOG(error) <<
"Wrong AbsId" << absId;
134 auto celldata = mSRUdata[ddl].mChannels.find(absId);
135 if (celldata == mSRUdata[ddl].mChannels.end()) {
136 const auto it = mSRUdata[ddl].mChannels.insert(celldata, {absId, std::vector<o2::phos::Digit*>()});
137 it->second.push_back(&dig);
139 celldata->second.push_back(&dig);
144 std::vector<uint32_t> rawbunches;
145 std::vector<char> payload;
146 std::vector<AltroBunch> rawbunchesTRU, rawbunchesHG, rawbunchesLG;
153 for (
auto ch = mTRUdata[ddl].mChannels.cbegin(); ch != mTRUdata[ddl].mChannels.cend(); ch++) {
154 short truId = ch->first;
157 LOG(error) <<
"Wrong truId=" << truId <<
", iDDL=" << iddl <<
"!=" << ddl;
159 rawbunchesTRU.clear();
162 for (
auto& bunch : rawbunchesTRU) {
163 rawbunches.push_back(bunch.mADCs.size() + 2);
164 rawbunches.push_back(bunch.mStarttime);
165 for (
auto adc : bunch.mADCs) {
166 rawbunches.push_back(
adc);
170 if (rawbunches.size() == 0) {
178 char* chanheadwords =
reinterpret_cast<char*
>(&chanhead.
mDataWord);
179 for (
unsigned int iword = 0; iword <
sizeof(
ChannelHeader) /
sizeof(
char); iword++) {
180 payload.emplace_back(chanheadwords[iword]);
182 char* channelwords =
reinterpret_cast<char*
>(encodedbunches.data());
183 for (
unsigned int iword = 0; iword < encodedbunches.size() *
sizeof(
int) /
sizeof(
char); iword++) {
184 payload.emplace_back(channelwords[iword]);
187 if (mTRUdata[ddl].mChannels.size()) {
188 std::vector<uint32_t>
a;
190 if (trmask[chan] > 0) {
191 while (
a.size() <
static_cast<unsigned short>(trmask[chan])) {
194 a[trmask[chan] - 1] |= (1 << (chan % 10));
202 char* chanheadwords =
reinterpret_cast<char*
>(&chanhead.
mDataWord);
203 for (
unsigned int iword = 0; iword <
sizeof(
ChannelHeader) /
sizeof(
char); iword++) {
204 payload.emplace_back(chanheadwords[iword]);
206 char* channelwords =
reinterpret_cast<char*
>(encodedbunches.data());
207 for (
unsigned int iword = 0; iword < encodedbunches.size() *
sizeof(
int) /
sizeof(
char); iword++) {
208 payload.emplace_back(channelwords[iword]);
216 if (trmask[chan] > 0) {
217 while (
a.size() <
static_cast<unsigned short>(trmask[chan])) {
220 a[trmask[chan] - 1] |= (1 << (
i % 10));
228 char* chanheadwords =
reinterpret_cast<char*
>(&chanhead.
mDataWord);
229 for (
unsigned int iword = 0; iword <
sizeof(
ChannelHeader) /
sizeof(
char); iword++) {
230 payload.emplace_back(chanheadwords[iword]);
232 char* channelwords =
reinterpret_cast<char*
>(encodedbunches.data());
233 for (
unsigned int iword = 0; iword < encodedbunches.size() *
sizeof(
int) /
sizeof(
char); iword++) {
234 payload.emplace_back(channelwords[iword]);
241 for (
auto ch = mSRUdata[ddl].mChannels.cbegin(); ch != mSRUdata[ddl].mChannels.cend(); ch++) {
244 createRawBunches(ch->first, ch->second, rawbunchesHG, rawbunchesLG, isLGfilled);
248 LOG(error) <<
"Wrong AbsId" << ch->first;
251 for (
auto& bunch : rawbunchesHG) {
252 rawbunches.push_back(bunch.mADCs.size() + 2);
253 rawbunches.push_back(bunch.mStarttime);
254 for (
auto adc : bunch.mADCs) {
255 rawbunches.push_back(
adc);
258 if (rawbunches.size() == 0) {
266 char* chanheadwords =
reinterpret_cast<char*
>(&chanhead.
mDataWord);
267 for (
unsigned int iword = 0; iword <
sizeof(
ChannelHeader) /
sizeof(
char); iword++) {
268 payload.emplace_back(chanheadwords[iword]);
271 char* channelwords =
reinterpret_cast<char*
>(encodedbunches.data());
272 for (
unsigned int iword = 0; iword < encodedbunches.size() *
sizeof(
int) /
sizeof(
char); iword++) {
273 payload.emplace_back(channelwords[iword]);
279 LOG(error) <<
"Wrong AbsId" << ch->first;
283 for (
auto& bunch : rawbunchesLG) {
284 rawbunches.push_back(bunch.mADCs.size() + 2);
285 rawbunches.push_back(bunch.mStarttime);
286 for (
auto adc : bunch.mADCs) {
287 rawbunches.push_back(
adc);
295 chanheadLG.
mMark = 1;
297 chanheadwords =
reinterpret_cast<char*
>(&chanheadLG.
mDataWord);
298 for (
unsigned int iword = 0; iword <
sizeof(
ChannelHeader) /
sizeof(
char); iword++) {
299 payload.emplace_back(chanheadwords[iword]);
301 channelwords =
reinterpret_cast<char*
>(encodedbunches.data());
302 for (
unsigned int iword = 0; iword < encodedbunches.size() *
sizeof(
int) /
sizeof(
char); iword++) {
303 payload.emplace_back(channelwords[iword]);
310 for (
auto word : trailerwords) {
311 payload.emplace_back(word);
315 LOG(debug1) <<
"Adding payload with size " << payload.size() <<
" (" << payload.size() / 4 <<
" ALTRO words)";
317 short flp, crorc, link;
319 mRawWriter->addData(ddl, crorc, link, 0, currentIR, payload);