81 B2ERROR(
"BonnDAQ Data file is not open ");
84 unsigned int triggernr = 0xFFFFFFFF;
89 unsigned int get_size(
void) {
return (
unsigned int) size + (((
unsigned int)(header & 0x000F)) << 16);};
90 unsigned int get_size_group(
void) {
return (
unsigned int) size + (((
unsigned int)((header & 0x003F) ^ 0x0020)) << 16);};
91 unsigned int get_header12(
void) {
return (header & 0xFFF0);};
92 unsigned int get_header10(
void) {
return (header & 0xFFC0);};
93 unsigned int get_header8(
void) {
return (header & 0xFF00);};
103 int br =
fh->read_data(data, 4);
104 if (br <= 0)
return br;
105 unsigned int chunk_size = 0;
106 if (evt->get_header8() == 0) {
107 B2DEBUG(29,
"Group Header $" << std::hex << evt->get_header10() <<
" Chunk size " << std::dec << evt->get_size());
108 chunk_size = evt->get_size_group();
110 B2DEBUG(29,
"Header $" << std::hex << evt->get_header12() <<
" Chunk size " << std::dec << evt->get_size());
111 chunk_size = evt->get_size();
113 if (chunk_size <= 1)
return 0;
114 br =
fh->read_data(data + 4, chunk_size * 4 - 4);
115 if (br <= 0)
return br;
116 if (evt->get_header12() == 0xe230) {
117 B2DEBUG(29,
"File info " << std::hex << evt->get_header12() <<
" Events " << std::dec << data32[1]);
119 }
else if (evt->get_header12() == 0xe100) {
120 B2DEBUG(29,
"Info Event " << std::hex << evt->get_header12() <<
" RunNr $" << std::hex << data32[1]);
123 }
else if (evt->get_header10() == 0x0000) {
124 B2DEBUG(29,
"Run Event Group " << std::hex << evt->get_header10() <<
" Magic $" << std::hex << data32[1]);
126 }
else if (evt->get_header12() == 0xbb00) {
127 B2DEBUG(29,
"Run Event " << std::hex << evt->get_header12() <<
" Magic $" << std::hex << data32[1]);
129 }
else if (evt->get_header10() == 0x0080) {
130 int togo = chunk_size;
131 B2DEBUG(29,
"Data Event Group " << std::hex << evt->get_header10() <<
" TriggerNr $" << std::hex << data32[1]);
132 triggernr = data32[1];
137 B2DEBUG(29,
"TOGO: " << togo);
138 B2DEBUG(29,
" ............... " << std::hex << data32[0] <<
" TriggerNr $" << std::hex << data32[1]);
139 if (triggernr != data32[1]) B2ERROR(
"Trigger Nr does not match!");
140 B2DEBUG(29,
" ............... " << std::hex << data32[2]);
144 if ((data32[0] & 0xFFFF0000) == 0xCAFE0000) {
145 int frames = (data32[0] & 0x3FF);
146 B2DEBUG(29,
"Frames: " << frames);
148 bool nocrc = (data32[0] & 0x8000) != 0;
150 if ((data32[0] & 0x4000) == 0) B2FATAL(
"large data fields not supported");
156 std::vector <unsigned int> m_onsen_header;
159 std::vector <std::vector <unsigned char>> m_onsen_payload;
160 int offset = ((frames + 1) & ~1);
169 for (
int i = 0; i < frames; i++) {
174 std::vector <unsigned char> m_current_frame;
176 for (
int j = 0; j < (int)table16[i] * 2; j++) {
177 unsigned short w = data16[offset++];
178 m_current_frame.push_back((
unsigned char)(w >> 8));
179 m_current_frame.push_back((
unsigned char)(w));
183 dhe_crc_32_type current_crc;
184 current_crc.process_bytes(m_current_frame.data(), m_current_frame.size());
185 unsigned int w = current_crc.checksum();
186 m_current_frame.push_back((
unsigned char)(w >> 24));
187 m_current_frame.push_back((
unsigned char)(w >> 16));
188 m_current_frame.push_back((
unsigned char)(w >> 8));
189 m_current_frame.push_back((
unsigned char)(w));
192 m_onsen_header.push_back(m_current_frame.size());
193 m_onsen_payload.push_back(m_current_frame);
195 togo -= ((frames + 1) & ~1) / 2 + size;
196 data32 += ((frames + 1) & ~1) / 2 + size;
197 data16 += ((frames + 1) & ~1) + size * 2;
205 m_rawPXD.appendNew(m_onsen_header, m_onsen_payload);
210 B2INFO(
"Set Meta: Exp " <<
m_expNr <<
" Run " <<
m_runNr <<
" TrgNr " << triggernr);
220 B2ERROR(
"Undefine Header $" << std::hex << evt->get_header12());