Пример #1
0
    def __init__(self, order=2, legacy=True, module="numexpr", **kwargs):
        """Polynomial component (DEPRECATED)

        This API is deprecated and will be replaced by
        :py:class:`hyperspy._components.polynomial.Polynomial` in HyperSpy v2.0.
        To use the new API, set `legacy` to `False`.

        Parameters
        ----------
        order: int
            Order of the polynomial.
        legacy: bool, default True
            If `False`, use the new API.
        module: str
            See the docstring
            of :py:class:`hyperspy._components.polynomial.Polynomial`
            for details.
        """
        if legacy:
            from hyperspy.misc.utils import deprecation_warning
            msg = (
                "The API of the `Polynomial` component will change in v2.0."
                "To use the new API set `legacy=False`.")
            deprecation_warning(msg)

            Component.__init__(self, ['coefficients', ])
            self._whitelist['order'] = ('init', order)
            self.coefficients._number_of_elements = order + 1
            self.coefficients.value = np.zeros((order + 1,))
            self.coefficients.grad = self.grad_coefficients
        else:
            from hyperspy._components.polynomial import Polynomial
            self.__class__ = Polynomial
            self.__init__(order=order, module=module, **kwargs)
Пример #2
0
    def __init__(
        self,
        A=10e5,
        r=3.,
        origin=0.,
    ):
        Component.__init__(self, ('A', 'r', 'origin', 'shift', 'ratio'))
        self.name = 'Double power law'
        self.A.value = 1E-5
        self.r.value = 3.
        self.origin.value = 0.
        self.origin.free = False
        self.shift.value = 20.
        self.shift.free = False
        self.ratio.value = 1.E-2
        self.left_cutoff = 20.  # in x-units

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.r.bmin = 1.
        self.r.bmax = 5.

        self.isbackground = True
        self.convolved = False
Пример #3
0
 def __init__(self):
     Component.__init__(self, (
         'area',
         'centre',
         'FWHM',
         'gamma',
         'resolution',
         'shirley_background',
         'non_isochromaticity',
         'transmission_function'))
     self._position = self.centre
     self.FWHM.value = 1
     self.gamma.value = 0
     self.area.value = 1
     self.resolution.value = 0
     self.resolution.free = False
     self.shirley_background.free = False
     self.non_isochromaticity.value = 0
     self.non_isochromaticity.free = False
     self.transmission_function.value = 1
     self.transmission_function.free = False
     # Options
     self.shirley_background.active = False
     self.spin_orbit_splitting = False
     self.spin_orbit_branching_ratio = 0.5
     self.spin_orbit_splitting_energy = 0.61
     
     self.isbackground = False
     self.convolved = True
    def __init__(
        self, signal2D, d11=1.0, d12=0.0, d21=0.0, d22=1.0, t1=0.0, t2=0.0,
        theta=0.2*np.pi,  # rotational angle
        intensity=1.0,  # intensity multiplier for the diffraction pattern
        order=3
    ):

        Component.__init__(self, [
            "d11", "d12", "d21", "d22", "t1", "t2",
            "theta",
            "intensity",
        ])

        self._whitelist["signal2D"] = ("init,sig", signal2D)
        self.signal = signal2D
        self.order = order
        self.d11.value = d11
        self.d12.value = d12
        self.d21.value = d21
        self.d22.value = d22
        self.t1.value = t1
        self.t2.value = t2

        self.theta.value = theta
        self.intensity.value = intensity
Пример #5
0
 def __init__(self, order=2):
     Component.__init__(self, [
         'coefficients',
     ])
     self.coefficients._number_of_elements = order + 1
     self.coefficients.value = np.zeros((order + 1, ))
     self.coefficients.grad = self.grad_coefficients
Пример #6
0
    def __init__(self):
        Component.__init__(self, (
            'area',
            'centre',
            'FWHM',
            'gamma',
            'resolution',
            'shirley_background',
            'non_isochromaticity',
            'transmission_function'))
        self._position = self.centre
        self.FWHM.value = 1
        self.gamma.value = 0
        self.area.value = 1
        self.resolution.value = 0
        self.resolution.free = False
        self.shirley_background.free = False
        self.non_isochromaticity.value = 0
        self.non_isochromaticity.free = False
        self.transmission_function.value = 1
        self.transmission_function.free = False
        # Options
        self.shirley_background.active = False
        self.spin_orbit_splitting = False
        self.spin_orbit_branching_ratio = 0.5
        self.spin_orbit_splitting_energy = 0.61

        self.isbackground = False
        self.convolved = True
Пример #7
0
 def __init__(self, element_subshell, GOS=None):
     # Declare the parameters
     Component.__init__(self, ["intensity", "fine_structure_coeff", "effective_angle", "onset_energy"])
     self.name = element_subshell
     self.element, self.subshell = element_subshell.split("_")
     self.energy_scale = None
     self.effective_angle.free = False
     self.fine_structure_active = preferences.EELS.fine_structure_active
     self.fine_structure_width = preferences.EELS.fine_structure_width
     self.fine_structure_coeff.ext_force_positive = False
     self.GOS = None
     # Set initial actions
     if GOS is None:
         try:
             self.GOS = HartreeSlaterGOS(element_subshell)
             GOS = "Hartree-Slater"
         except IOError:
             GOS = "hydrogenic"
             messages.information("Hartree-Slater GOS not available" "Using hydrogenic GOS")
     if self.GOS is None:
         if GOS == "Hartree-Slater":
             self.GOS = HartreeSlaterGOS(element_subshell)
         elif GOS == "hydrogenic":
             self.GOS = HydrogenicGOS(element_subshell)
         else:
             raise ValueError("gos must be one of: None, 'hydrogenic'" " or 'Hartree-Slater'")
     self.onset_energy.value = self.GOS.onset_energy
     self.onset_energy.free = False
     self._position = self.onset_energy
     self.free_onset_energy = False
     self.intensity.grad = self.grad_intensity
     self.intensity.value = 1
     self.intensity.bmin = 0.0
     self.intensity.bmax = None
Пример #8
0
    def __init__(self, A=1., FWHM=1., origin=0.):
        Component.__init__(self, ['A', 'FWHM', 'origin', 'ab', 'shirley'])
        self.shirley.free = False
        self.ab.value = 0
        self.ab.free = False
        self.A.value = A
        self.FWHM.value = FWHM
        self.origin.value = origin
        self._position = self.origin

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.FWHM.bmin = None
        self.FWHM.bmax = None

        self.isbackground = False
        self.convolved = True

        # Gradients
        self.A.grad = self.grad_A
        self.FWHM.grad = self.grad_FWHM
        self.origin.grad = self.grad_origin
        self.ab.grad = self.grad_ab

        # Options
        self.factor = 1.
        self.Shirley = False
Пример #9
0
 def __init__(
     self,
     electron_diffraction_calculator,
     structure,
     calibration,
     reciprocal_radius,
     d11=1.0,
     d12=0.0,
     d13=0.0,
     d21=0.0,
     d22=1.0,
     d23=0.0,
     d31=0.0,
     d32=0.0,
     d33=1.0,
 ):
     Component.__init__(
         self, ["d11", "d12", "d13", "d21", "d22", "d23", "d31", "d32", "d33",]
     )
     self.electron_diffraction_calculator = electron_diffraction_calculator
     self.structure = structure
     self.reciprocal_radius = reciprocal_radius
     self.calibration = calibration
     self.d11.value = d11
     self.d12.value = d12
     self.d13.value = d13
     self.d21.value = d21
     self.d22.value = d22
     self.d23.value = d23
     self.d31.value = d31
     self.d32.value = d32
     self.d33.value = d33
Пример #10
0
    def __init__(self, A=1., FWHM=1., origin=0.):
        Component.__init__(self, ['A', 'FWHM', 'origin', 'ab', 'shirley'])
        self.shirley.free = False
        self.ab.value = 0
        self.ab.free = False
        self.A.value = A
        self.FWHM.value = FWHM
        self.origin.value = origin
        self._position = self.origin

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.FWHM.bmin = None
        self.FWHM.bmax = None

        self.isbackground = False
        self.convolved = True

        # Gradients
        self.A.grad = self.grad_A
        self.FWHM.grad = self.grad_FWHM
        self.origin.grad = self.grad_origin
        self.ab.grad = self.grad_ab

        # Options
        self.factor = 1.
        self.Shirley = False
Пример #11
0
    def __init__(self):
        Component.__init__(
            self,
            (
                "area",
                "centre",
                "FWHM",
                "gamma",
                "resolution",
                "shirley_background",
                "non_isochromaticity",
                "transmission_function",
            ),
        )
        self._position = self.centre
        self.FWHM.value = 1
        self.gamma.value = 0
        self.area.value = 1
        self.resolution.value = 0
        self.resolution.free = False
        self.shirley_background.free = False
        self.non_isochromaticity.value = 0
        self.non_isochromaticity.free = False
        self.transmission_function.value = 1
        self.transmission_function.free = False
        # Options
        self.shirley_background.active = False
        self.spin_orbit_splitting = False
        self.spin_orbit_branching_ratio = 0.5
        self.spin_orbit_splitting_energy = 0.61

        self.isbackground = False
        self.convolved = True
    def __init__(self, parameter_1=1, parameter_2=2):
        # Define the parameters
        Component.__init__(self, ('parameter_1', 'parameter_2'))

        # Optionally we can set the initial values
        self.parameter_1.value = parameter_1
        self.parameter_1.value = parameter_1

        # The units (optional)
        self.parameter_1.units = 'Tesla'
        self.parameter_2.units = 'Kociak'

        # Once defined we can give default values to the attribute
        # For example we fix the attribure_1 (optional)
        self.parameter_1.free = False

        # And we set the boundaries (optional)
        self.parameter_1.bmin = 0.
        self.parameter_1.bmax = None

        # Optionally, to boost the optimization speed we can also define
        # the gradients of the function we the syntax:
        # self.parameter.grad = function
        self.parameter_1.grad = self.grad_parameter_1
        self.parameter_2.grad = self.grad_parameter_2
Пример #13
0
    def __init__(self, element_subshell, GOS=None):
        # Declare the parameters
        Component.__init__(self, [
            'intensity', 'fine_structure_coeff', 'effective_angle',
            'onset_energy'
        ],
                           linear_parameter_list=['intensity'])
        if isinstance(element_subshell, dict):
            self.element = element_subshell['element']
            self.subshell = element_subshell['subshell']
        else:
            self.element, self.subshell = element_subshell.split('_')
        self.name = "_".join([self.element, self.subshell])
        self.energy_scale = None
        self.effective_angle.free = False
        self.fine_structure_active = False
        self.fine_structure_width = 30.
        self.fine_structure_coeff.ext_force_positive = False
        self.GOS = None
        # Set initial actions
        if GOS is None:
            try:
                self.GOS = HartreeSlaterGOS(element_subshell)
                GOS = 'Hartree-Slater'
            except IOError:
                GOS = 'hydrogenic'
                _logger.info('Hartree-Slater GOS not available. '
                             'Using hydrogenic GOS')
        if self.GOS is None:
            if GOS == 'Hartree-Slater':
                self.GOS = HartreeSlaterGOS(element_subshell)
            elif GOS == 'hydrogenic':
                self.GOS = HydrogenicGOS(element_subshell)
            else:
                raise ValueError('gos must be one of: None, \'hydrogenic\''
                                 ' or \'Hartree-Slater\'')
        self.onset_energy.value = self.GOS.onset_energy
        self.onset_energy.free = False
        self._position = self.onset_energy
        self.free_onset_energy = False
        self.intensity.grad = self.grad_intensity
        self.intensity.value = 1
        self.intensity.bmin = 0.
        self.intensity.bmax = None

        self._whitelist['GOS'] = ('init', GOS)
        if GOS == 'Hartree-Slater':
            self._whitelist['element_subshell'] = (
                'init', self.GOS.as_dictionary(True))
        elif GOS == 'hydrogenic':
            self._whitelist['element_subshell'] = ('init', element_subshell)
        self._whitelist['fine_structure_active'] = None
        self._whitelist['fine_structure_width'] = None
        self._whitelist['fine_structure_smoothing'] = None
        self.effective_angle.events.value_changed.connect(
            self._integrate_GOS, [])
        self.onset_energy.events.value_changed.connect(self._integrate_GOS, [])
        self.onset_energy.events.value_changed.connect(self._calculate_knots,
                                                       [])
Пример #14
0
 def __init__(self):
     # Define the parameters
     Component.__init__(self, ('a', 'b', 'c', 'origin'))        
     # Define the name of the component
     self.a.grad = self.grad_a
     self.b.grad = self.grad_b
     self.c.grad = self.grad_c
     self.origin.grad = self.grad_origin
Пример #15
0
 def __init__(self, intensity=1., plasmon_energy=15., fwhm=1.5):
     Component.__init__(self, ['intensity', 'plasmon_energy', 'fwhm'])
     self._position = self.plasmon_energy
     self.intensity.value = intensity
     self.plasmon_energy.value = plasmon_energy
     self.fwhm.value = fwhm
     self.plasmon_energy.grad = self.grad_plasmon_energy
     self.fwhm.grad = self.grad_fwhm
     self.intensity.grad = self.grad_intensity
Пример #16
0
 def __init__(self):
     # Define the parameters
     Component.__init__(self, ("a", "b", "c", "origin"))
     # Define the name of the component
     self.a.grad = self.grad_a
     self.b.grad = self.grad_b
     self.c.grad = self.grad_c
     self.origin.grad = self.grad_origin
     self._position = self.origin
Пример #17
0
    def __init__(self, element_subshell, GOS=None):
        # Declare the parameters
        Component.__init__(self,
                           ['intensity',
                            'fine_structure_coeff',
                            'effective_angle',
                            'onset_energy'])
        if isinstance(element_subshell, dict):
            self.element = element_subshell['element']
            self.subshell = element_subshell['subshell']
        else:
            self.element, self.subshell = element_subshell.split('_')
        self.name = "_".join([self.element, self.subshell])
        self.energy_scale = None
        self.effective_angle.free = False
        self.fine_structure_active = preferences.EELS.fine_structure_active
        self.fine_structure_width = preferences.EELS.fine_structure_width
        self.fine_structure_coeff.ext_force_positive = False
        self.GOS = None
        # Set initial actions
        if GOS is None:
            try:
                self.GOS = HartreeSlaterGOS(element_subshell)
                GOS = 'Hartree-Slater'
            except IOError:
                GOS = 'hydrogenic'
                messages.information(
                    'Hartree-Slater GOS not available. '
                    'Using hydrogenic GOS')
        if self.GOS is None:
            if GOS == 'Hartree-Slater':
                self.GOS = HartreeSlaterGOS(element_subshell)
            elif GOS == 'hydrogenic':
                self.GOS = HydrogenicGOS(element_subshell)
            else:
                raise ValueError(
                    'gos must be one of: None, \'hydrogenic\''
                    ' or \'Hartree-Slater\'')
        self.onset_energy.value = self.GOS.onset_energy
        self.onset_energy.free = False
        self._position = self.onset_energy
        self.free_onset_energy = False
        self.intensity.grad = self.grad_intensity
        self.intensity.value = 1
        self.intensity.bmin = 0.
        self.intensity.bmax = None

        self._whitelist['GOS'] = ('init', GOS)
        if GOS == 'Hartree-Slater':
            self._whitelist['element_subshell'] = (
                'init',
                self.GOS.as_dictionary(True))
        elif GOS == 'hydrogenic':
            self._whitelist['element_subshell'] = ('init', element_subshell)
        self._whitelist['fine_structure_active'] = None
        self._whitelist['fine_structure_width'] = None
        self._whitelist['fine_structure_smoothing'] = None
Пример #18
0
 def __init__(self):
     # Define the parameters
     Component.__init__(self, ('a', 'b', 'c', 'origin'))        
     # Define the name of the component
     self.a.grad = self.grad_a
     self.b.grad = self.grad_b
     self.c.grad = self.grad_c
     self.origin.grad = self.grad_origin
     self._position = self.origin
Пример #19
0
 def __init__(self):
     Component.__init__(self, ['intensity', 'plasmon_energy', 'fwhm'])
     self._position = self.plasmon_energy
     self.intensity.value = 1
     self.plasmon_energy.value = 7.1
     self.fwhm.value = 2.3
     self.plasmon_energy.grad = self.grad_plasmon_energy
     self.fwhm.grad = self.grad_fwhm
     self.intensity.grad = self.grad_intensity
            def __init__(self, origin=0, A=1, sigma=1):
                # Define the parameters
                Component.__init__(self, ('origin', 'A', 'sigma'))
                #self.name = 'Erf'

                # Optionally we can set the initial values
                self.origin.value = origin
                self.A.value = A
                self.sigma.value = sigma
Пример #21
0
 def __init__(self):
     Component.__init__(self, ['intensity', 'plasmon_energy',
     'plasmon_linewidth'])
     self._position = self.plasmon_energy
     self.intensity.value = 1
     self.plasmon_energy.value = 7.1
     self.plasmon_linewidth.value = 2.3
     self.plasmon_energy.grad = self.grad_plasmon_energy
     self.plasmon_linewidth.grad = self.grad_plasmon_linewidth
     self.intensity.grad = self.grad_intensity
Пример #22
0
    def __init__(self, A=1, n=0):
        Component.__init__(self, ("n", "A"))
        self.A.value = A
        self.n.value = n
        self.isbackground = True
        self.convolved = False

        # Gradients
        self.A.grad = self.grad_A
        self.n.grad = self.grad_n
Пример #23
0
    def __init__(self):
        Component.__init__(self, ('offset', 'step'))
        self.isbackground = True
        self.convolved = False

        # Options
        self.interfase = 0
        # Gradients
        self.offset.grad = self.grad_offset
        self.step.grad = self.grad_step
Пример #24
0
 def __init__(self, a=0, b=1., c=1., origin=0):
     Component.__init__(self, ['a', 'b', 'c', 'origin'])
     self.name = 'Parabole'
     self.a.value, self.b.value, self.c.value, self.origin.value = \
     a, b, c, origin
     self.isbackground = False
     self.convolved = True
     self.a.grad = self.grad_a
     self.b.grad = self.grad_b
     self.origin.grad = self.grad_origin
Пример #25
0
    def __init__( self, offset = 0. ):
        Component.__init__(self, ('offset',))
        self.offset.free = True
        self.offset.value = offset

        self.isbackground = True
        self.convolved = False

        # Gradients
        self.offset.grad = self.grad_offset
Пример #26
0
    def __init__(self, A=1, n=0):
        Component.__init__(self, ('n', 'A'))
        self.A.value = A
        self.n.value = n
        self.isbackground = True
        self.convolved = False

        # Gradients
        self.A.grad = self.grad_A
        self.n.grad = self.grad_n
Пример #27
0
    def __init__(self, offset=0.):
        Component.__init__(self, ('offset',))
        self.offset.free = True
        self.offset.value = offset

        self.isbackground = True
        self.convolved = False

        # Gradients
        self.offset.grad = self.grad_offset
Пример #28
0
 def __init__(self):
     Component.__init__(self, ['intensity', 'plasmon_energy',
                               'fwhm'])
     self._position = self.plasmon_energy
     self.intensity.value = 1
     self.plasmon_energy.value = 7.1
     self.fwhm.value = 2.3
     self.plasmon_energy.grad = self.grad_plasmon_energy
     self.fwhm.grad = self.grad_fwhm
     self.intensity.grad = self.grad_intensity
Пример #29
0
 def __init__(self, intensity=1., plasmon_energy=15., fwhm=1.5):
     Component.__init__(self, ['intensity', 'plasmon_energy',
                               'fwhm'])
     self._position = self.plasmon_energy
     self.intensity.value = intensity
     self.plasmon_energy.value = plasmon_energy
     self.fwhm.value = fwhm
     self.plasmon_energy.grad = self.grad_plasmon_energy
     self.fwhm.grad = self.grad_fwhm
     self.intensity.grad = self.grad_intensity
Пример #30
0
    def __init__(self):
        Component.__init__(self, ('offset', 'step'))
        self.isbackground = True
        self.convolved = False

        # Options
        self.interfase = 0
        # Gradients
        self.offset.grad = self.grad_offset
        self.step.grad = self.grad_step
Пример #31
0
 def __init__(self):
     Component.__init__(
         self, ['intensity', 'plasmon_energy', 'plasmon_linewidth'])
     self._position = self.plasmon_energy
     self.intensity.value = 1
     self.plasmon_energy.value = 7.1
     self.plasmon_linewidth.value = 2.3
     self.plasmon_energy.grad = self.grad_plasmon_energy
     self.plasmon_linewidth.grad = self.grad_plasmon_linewidth
     self.intensity.grad = self.grad_intensity
Пример #32
0
    def __init__( self, a = 0, b = 1 ):
        Component.__init__(self, ['a','b'])
        self.name = 'Line'
        self.a.free, self.b.free = True, True
        self.a.value, self.b.value = a, b

        self.isbackground = True
        self.convolved = False
        self.a.grad = self.grad_a
        self.b.grad = self.grad_b
        self.start_from = None
Пример #33
0
 def __init__(self):
     Component.__init__(self, ['optical_center', 'height', 'period', 
     'left_slope', 'right_slope', 'left', 'right', 'sigma'])
     self.left.value = np.nan
     self.right.value = np.nan
     self.side_vignetting = False
     self.fix_side_vignetting()
     self.gaussian = Gaussian()
     self.gaussian.origin.free, self.gaussian.A.free = False, False
     self.sigma.value = 1.
     self.gaussian.A.value = 1.
     self.extension_nch = 100
Пример #34
0
 def __init__(self):
     Component.__init__(self, ['optical_center', 'height', 'period', 
     'left_slope', 'right_slope', 'left', 'right', 'sigma'])
     self.left.value = np.nan
     self.right.value = np.nan
     self.side_vignetting = False
     self.fix_side_vignetting()
     self.gaussian = Gaussian()
     self.gaussian.origin.free, self.gaussian.A.free = False, False
     self.sigma.value = 1.
     self.gaussian.A.value = 1.
     self.extension_nch = 100
     self._position = self.optical_center
Пример #35
0
 def __init__(self, array=None):
     Component.__init__(self, ['intensity', 'origin'])
     self.name = 'Fixed pattern'
     self.array = array
     self.intensity.free = True
     self.intensity.value = 1.
     self.origin.value = 0
     self.origin.free = False
     self.isbackground = True
     self.convolved = False
     self.intensity.grad = self.grad_intensity
     self.interpolate = False
     self._interpolation_ready = False
Пример #36
0
 def __init__( self, array=None ):
     Component.__init__(self, ['intensity', 'origin'])
     self.name = 'Fixed pattern'
     self.array = array
     self.intensity.free = True
     self.intensity.value = 1.
     self.origin.value = 0
     self.origin.free = False
     self.isbackground = True
     self.convolved = False
     self.intensity.grad = self.grad_intensity
     self.interpolate = False
     self._interpolation_ready = False
Пример #37
0
    def __init__(self, elements, fracs, N=1.0, C=0.0):
        """
        A scattering component to fit background atomic scattering.
        Calculates the sum of the squares sum_squares = sum (ci * fi**2 )
        and the square of the sum square_sum = (sum(ci * fi))**2
        for atomic fraction ci with electron scattering factor fi.
        The latter is used for normalisation.

        N and C are fitting parameters for the Component class.

        The fitted function f is of the form:

        f = sum(fi), fi = ai(2 + bi*g^2) / (1 + bi*g^2)^2
        where 1 < i < 5, ai, and bi are tabulated constants, and
        g = 1/d = 2sin(theta)/lambda is the scattering vector magnitude.
        The factors are tabulated in ATOMIC_SCATTERING_PARAMS_LOBATO.


        The parametrisation is detailed in [1].

        Parameters
        ----------
        elements: list of str
            A list of elements present (by symbol).
        fracs: list of float
            A list of fraction of the respective elements. Should sum to 1.
        N : float
            The "slope" of the fit.
        C : float
            An additive constant to the fit.

        References
        ----------
        [1] Lobato, I., & Van Dyck, D. (2014). An accurate parameterization for
        scattering factors, electron densities and electrostatic potentials for
        neutral atoms that obey all physical constraints. Acta Crystallographica
        Section A: Foundations and Advances, 70(6), 636-649.

        """
        Component.__init__(self, ["N", "C"])
        self._whitelist["elements"] = ("init,sig", elements)
        self._whitelist["fracs"] = ("init,sig", fracs)
        self.elements = elements
        self.fracs = fracs
        params = []
        for e in elements:
            params.append(ATOMIC_SCATTERING_PARAMS_LOBATO[e])
        self.params = params
        self.N.value = N
        self.C.value = C
Пример #38
0
    def __init__(self, A=1. , k=1. , x0=1.):
        Component.__init__(self, ['A', 'k', 'x0'])
        self.A.value = A
        self.A.grad = self.grad_A

        self.k.value = k
        self.k.grad = self.grad_k

        self.x0.value = x0
        self.x0.grad = self.grad_x0

        self.isbackground = False
        self.isconvolved = False
        self._position = self.x0
Пример #39
0
    def __init__(self, element_subshell, GOS=None):
        # Declare the parameters
        Component.__init__(self, ["intensity", "fine_structure_coeff", "effective_angle", "onset_energy"])
        if isinstance(element_subshell, dict):
            self.element = element_subshell["element"]
            self.subshell = element_subshell["subshell"]
        else:
            self.element, self.subshell = element_subshell.split("_")
        self.name = "_".join([self.element, self.subshell])
        self.energy_scale = None
        self.effective_angle.free = False
        self.fine_structure_active = preferences.EELS.fine_structure_active
        self.fine_structure_width = preferences.EELS.fine_structure_width
        self.fine_structure_coeff.ext_force_positive = False
        self.GOS = None
        # Set initial actions
        if GOS is None:
            try:
                self.GOS = HartreeSlaterGOS(element_subshell)
                GOS = "Hartree-Slater"
            except IOError:
                GOS = "hydrogenic"
                messages.information("Hartree-Slater GOS not available. " "Using hydrogenic GOS")
        if self.GOS is None:
            if GOS == "Hartree-Slater":
                self.GOS = HartreeSlaterGOS(element_subshell)
            elif GOS == "hydrogenic":
                self.GOS = HydrogenicGOS(element_subshell)
            else:
                raise ValueError("gos must be one of: None, 'hydrogenic'" " or 'Hartree-Slater'")
        self.onset_energy.value = self.GOS.onset_energy
        self.onset_energy.free = False
        self._position = self.onset_energy
        self.free_onset_energy = False
        self.intensity.grad = self.grad_intensity
        self.intensity.value = 1
        self.intensity.bmin = 0.0
        self.intensity.bmax = None

        self._whitelist["GOS"] = ("init", GOS)
        if GOS == "Hartree-Slater":
            self._whitelist["element_subshell"] = ("init", self.GOS.as_dictionary(True))
        elif GOS == "hydrogenic":
            self._whitelist["element_subshell"] = ("init", element_subshell)
        self._whitelist["fine_structure_active"] = None
        self._whitelist["fine_structure_width"] = None
        self._whitelist["fine_structure_smoothing"] = None
        self.effective_angle.events.value_changed.connect(self._integrate_GOS, [])
        self.onset_energy.events.value_changed.connect(self._integrate_GOS, [])
        self.onset_energy.events.value_changed.connect(self._calculate_knots, [])
Пример #40
0
 def __init__(self, spectrum):
 
     Component.__init__(self, ['yscale', 'xscale', 'shift', 'offset'])
     self.spectrum = spectrum
     self.yscale.free = True
     self.yscale.value = 1.
     self.xscale.value = 1.
     self.offset.value = 0.
     self.shift.value = 0.
     
     self.prepare_interpolator()
     # Options
     self.isbackground = True
     self.convolved = False
     self.interpolate = True
Пример #41
0
    def __init__(self, zl):
        Component.__init__(self, ['intensity', 'xscale', 'origin', 'offset'])
        self.name = 'ResizebleFixedPattern'
        self.zl = zl
        self.intensity.free = True
        self.intensity.value = 1.
        self.xscale.value = 1.
        self.offset.value = 0.
        self.origin.value = 0.
        # Options
        self.isbackground = True
        self.convolved = False
#        self.intensity.grad = self.grad_intensity
        self.f = interp1d(zl.energy_axis, zl.data_cube.squeeze(), 
        bounds_error = False, fill_value = 0.)
Пример #42
0
    def __init__(self, spectrum):

        Component.__init__(self, ['yscale', 'xscale', 'shift'])

        self._position = self.shift
        self.spectrum = spectrum
        self.yscale.free = True
        self.yscale.value = 1.
        self.xscale.value = 1.
        self.shift.value = 0.

        self.prepare_interpolator()
        # Options
        self.isbackground = True
        self.convolved = False
        self.interpolate = True
Пример #43
0
    def __init__(self, A=10e5, r=3., origin=0.):
        Component.__init__(self, ('A', 'r', 'origin'))
        self.A.value = A
        self.r.value = r
        self.origin.value = origin
        self.origin.free = False
        self.left_cutoff = 0.

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.r.bmin = 1.
        self.r.bmax = 5.

        self.isbackground = True
        self.convolved = False
Пример #44
0
    def __init__(self, A=10e5, r=3., origin=0.):
        Component.__init__(self, ('A', 'r', 'origin'))
        self.A.value = A
        self.r.value = r
        self.origin.value = origin
        self.origin.free = False
        self.left_cutoff = 0.

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.r.bmin = 1.
        self.r.bmax = 5.

        self.isbackground = True
        self.convolved = False
Пример #45
0
    def __init__(self, A=1., k=1., x0=1., minimum_at_zero=False):
        Component.__init__(self, ['A', 'k', 'x0'])
        self.A.value = A
        self.A.grad = self.grad_A

        self.k.value = k
        self.k.grad = self.grad_k

        self.x0.value = x0
        self.x0.grad = self.grad_x0

        self.minimum_at_zero = minimum_at_zero

        self.isbackground = False
        self.isconvolved = False
        self._position = self.x0
Пример #46
0
    def __init__(self, A=10e5, r=3.0, origin=0.0):
        Component.__init__(self, ("A", "r", "origin"))
        self.A.value = A
        self.r.value = r
        self.origin.value = origin
        self.origin.free = False
        self.left_cutoff = 0.0

        # Boundaries
        self.A.bmin = 0.0
        self.A.bmax = None
        self.r.bmin = 1.0
        self.r.bmax = 5.0

        self.isbackground = True
        self.convolved = False
    def __init__(self, elements, fracs, N=1.0, C=0.0):
        """
        A scattering component to fit background atomic scattering.
        Calculates the sum of the squares sum_squares = sum (ci * fi**2 )
        and the square of the sum square_sum = (sum(ci * fi))**2
        for atomic fraction ci with electron scattering factor fi.
        The latter is used for normalisation.

        N and C are fitting parameters for the Component class.

        The fitted function f is of the form:

        f = sum(fi), fi = ai * exp(-bi*g^2)
        where 1 < i < 5, ai, and bi are tabulated constants, and
        g = 1/d = 2sin(theta)/lambda is the scattering vector magnitude.
        The factors are tabulated in ATOMIC_SCATTERING_PARAMS_XTABLES.

        The fitted scattering factor is from [1].

        Parameters
        ----------
        elements: list of str
            A list of elements present (by symbol).
        fracs: list of float
            A list of fraction of the respective elements. Should sum to 1.
        N : float
            The "slope" of the fit.
        C : float
            An additive constant to the fit.

        References
        ----------
        [1] Prince, E. (2004). International tables for crystallography.
        Vol. C, table 4.3.2.3.

        """
        Component.__init__(self, ["N", "C"])
        self._whitelist["elements"] = ("init,sig", elements)
        self._whitelist["fracs"] = ("init,sig", fracs)
        self.elements = elements
        self.fracs = fracs
        params = []
        for e in elements:
            params.append(ATOMIC_SCATTERING_PARAMS[e])
        self.params = params
        self.N.value = N
        self.C.value = C
Пример #48
0
    def __init__(self, spectrum):

        Component.__init__(self, ['yscale', 'xscale', 'shift'])

        self._position = self.shift
        self._whitelist['spectrum'] = ('init,sig', spectrum)
        self.spectrum = spectrum
        self.yscale.free = True
        self.yscale.value = 1.
        self.xscale.value = 1.
        self.shift.value = 0.

        self.prepare_interpolator()
        # Options
        self.isbackground = True
        self.convolved = False
        self.interpolate = True
Пример #49
0
 def __init__(self, zl):
     Component.__init__(self, ['intensity', 'xscale', 'origin', 'offset'])
     self.name = 'ResizebleFixedPattern'
     self.zl = zl
     self.intensity.free = True
     self.intensity.value = 1.
     self.xscale.value = 1.
     self.offset.value = 0.
     self.origin.value = 0.
     # Options
     self.isbackground = True
     self.convolved = False
     #        self.intensity.grad = self.grad_intensity
     self.f = interp1d(zl.energy_axis,
                       zl.data_cube.squeeze(),
                       bounds_error=False,
                       fill_value=0.)
Пример #50
0
    def __init__(self, A=1., k=1., x0=1., minimum_at_zero=False):
        Component.__init__(self, ['A', 'k', 'x0'])
        self.A.value = A
        self.A.grad = self.grad_A

        self.k.value = k
        self.k.grad = self.grad_k

        self.x0.value = x0
        self.x0.grad = self.grad_x0

        self.minimum_at_zero = minimum_at_zero
        self._whitelist['minimum_at_zero'] = ('init', minimum_at_zero)

        self.isbackground = False
        self.isconvolved = False
        self._position = self.x0
Пример #51
0
    def __init__(self, signal1D):

        Component.__init__(self, ['yscale', 'xscale', 'shift'])

        self._position = self.shift
        self._whitelist['signal1D'] = ('init,sig', signal1D)
        self.signal = signal1D
        self.yscale.free = True
        self.yscale.value = 1.
        self.xscale.value = 1.
        self.shift.value = 0.

        self.prepare_interpolator()
        # Options
        self.isbackground = True
        self.convolved = False
        self.interpolate = True
Пример #52
0
    def __init__(self):
        Component.__init__(self, ['A', 'sigma', 'origin'])

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None

        self.sigma.bmin = None
        self.sigma.bmax = None

        self.isbackground = False
        self.convolved = True

        # Gradients
        self.A.grad = self.grad_A
        self.sigma.grad = self.grad_sigma
        self.origin.grad = self.grad_origin
        self._position = self.origin
Пример #53
0
    def __init__(self):
        Component.__init__(self, ['A','sigma','origin'])        
                
        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        
        self.sigma.bmin = None
        self.sigma.bmax = None


        self.isbackground = False
        self.convolved = True
        
        # Gradients
        self.A.grad = self.grad_A
        self.sigma.grad = self.grad_sigma
        self.origin.grad = self.grad_origin
    def __init__(self, a=0.0, b=0.0, c=0.0, d=0.0):
        """
        Parameters
        ----------
        a : float
        b : float
        c : float
        d : float
            a, b, c, and d are the coefficients of the 1st, 2nd, 3rd, and 4th
            order terms respectively of the returned polynomial.

        Returns
        -------
        p : polynomial of the form ax + bx^2 + cx^3 + dx^4

        """

        Component.__init__(self, ("a", "b", "c", "d"))
Пример #55
0
    def __init__(self):
        Component.__init__(self, ["A", "sigma", "origin"])

        # Boundaries
        self.A.bmin = 0.0
        self.A.bmax = None

        self.sigma.bmin = None
        self.sigma.bmax = None

        self.isbackground = False
        self.convolved = True

        # Gradients
        self.A.grad = self.grad_A
        self.sigma.grad = self.grad_sigma
        self.origin.grad = self.grad_origin
        self._position = self.origin
Пример #56
0
 def __init__(self,
              A=1.,
              sigma_x=1.,
              sigma_y=1.,
              centre_x=0.,
              centre_y=0.,
              ):
     Component.__init__(self, ['A',
                               'sigma_x',
                               'sigma_y',
                               'centre_x',
                               'centre_y',
                               ])
     self.A.value = A
     self.sigma_x.value = sigma_x
     self.sigma_y.value = sigma_y
     self.centre_x.value = centre_x
     self.centre_y.value = centre_y
Пример #57
0
    def __init__(self, element_subshell, intensity=1.,delta=0.):
        # Check if the Peter Rez's Hartree Slater GOS distributed by Gatan 
        # are available. Otherwise exit
        if not os.path.isdir(preferences.EELS.eels_gos_files_path):
            message = (
            "The path to the GOS files could not be found. " 
            "Please define a valid location for the EELS GOS files in the "
            "folder location in the configuration file.")
            raise IOError(message)
        # Declare which are the "real" parameters
        Component.__init__(self, ['delta', 'intensity', 'fslist', 
        'effective_angle'])
        self.name = element_subshell
        # Set initial values
        self.__element, self.__subshell = element_subshell.split('_')
        self.energy_scale = None
        self.T = None
        self.gamma = None
        self.convergence_angle = None
        self.collection_angle = None
        self.E0 = None
        self.effective_angle.value = 0
        self.effective_angle.free = False
        self.fs_state = preferences.EELS.fs_state
        self.fs_emax = preferences.EELS.fs_emax
        self.fs_mode = "new_spline"
        self.fslist.ext_force_positive = False
        
        self.delta.value = delta
        self.delta.free = False
        self.delta.ext_force_positive = False
        self.delta.grad = self.grad_delta
        self.freedelta = False
        self._previous_delta = delta
                                
        self.intensity.grad = self.grad_intensity
        self.intensity.value = intensity
        self.intensity.bmin = 0.
        self.intensity.bmax = None

        self.knots_factor = preferences.EELS.knots_factor

        # Set initial actions
        self.readgosfile()
Пример #58
0
    def __init__(self, A=1., gamma=1.,centre = 0.):
        Component.__init__(self, ('A', 'gamma', 'centre'))
        self.A.value = A
        self.gamma.value = gamma
        self.centre.value = centre
        
        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.gamma.bmin = None
        self.gamma.bmax = None

        self.isbackground = False
        self.convolved = True
        
        # Gradients
        self.A.grad = self.grad_A
        self.gamma.grad = self.grad_gamma
        self.centre.grad = self.grad_centre
Пример #59
0
    def __init__(self, A=10e5, r=3.,origin = 0.,):
        Component.__init__(self, ('A', 'r', 'origin','shift', 'ratio'))
        self.A.value = 1E-5
        self.r.value = 3.
        self.origin.value = 0.
        self.origin.free = False
        self.shift.value = 20.
        self.shift.free = False
        self.ratio.value = 1.E-2
        self.left_cutoff = 20. # in x-units

        # Boundaries
        self.A.bmin = 0.
        self.A.bmax = None
        self.r.bmin = 1.
        self.r.bmax = 5.

        self.isbackground = True
        self.convolved = False