def test_cb_callback(self): cb1 = CollateBuffer(nant=NANT,npol=1,nchan=2048,nwin=1) cb2 = CollateBuffer(nant=NANT,npol=1,nchan=2048,nwin=1, sdisp=1, sdisp_destination_ip="192.168.1.196") def callback(i,j,pol,t,data, flags): global data_in_readout data_in_readout = True cb1.set_callback(callback) bs = BufferSocket() bs.set_callback(cb1) bs.start(PORT) xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x, intlen=1562500) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None cnt = 0 while True: for x in xstreams: pkt = x.next() pkt.currerr = cnt cnt += 1 if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp > timestamp + 2: break loopback(pkt.pack(), port=PORT) cb2.collate_packet(pkt) time.sleep(.0001) if pkt.timestamp > timestamp + 2: break bs.stop() self.assertTrue(data_in_readout)
def dtest_all_data(self): cb = CollateBuffer(nant=NANT,npol=1,nchan=2048,nwin=1) def callback(i,j,pol,t,data,flags): self.assertTrue(n.all(flags == 0)) cb.set_callback(callback) bs = BufferSocket() bs.set_callback(cb) bs.start(PORT) xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp > timestamp + 2: break loopback(pkt.pack(), port=PORT) time.sleep(.0001) if pkt.timestamp > timestamp + 2: break bs.stop()
def test_readout(self): cb = CollateBuffer(nant=NANT, npol=1, nchan=2048, nwin=1) xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None def callback(i, j, pol, t, data, flags): self.assertEqual(data.shape, (2048, )) self.assertEqual(flags.shape, (2048, )) self.assertTrue(data.flags.owndata) self.assertTrue(flags.flags.owndata) data_r = n.array([sim.decode_32bit(d) \ for d in data.real.astype(n.int32)]) data_i = n.array([sim.decode_32bit(d) \ for d in data.imag.astype(n.int32)]) #print i,j,pol,t,flags.sum(), #print data_r[0,:], data_i[0,:] self.assertTrue(n.all(data_r[:, 0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_r[:,1] == j)) self.assertTrue(n.all(data_r[:, 2] == pol)) self.assertTrue(n.all(data_r[:, 3] == 0)) self.assertTrue(n.all(data_r[:, 4] == n.arange(2048))) self.assertTrue(n.all(data_i[:, 0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_i[:,1] == j)) self.assertTrue(n.all(data_i[:, 2] == pol)) self.assertTrue(n.all(data_i[:, 3] == 1)) self.assertTrue(n.all(data_i[:, 4] == n.arange(2048))) cb.set_callback(callback) while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp > timestamp + 2: break cb.collate_packet(pkt) if pkt.timestamp > timestamp + 2: break
def test_readout(self): cb = CollateBuffer(nant=NANT,npol=1,nchan=2048,nwin=1) xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None def callback(i,j,pol,t,data,flags): self.assertEqual(data.shape, (2048,)) self.assertEqual(flags.shape, (2048,)) self.assertTrue(data.flags.owndata) self.assertTrue(flags.flags.owndata) data_r = n.array([sim.decode_32bit(d) \ for d in data.real.astype(n.int32)]) data_i = n.array([sim.decode_32bit(d) \ for d in data.imag.astype(n.int32)]) #print i,j,pol,t,flags.sum(), #print data_r[0,:], data_i[0,:] self.assertTrue(n.all(data_r[:,0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_r[:,1] == j)) self.assertTrue(n.all(data_r[:,2] == pol)) self.assertTrue(n.all(data_r[:,3] == 0)) self.assertTrue(n.all(data_r[:,4] == n.arange(2048))) self.assertTrue(n.all(data_i[:,0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_i[:,1] == j)) self.assertTrue(n.all(data_i[:,2] == pol)) self.assertTrue(n.all(data_i[:,3] == 1)) self.assertTrue(n.all(data_i[:,4] == n.arange(2048))) cb.set_callback(callback) while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp > timestamp + 2: break cb.collate_packet(pkt) if pkt.timestamp > timestamp + 2: break
class TestCollateBuffer(unittest.TestCase): def setUp(self): self.cb = CollateBuffer(nant=NANT,npol=1,nchan=2048,nwin=1) def test_xeng_bl_order(self): for i in range(32): h = CollateBuffer(nant=i,npol=1,nchan=1,nwin=1) self.assertEqual(h.xeng_bl_order(), sim.get_bl_order(i)) def test_collate_packet(self): pkt = CorrPacket() # Make sure a correctly formatted packet is accepted self.cb.collate_packet(pkt) # Make sure bad packets are rejected pkt.instrument_id = 5 self.assertRaises(ValueError, self.cb.collate_packet, pkt) def test_get_buffer(self): dbuf,fbuf = self.cb.get_buffer() self.assertEqual(dbuf.shape, (147456,)) self.assertEqual(dbuf.dtype, n.int32) self.assertEqual(fbuf.shape, (147456/2,)) self.assertEqual(fbuf.dtype, n.int32) self.assertFalse(dbuf.flags.owndata) self.assertFalse(fbuf.flags.owndata) def test_set_unset_callback(self): def callback_func(i,j,pol,t,data,flags): print i,j,pol,t,data,flags self.cb.set_callback(callback_func) self.cb.unset_callback() def test_collating(self): xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp != timestamp: break self.cb.collate_packet(pkt) if pkt.timestamp != timestamp: break dbuf,fbuf = self.cb.get_buffer() self.assertEqual(len(n.where(dbuf == 0)), 1) dbuf = n.array([sim.decode_32bit(d) for d in dbuf]) # nwin, nchan, npol, bls, r/i, fields dbuf.shape = (1, 2048, 1, len(self.cb.xeng_bl_order()), 2, 5) # Check real/imag self.assertTrue(n.all(dbuf[...,0,3] == 0)) self.assertTrue(n.all(dbuf[...,1,3] == 1)) # Check pol self.assertTrue(n.all(dbuf[...,0,:,2] == 0)) # Check chan chans = n.arange(2048) ; chans.shape = (1,2048,1,1,1) self.assertTrue(n.all(dbuf[...,4] == chans)) # Check bl blorder = n.array([(i,j) for j in range(NANT) for i in range(j+1)]) iorder = blorder[:,0]; iorder.shape = (1,1,1,iorder.size,1) jorder = blorder[:,1]; jorder.shape = (1,1,1,jorder.size,1) self.assertTrue(n.all(dbuf[...,0] == iorder)) self.assertTrue(n.all(dbuf[...,1] == jorder)) def test_readout(self): cb = CollateBuffer(nant=NANT,npol=1,nchan=2048,nwin=1) xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None def callback(i,j,pol,t,data,flags): self.assertEqual(data.shape, (2048,)) self.assertEqual(flags.shape, (2048,)) self.assertTrue(data.flags.owndata) self.assertTrue(flags.flags.owndata) data_r = n.array([sim.decode_32bit(d) \ for d in data.real.astype(n.int32)]) data_i = n.array([sim.decode_32bit(d) \ for d in data.imag.astype(n.int32)]) #print i,j,pol,t,flags.sum(), #print data_r[0,:], data_i[0,:] self.assertTrue(n.all(data_r[:,0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_r[:,1] == j)) self.assertTrue(n.all(data_r[:,2] == pol)) self.assertTrue(n.all(data_r[:,3] == 0)) self.assertTrue(n.all(data_r[:,4] == n.arange(2048))) self.assertTrue(n.all(data_i[:,0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_i[:,1] == j)) self.assertTrue(n.all(data_i[:,2] == pol)) self.assertTrue(n.all(data_i[:,3] == 1)) self.assertTrue(n.all(data_i[:,4] == n.arange(2048))) cb.set_callback(callback) while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp > timestamp + 2: break cb.collate_packet(pkt) if pkt.timestamp > timestamp + 2: break
class TestCollateBuffer(unittest.TestCase): def setUp(self): self.cb = CollateBuffer(nant=NANT, npol=1, nchan=2048, nwin=1) def test_xeng_bl_order(self): for i in range(32): h = CollateBuffer(nant=i, npol=1, nchan=1, nwin=1) self.assertEqual(h.xeng_bl_order(), sim.get_bl_order(i)) def test_collate_packet(self): pkt = CorrPacket() # Make sure a correctly formatted packet is accepted self.cb.collate_packet(pkt) # Make sure bad packets are rejected pkt.instrument_id = 5 self.assertRaises(ValueError, self.cb.collate_packet, pkt) def test_get_buffer(self): dbuf, fbuf = self.cb.get_buffer() self.assertEqual(dbuf.shape, (147456, )) self.assertEqual(dbuf.dtype, n.int32) self.assertEqual(fbuf.shape, (147456 / 2, )) self.assertEqual(fbuf.dtype, n.int32) self.assertFalse(dbuf.flags.owndata) self.assertFalse(fbuf.flags.owndata) def test_set_unset_callback(self): def callback_func(i, j, pol, t, data, flags): print i, j, pol, t, data, flags self.cb.set_callback(callback_func) self.cb.unset_callback() def test_collating(self): xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp != timestamp: break self.cb.collate_packet(pkt) if pkt.timestamp != timestamp: break dbuf, fbuf = self.cb.get_buffer() self.assertEqual(len(n.where(dbuf == 0)), 1) dbuf = n.array([sim.decode_32bit(d) for d in dbuf]) # nwin, nchan, npol, bls, r/i, fields dbuf.shape = (1, 2048, 1, len(self.cb.xeng_bl_order()), 2, 5) # Check real/imag self.assertTrue(n.all(dbuf[..., 0, 3] == 0)) self.assertTrue(n.all(dbuf[..., 1, 3] == 1)) # Check pol self.assertTrue(n.all(dbuf[..., 0, :, 2] == 0)) # Check chan chans = n.arange(2048) chans.shape = (1, 2048, 1, 1, 1) self.assertTrue(n.all(dbuf[..., 4] == chans)) # Check bl blorder = n.array([(i, j) for j in range(NANT) for i in range(j + 1)]) iorder = blorder[:, 0] iorder.shape = (1, 1, 1, iorder.size, 1) jorder = blorder[:, 1] jorder.shape = (1, 1, 1, jorder.size, 1) self.assertTrue(n.all(dbuf[..., 0] == iorder)) self.assertTrue(n.all(dbuf[..., 1] == jorder)) def test_readout(self): cb = CollateBuffer(nant=NANT, npol=1, nchan=2048, nwin=1) xengs = [sim.XEngine(nant=NANT,npol=1,nchan=2048,engine_id=x) \ for x in range(NANT)] xstreams = [x.get_pkt_stream() for x in xengs] timestamp = None def callback(i, j, pol, t, data, flags): self.assertEqual(data.shape, (2048, )) self.assertEqual(flags.shape, (2048, )) self.assertTrue(data.flags.owndata) self.assertTrue(flags.flags.owndata) data_r = n.array([sim.decode_32bit(d) \ for d in data.real.astype(n.int32)]) data_i = n.array([sim.decode_32bit(d) \ for d in data.imag.astype(n.int32)]) #print i,j,pol,t,flags.sum(), #print data_r[0,:], data_i[0,:] self.assertTrue(n.all(data_r[:, 0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_r[:,1] == j)) self.assertTrue(n.all(data_r[:, 2] == pol)) self.assertTrue(n.all(data_r[:, 3] == 0)) self.assertTrue(n.all(data_r[:, 4] == n.arange(2048))) self.assertTrue(n.all(data_i[:, 0] == i)) # not enough dynamic range in float to resolve j #self.assertTrue(n.all(data_i[:,1] == j)) self.assertTrue(n.all(data_i[:, 2] == pol)) self.assertTrue(n.all(data_i[:, 3] == 1)) self.assertTrue(n.all(data_i[:, 4] == n.arange(2048))) cb.set_callback(callback) while True: for x in xstreams: pkt = x.next() if timestamp is None: timestamp = pkt.timestamp if pkt.timestamp > timestamp + 2: break cb.collate_packet(pkt) if pkt.timestamp > timestamp + 2: break