42def main(dump, count, port, gap, frame_type):
43 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
44
45 s.bind(('', port))
46
47 prev_stream = {}
48 i=0
49 dtstart = time.time()
50 dtlast = dtstart
51 sampling = 100000
52 match frame_type:
53 case 'wib':
54 frame_class = fddetdataformats.WIBEthFrame
55 port = port if not port is None else 0x4444
56 gap = gap if not gap is None else 2048
57 case 'tde':
58 frame_class = fddetdataformats.TDEEthFrame
59 port = port if not port is None else 54323
60 gap = gap if not gap is None else 2000
61
62 print('Starting receiver')
63 while (count==None or i<count):
64
65 data, address = s.recvfrom(20000)
66 wf = frame_class(data)
67 header = wf.get_daqheader()
68
69
70
71 hdr_id = (header.det_id, header.crate_id, header.slot_id, header.stream_id)
72
73
74 stream_ts = header.timestamp
75
76 if dump:
77 dump_data(data[0:32])
78
79 if hdr_id not in prev_stream:
80 pass
81 else:
82 prev_strm_ts = prev_stream[hdr_id]
83 if (stream_ts - prev_strm_ts) != FRAME_TS_GAP:
84 print(f'delta_ts {stream_ts-prev_strm_ts} for {hdr_id} ')
85
86
87
88
89
90
91 prev_stream[hdr_id] = stream_ts
92
93
94 i+=1;
95 if i%100000 ==0:
96 dtnow = time.time()
97 avg_throughput = FRAME_SIZE*i/(1000000*(dtnow-dtstart))
98 throughput = FRAME_SIZE*sampling/(1000000*(dtnow-dtlast))
99 print(f'Received {i} packets; throughput = {throughput:.3f} MB/s [avg = {avg_throughput:.3f} MB/s]')
100 dtlast = dtnow
101 print_header(wf)
102 for k,ts in prev_stream.items():
103 if ts is None:
104 continue
105 print(f"stream {k}: last_ts {ts}")
106
107
108
109
110
111
112
int main(int argc, char **argv)