Source code for mcalf.profiles.gaussian

import numpy as np
from scipy.special import erf


__all__ = ['single_gaussian', 'skew_normal', 'skew_normal_with_gaussian']


[docs]def single_gaussian(x, a, b, c, d): """Gaussian function Parameters ---------- x : ndarray Wavelengths to evaluate Gaussian function at. a : float Amplitude. b : float Central line core. c : float Sigma of Gaussian. d : float Background to add. """ g = a * np.exp(- (x-b)**2.0 / (2.0 * c**2.0)) return g + d
def _skew_normal_with_gaussian(x, a_a=0, alpha=1, xi=0, omega=1, a_e=0, b=0, c=1, d=0): x1 = (x - xi) / omega pdf = np.exp(- x1 ** 2.0 / 2.0) / np.sqrt(2.0 * np.pi) cdf = 0.5 * (1.0 + erf(alpha * x1 / np.sqrt(2.0))) skewed_normal = 2.0 * pdf * cdf / omega absorption = a_a * skewed_normal emission = a_e * np.exp(- (x - b) ** 2.0 / (2.0 * c ** 2.0)) return absorption + emission + d
[docs]def skew_normal(x, a_a, alpha, xi, omega, d): return _skew_normal_with_gaussian(x, a_a=a_a, alpha=alpha, xi=xi, omega=omega, d=d)
[docs]def skew_normal_with_gaussian(x, a_a, alpha, xi, omega, a_e, b, c, d): # This can be optimised later return _skew_normal_with_gaussian(x, a_a=a_a, alpha=alpha, xi=xi, omega=omega, a_e=a_e, b=b, c=c, d=d)