Как создать лоренцианские 2D-источники в python - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать 2D-источники и добавить их к изображению. В настоящее время я генерирую гауссовские источники через Gaussian2D (астропия):

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. Как лучше всего это сделать?

1 Ответ

1 голос
/ 14 июля 2020

Lorentz1D существует, хотя и не Lorentz2D, но вы можете определить его, следуя руководству по реализации пользовательских моделей . Вот базовый пример c:

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-лоренцевская модель; Я просто адаптировал это определение из Википедии. Но вы можете изменить этот пример по мере необходимости.

Затем, если вы думаете, что это будет полезно для других, вы можете рассмотреть возможность отправки его как вклада .

...