File indexing completed on 2025-08-03 08:20:42
0001
0002
0003 #include "buffer.h"
0004 #include <cstdio>
0005 #include <iostream>
0006 #include <iomanip>
0007 #include <cstdlib>
0008 #include <csignal>
0009
0010 #include <unistd.h>
0011 #include <sys/types.h>
0012 #include <sys/stat.h>
0013 #include <fcntl.h>
0014
0015
0016
0017 void exitmsg()
0018 {
0019 std::cout << "** usage: prdfcheck [-v] file name" << std::endl;
0020 exit(0);
0021 }
0022
0023
0024 int
0025 main(int argc, char *argv[])
0026 {
0027
0028 unsigned int buffer[8*8192];
0029
0030 int fd;
0031
0032 fd = open(argv[1], O_RDONLY | O_LARGEFILE);
0033
0034 int needs_swap = 0;
0035 int length;
0036 int ip;
0037
0038 int total_read = 0;
0039
0040 int xc;
0041
0042 xc = read ( fd, (char *)buffer, 8192);
0043
0044 while ( xc == 8192 )
0045 {
0046
0047 ip = 8192;
0048
0049
0050 if ( buffer[1] == BUFFERMARKER ||
0051 buffer::u4swap(buffer[1]) == BUFFERMARKER ||
0052 buffer[1] == ONCSBUFFERMARKER ||
0053 buffer::u4swap(buffer[1]) == ONCSBUFFERMARKER ||
0054 buffer[1] == GZBUFFERMARKER ||
0055 buffer::u4swap(buffer[1]) == GZBUFFERMARKER ||
0056 buffer[1] == LZO1XBUFFERMARKER ||
0057 buffer::u4swap(buffer[1]) == LZO1XBUFFERMARKER ||
0058 buffer[1] == LZO1CBUFFERMARKER ||
0059 buffer::u4swap(buffer[1]) == LZO1CBUFFERMARKER ||
0060 buffer[1] == LZO2ABUFFERMARKER ||
0061 buffer::u4swap(buffer[1]) == LZO2ABUFFERMARKER ||
0062 buffer[1] == BZ2BUFFERMARKER ||
0063 buffer::u4swap(buffer[1]) == BZ2BUFFERMARKER )
0064 {
0065
0066
0067 if ( buffer::u4swap(buffer[1]) == BUFFERMARKER ||
0068 buffer::u4swap(buffer[1]) == ONCSBUFFERMARKER ||
0069 buffer::u4swap(buffer[1]) == GZBUFFERMARKER ||
0070 buffer::u4swap(buffer[1]) == LZO1XBUFFERMARKER ||
0071 buffer::u4swap(buffer[1]) == LZO1CBUFFERMARKER ||
0072 buffer::u4swap(buffer[1]) == LZO2ABUFFERMARKER ||
0073 buffer::u4swap(buffer[1]) == BZ2BUFFERMARKER )
0074 {
0075 needs_swap = 1;
0076 }
0077
0078 if (needs_swap)
0079 {
0080 length = buffer::i4swap(buffer[0]);
0081 }
0082 else
0083 {
0084 length = buffer[0];
0085 }
0086
0087 if ( needs_swap )
0088 {
0089 std::cout << "buffer at record " << std::setw(4) << total_read
0090 << " length = " << std::setw(7) << buffer::i4swap(buffer[0])
0091 << " " << (buffer::i4swap(buffer[0]) + 8192)/8192
0092 << " marker = " << std::hex << buffer::i4swap(buffer[1]) << std::dec << " ";
0093 }
0094 else
0095 {
0096 std::cout << "buffer at record " << std::setw(4) << total_read
0097 << " length = " << std::setw(7) << buffer[0]
0098 << " " << ( buffer[0] + 8192)/8192
0099 << " marker = " << std::hex << buffer[1] << std::dec << " ";
0100 }
0101
0102 if ( buffer[1] == BUFFERMARKER ||
0103 buffer::u4swap(buffer[1]) == BUFFERMARKER ) std::cout << "Uncomp. Marker" << std::endl;
0104 else if ( buffer[1] == ONCSBUFFERMARKER ||
0105 buffer::u4swap(buffer[1]) == ONCSBUFFERMARKER ) std::cout << "sPHENIX Marker" << std::endl;
0106 else if ( buffer[1] == GZBUFFERMARKER ||
0107 buffer::u4swap(buffer[1]) == GZBUFFERMARKER ) std::cout << "GZIP Marker" << std::endl;
0108 else if ( buffer[1] == LZO1XBUFFERMARKER ||
0109 buffer::u4swap(buffer[1]) == LZO1XBUFFERMARKER ||
0110 buffer[1] == LZO1CBUFFERMARKER ||
0111 buffer::u4swap(buffer[1]) == LZO1CBUFFERMARKER ||
0112 buffer[1] == LZO2ABUFFERMARKER ||
0113 buffer::u4swap(buffer[1]) == LZO1CBUFFERMARKER )
0114 {
0115 std::cout << "LZO Marker ";
0116 std::cout << " Or.length: " << buffer[3];
0117 float ratio = 100.*buffer[0]/buffer[3];
0118 std::cout << " " << ratio << "%";
0119
0120 int e = buffer[2] & 0xffff;
0121 int atp = (buffer[2] >> 16) & 0xffff;
0122 if ( atp)
0123 {
0124 std::cout << " events: " << e << " from ATP " << atp << std::endl;
0125 }
0126 else
0127 {
0128 std::cout << std::endl;
0129 }
0130 }
0131
0132 else if ( buffer[1] == BZ2BUFFERMARKER ||
0133 buffer::u4swap(buffer[1]) == BZ2BUFFERMARKER )
0134 {
0135 std::cout << "BZ2 Marker ";
0136 std::cout << " Or.length: " << buffer[3];
0137 float ratio = 100.*buffer[0]/buffer[3];
0138 std::cout << " " << ratio << "%";
0139
0140 int e = buffer[2] & 0xffff;
0141 int atp = (buffer[2] >> 16) & 0xffff;
0142 if ( atp)
0143 {
0144 std::cout << " events: " << e << " from ATP " << atp << std::endl;
0145 }
0146 else
0147 {
0148 std::cout << std::endl;
0149 }
0150 }
0151
0152
0153 while ( ip < length)
0154 {
0155 xc = read ( fd, (char *)buffer, 8192);
0156 if ( xc < 8192 )
0157 {
0158 std::cout << "end or error in read loop at rec " << total_read << std::endl;
0159 exit(1);
0160 }
0161 total_read++;
0162 ip+= 8192;
0163 }
0164 xc = read ( fd, (char *)buffer, 8192);
0165 if ( xc < 8192 )
0166 {
0167 std::cout << "legitimate end or error at rec " << total_read << std::endl;
0168 exit(1);
0169 }
0170 total_read++;
0171
0172 }
0173
0174 else
0175 {
0176 if (needs_swap)
0177 {
0178 std::cout << "found a non-buffer start..."<< total_read
0179 << " length = " << buffer::u4swap(buffer[0]) << " marker = " << std::hex << buffer::i4swap(buffer[1]) << std::dec ;
0180 }
0181 else
0182 {
0183 std::cout << "found a non-buffer start..."<< total_read
0184 << " length = " << buffer[0] << " marker = " << std::hex << buffer[1] << std::dec ;
0185 }
0186
0187 int skipped = 0;
0188 while ( buffer[1] != BUFFERMARKER &&
0189 buffer::u4swap(buffer[1]) != BUFFERMARKER &&
0190 buffer[1] != GZBUFFERMARKER &&
0191 buffer::u4swap(buffer[1]) != GZBUFFERMARKER )
0192 {
0193 xc = read ( fd, (char *)buffer, 8192);
0194 if ( xc < 8192 )
0195 {
0196 std::cout << "end or error in salavge loop at rec " << total_read << std::endl;
0197 exit(1);
0198 }
0199 total_read++;
0200 skipped++;
0201 }
0202 std::cout << " Skipped " << skipped << std::endl;
0203 }
0204 }
0205 return 0;
0206
0207 }
0208