GalSim 中 SED 或带通的分段函数参数
Piecewise function parameters for SED or Bandpass in GalSim
有没有办法为 SED 的 "spec" 参数或 Bandpass 的 "throughput" 参数传递分段(不连续)函数?我尝试使用 numpy 传递一个 delta 函数和一个三角函数,但 galsim 不接受任何一个作为有效的 python 函数。
我想尝试在单一波长下绘制对象,并且认为我应该修改 SED 或带通以仅在单一波长处具有值。如果有更好的方法,请告诉我!
有更好的方法。
如果您已经拥有带有某些 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。
有没有办法为 SED 的 "spec" 参数或 Bandpass 的 "throughput" 参数传递分段(不连续)函数?我尝试使用 numpy 传递一个 delta 函数和一个三角函数,但 galsim 不接受任何一个作为有效的 python 函数。
我想尝试在单一波长下绘制对象,并且认为我应该修改 SED 或带通以仅在单一波长处具有值。如果有更好的方法,请告诉我!
有更好的方法。
如果您已经拥有带有某些 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。