存储值并继续 运行 函数
store values and continue running function
我正在使用 astropy 来检测图像中的来源。我正在尝试编写一个函数来检测我的源,可以选择将它们的坐标存储在一个数组中,另一个选项可以绘制源。这是我的代码:
def SourceDetect(file, SIG, FWHM, THRESH, store = False, PlotStars = False):
image = pf.open(file)
im = image[0].data
mean, median, std = sigma_clipped_stats(im, sigma=SIG)
daofind = DAOStarFinder(fwhm = FWHM, threshold = THRESH * std)
sources = daofind(im - median)
positions = np.transpose((sources['xcentroid'], sources['ycentroid']))
if(store):
return positions
if(PlotStars):
apertures = CircularAperture(positions, r = 6.)
norm = ImageNormalize(stretch = SqrtStretch())
plt.imshow(im, cmap = 'Greys', origin = 'lower', norm = norm,
interpolation = 'nearest')
apertures.plot(color = 'blue', lw = 1.5, alpha = 1)
for i in range(0, len(sources)):
plt.text(sources[i]['xcentroid'], sources[i]['ycentroid'], i, color='black');
然而,当我 运行 将存储和绘图都设置为 True 的代码时,只有函数 运行s 的存储部分,除非我将存储设置为 False,否则我无法绘制它.有没有办法编写此代码,以便我能够存储和绘制我的坐标?
简单更改顺序 - 第一个 PlotStars
,下一个 store
if PlotStars:
# ... code ...
if store:
return positions
这将首先显示绘图,然后它会退出带有值的函数。
但是如果你想先获取值然后再绘制那么你应该 运行 两次 - 首先只用 store=True
然后只用 PlotStars=True
我正在使用 astropy 来检测图像中的来源。我正在尝试编写一个函数来检测我的源,可以选择将它们的坐标存储在一个数组中,另一个选项可以绘制源。这是我的代码:
def SourceDetect(file, SIG, FWHM, THRESH, store = False, PlotStars = False):
image = pf.open(file)
im = image[0].data
mean, median, std = sigma_clipped_stats(im, sigma=SIG)
daofind = DAOStarFinder(fwhm = FWHM, threshold = THRESH * std)
sources = daofind(im - median)
positions = np.transpose((sources['xcentroid'], sources['ycentroid']))
if(store):
return positions
if(PlotStars):
apertures = CircularAperture(positions, r = 6.)
norm = ImageNormalize(stretch = SqrtStretch())
plt.imshow(im, cmap = 'Greys', origin = 'lower', norm = norm,
interpolation = 'nearest')
apertures.plot(color = 'blue', lw = 1.5, alpha = 1)
for i in range(0, len(sources)):
plt.text(sources[i]['xcentroid'], sources[i]['ycentroid'], i, color='black');
然而,当我 运行 将存储和绘图都设置为 True 的代码时,只有函数 运行s 的存储部分,除非我将存储设置为 False,否则我无法绘制它.有没有办法编写此代码,以便我能够存储和绘制我的坐标?
简单更改顺序 - 第一个 PlotStars
,下一个 store
if PlotStars:
# ... code ...
if store:
return positions
这将首先显示绘图,然后它会退出带有值的函数。
但是如果你想先获取值然后再绘制那么你应该 运行 两次 - 首先只用 store=True
然后只用 PlotStars=True