def setUp(self): gaussian = components.Gaussian() gaussian.A.value = 10 gaussian.centre.value = 10 gaussian.sigma.value = 1 self.signal = signals.Signal(gaussian.function(np.arange(0, 20, 0.01))) self.signal.axes_manager[0].scale = 0.01
def set_background_estimator(self): if self.background_type == 'Power Law': self.background_estimator = components.PowerLaw() self.bg_line_range = 'from_left_range' elif self.background_type == 'Gaussian': self.background_estimator = components.Gaussian() self.bg_line_range = 'full' elif self.background_type == 'Offset': self.background_estimator = components.Offset() self.bg_line_range = 'full' elif self.background_type == 'Polynomial': self.background_estimator = \ components.Polynomial(self.polynomial_order) self.bg_line_range = 'full'
def add_family_lines(self, xray_lines='from_elements'): """Create the Xray-lines instances and configure them appropiately If a X-ray line is given, all the the lines of the familiy is added. For instance if Zn Ka is given, Zn Kb is added too. The main lines (alpha) is added to self.xray_lines Parameters ----------- xray_lines: {None, 'from_elements', list of string} If None, if `metadata` contains `xray_lines` list of lines use those. If 'from_elements', add all lines from the elements contains in `metadata`. Alternatively, provide an iterable containing a list of valid X-ray lines symbols. (eg. ('Al_Ka','Zn_Ka')). """ only_one = False only_lines = ("Ka", "La", "Ma") if xray_lines is None or xray_lines == 'from_elements': if 'Sample.xray_lines' in self.spectrum.metadata \ and xray_lines != 'from_elements': xray_lines = self.spectrum.metadata.Sample.xray_lines elif 'Sample.elements' in self.spectrum.metadata: xray_lines = self.spectrum._get_lines_from_elements( self.spectrum.metadata.Sample.elements, only_one=only_one, only_lines=only_lines) else: raise ValueError( "No elements defined, set them with `add_elements`") components_names = [xr.name for xr in self.xray_lines] xray_lines = filter(lambda x: x not in components_names, xray_lines) xray_lines, xray_not_here = self.spectrum.\ _get_xray_lines_in_spectral_range(xray_lines) for xray in xray_not_here: warnings.warn("%s is not in the data energy range." % (xray)) for xray_line in xray_lines: element, line = utils_eds._get_element_and_line(xray_line) line_energy, line_FWHM = self.spectrum._get_line_energy( xray_line, FWHM_MnKa='auto') component = create_component.Gaussian() component.centre.value = line_energy component.fwhm = line_FWHM component.centre.free = False component.sigma.free = False component.name = xray_line self.append(component) self.xray_lines.append(component) self[xray_line].A.map[ 'values'] = self.spectrum.isig[line_energy].data * \ line_FWHM / self.spectrum.axes_manager[-1].scale self[xray_line].A.map['is_set'] = (np.ones( self.spectrum.isig[line_energy].data.shape) == 1) component.A.ext_force_positive = True for li in elements_db[element]['Atomic_properties']['Xray_lines']: if line[0] in li and line != li: xray_sub = element + '_' + li if self.spectrum.\ _get_xray_lines_in_spectral_range( [xray_sub])[0] != []: line_energy, line_FWHM = self.spectrum.\ _get_line_energy( xray_sub, FWHM_MnKa='auto') component_sub = create_component.Gaussian() component_sub.centre.value = line_energy component_sub.fwhm = line_FWHM component_sub.centre.free = False component_sub.sigma.free = False component_sub.name = xray_sub component_sub.A.twin_function = _get_weight( element, li) component_sub.A.twin_inverse_function = _get_iweight( element, li) component_sub.A.twin = component.A self.append(component_sub) self.fetch_stored_values()