我注意到 GSObject.draw 可以在没有 image 关键字的情况下调用。文档说如果 image = None,则返回自动调整大小的图像。这个自动大小究竟是如何确定的?它是否确保在图像中保留一部分星系通量,如果是,那是多少?
问问题
92 次
1 回答
2
是的。总结是它试图获得至少 99.5% 的通量。
每个原子对象都有一个内部属性 stepk,它是在傅立叶图像中使用的网格大小。这是基于包含至少 99.5% 通量的真实空间图像,以避免 FFT 中的混叠。
然后,当您组合对象(使用 Add、Convolve 等)或变换它们(shear、dliate 等)时,stepk 的值会针对新配置文件保持最新,有时在精确公式过于笨拙时使用启发式,但我们通常会尝试在保守的一面犯错。
然后,当您使用 绘制最终对象时,它使用最终的stepkimage=None
值来计算印章大小,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)
于 2014-03-29T20:11:25.243 回答