def getUnique(self, pcentre): pcentre = np.radians(pcentre) ra = pcentre[0] dec = pcentre[1] xyzrot = np.zeros(self.xyz.shape) xyzrot[:, 0] = np.sin(ra) * self.xyz[:, 0] + np.cos(ra) * self.xyz[:, 1] xyzrot[:, 1] = -np.sin(dec) * np.cos(ra) * self.xyz[:, 0] + np.sin( dec) * np.sin(ra) * self.xyz[:, 1] + np.cos(dec) * self.xyz[:, 2] xyzrot[:, 2] = np.cos(dec) * np.cos(ra) * self.xyz[:, 0] - np.cos( dec) * np.sin(ra) * self.xyz[:, 1] + np.sin(dec) * self.xyz[:, 2] uvwpos = np.zeros((self.nvis, 3)) uvwpos[:, 0] = utils.diffcomb(xyzrot[:, 0]) uvwpos[:, 1] = utils.diffcomb(xyzrot[:, 1]) uvwpos[:, 2] = utils.diffcomb(xyzrot[:, 2]) uvw = uvwpos unique_uvw = unique_rows(np.round(uvw, decimals=3)) nunique = unique_uvw.shape[0] #generate a dictionary between each baseline and unique baseline unique_dictionary = {} for mm in range(uvw.shape[0]): row = np.where((np.round(uvw[mm, :], decimals=3) == np.round( unique_uvw, decimals=3)).all(axis=1))[0][0] unique_dictionary[mm] = row return nunique, unique_dictionary, unique_uvw, uvw
def chgphasecentre(self,pcentre): if(not(self.driftMode)): self.pcentre=pcentre pcentre=np.radians(pcentre) ra=pcentre[0] dec=pcentre[1] xyzrot=np.zeros(self.xyz.shape) xyzrot[:,0]=np.sin(ra)*self.xyz[:,0]+np.cos(ra)*self.xyz[:,1] xyzrot[:,1]=-np.sin(dec)*np.cos(ra)*self.xyz[:,0]+np.sin(dec)*np.sin(ra)*self.xyz[:,1]+np.cos(dec)*self.xyz[:,2] xyzrot[:,2]=np.cos(dec)*np.cos(ra)*self.xyz[:,0]-np.cos(dec)*np.sin(ra)*self.xyz[:,1]+np.sin(dec)*self.xyz[:,2] uvwpos=np.zeros((self.nvis,3)) uvwpos[:,0]=utils.diffcomb(xyzrot[:,0]) uvwpos[:,1]=utils.diffcomb(xyzrot[:,1]) uvwpos[:,2]=utils.diffcomb(xyzrot[:,2]) self.uvw=uvwpos self.unique_uvw=unique_rows(np.around(self.uvw,decimals=3)) # for mm in range(self.unique_uvw.shape[0]): # self.redundancy_uvw[mm]=self.uvw[(self.uvw==self.unique_uvw[mm,:]).any(axis=1),:].shape[0] self.nunique=self.unique_uvw.shape[0] # print self.nunique self.model_true=np.zeros((len(self.freqs),self.nunique),dtype=complex) # plt.scatter(uvwpos[:,0],uvwpos[:,1]) # plt.show() # plt.close() else: self.pcentre=np.array([self.lst,self.lat]) #print 'pcenter='+str(self.pcenter) return
def chgphasecentre(self, pcentre): if (not (self.driftMode)): self.pcentre = pcentre pcentre = np.radians(pcentre) ra = pcentre[0] dec = pcentre[1] xyzrot = np.zeros(self.xyz.shape) xyzrot[:, 0] = np.sin(ra) * self.xyz[:, 0] + np.cos(ra) * self.xyz[:, 1] xyzrot[:, 1] = -np.sin(dec) * np.cos(ra) * self.xyz[:, 0] + np.sin( dec) * np.sin(ra) * self.xyz[:, 1] + np.cos(dec) * self.xyz[:, 2] xyzrot[:, 2] = np.cos(dec) * np.cos(ra) * self.xyz[:, 0] - np.cos( dec) * np.sin(ra) * self.xyz[:, 1] + np.sin(dec) * self.xyz[:, 2] uvwpos = np.zeros((self.nvis, 3)) uvwpos[:, 0] = utils.diffcomb(xyzrot[:, 0]) uvwpos[:, 1] = utils.diffcomb(xyzrot[:, 1]) uvwpos[:, 2] = utils.diffcomb(xyzrot[:, 2]) self.uvw = uvwpos self.unique_uvw = unique_rows(np.around(self.uvw, decimals=3)) # for mm in range(self.unique_uvw.shape[0]): # self.redundancy_uvw[mm]=self.uvw[(self.uvw==self.unique_uvw[mm,:]).any(axis=1),:].shape[0] self.nunique = self.unique_uvw.shape[0] # print self.nunique self.model_true = np.zeros((len(self.freqs), self.nunique), dtype=complex) # plt.scatter(uvwpos[:,0],uvwpos[:,1]) # plt.show() # plt.close() else: self.pcentre = np.array([self.lst, self.lat]) #print 'pcenter='+str(self.pcenter) return
def getUnique(self,pcentre): pcentre=np.radians(pcentre) ra=pcentre[0] dec=pcentre[1] xyzrot=np.zeros(self.xyz.shape) xyzrot[:,0]=np.sin(ra)*self.xyz[:,0]+np.cos(ra)*self.xyz[:,1] xyzrot[:,1]=-np.sin(dec)*np.cos(ra)*self.xyz[:,0]+np.sin(dec)*np.sin(ra)*self.xyz[:,1]+np.cos(dec)*self.xyz[:,2] xyzrot[:,2]=np.cos(dec)*np.cos(ra)*self.xyz[:,0]-np.cos(dec)*np.sin(ra)*self.xyz[:,1]+np.sin(dec)*self.xyz[:,2] uvwpos=np.zeros((self.nvis,3)) uvwpos[:,0]=utils.diffcomb(xyzrot[:,0]) uvwpos[:,1]=utils.diffcomb(xyzrot[:,1]) uvwpos[:,2]=utils.diffcomb(xyzrot[:,2]) uvw=uvwpos unique_uvw=unique_rows(np.round(uvw,decimals=3)) nunique=unique_uvw.shape[0] #generate a dictionary between each baseline and unique baseline unique_dictionary={} for mm in range(uvw.shape[0]): row=np.where((np.round(uvw[mm,:],decimals=3)==np.round(unique_uvw,decimals=3)).all(axis=1))[0][0] unique_dictionary[mm]=row return nunique,unique_dictionary,unique_uvw,uvw