def gaussian(x, cen=0, sigma=1): """1 dimensional gaussian: gaussian(x, cen, sigma) """ cen = param_value(cen) sig = param_value(sigma) return (1./(s2pi*sig)) * exp(-(1.0*x-cen)**2 /(2*sig**2))
def gaussian(x, cen=0, sigma=1): """1 dimensional gaussian: gaussian(x, cen, sigma) """ cen = param_value(cen) sigma = param_value(sigma) return (sqrt(log2/pi)/sigma) * exp(-log2 * (1.0*x-cen) **2 / sigma**2)
def lorentzian(x, cen=0, sigma=1): """1 dimensional lorentzian lorentzian(x, cen, sigma) """ cen = param_value(cen) sigma = param_value(sigma) return (1. / (1 + ((1.0 * x - cen) / sigma)**2)) / (pi * sigma)
def lorentzian(x, cen=0, sigma=1): """1 dimensional lorentzian lorentzian(x, cen, sigma) """ cen = param_value(cen) sigma = param_value(sigma) return (1. / (1 + ((1.0*x-cen)/sigma)**2) ) / (pi*sigma)
def gaussian(x, cen=0, sigma=1): """1 dimensional gaussian: gaussian(x, cen, sigma) """ cen = param_value(cen) sig = param_value(sigma) return (1. / (s2pi * sig)) * exp(-(1.0 * x - cen)**2 / (2 * sig**2))
def lognormal(x, cen=0, sigma=1): """log-normal function lognormal(x, cen, sigma) = (1/x) * exp(-(ln(x) - cen)/ (2* sigma**2)) """ cen = param_value(cen) sig = param_value(sigma) return (1./(x*sig*s2pi)) * exp(-(log(x) - cen)**2/ (2* sig**2))
def lognormal(x, cen=0, sigma=1): """log-normal function lognormal(x, cen, sigma) = (1/x) * exp(-(ln(x) - cen)/ (2* sigma**2)) """ cen = param_value(cen) sig = param_value(sigma) return (1. / (x * sig * s2pi)) * exp(-(log(x) - cen)**2 / (2 * sig**2))
def pearson7(x, cen=0, sigma=1, expon=0.5): """pearson7 lineshape, according to NIST StRD though it seems wikpedia gives a different formula... pearson7(x, cen, sigma, expon) """ cen = param_value(cen) sigma = param_value(sigma) expon = param_value(expon) scale = gamma(expon) * sqrt((2**(1/expon) -1)) / (gamma(expon-0.5)) / (sigma*spi) return scale / (1 + ( ((1.0*x-cen)/sigma)**2) * (2**(1/expon) -1) )**expon
def pvoigt(x, cen=0, sigma=1, frac=0.5): """1 dimensional pseudo-voigt: pvoigt(x, cen, sigma, frac) = (1-frac)*gaussion(x,cen,sigma) + frac*lorentzian(x,cen, sigma) """ cen = param_value(cen) sigma = param_value(sigma) frac = param_value(frac) return ((1-frac)*gaussian(x, cen=cen, sigma=sigma) + frac*lorentzian(x, cen=cen, sigma=sigma))
def pvoigt(x, cen=0, sigma=1, frac=0.5): """1 dimensional pseudo-voigt: pvoigt(x, cen, sigma, frac) = (1-frac)*gaussion(x,cen,sigma) + frac*lorentzian(x,cen, sigma) """ cen = param_value(cen) sigma = param_value(sigma) frac = param_value(frac) return ((1 - frac) * gaussian(x, cen=cen, sigma=sigma) + frac * lorentzian(x, cen=cen, sigma=sigma))
def voigt(x, cen=0, sigma=1, gamma=None): """1 dimensional voigt function. see http://en.wikipedia.org/wiki/Voigt_profile """ if gamma is None: gamma = sigma cen = param_value(cen) sigma = param_value(sigma) gamma = param_value(gamma) z = (x - cen + 1j * gamma) / (sigma * s2) return wofz(z).real / (sigma * s2pi)
def pearson7(x, cen=0, sigma=1, expon=0.5): """pearson7 lineshape, according to NIST StRD though it seems wikpedia gives a different formula... pearson7(x, cen, sigma, expon) """ cen = param_value(cen) sigma = param_value(sigma) expon = param_value(expon) scale = gamma(expon) * sqrt( (2**(1 / expon) - 1)) / (gamma(expon - 0.5)) / (sigma * spi) return scale / (1 + (((1.0 * x - cen) / sigma)**2) * (2**(1 / expon) - 1))**expon
def voigt(x, cen=0, sigma=1, gamma=None): """1 dimensional voigt function. see http://en.wikipedia.org/wiki/Voigt_profile """ if gamma is None: gamma = sigma cen = param_value(cen) sigma = param_value(sigma) gamma = param_value(gamma) z = (x-cen + 1j*gamma)/ (sigma*s2) return wofz(z).real / (sigma*s2pi)
def _pathparams(self, paramgroup=None, **kws): """evaluate path parameter value """ # degen, s02, e0, ei, deltar, sigma2, third, fourth if (paramgroup is not None and self._larch.symtable.isgroup(paramgroup)): self._larch.symtable._sys.paramGroup = paramgroup self._larch.symtable._fix_searchGroups() # put 'reff' and '_feffdat' into the paramGroup so that # 'reff' can be used in constraint expressions and # '_feffdat' can be used inside Debye and Eins functions stable = self._larch.symtable if stable.isgroup(stable._sys.paramGroup): stable._sys.paramGroup.reff = self._feffdat.reff stable._sys.paramGroup._feffdat = self._feffdat out = [] for param in ('degen', 's02', 'e0', 'ei', 'deltar', 'sigma2', 'third', 'fourth'): val = getattr(self, param) if param in kws: if kws[param] is not None: val = kws[param] if isinstance(val, six.string_types): thispar = Parameter(expr=val, _larch=self._larch) #if isinstance(thispar, Parameter): # thispar = thispar.value setattr(self, param, thispar) val = getattr(self, param) out.append(param_value(val)) return out
def _peakparams(self, paramgroup=None, **kws): """evaluate peak parameter values """ # sigma, amplitude, center out = [] for parname in ('amplitude', 'sigma', 'center'): val = getattr(self, parname) if parname in kws: if kws[parname] is not None: val = kws[parname] if isinstance(val, six.string_types): thispar = Parameter(expr=val, _larch=self._larch) setattr(self, parname, thispar) val = getattr(self, parname) out.append(param_value(val)) return out
def _peakparams(self, paramgroup=None, **kws): """evaluate peak parameter values """ # sigma, amplitude, center if (paramgroup is not None and self._larch.symtable.isgroup(paramgroup)): self._larch.symtable._sys.paramGroup = paramgroup self._larch.symtable._fix_searchGroups() out = [] for parname in ('amplitude', 'sigma', 'center'): val = getattr(self, parname) if parname in kws: if kws[parname] is not None: val = kws[parname] if isinstance(val, (str, unicode)): thispar = Parameter(expr=val, _larch=self._larch) setattr(self, parname, thispar) val = getattr(self, parname) out.append(param_value(val)) return out
def _peakparams(self, paramgroup=None, **kws): """evaluate peak parameter values """ # sigma, amplitude, center if (paramgroup is not None and self._larch.symtable.isgroup(paramgroup)): self._larch.symtable._sys.paramGroup = paramgroup self._larch.symtable._fix_searchGroups() out = [] for parname in ('amplitude', 'sigma', 'center'): val = getattr(self, parname) if parname in kws: if kws[parname] is not None: val = kws[parname] if isinstance(val, six.string_types): thispar = Parameter(expr=val, _larch=self._larch) setattr(self, parname, thispar) val = getattr(self, parname) out.append(param_value(val)) return out