Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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))
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
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))
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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))
Ejemplo n.º 10
0
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))
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
    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
Ejemplo n.º 16
0
 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
Ejemplo n.º 17
0
    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
Ejemplo n.º 18
0
    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