32 static const unsigned int common_mode_channel =
roc_version_ == 2 ? 19 : 1;
34 static uint32_t head1, head2, w;
46 std::vector<ldmx::HgcrocDigiCollection::Sample>>
48 while (reader >> head1 >> head2) {
50 if (head1 == 0x11111111 and head2 == 0xbeef2021) {
55 uint32_t whole_event_header;
56 reader >> whole_event_header;
64 (whole_event_header >> 16) & packing::utility::MASK<4>;
66 std::vector<uint32_t> length_per_sample(nsamples, 0);
67 for (uint32_t i_sample{0}; i_sample < nsamples; i_sample++) {
68 if (i_sample % 2 == 0) {
71 uint32_t shift_in_word = 16 * (i_sample % 2);
72 length_per_sample[i_sample] =
73 (w >> shift_in_word) & packing::utility::MASK<12>;
77 reader >> head1 >> head2;
78 }
else if (head1 == 0xd07e2021 and head2 == 0x12345678) {
101 std::cout <<
hex(head1) <<
" : ";
102 uint32_t version = (head1 >> 28) & packing::utility::MASK<4>;
106 EXCEPTION_RAISE(
"VersMis",
107 "EcalRawDecoder only knows version 1 of DAQ format.");
109 uint32_t fpga = (head1 >> 20) & packing::utility::MASK<8>;
110 uint32_t nlinks = (head1 >> 14) & packing::utility::MASK<6>;
128 std::vector<uint32_t> length_per_link(nlinks, 0);
129 for (uint32_t i_link{0}; i_link < nlinks; i_link++) {
130 if (i_link % 4 == 0) {
135 uint32_t shift_in_word = 8 * (i_link % 4);
141 length_per_link[i_link] =
142 (w >> shift_in_word) & packing::utility::MASK<6>;
156 for (uint32_t i_link{0}; i_link < nlinks; i_link++) {
163 uint32_t roc_id = (w >> 16) & packing::utility::MASK<16>;
171 std::bitset<40> ro_map = w & packing::utility::MASK<8>;
184 for (uint32_t j{0}; j < length_per_link.at(i_link) - 2; j++) {
188 }
while (channel_id < 40 and not ro_map.test(channel_id));
195 if (channel_id == 0) {
216 }
else if (channel_id == common_mode_channel) {
222 }
else if (channel_id == 39) {
267 eid_to_samples[eid].emplace_back(w);
307 for (
auto const& [eid, digi] : eid_to_samples) {
312 if (detmap.exists(eid)) {
313 uint32_t did_raw = detmap.get(eid).raw();
335 for (
auto const& [eid, digi] : eid_to_samples) {
336 digis.
addDigi(eid.raw(), digi);