def _aipscc(self, threshold=None, relative=True,
istokes=0, ifreq=0):
'''
Make AIPS CC table
Arguments:
istokes (integer): index for Stokes Parameter at which the image will be saved
ifreq (integer): index for Frequency at which the image will be saved
threshold (float): pixels with the absolute intensity smaller than this value will be ignored.
relative (boolean): If true, theshold value will be normalized with the peak intensity of the image.
'''
Nx = self.header["nx"]
Ny = self.header["ny"]
xg, yg = self.get_xygrid(angunit="deg")
X, Y = np.meshgrid(xg, yg)
X = X.reshape(Nx * Ny)
Y = Y.reshape(Nx * Ny)
flux = self.data[istokes, ifreq]
flux = flux.reshape(Nx * Ny)
# threshold
if threshold is None:
thres = np.finfo(np.float32).eps
else:
if relative:
thres = self.peak(istokes=istokes, ifreq=ifreq) * threshold
else:
thres = threshold
thres = np.abs(thres)
# adopt threshold
X = X[flux >= thres]
Y = Y[flux >= thres]
flux = flux[flux >= thres]
# make table columns
c1 = pyfits.Column(name='FLUX', array=flux, format='1E',unit='JY')
c2 = pyfits.Column(name='DELTAX', array=X, format='1E',unit='DEGREES')
c3 = pyfits.Column(name='DELTAY', array=Y, format='1E',unit='DEGREES')
c4 = pyfits.Column(name='MAJOR AX', array=np.zeros(len(flux)), format='1E',unit='DEGREES')
c5 = pyfits.Column(name='MINOR AX', array=np.zeros(len(flux)), format='1E',unit='DEGREES')
c6 = pyfits.Column(name='POSANGLE', array=np.zeros(len(flux)), format='1E',unit='DEGREES')
c7 = pyfits.Column(name='TYPE OBJ', array=np.zeros(len(flux)), format='1E',unit='CODE')
# make CC table
tab = pyfits.BinTableHDU.from_columns([c1, c2, c3, c4, c5, c6, c7])
return tab
评论列表
文章目录