【发布时间】:2016-04-22 19:53:36
【问题描述】:
有没有办法为 SED 的“spec”参数或 Bandpass 的“吞吐量”参数传递分段(不连续)函数?我尝试使用 numpy 传递一个 delta 函数和一个三角函数,但 galsim 不接受任何一个作为有效的 python 函数。
我想尝试在单个波长处绘制对象,并认为我应该修改 SED 或带通以仅在单个波长处具有值。如果有更好的方法,请告诉我!
【问题讨论】:
标签: galsim
有没有办法为 SED 的“spec”参数或 Bandpass 的“吞吐量”参数传递分段(不连续)函数?我尝试使用 numpy 传递一个 delta 函数和一个三角函数,但 galsim 不接受任何一个作为有效的 python 函数。
我想尝试在单个波长处绘制对象,并认为我应该修改 SED 或带通以仅在单个波长处具有值。如果有更好的方法,请告诉我!
【问题讨论】:
标签: galsim
有更好的方法来做到这一点。
如果您已经有一个带有 SED 的 ChromaticObject,您可以使用 ChromaticObject.evaluateAtWavelength() 方法在单个波长处获得与该 ChromaticObject 对应的 GSObject。拥有该 GSObject 后,您可以将其绘制成图像。例如:
sed = galsim.SED('wave**0.2')
sed2 = galsim.SED('wave**1.0')
obj = galsim.Gaussian(sigma=0.1)*sed + galsim.Gaussian(sigma=0.5)*sed2
foo = obj.evaluateAtWavelength(800.0) # argument is wavelength in nm
您可以这样做并发现 obj 是彩色的,而 foo 不是。您可以轻松地为任意数量的波长执行此操作,而无需重新定义 SED。
【讨论】:
bp = galsim.Bandpass(lambda wave: 0. if abs(wave-550) > 1. else 1., 549, 551)
galsim.Bandpass(..., 'nm', 549, 551)),要么使用命名的 kwargs 作为限制 (galsim.Bandpass(..., blue_limit=549, red_limit=551))。