【问题标题】:Piecewise function parameters for SED or Bandpass in GalSimGalSim 中 SED 或带通的分段函数参数
【发布时间】:2016-04-22 19:53:36
【问题描述】:

有没有办法为 SED 的“spec”参数或 Bandpass 的“吞吐量”参数传递分段(不连续)函数?我尝试使用 numpy 传递一个 delta 函数和一个三角函数,但 galsim 不接受任何一个作为有效的 python 函数。

我想尝试在单个波长处绘制对象,并认为我应该修改 SED 或带通以仅在单个波长处具有值。如果有更好的方法,请告诉我!

【问题讨论】:

    标签: galsim


    【解决方案1】:

    有更好的方法来做到这一点。

    如果您已经有一个带有 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。

    【讨论】:

    • 同意这可能是你想要的。但是对于您的字面问题,您可以传入任何 python 函数作为吞吐量或规范参数。所以这些可以是你想要的任何东西。例如bp = galsim.Bandpass(lambda wave: 0. if abs(wave-550) > 1. else 1., 549, 551)
    • @Mike Jarvis 看起来这给了我一个错误,因为代码正在计算波长类型。代码引用 self.wave_type.lower() - 我认为默认值是 'nm' - 但 AttributeError 是 'int' 对象没有属性 'lower'。
    • @Gigi。抱歉,我遗漏了wave_type。要么添加 'nm' 作为第二个参数 (galsim.Bandpass(..., 'nm', 549, 551)),要么使用命名的 kwargs 作为限制 (galsim.Bandpass(..., blue_limit=549, red_limit=551))。
    • @Mike Jarvis 谢谢!此外,您能否帮助我理解为什么,当我尝试使用 FFT 和分段 SED(具有与带通示例相同的功能)和 LSST 过滤器来绘制图像时,我得到一个 ValueError “具有多个的数组的真值模棱两可的元素”?我在哪里尝试在两个 numpy 数组上使用“and”运算符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2020-08-16
    • 2015-03-02
    相关资源
    最近更新 更多