Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 def dtest_set_unset_callback(self):
     def callback(s): pass
     self.bs.set_callback(callback)
     self.bs.unset_callback()
     cb = CollateBuffer(nant=8,npol=1,nchan=2048,nwin=1)
     self.bs.set_callback(cb)
     self.bs.unset_callback()
     self.assertRaises(TypeError, self.bs.set_callback, (None,))
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 def setUp(self):
     self.cb = CollateBuffer(nant=NANT, npol=1, nchan=2048, nwin=1)
Exemplo n.º 6
0
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
Exemplo n.º 7
0
 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))