15 #if __BYTE_ORDER == __LITTLE_ENDIAN
16 #define le32_to_cpu(i) (i)
18 #define le32_to_cpu(i) bswap_32(i)
27 int event_size, size_read;
29 size_read = fread(pevent, 1,
sizeof(EVENT_HEADER), fp);
30 if (size_read !=
sizeof(EVENT_HEADER))
35 size_read = fread(pevent +
sizeof(EVENT_HEADER), 1, event_size, fp);
36 if (size_read != event_size)
44 typedef int (*
comp_fcn)(
void *input,
int input_size,
unsigned char *output,
int userParam);
46 void compress_bank(
void *input_data,
int input_size,
void *output_event,
47 char *output_name,
comp_fcn f,
int userParam)
50 unsigned char *compressed_bank;
51 bk_create(output_event, output_name, TID_BYTE, &compressed_bank);
54 int compressed_size = (*f) (input_data, input_size, compressed_bank, userParam);
57 int *checksum_ptr = (
int *) &compressed_bank[compressed_size];
58 *checksum_ptr = adler32(0x5555, (
unsigned char *) input_data, input_size);
61 bk_close(output_event, compressed_bank + compressed_size +
sizeof(
int));
64 printf(
"%s: %d %d %0.3f\n", output_name, input_size, compressed_size,
65 ((
double) compressed_size)/input_size);
69 void compress_event(
void *input_event,
void *output_event,
bool USE_OLD_COMPRESSION)
72 BANK_HEADER *bank_header = (BANK_HEADER *)input_event;
73 BOOL is_32 = (bank_header->flags & BANK_FORMAT_32BIT);
76 memcpy(output_event, input_event,
77 bank_header->data_size +
sizeof(BANK_HEADER));
81 BANK32 *input_bank = NULL;
82 void *input_data = NULL;
86 bk_iterate32(input_event, &input_bank, &input_data);
87 if (input_bank == NULL) {
93 sprintf(output_name,
"CTD%c", input_bank->name[3]);
97 && !strncmp(input_bank->name,
"ADC", 3)) {
98 sprintf(output_name,
"CAD%c", input_bank->name[3]);
101 }
else if (USE_OLD_COMPRESSION &&
103 && input_bank->name[0] ==
'N'
104 && (input_bank->name[1] ==
'a' ||
105 input_bank->name[1] ==
'b' ||
106 input_bank->name[1] ==
'c' ||
107 input_bank->name[1] ==
'd')
108 && isxdigit(input_bank->name[2])
109 && isxdigit(input_bank->name[3])) {
110 printf(
"Using run10 compression\n");
111 sprintf(output_name,
"n%c%c%c", input_bank->name[1],
112 input_bank->name[2], input_bank->name[3]);
113 int board_number = 16*(input_bank->name[2]-
'0') + (input_bank->name[3]-
'0');
117 else if (!USE_OLD_COMPRESSION &&
118 input_bank->name[0] ==
'N'
119 && input_bank->name[1] >=
'a'
120 && input_bank->name[1] <=
'h'
121 && isxdigit(input_bank->name[2])
122 && isxdigit(input_bank->name[3])) {
123 printf(
"Using run11+ compression\n");
124 sprintf(output_name,
"n%c%c%c", input_bank->name[1],
125 input_bank->name[2], input_bank->name[3]);
126 int board_number = 16*(input_bank->name[2]-
'0') + (input_bank->name[3]-
'0');
136 && !strncmp(input_bank->name,
"CAE", 3)) {
137 sprintf(output_name,
"CCA%c", input_bank->name[3]);
141 && !strncmp(input_bank->name,
"CMP", 3)) {
142 sprintf(output_name,
"CCM%c", input_bank->name[3]);
148 if(input_event != output_event) {
150 bk_create(output_event, input_bank->name, input_bank->type,
152 memcpy(output_data, input_data, input_size);
153 bk_close(output_event, output_data + input_size);
163 BANK_HEADER *bank_header = (BANK_HEADER *)input_event;
164 BOOL is_32 = (bank_header->flags & BANK_FORMAT_32BIT);
166 if(!is_32 || EVENT_ID(input_event) != 1) {
167 memcpy(output_event, input_event,
168 bank_header->data_size +
sizeof(BANK_HEADER));
172 BANK32 *input_bank = NULL;
173 void *input_data = NULL;
177 bk_iterate32(input_event, &input_bank, &input_data);
178 if (input_bank == NULL) {
183 if (!strncmp(input_bank->name,
"RTPC", 4)) {
186 }
else if (!strncmp(input_bank->name,
"RHIT", 4)) {
189 }
else if (!strncmp(input_bank->name,
"SKIM", 4)) {
191 if(input_event != output_event) {
193 bk_create(output_event,
"GSKM", input_bank->type,
195 memcpy(output_data, input_data, input_size);
196 bk_close(output_event, output_data + input_size);
198 }
else if (USE_OLD_COMPRESSION &&
200 && input_bank->name[0] ==
'N'
201 && (input_bank->name[1] ==
'a' ||
202 input_bank->name[1] ==
'b' ||
203 input_bank->name[1] ==
'c' ||
204 input_bank->name[1] ==
'd')
205 && isxdigit(input_bank->name[2])
206 && isxdigit(input_bank->name[3])) {
207 sprintf(output_name,
"n%c%c%c", input_bank->name[1],
208 input_bank->name[2], input_bank->name[3]);
209 int board_number = 16*(input_bank->name[2]-
'0') + (input_bank->name[3]-
'0');
213 else if (!USE_OLD_COMPRESSION &&
214 input_bank->name[0] ==
'N'
215 && input_bank->name[1] >=
'a'
216 && input_bank->name[1] <=
'h'
217 && isxdigit(input_bank->name[2])
218 && isxdigit(input_bank->name[3])) {
219 sprintf(output_name,
"n%c%c%c", input_bank->name[1],
220 input_bank->name[2], input_bank->name[3]);
221 int board_number = 16*(input_bank->name[2]-
'0') + (input_bank->name[3]-
'0');
230 else if (!strncmp(input_bank->name,
"ADC", 3)) {
231 sprintf(output_name,
"CAD%c", input_bank->name[3]);
234 }
else if (keep_etc && (!strncmp(input_bank->name,
"LAD", 3) ||
237 !strncmp(input_bank->name,
"CAET", 4)))
242 if(input_event != output_event) {
244 bk_create(output_event, input_bank->name, input_bank->type,
246 memcpy(output_data, input_data, input_size);
247 bk_close(output_event, output_data + input_size);
253 typedef int (*
expand_fcn)(
unsigned char *input,
int input_size,
void *output,
int userParam);
255 void expand_bank(
unsigned char *input_data,
int input_size,
void *output_event,
256 char *output_name,
expand_fcn f,
int userParam)
258 unsigned char *uncompressed_bank;
259 int bank_type = TID_DWORD;
260 if(output_name[0] ==
'N') bank_type = TID_BYTE;
261 bk_create(output_event, output_name, bank_type, &uncompressed_bank);
264 int uncompressed_size = (*f) (input_data, input_size -
sizeof(int),
265 uncompressed_bank, userParam);
268 int checksum = adler32(0x5555, uncompressed_bank, uncompressed_size);
269 int *checksum_ptr = (
int *) &input_data[input_size-
sizeof(
int)];
270 if(checksum != *checksum_ptr) {
271 printf(
"*** CHECKSUM TEST FAILED: Bank %s (0x%x -> 0x%x) ***\n",
272 output_name, *checksum_ptr, checksum);
280 bk_close(output_event, uncompressed_bank + uncompressed_size);
283 void expand_event(
void *input_event,
void *output_event,
bool USE_OLD_COMPRESSION)
286 BANK_HEADER *bank_header = (BANK_HEADER *)input_event;
287 BOOL is_32 = (bank_header->flags & BANK_FORMAT_32BIT);
290 memcpy(output_event, input_event,
291 bank_header->data_size +
sizeof(BANK_HEADER));
295 BANK32 *input_bank = NULL;
296 unsigned char *input_data = NULL;
300 bk_iterate32(input_event, &input_bank, &input_data);
301 if (input_bank == NULL) {
306 if (!strncmp(input_bank->name,
"CTD", 3)) {
307 sprintf(output_name,
"TDC%c", input_bank->name[3]);
310 }
else if(USE_OLD_COMPRESSION &&
311 input_bank->name[0] ==
'n'
312 && (input_bank->name[1] ==
'a' ||
313 input_bank->name[1] ==
'b' ||
314 input_bank->name[1] ==
'c' ||
315 input_bank->name[1] ==
'd')
316 && isxdigit(input_bank->name[2])
317 && isxdigit(input_bank->name[3])) {
318 sprintf(output_name,
"N%c%c%c", input_bank->name[1],
319 input_bank->name[2], input_bank->name[3]);
320 int board_number = 16*(input_bank->name[2]-
'0') + (input_bank->name[3]-
'0');
324 else if(!USE_OLD_COMPRESSION &&
325 input_bank->name[0] ==
'n'
326 && input_bank->name[1] >=
'a'
327 && input_bank->name[1] <=
'h'
328 && isxdigit(input_bank->name[2])
329 && isxdigit(input_bank->name[3])) {
330 sprintf(output_name,
"N%c%c%c", input_bank->name[1],
331 input_bank->name[2], input_bank->name[3]);
332 int board_number = 16*(input_bank->name[2]-
'0') + (input_bank->name[3]-
'0');
333 if(board_number < 128) {
341 else if (!strncmp(input_bank->name,
"CAD", 3)) {
342 sprintf(output_name,
"ADC%c", input_bank->name[3]);
345 }
else if (!strncmp(input_bank->name,
"CCA", 3)) {
346 sprintf(output_name,
"CAE%c", input_bank->name[3]);
349 }
else if (!strncmp(input_bank->name,
"CCM", 3)) {
350 sprintf(output_name,
"CMP%c", input_bank->name[3]);
353 }
else if (!strncmp(input_bank->name,
"HITZ", 4)) {
356 }
else if (!strncmp(input_bank->name,
"CTPC", 4)) {
362 if(input_event != output_event) {
364 bk_create(output_event, input_bank->name, input_bank->type,
366 memcpy(output_data, input_data, input_size);
367 bk_close(output_event, output_data + input_size);
378 if (USE_OLD_COMPRESSION){
394 if (USE_OLD_COMPRESSION){