首页 > 解决方案 > 如何在 python 中生成洛伦兹 2D 源

问题描述

我正在尝试生成 2D 源并将它们添加到图像中。目前我正在通过 Gaussian2D (astropy) 生成高斯源:

min_x = int(rapix[i]) - 300
max_x = int(rapix[i]) + 300
min_y = int(decpix[i]) - 300
max_y = int(decpix[i]) + 300
y, x = np.mgrid[min_y:max_y, min_x:max_x] #HERE I CREATE THE GRID TO PUT THE SOURCES ON

fakesource = Gaussian2D(intensity, rapix[i], decpix[i], dimension, dimension)(x, y)

其中强度和尺寸之前已定义。我想产生洛伦兹源而不是高斯源,但我没有找到任何类似于 Gaussian2D 的东西。最好的方法是什么?

标签: pythonastropy

解决方案


Lorentz1D存在,虽然没有 Lorentz2D,但您可以按照实现自定义模型的指南定义一个。这是一个基本示例:

from astropy.modeling import Fittable2DModel, Parameter


class Lorentz2D(Fittable2DModel):
    amplitude = Parameter()
    x_0 = Parameter()
    y_0 = Parameter()
    fwhm = Parameter

    @staticmethod
    def evaluate(x, y, amplitude, x_0, y_0, fwhm):
        hwhm = fwhm / 2.0
        return (amplitude * hwhm /
                ((x - x_0)**2 + (y - y_0)**2 + hwhm**2)**1.5)

我不知道这是否正是您的 2D Lorentzian 模型的定义方式;我刚刚从维基百科改编了这个定义。但是您可以根据需要修改此示例。

然后,如果您认为这对其他人有价值,您可以考虑将其作为贡献提交。


推荐阅读