我注意到可以不使用GSObject.draw关键字来调用它。文档指出,如果image = None,则返回自动大小的图像。这个自动尺寸究竟是如何确定的?它是否确保在图像中保留星系通量的一部分,如果是的话,是什么部分?
发布于 2014-03-29 20:11:25
是。总结是,它试图得到至少99.5%的流量。
每个原子对象都有一个内部属性stepk,它是傅里叶图像中使用的网格大小。这是基于一个真实的图像,包括至少99.5%的流量,以避免混叠在FFT。
然后,当您组合对象时(与Add、Convolve等)或变换它们(剪切、滑脱等)对于新的配置文件,步骤k的值是最新的,有时使用启发式方法,当精确的公式太难处理时,我们通常试图错误地站在保守的立场。
然后,当您用image=None绘制最终对象时,它使用最后的步骤k值来计算N = 2pi * wmult / (scale * stepk)的邮票大小,其中scale是图像的像素尺度,通常您会显式地指定(im = obj.draw(scale=pixel_scale)),而wmult是一个可选的参数,它的工作就是这样--制作比默认情况下更大的图像。
然后这个N被舍入到2^k或3 * 2^k。这有助于提高后续FFT的效率。
如果您想要更改99.5%的值,这在GSParams类中也是可能的。它是参数alias_threshold。实际上是1-alias_threshold。默认的alias_threshold是5e-3,但是如果您愿意,可以通过执行以下操作来降低这个值:
gsparams = galsim.GSParams(alias_threshold=1.e-3)
gal = galsim.Sersic(..., gsparams=gsparams)
psf = galsim.Kolmogorov(..., gsparams=gsparams)
pix = galsim.Pixel(..., gsparams=gsparams)
conv = galsim.Convolve([gal,psf,pix])
im = conv.draw(scale=pixel_scale)https://stackoverflow.com/questions/22735579
复制相似问题