def test_get_reds(self): antpos = np.array([[0.,0,0],[1,0,0],[2,0,0],[3,0,0]]) reds = [[(0,1),(1,2),(2,3)],[(0,2),(1,3)]] i = Oi.RedundantInfo() i.init_from_reds(reds,antpos) reds2 = i.get_reds() self.assertEqual(reds, reds2)
def test_tofromnpz(self): i1 = Oi.RedundantInfoLegacy() i1.fromfile_txt(redinfo_psa32) i2 = Oi.RedundantInfo() i1.to_npz(tmpnpz) i2.from_npz(tmpnpz) self.assertTrue(i1.get_reds() == i2.get_reds())
def test_basic_getsetitem(self): i = Oi.RedundantInfo() i.nAntenna = 32 self.assertEqual(i.nAntenna, 32) self.assertEqual(i['nAntenna'], 32) i['nAntenna'] = 64 self.assertEqual(i.nAntenna, 64) self.assertEqual(i['nAntenna'], 64)
def test_tofrom_reds(self): i1 = Oi.RedundantInfoLegacy() i1.fromfile_txt(redinfo_psa32) reds = i1.get_reds() antpos = i1.get_antpos() i2 = Oi.RedundantInfo() i2.init_from_reds(reds, antpos) self.assertTrue(np.all(i1.antloc == i2.antloc)) self.assertTrue(np.all(i1.bl2d[i1.ublindex] == i2.bl2d[i2.ublindex]))
def test_large_info_IO(self): calibrator = Oc.RedundantCalibrator(150) calibrator.compute_redundantinfo() calibrator.write_redundantinfo(infotestpath, verbose=VERBOSE) info2 = Oi.RedundantInfo(filename=infotestpath) self.assertEqual(calibrator.Info.nAntenna, info2.nAntenna) self.assertEqual(calibrator.Info.nBaseline, info2.nBaseline) self.assertEqual(calibrator.Info.get_reds(), info2.get_reds()) os.remove(infotestpath)
def test_init_from_reds(self): antpos = np.array([[0.,0,0],[1,0,0],[2,0,0],[3,0,0]]) reds = [[(0,1),(1,2),(2,3)],[(0,2),(1,3)]] i = Oi.RedundantInfo() i.init_from_reds(reds,antpos) self.assertEqual(i.nAntenna,4) self.assertTrue(np.all(i.antloc == antpos)) self.assertEqual(i.nBaseline,5) self.assertEqual(i.ublcount[0],3) self.assertEqual(i.ublcount[1],2) self.assertTrue(np.all(i.ublindex == np.arange(5,dtype=np.int32))) self.assertTrue(np.all(i.ubl[0] == np.array([1.,0,0],dtype=np.float32))) self.assertTrue(np.all(i.ubl[1] == np.array([2.,0,0],dtype=np.float32)))
def test_order_data(self): antpos = np.array([[0.,0,0],[1,0,0],[2,0,0],[3,0,0]]) reds = [[(0,1),(1,2),(2,3)],[(0,2),(1,3)]] i = Oi.RedundantInfo() i.init_from_reds(reds,antpos) dd = { (0,1):np.array([[0,1j]]), (1,2):np.array([[0,1j]]), (2,3):np.array([[0,1j]]), (2,0):np.array([[0,1j]]), (1,3):np.array([[0,1j]]), } d = i.order_data(dd) self.assertTrue(np.all(d[...,0] == np.array([[0,1j]]))) self.assertTrue(np.all(d[...,1] == np.array([[0,1j]]))) self.assertTrue(np.all(d[...,2] == np.array([[0,1j]]))) self.assertTrue(np.all(d[...,3] == np.array([[0,1j]]).conj())) self.assertTrue(np.all(d[...,4] == np.array([[0,1j]])))
# # plt.scatter(uniqueBaselines[:,0]/1.0/Separation, uniqueBaselines[:,1]/1.0/Separation,c=np.minimum(redundancy,100000),s=40) # plt.scatter(uniqueBaselines[:,0]/1.0/1.5, uniqueBaselines[:,1]/1.0/1.5,s=40,c=np.log10(np.minimum(redundancy,40))) # plt.xlim(-350,350); plt.ylim(-350,350) # # plt.colorbar() # plt.title('Baseline Redundancy') # #datacursor(display='single',formatter="x={x:.4f}\ny={y:.4f}".format) # #plt.axis('equal') # return np.asarray(positions), np.asarray(positions[0:nCore]) # if __name__ == "__main__": # positions,corePos = HexArray(hexNum = 11, SplitCore = True, SplitCoreOutriggers = True, CutDownTo = None, SpreadOut128 = False) if True: import omnical.info as oi import omnical.arrayinfo as oai redundantInfo = oi.RedundantInfo() positions = np.asarray(positions) reds = oai.compute_reds(positions) redundantInfo.init_from_reds(reds, positions) AtransA = redundantInfo.At.dot(redundantInfo.At.T).toarray() BtransB = redundantInfo.Bt.dot(redundantInfo.Bt.T).toarray() gainVariances = np.diag( np.linalg.pinv(AtransA)[0:len(positions), 0:len(positions)]) print "Gain and phase modes that can't be Omnicaled:" print[ len(XtransX) - np.linalg.matrix_rank(XtransX, tol=1e-10) for XtransX in [AtransA, BtransB] ] plt.figure(3) plt.clf()
plt.xlim(-300, 300) plt.ylim(-300, 300) plt.savefig(prefix + 'base.png', dpi=300) #%% else: plt.figure(1, figsize=(8, 8)) plt.clf() plt.scatter(np.asarray(positions)[:, 0], np.asarray(positions)[:, 1]) plt.xlabel('Position (m)') plt.ylabel('Position (m)') plt.axis('square') if False: import omnical.info as oi import omnical.arrayinfo as oai redundantInfo = oi.RedundantInfo() positions = np.asarray(positions) reds = oai.compute_reds(positions) redundantInfo.init_from_reds(reds, positions) AtransA = redundantInfo.At.dot(redundantInfo.At.T).toarray() BtransB = redundantInfo.Bt.dot(redundantInfo.Bt.T).toarray() gainVariances = np.diag( np.linalg.pinv(AtransA)[0:len(positions), 0:len(positions)]) print "Gain and phase modes that can't be Omnicaled:" print[ len(XtransX) - np.linalg.matrix_rank(XtransX, tol=1e-10) for XtransX in [AtransA, BtransB] ] #%% plt.figure(3)