From 1683139d356a11ea707b45d2f17ffeff1a9b12ac Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:55:13 +0100 Subject: [PATCH 01/41] restructure sub-reader folders by vendors --- pynxtools_xps/{txt => scienta}/__init__.py | 0 pynxtools_xps/{txt => scienta}/txt_scienta.py | 0 pynxtools_xps/{txt => vms}/txt_vamas_export.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename pynxtools_xps/{txt => scienta}/__init__.py (100%) rename pynxtools_xps/{txt => scienta}/txt_scienta.py (100%) rename pynxtools_xps/{txt => vms}/txt_vamas_export.py (100%) diff --git a/pynxtools_xps/txt/__init__.py b/pynxtools_xps/scienta/__init__.py similarity index 100% rename from pynxtools_xps/txt/__init__.py rename to pynxtools_xps/scienta/__init__.py diff --git a/pynxtools_xps/txt/txt_scienta.py b/pynxtools_xps/scienta/txt_scienta.py similarity index 100% rename from pynxtools_xps/txt/txt_scienta.py rename to pynxtools_xps/scienta/txt_scienta.py diff --git a/pynxtools_xps/txt/txt_vamas_export.py b/pynxtools_xps/vms/txt_vamas_export.py similarity index 100% rename from pynxtools_xps/txt/txt_vamas_export.py rename to pynxtools_xps/vms/txt_vamas_export.py From 9160c83c3731cf5d97c933d506d5564bf196ab70 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:56:04 +0100 Subject: [PATCH 02/41] adopt file parser imports to new folder structure --- pynxtools_xps/file_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools_xps/file_parser.py b/pynxtools_xps/file_parser.py index 8962ece1..e7760cf7 100644 --- a/pynxtools_xps/file_parser.py +++ b/pynxtools_xps/file_parser.py @@ -24,10 +24,10 @@ from typing import List, Dict from pynxtools_xps.sle.sle_specs import SleMapperSpecs -from pynxtools_xps.txt.txt_scienta import TxtMapperScienta +from pynxtools_xps.scienta.txt_scienta import TxtMapperScienta # from pynxtools_xps.txt.txt_specs import TxtMapperSpecs -from pynxtools_xps.txt.txt_vamas_export import TxtMapperVamasExport +from pynxtools_xps.vms.txt_vamas_export import TxtMapperVamasExport from pynxtools_xps.vms.vamas import VamasMapper from pynxtools_xps.xy.xy_specs import XyMapperSpecs from pynxtools_xps.xml.xml_specs import XmlMapperSpecs From ca47dd2f2af39d81e662aba56d1411825f48ddad Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:53:44 +0100 Subject: [PATCH 03/41] add scienta example data --- examples/scienta/README.md | 14 ++++++ examples/scienta/eln_data.yaml | 92 ++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 examples/scienta/README.md create mode 100644 examples/scienta/eln_data.yaml diff --git a/examples/scienta/README.md b/examples/scienta/README.md new file mode 100644 index 00000000..5c039d45 --- /dev/null +++ b/examples/scienta/README.md @@ -0,0 +1,14 @@ +# Example for .txt data exported from Scienta spectrometer + +This is an example for parsing the .txt data export of Scienta Omicron +[Scienta Omicron](https://www.scientaomicron.com/en/). We thank Dr. Alexei Nefedov from [KIT](https://www.ifg.kit.edu/21_1296.php) for providing this example data set. + +The example conversion can be run with the following command. + +```console +user@box:~$ dataconverter Cu-HHTP_*.txt eln_data.yaml --reader xps --nxdl NXmpes --output Cu-HHTP.nxs +``` + +## Contact person in FAIRmat for this example +Lukas Pielsticker + \ No newline at end of file diff --git a/examples/scienta/eln_data.yaml b/examples/scienta/eln_data.yaml new file mode 100644 index 00000000..ccd05e50 --- /dev/null +++ b/examples/scienta/eln_data.yaml @@ -0,0 +1,92 @@ +title: XPS Experiment +definition: + value: NXmpes + version: "1.0" +method: XPS +User: + name: Alexei Nefedov + email: alexei.nefedov@kit.edu + affiliation: Karlsruhe Institute of Technology (KIT), Institut für Funktionelle Grenzflächen + address: KIT + orcid: 0000-0001-9361-8333 +Instrument: + energy_resolution: + unit: null + value: null + Source: + type: Synchrotron X-ray Source + name: BESSY II" + probe: x-ray + current: + value: 298 + unit: mA + Beam: + distance: + unit: mm + value: 0.0 + #current: + #value: 30 + #unit: "pA" + Analyser: + name: Hemispherical Analyser dummy + description: hemispherical + Collectioncolumn: + scheme: Angular dispersive + Energydispersion: + scheme: hemispherical + pass_energy: + unit: eV + APERTURE[entrance_slit]: + description: Analyser slit Nr. 3 + shape: curved slit + size: + value: 0.4 + unit: mm + Detector: + amplifier_type: channeltron + detector_type: Multi-anode + Manipulator: + drain_current: + unit: A + value: 0.0 + sample_temperature: + unit: K + value: 298.0 + sample_bias: + unit: V + value: 0.0 + POSITIONER[positioner_x]: + value: + value: 15.5 + unit: cm + POSITIONER[positioner_y]: + value: + value: 11 + unit: cm + POSITIONER[positioner_z]: + value: + value: 36 + unit: cm + POSITIONER[positioner_phi]: + value: + value: 45 + unit: degree +Sample: + chemical_formula: Cu + temperature: + unit: K + value: 298.0 + situation: vacuum + gas_pressure: + unit: mbar + value: 0.000000001 + bias: + unit: V + value: 0.0 + preparation_date: "2023-03-08T10:49:12+01:00" + sample_history: transferred to analysis chamber + preparation_description: loaded in the endstation and transferred to analysis chamber + description: Cu-HHTP/Glass on standard sample holder +Process: + energy_calibration: + applied: True \ No newline at end of file From ea374e3b5271346b004709ac6d695c4c6206fa4a Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:54:37 +0100 Subject: [PATCH 04/41] rename folder structure and imports --- ...t_scienta.json => config_scienta_txt.json} | 0 pynxtools_xps/file_parser.py | 2 +- pynxtools_xps/scienta/txt_scienta.py | 574 ------------------ 3 files changed, 1 insertion(+), 575 deletions(-) rename pynxtools_xps/config/{config_txt_scienta.json => config_scienta_txt.json} (100%) delete mode 100644 pynxtools_xps/scienta/txt_scienta.py diff --git a/pynxtools_xps/config/config_txt_scienta.json b/pynxtools_xps/config/config_scienta_txt.json similarity index 100% rename from pynxtools_xps/config/config_txt_scienta.json rename to pynxtools_xps/config/config_scienta_txt.json diff --git a/pynxtools_xps/file_parser.py b/pynxtools_xps/file_parser.py index e7760cf7..e4669757 100644 --- a/pynxtools_xps/file_parser.py +++ b/pynxtools_xps/file_parser.py @@ -24,7 +24,7 @@ from typing import List, Dict from pynxtools_xps.sle.sle_specs import SleMapperSpecs -from pynxtools_xps.scienta.txt_scienta import TxtMapperScienta +from pynxtools_xps.scienta.scienta_txt import TxtMapperScienta # from pynxtools_xps.txt.txt_specs import TxtMapperSpecs from pynxtools_xps.vms.txt_vamas_export import TxtMapperVamasExport diff --git a/pynxtools_xps/scienta/txt_scienta.py b/pynxtools_xps/scienta/txt_scienta.py deleted file mode 100644 index 09307cbe..00000000 --- a/pynxtools_xps/scienta/txt_scienta.py +++ /dev/null @@ -1,574 +0,0 @@ -""" -Class for reading XPS files from TXT export of Scienta. -""" -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# pylint: disable=too-many-lines - -import re -import copy -from datetime import datetime -import pytz -import xarray as xr -import numpy as np - -from pynxtools_xps.reader_utils import ( - XPSMapper, - construct_entry_name, - construct_data_key, - construct_detector_data_key, -) - - -class TxtMapperScienta(XPSMapper): - """ - Class for restructuring .txt data file from - Scienta TXT export into python dictionary. - """ - - config_file = "config_txt_scienta.json" - - def _select_parser(self): - """ - Select Scienta TXT parser. - Currently, there is only one parser. - - Returns - ------- - ScientaTxtHelper - Parser for reading .txt file exported by Scienta. - - """ - return ScientaTxtHelper() - - def construct_data(self): - """Map TXT format to NXmpes-ready dict.""" - # pylint: disable=duplicate-code - spectra = copy.deepcopy(self.raw_data) - - self._xps_dict["data"]: dict = {} - - key_map = { - "file_info": ["data_file", "sequence_file"], - "user": [ - "user_initials", - ], - "instrument": [ - "instrument_name", - "vendor", - ], - "source": [], - "beam": ["excitation_energy"], - "analyser": [], - "collectioncolumn": [ - "lens_mode", - ], - "energydispersion": [ - "acquisition_mode", - "pass_energy", - ], - "detector": [ - "detector_first_x_channel", - "detector_first_y_channel", - "detector_last_x_channel", - "detector_last_y_channel", - "detector_mode", - "dwell_time", - ], - "manipulator": [], - "calibration": [], - "sample": ["sample_name"], - "data": [ - "x_units", - "energy_axis", - "energy_type", - "step_size", - ], - "region": [ - "center_energy", - "energy_scale", - "energy_size", - "no_of_scans", - "region_id", - "spectrum_comment", - "start_energy", - "stop_energy", - "time_stamp", - ], - # 'unused': [ - # 'energy_unit', - # 'number_of_slices', - # 'software_version', - # 'spectrum_comment', - # 'start_date', - # 'start_time', - # 'time_per_spectrum_channel' - # ] - } - - for spectrum in spectra: - self._update_xps_dict_with_spectrum(spectrum, key_map) - - def _update_xps_dict_with_spectrum(self, spectrum, key_map): - """ - Map one spectrum from raw data to NXmpes-ready dict. - - """ - # pylint: disable=too-many-locals,duplicate-code - group_parent = f'{self._root_path}/Region_{spectrum["spectrum_type"]}' - region_parent = f'{group_parent}/regions/Region_{spectrum["region_name"]}' - file_parent = f"{region_parent}/file_info" - instrument_parent = f"{region_parent}/instrument" - analyser_parent = f"{instrument_parent}/analyser" - - path_map = { - "file_info": f"{file_parent}", - "user": f"{region_parent}/user", - "instrument": f"{instrument_parent}", - "source": f"{instrument_parent}/source", - "beam": f"{instrument_parent}/beam", - "analyser": f"{analyser_parent}", - "collectioncolumn": f"{analyser_parent}/collectioncolumn", - "energydispersion": f"{analyser_parent}/energydispersion", - "detector": f"{analyser_parent}/detector", - "manipulator": f"{instrument_parent}/manipulator", - "calibration": f"{instrument_parent}/calibration", - "sample": f"{region_parent}/sample", - "data": f"{region_parent}/data", - "region": f"{region_parent}", - } - - for grouping, spectrum_keys in key_map.items(): - root = path_map[str(grouping)] - for spectrum_key in spectrum_keys: - try: - units = re.search(r"\[([A-Za-z0-9_]+)\]", spectrum_key).group(1) - mpes_key = spectrum_key.rsplit(" ", 1)[0] - self._xps_dict[f"{root}/{mpes_key}/@units"] = units - self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] - except AttributeError: - mpes_key = spectrum_key - self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] - - # Create keys for writing to data and detector - entry = construct_entry_name(region_parent) - scan_key = construct_data_key(spectrum) - detector_data_key_child = construct_detector_data_key(spectrum) - detector_data_key = f'{path_map["detector"]}/{detector_data_key_child}/counts' - - # Write raw data to detector. - self._xps_dict[detector_data_key] = spectrum["data"]["y"] - - # If multiple spectra exist to entry, only create a new - # xr.Dataset if the entry occurs for the first time. - if entry not in self._xps_dict["data"]: - self._xps_dict["data"][entry] = xr.Dataset() - - energy = np.array(spectrum["data"]["x"]) - intensity = spectrum["data"]["y"] - - # Write to data in order: scan, cycle, channel - - # Write averaged cycle data to 'data'. - all_scan_data = [ - value - for key, value in self._xps_dict["data"][entry].items() - if scan_key.split("_")[0] in key - ] - averaged_scans = np.mean(all_scan_data, axis=0) - if averaged_scans.size == 1: - # on first scan in cycle - averaged_scans = intensity - - self._xps_dict["data"][entry][scan_key.split("_")[0]] = xr.DataArray( - data=averaged_scans, - coords={"energy": energy}, - ) - - # Write scan data to 'data'. - self._xps_dict["data"][entry][scan_key] = xr.DataArray( - data=intensity, coords={"energy": energy} - ) - - # Write channel data to 'data'. - channel_key = f"{scan_key}_chan0" - self._xps_dict["data"][entry][channel_key] = xr.DataArray( - data=intensity, coords={"energy": energy} - ) - - -class ScientaTxtHelper: - """Parser for Scienta TXT exports.""" - - # pylint: disable=too-few-public-methods - - def __init__(self): - self.lines: list = [] - self.spectra: list = [] - self.no_of_regions = 0 - - keys_map = { - "Number of Regions": "no_of_regions", - "Version": "software_version", - "Lens Mode": "lens_mode", - "Pass Energy": "pass_energy", - "Number of Sweeps": "no_of_scans", - "Excitation Energy": "excitation_energy", - "Energy Scale": "energy_scale", - "Acquisition Mode": "acquisition_mode", - "Energy Unit": "x_units", - "Center Energy": "center_energy", - "Low Energy": "start_energy", - "High Energy": "stop_energy", - "Energy Step": "step_size", - "Step Time": "dwell_time", - "Number of Slices": "number_of_slices", - "File": "data_file", - "Sequence": "sequence_file", - "Spectrum Name": "spectrum_type", - "Instrument": "instrument_name", - "Location": "vendor", - "User": "user_initials", - "Sample": "sample_name", - "Comments": "spectrum_comment", - "Date": "start_date", - "Time": "start_time", - "Time per Spectrum Channel": "time_per_spectrum_channel", - "DetectorMode": "detector_mode", - } - - self.region_keys_map = { - "Region Name": "region_name", - "name": "energy_type", - "size": "energy_size", - "scale": "energy_axis", - } - - detector_map = { - "Detector First X-Channel": "detector_first_x_channel", - "Detector Last X-Channel": "detector_last_x_channel", - "Detector First Y-Channel": "detector_first_y_channel", - "Detector Last Y-Channel": "detector_last_y_channel", - } - - lens_mode_map = {"Transmission": "fixed analyzer transmission"} - - self.key_maps = [ - keys_map, - self.region_keys_map, - detector_map, - lens_mode_map, - ] - - self.value_map = { - "no_of_regions": self._change_no_of_regions, - "x_units": self._change_energy_type, - "energy_axis": [self._separate_dimension_scale, np.array], - "energy_scale": self._change_energy_type, - "acquisition_mode": self._change_scan_mode, - } - - def parse_file(self, file): - """ - Parse the file's data and metadata into a flat - list of dictionaries. - - - Parameters - ---------- - file : str - Filepath of the TXT file to be read. - - Returns - ------- - self.spectra - Flat list of dictionaries containing one spectrum each. - - """ - self._read_lines(file) - self._parse_header() - - for region_id in range(1, self.no_of_regions + 1): - self._parse_region(region_id) - - return self.spectra - - def _read_lines(self, file): - """ - Read all lines from the input txt files. - - - Parameters - ---------- - file : str - Filepath of the TXT file to be read. - - Returns - ------- - None. - - """ - with open(file, encoding="utf-8") as txt_file: - for line in txt_file: - self.lines += [line] - - def _parse_header(self): - """ - Parse header with information about the software version - and the number of spectra in the file. - - Returns - ------- - None. - - """ - n_headerlines = 4 - header = self.lines[:n_headerlines] - self.lines = self.lines[n_headerlines:] - - for line in header: - key, value = self._get_key_value_pair(line) - if key: - value = self._re_map_values(key, value) - setattr(self, key, value) - - def _parse_region(self, region_id): - """ - Parse data from one region (i.e., one measured spectrum) - into a dictioanry and append to all spectra. - - Parameters - ---------- - region_id : int - Number of the region in the file. - - Returns - ------- - None. - - """ - - region_data = { - "region_id": region_id, - "data": {"x": [], "y": []}, - } - - begin_region = False - begin_info = False - begin_data = False - - for line in self.lines: - if line.startswith(f"[Region {region_id}"): - begin_region = True - if line.startswith(f"[Info {region_id}"): - begin_info = True - if line.startswith(f"[Data {region_id}"): - begin_data = True - continue - - if line.startswith("\n"): - begin_region = False - begin_info = False - begin_data = False - - if begin_region: - # Read region meta data. - key, value = self._get_key_value_pair(line) - if "Dimension" in key: - key = self._re_map_keys(key) - key = self.region_keys_map[key.rsplit(" ")[-1]] - key = key.rsplit(" ")[-1] - value = self._re_map_values(key, value) - if self._check_valid_value(value): - region_data[key] = value - - if begin_info: - # Read instrument meta data for this region. - key, value = self._get_key_value_pair(line) - if self._check_valid_value(value): - region_data[key] = value - - if begin_data: - # Read XY data for this region. - [energy, intensity] = [float(s) for s in line.split(" ") if s != ""] - - region_data["data"]["x"].append(energy) - region_data["data"]["y"].append(intensity) - - region_data["data"]["x"] = np.array(region_data["data"]["x"]) - region_data["data"]["y"] = np.array(region_data["data"]["y"]) - - # Convert date and time to ISO8601 date time. - start_date = region_data["start_date"] - start_time = region_data["start_time"] - region_data["time_stamp"] = self._construct_date_time(start_date, start_time) - - self.spectra.append(region_data) - - def _check_valid_value(self, value): - """ - Check if a string or an array is empty. - - Parameters - ---------- - value : obj - For testing, this can be a str or a np.ndarray. - - Returns - ------- - bool - True if the string or np.ndarray is not empty. - - """ - if isinstance(value, str) and value: - return True - if isinstance(value, np.ndarray) and value.size != 0: - return True - return False - - def _get_key_value_pair(self, line): - """ - Split the line at the '=' sign and return a - key-value pair. The values are mapped according - to the desired format. - - Parameters - ---------- - line : str - One line from the input file. - - Returns - ------- - key : str - Anything before the '=' sign, mapped to the desired - key format. - value : obj - Anything after the '=' sign, mapped to the desired - value format and type. - - """ - try: - [key, value] = line.split("=") - key = self._re_map_keys(key) - value = self._re_map_values(key, value) - return key, value - - except ValueError: - key, value = "", "" - return key, value - - def _re_map_keys(self, key): - """ - Map the keys returned from the file to the preferred keys for - the parser output. - - """ - maps = {} - for key_map in self.key_maps: - maps.update(key_map) - - keys = list(maps.keys()) - - if key in keys: - key = maps[key] - - return key - - def _change_no_of_regions(self, no_of_regions): - """ - Make no_of_regions an integer. - Maps e.g. from '0001' string to 1. - - Parameters - ---------- - no_of_regions : str - No. of regions in the data file, - read from the first line. - - Returns - ------- - int - Ineger value of the number of regions. - - """ - return int(no_of_regions) - - def _change_energy_type(self, energy): - """ - Change the strings for energy type to the preferred format. - - """ - if "Binding" in energy: - return "binding energy" - if "Kinetic" in energy: - return "kinetic energy" - return None - - def _separate_dimension_scale(self, scale): - return [float(s) for s in scale.split(" ")] - - def _change_scan_mode(self, acquisition_mode): - """ - Change the strings for acquisition mode type to - the allowed values in NXmpes. - - """ - if acquisition_mode == "Fixed": - return "fixed" - if acquisition_mode == "Swept": - return "sweep" - return None - - def _construct_date_time(self, date, time): - """ - Convert the native time format to the datetime string - in the ISO 8601 format: '%Y-%b-%dT%H:%M:%S.%fZ'. - - """ - date_time = datetime.combine( - datetime.strptime(date, "%Y-%m-%d"), - datetime.strptime(time, "%H:%M:%S").time(), - ) - - localtz = pytz.timezone("Europe/Berlin") - date_time = localtz.localize(date_time) - - return date_time.isoformat() - - def _re_map_values(self, input_key, value): - """ - Map the values returned from the file to the preferred format for - the parser output. - - """ - try: - value = value.rstrip("\n") - except AttributeError: - pass - - keys = list(self.value_map.keys()) - - for k in keys: - if k in input_key: - if not isinstance(self.value_map[k], list): - map_methods = [self.value_map[k]] - else: - map_methods = self.value_map[k] - for method in map_methods: - value = method(value) - return value From fd5a0dbb326b945220ea2bce308778b4acbc9742 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:55:18 +0100 Subject: [PATCH 05/41] pascal to snake case converter with whitespace --- pynxtools_xps/reader_utils.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pynxtools_xps/reader_utils.py b/pynxtools_xps/reader_utils.py index f8208c52..70e3cfac 100644 --- a/pynxtools_xps/reader_utils.py +++ b/pynxtools_xps/reader_utils.py @@ -112,8 +112,13 @@ def to_snake_case(str_value): def convert_pascal_to_snake(str_value): """Convert pascal case text to snake case.""" - pattern = re.compile(r"(? Date: Tue, 26 Mar 2024 00:56:12 +0100 Subject: [PATCH 06/41] use a datamodel to validate scienta reader --- pynxtools_xps/scienta/scienta_txt.py | 593 ++++++++++++++++++ .../scienta/scienta_txt_data_model.py | 78 +++ 2 files changed, 671 insertions(+) create mode 100644 pynxtools_xps/scienta/scienta_txt.py create mode 100644 pynxtools_xps/scienta/scienta_txt_data_model.py diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py new file mode 100644 index 00000000..7def0f65 --- /dev/null +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -0,0 +1,593 @@ +""" +Class for reading XPS files from TXT export of Scienta. +""" +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# pylint: disable=too-many-lines + +import re +import copy +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Union +import pytz +import xarray as xr +import numpy as np + +from pynxtools_xps.reader_utils import ( + XPSMapper, + construct_entry_name, + construct_data_key, + construct_detector_data_key, + convert_pascal_to_snake, +) + +from pynxtools_xps.scienta.scienta_txt_data_model import ScientaHeader, ScientaRegion + + +class TxtMapperScienta(XPSMapper): + """ + Class for restructuring .txt data file from + Scienta TXT export into python dictionary. + """ + + config_file = "config_scienta_txt.json" + + def _select_parser(self): + """ + Select Scienta TXT parser. + Currently, there is only one parser. + + Returns + ------- + ScientaTxtHelper + Parser for reading .txt file exported by Scienta. + + """ + return ScientaTxtHelper() + + def construct_data(self): + """Map TXT format to NXmpes-ready dict.""" + # pylint: disable=duplicate-code + spectra = copy.deepcopy(self.raw_data) + + self._xps_dict["data"]: dict = {} + + key_map = { + "file_info": ["data_file", "sequence_file"], + "user": [ + "user_name", + ], + "instrument": [ + "instrument_name", + "vendor", + ], + "source": [], + "beam": ["excitation_energy"], + "analyser": [], + "collectioncolumn": [ + "lens_mode", + ], + "energydispersion": [ + "acquisition_mode", + "pass_energy", + ], + "detector": [ + "detector_first_x_channel", + "detector_first_y_channel", + "detector_last_x_channel", + "detector_last_y_channel", + "detector_mode", + "dwell_time", + ], + "manipulator": [], + "calibration": [], + "sample": ["sample_name"], + "data": [ + "x_units", + "energy_axis", + "energy_type", + "step_size", + ], + "region": [ + "center_energy", + "energy_scale", + "energy_size", + "no_of_scans", + "region_id", + "spectrum_comment", + "start_energy", + "stop_energy", + "time_stamp", + ], + # 'unused': [ + # 'energy_unit', + # 'number_of_slices', + # 'software_version', + # 'spectrum_comment', + # 'start_date', + # 'start_time', + # 'time_per_spectrum_channel' + # ] + } + + for spectrum in spectra: + self._update_xps_dict_with_spectrum(spectrum, key_map) + + def _update_xps_dict_with_spectrum(self, spectrum, key_map): + """ + Map one spectrum from raw data to NXmpes-ready dict. + + """ + # pylint: disable=too-many-locals,duplicate-code + group_parent = f'{self._root_path}/Region_{spectrum["spectrum_type"]}' + region_parent = f'{group_parent}/regions/Region_{spectrum["region_name"]}' + file_parent = f"{region_parent}/file_info" + instrument_parent = f"{region_parent}/instrument" + analyser_parent = f"{instrument_parent}/analyser" + + path_map = { + "file_info": f"{file_parent}", + "user": f"{region_parent}/user", + "instrument": f"{instrument_parent}", + "source": f"{instrument_parent}/source", + "beam": f"{instrument_parent}/beam", + "analyser": f"{analyser_parent}", + "collectioncolumn": f"{analyser_parent}/collectioncolumn", + "energydispersion": f"{analyser_parent}/energydispersion", + "detector": f"{analyser_parent}/detector", + "manipulator": f"{instrument_parent}/manipulator", + "calibration": f"{instrument_parent}/calibration", + "sample": f"{region_parent}/sample", + "data": f"{region_parent}/data", + "region": f"{region_parent}", + } + + for grouping, spectrum_keys in key_map.items(): + root = path_map[str(grouping)] + for spectrum_key in spectrum_keys: + try: + units = re.search(r"\[([A-Za-z0-9_]+)\]", spectrum_key).group(1) + mpes_key = spectrum_key.rsplit(" ", 1)[0] + self._xps_dict[f"{root}/{mpes_key}/@units"] = units + self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] + except AttributeError: + mpes_key = spectrum_key + self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] + + # Create keys for writing to data and detector + entry = construct_entry_name(region_parent) + scan_key = construct_data_key(spectrum) + detector_data_key_child = construct_detector_data_key(spectrum) + detector_data_key = f'{path_map["detector"]}/{detector_data_key_child}/counts' + + # Write raw data to detector. + self._xps_dict[detector_data_key] = spectrum["data"]["y"] + + # If multiple spectra exist to entry, only create a new + # xr.Dataset if the entry occurs for the first time. + if entry not in self._xps_dict["data"]: + self._xps_dict["data"][entry] = xr.Dataset() + + energy = np.array(spectrum["data"]["x"]) + intensity = spectrum["data"]["y"] + + # Write to data in order: scan, cycle, channel + + # Write averaged cycle data to 'data'. + all_scan_data = [ + value + for key, value in self._xps_dict["data"][entry].items() + if scan_key.split("_")[0] in key + ] + averaged_scans = np.mean(all_scan_data, axis=0) + if averaged_scans.size == 1: + # on first scan in cycle + averaged_scans = intensity + + self._xps_dict["data"][entry][scan_key.split("_")[0]] = xr.DataArray( + data=averaged_scans, + coords={"energy": energy}, + ) + + # Write scan data to 'data'. + self._xps_dict["data"][entry][scan_key] = xr.DataArray( + data=intensity, coords={"energy": energy} + ) + + # Write channel data to 'data'. + channel_key = f"{scan_key}_chan0" + self._xps_dict["data"][entry][channel_key] = xr.DataArray( + data=intensity, coords={"energy": energy} + ) + + +# ============================================================================= +# dimension_1_name +# dimension_1_size +# dimension_1_size +# dimension_1_scale +# dimension_1_scale +# ============================================================================= + +KEY_MAP = { + "number_of_regions": "no_of_regions", + "version": "software_version", + "dimension_name": "energy_type", + "dimension_size": "energy_size", + "dimension_scale": "energy_axis", + "number_of_sweeps": "no_of_scans", + "energy_unit": "x_units", + "low_energy": "start_energy", + "high_energy": "stop_energy", + "energy_step": "step_size", + "step_time": "dwell_time", + "detector_first_x-_channel": "detector_first_x_channel", + "detector_last_x-_channel": "detector_last_x_channel", + "detector_first_y-_channel": "detector_first_y_channel", + "detector_last_y-_channel": "detector_last_y_channel", + "file": "data_file", + "sequence": "sequence_file", + "spectrum_name": "spectrum_type", + "instrument": "instrument_name", + "location": "vendor", + "user": "user_name", + "sample": "sample_name", + "comments": "spectrum_comment", + "date": "start_date", + "time": "start_time", + "name": "energy_type", + "size": "energy_size", + "scale": "energy_axis", + "Transmission": "fixed analyzer transmission", +} + + +class ScientaTxtHelper: + """Parser for Scienta TXT exports.""" + + # pylint: disable=too-few-public-methods + + def __init__(self): + self.lines: List[str] = [] + self.header = ScientaHeader() + self.spectra: Dict[str, Any] = [] + + def parse_file(self, file): + """ + Parse the file's data and metadata into a flat + list of dictionaries. + + + Parameters + ---------- + file : str + Filepath of the TXT file to be read. + + Returns + ------- + self.spectra + Flat list of dictionaries containing one spectrum each. + + """ + self._read_lines(file) + self._parse_header() + + for region_id in range(1, self.header.no_of_regions + 1): + self._parse_region(region_id) + + return self.spectra + + def _read_lines(self, file): + """ + Read all lines from the input txt files. + + + Parameters + ---------- + file : str + Filepath of the TXT file to be read. + + Returns + ------- + None. + + """ + with open(file, encoding="utf-8") as txt_file: + for line in txt_file: + self.lines += [line] + + def _parse_header(self): + """ + Parse header with information about the software version + and the number of spectra in the file. + + Returns + ------- + None. + + """ + n_headerlines = 4 + headerlines = self.lines[:n_headerlines] + self.lines = self.lines[n_headerlines:] + + for line in headerlines: + key, value = self._get_key_value_pair(line) + if key: + value = self._re_map_values(key, value) + setattr(self.header, key, value) + self.header.validate_types() + + def _parse_region(self, region_id): + """ + Parse data from one region (i.e., one measured spectrum) + into a dictioanry and append to all spectra. + + Parameters + ---------- + region_id : int + Number of the region in the file. + + Returns + ------- + None. + + """ + region = ScientaRegion() + region.region_id = region_id + + begin_region = False + begin_info = False + begin_data = False + + energies: List[float] = [] + intensities: List[float] = [] + + for line in self.lines: + if line.startswith(f"[Region {region_id}"): + begin_region = True + if line.startswith(f"[Info {region_id}"): + begin_info = True + if line.startswith(f"[Data {region_id}"): + begin_data = True + continue + + if line.startswith("\n"): + begin_region = False + begin_info = False + begin_data = False + + if begin_region: + # Read region meta data. + key, value = self._get_key_value_pair(line) + if "dimension" in key: + key_part = f"dimension_{key.rsplit('_')[-1]}" + key = self._re_map_keys(key_part) + + value = self._re_map_values(key, value) + if self._check_valid_value(value): + setattr(region, key, value) + + if begin_info: + # Read instrument meta data for this region. + key, value = self._get_key_value_pair(line) + if self._check_valid_value(value): + setattr(region, key, value) + + if begin_data: + # Read XY data for this region. + [energy, intensity] = [float(s) for s in line.split(" ") if s != ""] + + energies.append(energy) + intensities.append(intensity) + + region.data = {"x": np.array(intensities), "y": np.array(energies)} + + # Convert date and time to ISO8601 date time. + region.time_stamp = _construct_date_time(region.start_date, region.start_time) + + region.validate_types() + + region_dict = {**self.header.dict(), **region.dict()} + + self.spectra.append(region_dict) + + def _check_valid_value(self, value): + """ + Check if a string or an array is empty. + + Parameters + ---------- + value : obj + For testing, this can be a str or a np.ndarray. + + Returns + ------- + bool + True if the string or np.ndarray is not empty. + + """ + if isinstance(value, str) and value: + return True + if isinstance(value, np.ndarray) and value.size != 0: + return True + return False + + def _get_key_value_pair(self, line): + """ + Split the line at the '=' sign and return a + key-value pair. The values are mapped according + to the desired format. + + Parameters + ---------- + line : str + One line from the input file. + + Returns + ------- + key : str + Anything before the '=' sign, mapped to the desired + key format. + value : obj + Anything after the '=' sign, mapped to the desired + value format and type. + + """ + try: + [key, value] = line.split("=") + key = convert_pascal_to_snake(key) + key = self._re_map_keys(key) + value = self._re_map_values(key, value) + + except ValueError: + key, value = "", "" + + return key, value + + def _re_map_keys(self, key): + """ + Map the keys returned from the file to the preferred keys for + the parser output. + + """ + if key in KEY_MAP: + return KEY_MAP[key] + return key + + def _re_map_values(self, input_key: str, value: str): + """ + Map the values returned from the file to the preferred format for + the parser output. + + """ + try: + value = value.rstrip("\n") + except AttributeError: + pass + + value_map = { + "no_of_regions": int, + "energy_size": int, + # "energy_axis", + "pass_energy": float, + "no_of_scans": int, + "excitation_energy": float, + "center_energy": float, + "start_energy": float, + "stop_energy": float, + "step_size": float, + "dwell_time": float, + "detector_first_x_channel": int, + "detector_last_x_channel": int, + "detector_first_y_channel": int, + "detector_last_y_channel": int, + "time_per_spectrum_channel": float, + "x_units": _change_energy_type, + "energy_axis": _separate_dimension_scale, + "energy_scale": _change_energy_type, + "acquisition_mode": _change_scan_mode, + "time_per_spectrum_channel": float, + } + + keys = list(value_map.keys()) + + for k in keys: + if k in input_key: + if not isinstance(value_map[k], list): + map_methods = [value_map[k]] + else: + map_methods = value_map[k] + for method in map_methods: + value = method(value) + return value + + +def str_to_int(str_value: str): + """ + Make str_value an integer. + Maps e.g. from '0001' string to 1. + """ + return int(str_value) + + +def str_to_float(str_value: str): + """ + Make str_value an integer. + Maps e.g. from '0001' string to 1. + """ + return int(str_value) + + +def _change_energy_type(energy_type: str): + """ + Change the strings for energy type to the preferred format. + + """ + if "Binding" in energy_type: + return "binding energy" + if "Kinetic" in energy_type: + return "kinetic energy" + return None + + +def _separate_dimension_scale(scale: str): + """ + Seperate the str of the dimension scale into a numpy array + + Parameters + ---------- + scale : str + Str of the form "600 599.5 599 598.5 5". + + Returns + ------- + np.ndarray + Dimension scale as a numpy array. + + """ + return np.array([float(s) for s in scale.split(" ")]) + + +def _change_scan_mode(acquisition_mode: str): + """ + Change the strings for acquisition mode type to + the allowed values in NXmpes. + + """ + mode_map = {"Fixed": "fixed", "Swept": "sweep"} + if acquisition_mode in mode_map: + return mode_map[acquisition_mode] + return None + + +def _construct_date_time(date: str, time: str): + """ + Convert the native time format to the datetime string + in the ISO 8601 format: '%Y-%b-%dT%H:%M:%S.%fZ'. + + """ + date_time = datetime.combine( + datetime.strptime(date, "%Y-%m-%d"), + datetime.strptime(time, "%H:%M:%S").time(), + ) + + localtz = pytz.timezone("Europe/Berlin") + date_time = localtz.localize(date_time) + + return date_time.isoformat() diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py new file mode 100644 index 00000000..ccee49d8 --- /dev/null +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -0,0 +1,78 @@ +""" +Data model for Vamas ISO standard. +""" +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# pylint: disable=too-many-instance-attributes + +from dataclasses import dataclass, field +import numpy as np + +from pynxtools_xps.reader_utils import XpsDataclass + + +@dataclass +class ScientaHeader(XpsDataclass): + no_of_regions: int = 0 + software_version: str = "" + + +@dataclass +class ScientaRegion(XpsDataclass): + region_id: int = 0 + region_name: str = "" + energy_type: str = "" + energy_size: int = 0 + energy_axis: np.ndarray = np.array([]) + lens_mode: str = "" + pass_energy: float = 0.0 + pass_energy_units: str = "eV" + no_of_scans: int = 0 + excitation_energy: float = 0.0 + excitation_energy_units: str = "eV" + energy_type: str = "binding" # energy_scale + acquisition_mode: str = "" + energy_units: str = "kinetic" # ??? + center_energy: float = 0.0 + center_energy_units: str = "eV" + start_energy: float = 0.0 + start_energy_units: str = "eV" + stop_energy: float = 0.0 + stop_energy_units: str = "eV" + step_size: float = 0.0 + stop_energy_units: str = "eV" + dwell_time: float = 0.0 + dwell_time_units: str = "eV" + detector_first_x_channel: int = 0 + detector_last_x_channel: int = 0 + detector_first_y_channel: int = 0 + detector_last_y_channel: int = 0 + number_of_slices: str = "" + data_file: str = "" + sequence_file: str = "" + spectrum_type: str = "" + instrument_name: str = "" + vendor: str = "" + user_name: str = "" + sample_name: str = "" + spectrum_comment: str = "" + start_date: str = "" + start_time: str = "" + time_per_spectrum_channel: float = 0.0 + time_per_spectrum_channel_units: str = "s" + detector_mode: str = "" + data: dict = field(default_factory=dict) From 55b61a4a0315f665c49da08741d3a5dbde02da79 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:03:26 +0100 Subject: [PATCH 07/41] add test data for scienta txt reader --- .gitignore | 2 +- tests/data/scienta_txt/Ag_0001.txt | 408 ++++++++++++++ tests/data/scienta_txt/Ag_0002.txt | 848 +++++++++++++++++++++++++++++ 3 files changed, 1257 insertions(+), 1 deletion(-) create mode 100644 tests/data/scienta_txt/Ag_0001.txt create mode 100644 tests/data/scienta_txt/Ag_0002.txt diff --git a/.gitignore b/.gitignore index c14ad099..7b5a887f 100644 --- a/.gitignore +++ b/.gitignore @@ -201,6 +201,6 @@ cython_debug/ *.txt !requirements.txt !dev-requirements.txt -!mkdocs-requirements.txt +!Ag_*.txt build/ .python-version diff --git a/tests/data/scienta_txt/Ag_0001.txt b/tests/data/scienta_txt/Ag_0001.txt new file mode 100644 index 00000000..30cdf1cb --- /dev/null +++ b/tests/data/scienta_txt/Ag_0001.txt @@ -0,0 +1,408 @@ +[Info] +Number of Regions=0001 +Version=1.3.1 + +[Region 1] +Region Name=Ag3d +Dimension 1 name=Binding Energy [eV] +Dimension 1 size=361 +Dimension 1 scale=382 381.95 381.9 381.85 381.8 381.75 381.7 381.65 381.6 381.55 381.5 381.45 381.4 381.35 381.3 381.25 381.2 381.15 381.1 381.05 381 380.95 380.9 380.85 380.8 380.75 380.7 380.65 380.6 380.55 380.5 380.45 380.4 380.35 380.3 380.25 380.2 380.15 380.1 380.05 380 379.95 379.9 379.85 379.8 379.75 379.7 379.65 379.6 379.55 379.5 379.45 379.4 379.35 379.3 379.25 379.2 379.15 379.1 379.05 379 378.95 378.9 378.85 378.8 378.75 378.7 378.65 378.6 378.55 378.5 378.45 378.4 378.35 378.3 378.25 378.2 378.15 378.1 378.05 378 377.95 377.9 377.85 377.8 377.75 377.7 377.65 377.6 377.55 377.5 377.45 377.4 377.35 377.3 377.25 377.2 377.15 377.1 377.05 377 376.95 376.9 376.85 376.8 376.75 376.7 376.65 376.6 376.55 376.5 376.45 376.4 376.35 376.3 376.25 376.2 376.15 376.1 376.05 376 375.95 375.9 375.85 375.8 375.75 375.7 375.65 375.6 375.55 375.5 375.45 375.4 375.35 375.3 375.25 375.2 375.15 375.1 375.05 375 374.95 374.9 374.85 374.8 374.75 374.7 374.65 374.6 374.55 374.5 374.45 374.4 374.35 374.3 374.25 374.2 374.15 374.1 374.05 374 373.95 373.9 373.85 373.8 373.75 373.7 373.65 373.6 373.55 373.5 373.45 373.4 373.35 373.3 373.25 373.2 373.15 373.1 373.05 373 372.95 372.9 372.85 372.8 372.75 372.7 372.65 372.6 372.55 372.5 372.45 372.4 372.35 372.3 372.25 372.2 372.15 372.1 372.05 372 371.95 371.9 371.85 371.8 371.75 371.7 371.65 371.6 371.55 371.5 371.45 371.4 371.35 371.3 371.25 371.2 371.15 371.1 371.05 371 370.95 370.9 370.85 370.8 370.75 370.7 370.65 370.6 370.55 370.5 370.45 370.4 370.35 370.3 370.25 370.2 370.15 370.1 370.05 370 369.95 369.9 369.85 369.8 369.75 369.7 369.65 369.6 369.55 369.5 369.45 369.4 369.35 369.3 369.25 369.2 369.15 369.1 369.05 369 368.95 368.9 368.85 368.8 368.75 368.7 368.65 368.6 368.55 368.5 368.45 368.4 368.35 368.3 368.25 368.2 368.15 368.1 368.05 368 367.95 367.9 367.85 367.8 367.75 367.7 367.65 367.6 367.55 367.5 367.45 367.4 367.35 367.3 367.25 367.2 367.15 367.1 367.05 367 366.95 366.9 366.85 366.8 366.75 366.7 366.65 366.6 366.55 366.5 366.45 366.4 366.35 366.3 366.25 366.2 366.15 366.1 366.05 366 365.95 365.9 365.85 365.8 365.75 365.7 365.65 365.6 365.55 365.5 365.45 365.4 365.35 365.3 365.25 365.2 365.15 365.1 365.05 365 364.95 364.9 364.85 364.8 364.75 364.7 364.65 364.6 364.55 364.5 364.45 364.4 364.35 364.3 364.25 364.2 364.15 364.1 364.05 364 + +[Info 1] +Region Name=Ag3d +Lens Mode=Transmission +Pass Energy=50 +Number of Sweeps=2 +Excitation Energy=520 +Energy Scale=Binding +Acquisition Mode=Swept +Energy Unit=Kinetic +Center Energy=147 +Low Energy=138 +High Energy=156 +Energy Step=0.05 +Step Time=203 +Detector First X-Channel=43 +Detector Last X-Channel=659 +Detector First Y-Channel=91 +Detector Last Y-Channel=398 +Number of Slices=1 +File=Z:\XPS_data\2023\Mar2023\KIT\Ag_0001.txt,.pxt,.ibw +Sequence=D:\old files\data2\data\Cu-HTTP_Mar_23.seq +Spectrum Name=Ag__001 +Instrument=R3000-6MS014 +Location=Scienta +User=AN +Sample=Ag +Comments=; +Date=2023-03-08 +Time=15:24:35 +Time per Spectrum Channel=45.066 +DetectorMode=ADC +[Run Mode Information 1] + + + +[Data 1] + 3.82000000000000E+0002 1.57494897842407E+0001 + 3.81950000000000E+0002 1.64413099288940E+0001 + 3.81900000000000E+0002 1.55735635757446E+0001 + 3.81850000000000E+0002 1.54435629844666E+0001 + 3.81800000000000E+0002 1.54182739257813E+0001 + 3.81750000000000E+0002 1.56504435539246E+0001 + 3.81700000000000E+0002 1.63364887237549E+0001 + 3.81650000000000E+0002 1.57809653282166E+0001 + 3.81600000000000E+0002 1.63200769424438E+0001 + 3.81550000000000E+0002 1.59050579071045E+0001 + 3.81500000000000E+0002 1.57870745658875E+0001 + 3.81450000000000E+0002 1.55918908119202E+0001 + 3.81400000000000E+0002 1.55100755691528E+0001 + 3.81350000000000E+0002 1.54439034461975E+0001 + 3.81300000000000E+0002 1.55248527526855E+0001 + 3.81250000000000E+0002 1.41690402030945E+0001 + 3.81200000000000E+0002 1.60760860443115E+0001 + 3.81150000000000E+0002 1.48629846572876E+0001 + 3.81100000000000E+0002 1.56844453811646E+0001 + 3.81050000000000E+0002 1.47998075485229E+0001 + 3.81000000000000E+0002 1.66099176406860E+0001 + 3.80950000000000E+0002 1.55111665725708E+0001 + 3.80900000000000E+0002 1.57977375984192E+0001 + 3.80850000000000E+0002 1.47676258087158E+0001 + 3.80800000000000E+0002 1.47283148765564E+0001 + 3.80750000000000E+0002 1.49334163665771E+0001 + 3.80700000000000E+0002 1.57090630531311E+0001 + 3.80650000000000E+0002 1.43097653388977E+0001 + 3.80600000000000E+0002 1.51413059234619E+0001 + 3.80550000000000E+0002 1.43209037780762E+0001 + 3.80500000000000E+0002 1.54984273910522E+0001 + 3.80450000000000E+0002 1.58196969032288E+0001 + 3.80400000000000E+0002 1.62004394531250E+0001 + 3.80350000000000E+0002 1.49333500862122E+0001 + 3.80300000000000E+0002 1.55413570404053E+0001 + 3.80250000000000E+0002 1.35080385208130E+0001 + 3.80200000000000E+0002 1.53979387283325E+0001 + 3.80150000000000E+0002 1.50949568748474E+0001 + 3.80100000000000E+0002 1.49770488739014E+0001 + 3.80050000000000E+0002 1.54676914215088E+0001 + 3.80000000000000E+0002 1.50816597938538E+0001 + 3.79950000000000E+0002 1.59943847656250E+0001 + 3.79900000000000E+0002 1.44137086868286E+0001 + 3.79850000000000E+0002 1.51465196609497E+0001 + 3.79800000000000E+0002 1.58124761581421E+0001 + 3.79750000000000E+0002 1.51443567276001E+0001 + 3.79700000000000E+0002 1.52470436096191E+0001 + 3.79650000000000E+0002 1.50198774337769E+0001 + 3.79600000000000E+0002 1.53124737739563E+0001 + 3.79550000000000E+0002 1.49150300025940E+0001 + 3.79500000000000E+0002 1.54385724067688E+0001 + 3.79450000000000E+0002 1.51602587699890E+0001 + 3.79400000000000E+0002 1.49494242668152E+0001 + 3.79350000000000E+0002 1.50685029029846E+0001 + 3.79300000000000E+0002 1.56178331375122E+0001 + 3.79250000000000E+0002 1.52707815170288E+0001 + 3.79200000000000E+0002 1.48378114700317E+0001 + 3.79150000000000E+0002 1.40221962928772E+0001 + 3.79100000000000E+0002 1.44629292488098E+0001 + 3.79050000000000E+0002 1.51645593643188E+0001 + 3.79000000000000E+0002 1.52528409957886E+0001 + 3.78950000000000E+0002 1.47578248977661E+0001 + 3.78900000000000E+0002 1.49093451499939E+0001 + 3.78850000000000E+0002 1.49314327239990E+0001 + 3.78800000000000E+0002 1.48976922035217E+0001 + 3.78750000000000E+0002 1.43259181976318E+0001 + 3.78700000000000E+0002 1.55560269355774E+0001 + 3.78650000000000E+0002 1.50374283790588E+0001 + 3.78600000000000E+0002 1.49277997016907E+0001 + 3.78550000000000E+0002 1.52587518692017E+0001 + 3.78500000000000E+0002 1.49624061584473E+0001 + 3.78450000000000E+0002 1.51682291030884E+0001 + 3.78400000000000E+0002 1.56328234672546E+0001 + 3.78350000000000E+0002 1.50407094955444E+0001 + 3.78300000000000E+0002 1.48496618270874E+0001 + 3.78250000000000E+0002 1.43254609107971E+0001 + 3.78200000000000E+0002 1.51318750381470E+0001 + 3.78150000000000E+0002 1.48879990577698E+0001 + 3.78100000000000E+0002 1.52053098678589E+0001 + 3.78050000000000E+0002 1.55034446716309E+0001 + 3.78000000000000E+0002 1.41631789207459E+0001 + 3.77950000000000E+0002 1.47533550262451E+0001 + 3.77900000000000E+0002 1.50532965660095E+0001 + 3.77850000000000E+0002 1.48620910644531E+0001 + 3.77800000000000E+0002 1.61487989425659E+0001 + 3.77750000000000E+0002 1.62200355529785E+0001 + 3.77700000000000E+0002 1.48400707244873E+0001 + 3.77650000000000E+0002 1.51052312850952E+0001 + 3.77600000000000E+0002 1.52342233657837E+0001 + 3.77550000000000E+0002 1.52192478179932E+0001 + 3.77500000000000E+0002 1.58891410827637E+0001 + 3.77450000000000E+0002 1.44678759574890E+0001 + 3.77400000000000E+0002 1.54222111701965E+0001 + 3.77350000000000E+0002 1.54114909172058E+0001 + 3.77300000000000E+0002 1.49247450828552E+0001 + 3.77250000000000E+0002 1.56796102523804E+0001 + 3.77200000000000E+0002 1.58447494506836E+0001 + 3.77150000000000E+0002 1.60251660346985E+0001 + 3.77100000000000E+0002 1.55270276069641E+0001 + 3.77050000000000E+0002 1.61188068389893E+0001 + 3.77000000000000E+0002 1.74335250854492E+0001 + 3.76950000000000E+0002 1.60741324424744E+0001 + 3.76900000000000E+0002 1.69899473190308E+0001 + 3.76850000000000E+0002 1.75755357742310E+0001 + 3.76800000000000E+0002 1.84132165908813E+0001 + 3.76750000000000E+0002 1.93554477691650E+0001 + 3.76700000000000E+0002 2.00024967193603E+0001 + 3.76650000000000E+0002 2.00815582275391E+0001 + 3.76600000000000E+0002 2.12560024261475E+0001 + 3.76550000000000E+0002 2.33023719787598E+0001 + 3.76500000000000E+0002 2.29073934555054E+0001 + 3.76450000000000E+0002 2.61511659622192E+0001 + 3.76400000000000E+0002 2.78636026382446E+0001 + 3.76350000000000E+0002 2.86364431381226E+0001 + 3.76300000000000E+0002 2.98695917129517E+0001 + 3.76250000000000E+0002 3.13227787017822E+0001 + 3.76200000000000E+0002 3.22618303298950E+0001 + 3.76150000000000E+0002 3.32425518035889E+0001 + 3.76100000000000E+0002 3.43366584777832E+0001 + 3.76050000000000E+0002 3.36744937896729E+0001 + 3.76000000000000E+0002 3.44810085296631E+0001 + 3.75950000000000E+0002 3.59695625305176E+0001 + 3.75900000000000E+0002 3.47897396087646E+0001 + 3.75850000000000E+0002 3.43475494384766E+0001 + 3.75800000000000E+0002 3.34349670410156E+0001 + 3.75750000000000E+0002 3.45781250000000E+0001 + 3.75700000000000E+0002 3.35668334960938E+0001 + 3.75650000000000E+0002 3.29793815612793E+0001 + 3.75600000000000E+0002 3.18872461318970E+0001 + 3.75550000000000E+0002 3.22348451614380E+0001 + 3.75500000000000E+0002 3.32681827545166E+0001 + 3.75450000000000E+0002 3.27906370162964E+0001 + 3.75400000000000E+0002 3.24426841735840E+0001 + 3.75350000000000E+0002 3.17976484298706E+0001 + 3.75300000000000E+0002 3.07904434204102E+0001 + 3.75250000000000E+0002 3.05953178405762E+0001 + 3.75200000000000E+0002 3.17762117385864E+0001 + 3.75150000000000E+0002 3.28849296569824E+0001 + 3.75100000000000E+0002 3.02298536300659E+0001 + 3.75050000000000E+0002 2.95215673446655E+0001 + 3.75000000000000E+0002 2.81435985565186E+0001 + 3.74950000000000E+0002 2.83872947692871E+0001 + 3.74900000000000E+0002 2.68225383758545E+0001 + 3.74850000000000E+0002 2.45209989547730E+0001 + 3.74800000000000E+0002 2.45335168838501E+0001 + 3.74750000000000E+0002 2.44747190475464E+0001 + 3.74700000000000E+0002 2.23934144973755E+0001 + 3.74650000000000E+0002 2.20680770874023E+0001 + 3.74600000000000E+0002 2.10057821273804E+0001 + 3.74550000000000E+0002 1.99815006256104E+0001 + 3.74500000000000E+0002 1.91868152618408E+0001 + 3.74450000000000E+0002 1.88583250045776E+0001 + 3.74400000000000E+0002 1.71150598526001E+0001 + 3.74350000000000E+0002 1.68515796661377E+0001 + 3.74300000000000E+0002 1.74512701034546E+0001 + 3.74250000000000E+0002 1.61111660003662E+0001 + 3.74200000000000E+0002 1.62994050979614E+0001 + 3.74150000000000E+0002 1.58555960655212E+0001 + 3.74100000000000E+0002 1.58946795463562E+0001 + 3.74050000000000E+0002 1.53749313354492E+0001 + 3.74000000000000E+0002 1.54611630439758E+0001 + 3.73950000000000E+0002 1.52839241027832E+0001 + 3.73900000000000E+0002 1.44980049133301E+0001 + 3.73850000000000E+0002 1.51541314125061E+0001 + 3.73800000000000E+0002 1.36951303482056E+0001 + 3.73750000000000E+0002 1.40718884468079E+0001 + 3.73700000000000E+0002 1.51999187469482E+0001 + 3.73650000000000E+0002 1.45192465782166E+0001 + 3.73600000000000E+0002 1.42443904876709E+0001 + 3.73550000000000E+0002 1.42818002700806E+0001 + 3.73500000000000E+0002 1.39435510635376E+0001 + 3.73450000000000E+0002 1.47659606933594E+0001 + 3.73400000000000E+0002 1.38597416877747E+0001 + 3.73350000000000E+0002 1.37865881919861E+0001 + 3.73300000000000E+0002 1.37333679199219E+0001 + 3.73250000000000E+0002 1.50529637336731E+0001 + 3.73200000000000E+0002 1.42001576423645E+0001 + 3.73150000000000E+0002 1.43615083694458E+0001 + 3.73100000000000E+0002 1.42914781570435E+0001 + 3.73050000000000E+0002 1.40233755111694E+0001 + 3.73000000000000E+0002 1.43548207283020E+0001 + 3.72950000000000E+0002 1.43070063591003E+0001 + 3.72900000000000E+0002 1.33733487129211E+0001 + 3.72850000000000E+0002 1.34518852233887E+0001 + 3.72800000000000E+0002 1.33726849555969E+0001 + 3.72750000000000E+0002 1.39107127189636E+0001 + 3.72700000000000E+0002 1.38429369926453E+0001 + 3.72650000000000E+0002 1.45144338607788E+0001 + 3.72600000000000E+0002 1.41194915771484E+0001 + 3.72550000000000E+0002 1.44867777824402E+0001 + 3.72500000000000E+0002 1.37754874229431E+0001 + 3.72450000000000E+0002 1.37267427444458E+0001 + 3.72400000000000E+0002 1.35776705741882E+0001 + 3.72350000000000E+0002 1.46350684165955E+0001 + 3.72300000000000E+0002 1.38051037788391E+0001 + 3.72250000000000E+0002 1.55433640480041E+0001 + 3.72200000000000E+0002 1.47949943542480E+0001 + 3.72150000000000E+0002 1.36028943061829E+0001 + 3.72100000000000E+0002 1.34426980018616E+0001 + 3.72050000000000E+0002 1.39940834045410E+0001 + 3.72000000000000E+0002 1.47441644668579E+0001 + 3.71950000000000E+0002 1.47270541191101E+0001 + 3.71900000000000E+0002 1.40295715332031E+0001 + 3.71850000000000E+0002 1.46239471435547E+0001 + 3.71800000000000E+0002 1.48882236480713E+0001 + 3.71750000000000E+0002 1.45164504051208E+0001 + 3.71700000000000E+0002 1.49725885391235E+0001 + 3.71650000000000E+0002 1.58953838348389E+0001 + 3.71600000000000E+0002 1.55053730010986E+0001 + 3.71550000000000E+0002 1.55911974906921E+0001 + 3.71500000000000E+0002 1.45202012062073E+0001 + 3.71450000000000E+0002 1.51256389617920E+0001 + 3.71400000000000E+0002 1.53773498535156E+0001 + 3.71350000000000E+0002 1.51921787261963E+0001 + 3.71300000000000E+0002 1.52783823013306E+0001 + 3.71250000000000E+0002 1.60127148628235E+0001 + 3.71200000000000E+0002 1.64643192291260E+0001 + 3.71150000000000E+0002 1.62343087196350E+0001 + 3.71100000000000E+0002 1.62916545867920E+0001 + 3.71050000000000E+0002 1.73342838287354E+0001 + 3.71000000000000E+0002 1.79000425338745E+0001 + 3.70950000000000E+0002 1.83403158187866E+0001 + 3.70900000000000E+0002 1.84782981872559E+0001 + 3.70850000000000E+0002 1.92199840545654E+0001 + 3.70800000000000E+0002 2.06073207855225E+0001 + 3.70750000000000E+0002 2.28399467468262E+0001 + 3.70700000000000E+0002 2.23888978958130E+0001 + 3.70650000000000E+0002 2.49636154174805E+0001 + 3.70600000000000E+0002 2.52168426513672E+0001 + 3.70550000000000E+0002 2.75928087234497E+0001 + 3.70500000000000E+0002 3.09665937423706E+0001 + 3.70450000000000E+0002 3.26754941940308E+0001 + 3.70400000000000E+0002 3.38799076080322E+0001 + 3.70350000000000E+0002 3.61099948883057E+0001 + 3.70300000000000E+0002 3.80707473754883E+0001 + 3.70250000000000E+0002 3.88946304321289E+0001 + 3.70200000000000E+0002 4.20250263214111E+0001 + 3.70150000000000E+0002 4.38316020965576E+0001 + 3.70100000000000E+0002 4.51800842285156E+0001 + 3.70050000000000E+0002 4.85302772521973E+0001 + 3.70000000000000E+0002 4.84325256347656E+0001 + 3.69950000000000E+0002 4.90069885253906E+0001 + 3.69900000000000E+0002 4.91230640411377E+0001 + 3.69850000000000E+0002 4.72265300750732E+0001 + 3.69800000000000E+0002 4.69174137115479E+0001 + 3.69750000000000E+0002 4.61901836395264E+0001 + 3.69700000000000E+0002 4.43363113403320E+0001 + 3.69650000000000E+0002 4.37466449737549E+0001 + 3.69600000000000E+0002 4.31885070800781E+0001 + 3.69550000000000E+0002 4.28270778656006E+0001 + 3.69500000000000E+0002 4.29605751037598E+0001 + 3.69450000000000E+0002 4.32724189758301E+0001 + 3.69400000000000E+0002 4.14488849639893E+0001 + 3.69350000000000E+0002 4.27307758331299E+0001 + 3.69300000000000E+0002 4.13864974975586E+0001 + 3.69250000000000E+0002 4.05263576507568E+0001 + 3.69200000000000E+0002 4.04347705841064E+0001 + 3.69150000000000E+0002 3.89697151184082E+0001 + 3.69100000000000E+0002 3.85387306213379E+0001 + 3.69050000000000E+0002 3.81469898223877E+0001 + 3.69000000000000E+0002 3.66166744232178E+0001 + 3.68950000000000E+0002 3.53046836853027E+0001 + 3.68900000000000E+0002 3.53709297180176E+0001 + 3.68850000000000E+0002 3.25035648345947E+0001 + 3.68800000000000E+0002 3.11546001434326E+0001 + 3.68750000000000E+0002 3.15857286453247E+0001 + 3.68700000000000E+0002 2.87193651199341E+0001 + 3.68650000000000E+0002 2.60236577987671E+0001 + 3.68600000000000E+0002 2.66449270248413E+0001 + 3.68550000000000E+0002 2.38720169067383E+0001 + 3.68500000000000E+0002 2.39150276184082E+0001 + 3.68450000000000E+0002 2.21531953811646E+0001 + 3.68400000000000E+0002 1.95341606140137E+0001 + 3.68350000000000E+0002 1.91806650161743E+0001 + 3.68300000000000E+0002 1.82291097640991E+0001 + 3.68250000000000E+0002 1.76414966583252E+0001 + 3.68200000000000E+0002 1.80748758316040E+0001 + 3.68150000000000E+0002 1.78317594528198E+0001 + 3.68100000000000E+0002 1.69700202941895E+0001 + 3.68050000000000E+0002 1.79059257507324E+0001 + 3.68000000000000E+0002 1.64905881881714E+0001 + 3.67950000000000E+0002 1.53120617866516E+0001 + 3.67900000000000E+0002 1.51799402236938E+0001 + 3.67850000000000E+0002 1.44476442337036E+0001 + 3.67800000000000E+0002 1.55264472961426E+0001 + 3.67750000000000E+0002 1.48560962677002E+0001 + 3.67700000000000E+0002 1.47195467948914E+0001 + 3.67650000000000E+0002 1.43917679786682E+0001 + 3.67600000000000E+0002 1.47139253616333E+0001 + 3.67550000000000E+0002 1.35707759857178E+0001 + 3.67500000000000E+0002 1.39690403938293E+0001 + 3.67450000000000E+0002 1.48282279968262E+0001 + 3.67400000000000E+0002 1.46265621185303E+0001 + 3.67350000000000E+0002 1.36998987197876E+0001 + 3.67300000000000E+0002 1.47192778587341E+0001 + 3.67250000000000E+0002 1.39265775680542E+0001 + 3.67200000000000E+0002 1.39382052421570E+0001 + 3.67150000000000E+0002 1.41879715919495E+0001 + 3.67100000000000E+0002 1.48662767410278E+0001 + 3.67050000000000E+0002 1.41385378837585E+0001 + 3.67000000000000E+0002 1.39103469848633E+0001 + 3.66950000000000E+0002 1.48608984947205E+0001 + 3.66900000000000E+0002 1.54960737228394E+0001 + 3.66850000000000E+0002 1.51222505569458E+0001 + 3.66800000000000E+0002 1.41004304885864E+0001 + 3.66750000000000E+0002 1.42294158935547E+0001 + 3.66700000000000E+0002 1.39531588554382E+0001 + 3.66650000000000E+0002 1.33953723907471E+0001 + 3.66600000000000E+0002 1.33827085494995E+0001 + 3.66550000000000E+0002 1.41148390769959E+0001 + 3.66500000000000E+0002 1.37094802856445E+0001 + 3.66450000000000E+0002 1.40760707855225E+0001 + 3.66400000000000E+0002 1.37842106819153E+0001 + 3.66350000000000E+0002 1.44878454208374E+0001 + 3.66300000000000E+0002 1.36269545555115E+0001 + 3.66250000000000E+0002 1.40473437309265E+0001 + 3.66200000000000E+0002 1.50036888122559E+0001 + 3.66150000000000E+0002 1.42514410018921E+0001 + 3.66100000000000E+0002 1.32787837982178E+0001 + 3.66050000000000E+0002 1.36622939109802E+0001 + 3.66000000000000E+0002 1.41486802101135E+0001 + 3.65950000000000E+0002 1.35549035072327E+0001 + 3.65900000000000E+0002 1.43072447776794E+0001 + 3.65850000000000E+0002 1.35523810386658E+0001 + 3.65800000000000E+0002 1.39640274047852E+0001 + 3.65750000000000E+0002 1.38229041099548E+0001 + 3.65700000000000E+0002 1.40818195343018E+0001 + 3.65650000000000E+0002 1.35354733467102E+0001 + 3.65600000000000E+0002 1.36108450889587E+0001 + 3.65550000000000E+0002 1.31030659675598E+0001 + 3.65500000000000E+0002 1.34424591064453E+0001 + 3.65450000000000E+0002 1.41796655654907E+0001 + 3.65400000000000E+0002 1.36854448318481E+0001 + 3.65350000000000E+0002 1.37322764396667E+0001 + 3.65300000000000E+0002 1.34422760009766E+0001 + 3.65250000000000E+0002 1.30984420776367E+0001 + 3.65200000000000E+0002 1.39677639007568E+0001 + 3.65150000000000E+0002 1.36648526191711E+0001 + 3.65100000000000E+0002 1.31513757705688E+0001 + 3.65050000000000E+0002 1.50544595718384E+0001 + 3.65000000000000E+0002 1.43763031959534E+0001 + 3.64950000000000E+0002 1.36302690505981E+0001 + 3.64900000000000E+0002 1.39439554214478E+0001 + 3.64850000000000E+0002 1.42590832710266E+0001 + 3.64800000000000E+0002 1.41765475273132E+0001 + 3.64750000000000E+0002 1.37863874435425E+0001 + 3.64700000000000E+0002 1.34716482162476E+0001 + 3.64650000000000E+0002 1.42044219970703E+0001 + 3.64600000000000E+0002 1.37699837684631E+0001 + 3.64550000000000E+0002 1.35058851242065E+0001 + 3.64500000000000E+0002 1.40365624427795E+0001 + 3.64450000000000E+0002 1.49350633621216E+0001 + 3.64400000000000E+0002 1.43927721977234E+0001 + 3.64350000000000E+0002 1.35368013381958E+0001 + 3.64300000000000E+0002 1.35385813713074E+0001 + 3.64250000000000E+0002 1.40966658592224E+0001 + 3.64200000000000E+0002 1.41538577079773E+0001 + 3.64150000000000E+0002 1.33765773773193E+0001 + 3.64100000000000E+0002 1.37874016761780E+0001 + 3.64050000000000E+0002 1.38551530838013E+0001 + 3.64000000000000E+0002 1.31949939727783E+0001 + diff --git a/tests/data/scienta_txt/Ag_0002.txt b/tests/data/scienta_txt/Ag_0002.txt new file mode 100644 index 00000000..41f6ef6a --- /dev/null +++ b/tests/data/scienta_txt/Ag_0002.txt @@ -0,0 +1,848 @@ +[Info] +Number of Regions=0001 +Version=1.3.1 + +[Region 1] +Region Name=VB +Dimension 1 name=Binding Energy [eV] +Dimension 1 size=801 +Dimension 1 scale=30 29.95 29.9 29.85 29.8 29.75 29.7 29.65 29.6 29.55 29.5 29.45 29.4 29.35 29.3 29.25 29.2 29.15 29.1 29.05 29 28.95 28.9 28.85 28.8 28.75 28.7 28.65 28.6 28.55 28.5 28.45 28.4 28.35 28.3 28.25 28.2 28.15 28.1 28.05 28 27.95 27.9 27.85 27.8 27.75 27.7 27.65 27.6 27.55 27.5 27.45 27.4 27.35 27.3 27.25 27.2 27.15 27.1 27.05 27 26.95 26.9 26.85 26.8 26.75 26.7 26.65 26.6 26.55 26.5 26.45 26.4 26.35 26.3 26.25 26.2 26.15 26.1 26.05 26 25.95 25.9 25.85 25.8 25.75 25.7 25.65 25.6 25.55 25.5 25.45 25.4 25.35 25.3 25.25 25.2 25.15 25.1 25.05 25 24.95 24.9 24.85 24.8 24.75 24.7 24.65 24.6 24.55 24.5 24.45 24.4 24.35 24.3 24.25 24.2 24.15 24.1 24.05 24 23.95 23.9 23.85 23.8 23.75 23.7 23.65 23.6 23.55 23.5 23.45 23.4 23.35 23.3 23.25 23.2 23.15 23.1 23.05 23 22.95 22.9 22.85 22.8 22.75 22.7 22.65 22.6 22.55 22.5 22.45 22.4 22.35 22.3 22.25 22.2 22.15 22.1 22.05 22 21.95 21.9 21.85 21.8 21.75 21.7 21.65 21.6 21.55 21.5 21.45 21.4 21.35 21.3 21.25 21.2 21.15 21.1 21.05 21 20.95 20.9 20.85 20.8 20.75 20.7 20.65 20.6 20.55 20.5 20.45 20.4 20.35 20.3 20.25 20.2 20.15 20.1 20.05 20 19.95 19.9 19.85 19.8 19.75 19.7 19.65 19.6 19.55 19.5 19.45 19.4 19.35 19.3 19.25 19.2 19.15 19.1 19.05 19 18.95 18.9 18.85 18.8 18.75 18.7 18.65 18.6 18.55 18.5 18.45 18.4 18.35 18.3 18.25 18.2 18.15 18.1 18.05 18 17.95 17.9 17.85 17.8 17.75 17.7 17.65 17.6 17.55 17.5 17.45 17.4 17.35 17.3 17.25 17.2 17.15 17.1 17.05 17 16.95 16.9 16.85 16.8 16.75 16.7 16.65 16.6 16.55 16.5 16.45 16.4 16.35 16.3 16.25 16.2 16.15 16.1 16.05 16 15.95 15.9 15.85 15.8 15.75 15.7 15.65 15.6 15.55 15.5 15.45 15.4 15.35 15.3 15.25 15.2 15.15 15.1 15.05 15 14.95 14.9 14.85 14.8 14.75 14.7 14.65 14.6 14.55 14.5 14.45 14.4 14.35 14.3 14.25 14.2 14.15 14.1 14.05 14 13.95 13.9 13.85 13.8 13.75 13.7 13.65 13.6 13.55 13.5 13.45 13.4 13.35 13.3 13.25 13.2 13.15 13.1 13.05 13 12.95 12.9 12.85 12.8 12.75 12.7 12.65 12.6 12.55 12.5 12.45 12.4 12.35 12.3 12.25 12.2 12.15 12.1 12.05 12 11.95 11.9 11.85 11.8 11.75 11.7 11.65 11.6 11.55 11.5 11.45 11.4 11.35 11.3 11.25 11.2 11.15 11.1 11.05 11 10.95 10.9 10.85 10.8 10.75 10.7 10.65 10.6 10.55 10.5 10.45 10.4 10.35 10.3 10.25 10.2 10.15 10.1 10.05 10 9.94999999999999 9.90000000000001 9.84999999999999 9.80000000000001 9.75 9.69999999999999 9.65000000000001 9.59999999999999 9.55000000000001 9.5 9.44999999999999 9.40000000000001 9.34999999999999 9.30000000000001 9.25 9.19999999999999 9.15000000000001 9.09999999999999 9.05000000000001 9 8.94999999999999 8.90000000000001 8.84999999999999 8.80000000000001 8.75 8.69999999999999 8.65000000000001 8.59999999999999 8.55000000000001 8.5 8.44999999999999 8.40000000000001 8.34999999999999 8.30000000000001 8.25 8.19999999999999 8.15000000000001 8.09999999999999 8.05000000000001 8 7.94999999999999 7.90000000000001 7.84999999999999 7.80000000000001 7.75 7.69999999999999 7.65000000000001 7.59999999999999 7.55000000000001 7.5 7.44999999999999 7.40000000000001 7.34999999999999 7.30000000000001 7.25 7.19999999999999 7.15000000000001 7.09999999999999 7.05000000000001 7 6.94999999999999 6.90000000000001 6.84999999999999 6.80000000000001 6.75 6.69999999999999 6.65000000000001 6.59999999999999 6.55000000000001 6.5 6.44999999999999 6.40000000000001 6.34999999999999 6.30000000000001 6.25 6.19999999999999 6.15000000000001 6.09999999999999 6.05000000000001 6 5.94999999999999 5.90000000000001 5.84999999999999 5.80000000000001 5.75 5.69999999999999 5.65000000000001 5.59999999999999 5.55000000000001 5.5 5.44999999999999 5.40000000000001 5.34999999999999 5.30000000000001 5.25 5.19999999999999 5.15000000000001 5.09999999999999 5.05000000000001 5 4.94999999999999 4.90000000000001 4.84999999999999 4.80000000000001 4.75 4.69999999999999 4.65000000000001 4.59999999999999 4.55000000000001 4.5 4.44999999999999 4.40000000000001 4.34999999999999 4.30000000000001 4.25 4.19999999999999 4.15000000000001 4.09999999999999 4.05000000000001 4 3.94999999999999 3.90000000000001 3.84999999999999 3.80000000000001 3.75 3.69999999999999 3.65000000000001 3.59999999999999 3.55000000000001 3.5 3.44999999999999 3.40000000000001 3.34999999999999 3.30000000000001 3.25 3.19999999999999 3.15000000000001 3.09999999999999 3.05000000000001 3 2.94999999999999 2.90000000000001 2.84999999999999 2.80000000000001 2.75 2.69999999999999 2.65000000000001 2.59999999999999 2.55000000000001 2.5 2.44999999999999 2.40000000000001 2.34999999999999 2.30000000000001 2.25 2.19999999999999 2.15000000000001 2.09999999999999 2.05000000000001 2 1.94999999999999 1.90000000000001 1.84999999999999 1.80000000000001 1.75 1.69999999999999 1.65000000000001 1.59999999999999 1.55000000000001 1.5 1.44999999999999 1.40000000000001 1.34999999999999 1.30000000000001 1.25 1.19999999999999 1.15000000000001 1.09999999999999 1.05000000000001 1 0.949999999999989 0.900000000000006 0.849999999999994 0.800000000000011 0.75 0.699999999999989 0.650000000000006 0.599999999999994 0.550000000000011 0.5 0.449999999999989 0.400000000000006 0.349999999999994 0.300000000000011 0.25 0.199999999999989 0.150000000000006 0.0999999999999943 0.0500000000000114 0 -0.0500000000000114 -0.0999999999999943 -0.150000000000006 -0.199999999999989 -0.25 -0.300000000000011 -0.349999999999994 -0.400000000000006 -0.449999999999989 -0.5 -0.550000000000011 -0.599999999999994 -0.650000000000006 -0.699999999999989 -0.75 -0.800000000000011 -0.849999999999994 -0.900000000000006 -0.949999999999989 -1 -1.05000000000001 -1.09999999999999 -1.15000000000001 -1.19999999999999 -1.25 -1.30000000000001 -1.34999999999999 -1.40000000000001 -1.44999999999999 -1.5 -1.55000000000001 -1.59999999999999 -1.65000000000001 -1.69999999999999 -1.75 -1.80000000000001 -1.84999999999999 -1.90000000000001 -1.94999999999999 -2 -2.05000000000001 -2.09999999999999 -2.15000000000001 -2.19999999999999 -2.25 -2.30000000000001 -2.34999999999999 -2.40000000000001 -2.44999999999999 -2.5 -2.55000000000001 -2.59999999999999 -2.65000000000001 -2.69999999999999 -2.75 -2.80000000000001 -2.84999999999999 -2.90000000000001 -2.94999999999999 -3 -3.05000000000001 -3.09999999999999 -3.15000000000001 -3.19999999999999 -3.25 -3.30000000000001 -3.34999999999999 -3.40000000000001 -3.44999999999999 -3.5 -3.55000000000001 -3.59999999999999 -3.65000000000001 -3.69999999999999 -3.75 -3.80000000000001 -3.84999999999999 -3.90000000000001 -3.94999999999999 -4 -4.05000000000001 -4.09999999999999 -4.15000000000001 -4.19999999999999 -4.25 -4.30000000000001 -4.34999999999999 -4.40000000000001 -4.44999999999999 -4.5 -4.55000000000001 -4.59999999999999 -4.65000000000001 -4.69999999999999 -4.75 -4.80000000000001 -4.84999999999999 -4.90000000000001 -4.94999999999999 -5 -5.05000000000001 -5.09999999999999 -5.15000000000001 -5.19999999999999 -5.25 -5.30000000000001 -5.34999999999999 -5.40000000000001 -5.44999999999999 -5.5 -5.55000000000001 -5.59999999999999 -5.65000000000001 -5.69999999999999 -5.75 -5.80000000000001 -5.84999999999999 -5.90000000000001 -5.94999999999999 -6 -6.05000000000001 -6.09999999999999 -6.15000000000001 -6.19999999999999 -6.25 -6.30000000000001 -6.34999999999999 -6.40000000000001 -6.44999999999999 -6.5 -6.55000000000001 -6.59999999999999 -6.65000000000001 -6.69999999999999 -6.75 -6.80000000000001 -6.84999999999999 -6.90000000000001 -6.94999999999999 -7 -7.05000000000001 -7.09999999999999 -7.15000000000001 -7.19999999999999 -7.25 -7.30000000000001 -7.34999999999999 -7.40000000000001 -7.44999999999999 -7.5 -7.55000000000001 -7.59999999999999 -7.65000000000001 -7.69999999999999 -7.75 -7.80000000000001 -7.84999999999999 -7.90000000000001 -7.94999999999999 -8 -8.05000000000001 -8.09999999999999 -8.15000000000001 -8.19999999999999 -8.25 -8.30000000000001 -8.34999999999999 -8.40000000000001 -8.44999999999999 -8.5 -8.55000000000001 -8.59999999999999 -8.65000000000001 -8.69999999999999 -8.75 -8.80000000000001 -8.84999999999999 -8.90000000000001 -8.94999999999999 -9 -9.05000000000001 -9.09999999999999 -9.15000000000001 -9.19999999999999 -9.25 -9.30000000000001 -9.34999999999999 -9.40000000000001 -9.44999999999999 -9.5 -9.55000000000001 -9.59999999999999 -9.65000000000001 -9.69999999999999 -9.75 -9.80000000000001 -9.84999999999999 -9.90000000000001 -9.94999999999999 -10 + +[Info 1] +Region Name=VB +Lens Mode=Transmission +Pass Energy=50 +Number of Sweeps=10 +Excitation Energy=153 +Energy Scale=Binding +Acquisition Mode=Swept +Energy Unit=Kinetic +Center Energy=143 +Low Energy=123 +High Energy=163 +Energy Step=0.05 +Step Time=203 +Detector First X-Channel=43 +Detector Last X-Channel=659 +Detector First Y-Channel=91 +Detector Last Y-Channel=398 +Number of Slices=1 +File=Z:\XPS_data\2023\Mar2023\KIT\Ag_0002.txt,.pxt,.ibw +Sequence=D:\old files\data2\data\Cu-HTTP_Mar_23.seq +Spectrum Name=Ag__002 +Instrument=R3000-6MS014 +Location=Scienta +User=AN +Sample=Ag +Comments=; +Date=2023-03-08 +Time=15:30:27 +Time per Spectrum Channel=225.33 +DetectorMode=ADC +[Run Mode Information 1] + + + +[Data 1] + 3.00000000000000E+0001 3.66266550123692E+0000 + 2.99500000000000E+0001 3.31459234654903E+0000 + 2.99000000000000E+0001 3.23482005298138E+0000 + 2.98500000000000E+0001 3.35422047972679E+0000 + 2.98000000000000E+0001 3.50475406646729E+0000 + 2.97500000000000E+0001 3.63206753134727E+0000 + 2.97000000000000E+0001 3.12571620941162E+0000 + 2.96500000000000E+0001 3.11565870046616E+0000 + 2.96000000000000E+0001 3.28529769182205E+0000 + 2.95500000000000E+0001 3.07951352000236E+0000 + 2.95000000000000E+0001 2.62940143048763E+0000 + 2.94500000000000E+0001 2.38554352521896E+0000 + 2.94000000000000E+0001 2.42095354199409E+0000 + 2.93500000000000E+0001 2.61485190689564E+0000 + 2.93000000000000E+0001 2.48409117758274E+0000 + 2.92500000000000E+0001 2.38842275738716E+0000 + 2.92000000000000E+0001 2.46667067706585E+0000 + 2.91500000000000E+0001 2.31553335487843E+0000 + 2.91000000000000E+0001 2.23468993604183E+0000 + 2.90500000000000E+0001 2.11366702616215E+0000 + 2.90000000000000E+0001 2.19971781969070E+0000 + 2.89500000000000E+0001 2.03268237411976E+0000 + 2.89000000000000E+0001 2.31623052060604E+0000 + 2.88500000000000E+0001 2.21793137490749E+0000 + 2.88000000000000E+0001 2.00129433721304E+0000 + 2.87500000000000E+0001 2.27588658034801E+0000 + 2.87000000000000E+0001 2.00062771886587E+0000 + 2.86500000000000E+0001 2.26478563249111E+0000 + 2.86000000000000E+0001 2.03782550990582E+0000 + 2.85500000000000E+0001 2.24894687533379E+0000 + 2.85000000000000E+0001 2.50425918400288E+0000 + 2.84500000000000E+0001 2.31301398575306E+0000 + 2.84000000000000E+0001 2.03122186660767E+0000 + 2.83500000000000E+0001 2.08848619461060E+0000 + 2.83000000000000E+0001 1.99886241555214E+0000 + 2.82500000000000E+0001 2.29901018738747E+0000 + 2.82000000000000E+0001 2.28629161417484E+0000 + 2.81500000000000E+0001 1.96198201924562E+0000 + 2.81000000000000E+0001 2.29244166612625E+0000 + 2.80500000000000E+0001 2.18866746127605E+0000 + 2.80000000000000E+0001 1.96552415192127E+0000 + 2.79500000000000E+0001 2.18150199949741E+0000 + 2.79000000000000E+0001 1.91206286102533E+0000 + 2.78500000000000E+0001 2.07614804804325E+0000 + 2.78000000000000E+0001 2.10113921761513E+0000 + 2.77500000000000E+0001 2.34490393102169E+0000 + 2.77000000000000E+0001 2.22701602429152E+0000 + 2.76500000000000E+0001 2.46421316266060E+0000 + 2.76000000000000E+0001 2.23941756784916E+0000 + 2.75500000000000E+0001 2.25652363896370E+0000 + 2.75000000000000E+0001 2.34524212032557E+0000 + 2.74500000000000E+0001 2.16961623728275E+0000 + 2.74000000000000E+0001 2.13089036941528E+0000 + 2.73500000000000E+0001 2.19177383184433E+0000 + 2.73000000000000E+0001 2.22254675626755E+0000 + 2.72500000000000E+0001 2.30147020518780E+0000 + 2.72000000000000E+0001 2.53185197710991E+0000 + 2.71500000000000E+0001 2.25859765708446E+0000 + 2.71000000000000E+0001 2.37336687743664E+0000 + 2.70500000000000E+0001 2.56138157844543E+0000 + 2.70000000000000E+0001 2.72514331340790E+0000 + 2.69500000000000E+0001 2.09287858009338E+0000 + 2.69000000000000E+0001 2.16720068454742E+0000 + 2.68500000000000E+0001 2.54166665673256E+0000 + 2.68000000000000E+0001 2.34556777775288E+0000 + 2.67500000000000E+0001 2.36257047951221E+0000 + 2.67000000000000E+0001 2.23986265063286E+0000 + 2.66500000000000E+0001 2.46151624619961E+0000 + 2.66000000000000E+0001 2.55828358232975E+0000 + 2.65500000000000E+0001 2.41815313696861E+0000 + 2.65000000000000E+0001 2.25711219012737E+0000 + 2.64500000000000E+0001 2.54107356071472E+0000 + 2.64000000000000E+0001 2.24019829928875E+0000 + 2.63500000000000E+0001 2.26626796275377E+0000 + 2.63000000000000E+0001 2.20453549921513E+0000 + 2.62500000000000E+0001 2.28583087027073E+0000 + 2.62000000000000E+0001 2.24653556942940E+0000 + 2.61500000000000E+0001 2.22120447456837E+0000 + 2.61000000000000E+0001 2.26457285881042E+0000 + 2.60500000000000E+0001 2.55217237770557E+0000 + 2.60000000000000E+0001 2.45077836513519E+0000 + 2.59500000000000E+0001 2.86909189820290E+0000 + 2.59000000000000E+0001 2.38155378401279E+0000 + 2.58500000000000E+0001 2.76861149072647E+0000 + 2.58000000000000E+0001 2.63215509057045E+0000 + 2.57500000000000E+0001 2.43684473633766E+0000 + 2.57000000000000E+0001 2.51955953240395E+0000 + 2.56500000000000E+0001 2.36961326003075E+0000 + 2.56000000000000E+0001 2.29727693647146E+0000 + 2.55500000000000E+0001 2.34702840447426E+0000 + 2.55000000000000E+0001 2.17426633834839E+0000 + 2.54500000000000E+0001 2.48060998320580E+0000 + 2.54000000000000E+0001 2.47345998883247E+0000 + 2.53500000000000E+0001 2.44213882088661E+0000 + 2.53000000000000E+0001 2.53516881167889E+0000 + 2.52500000000000E+0001 2.90190277993679E+0000 + 2.52000000000000E+0001 2.69942744076252E+0000 + 2.51500000000000E+0001 2.12882409989834E+0000 + 2.51000000000000E+0001 2.55086663365364E+0000 + 2.50500000000000E+0001 2.35868926346302E+0000 + 2.50000000000000E+0001 2.84593725204468E+0000 + 2.49500000000000E+0001 2.64245490729809E+0000 + 2.49000000000000E+0001 2.48469877243042E+0000 + 2.48500000000000E+0001 2.62478529661894E+0000 + 2.48000000000000E+0001 2.41402375698090E+0000 + 2.47500000000000E+0001 2.47363732010126E+0000 + 2.47000000000000E+0001 2.55981604754925E+0000 + 2.46500000000000E+0001 2.41552107036114E+0000 + 2.46000000000000E+0001 2.52233125269413E+0000 + 2.45500000000000E+0001 2.39985303580761E+0000 + 2.45000000000000E+0001 2.35249409079552E+0000 + 2.44500000000000E+0001 2.57583066821098E+0000 + 2.44000000000000E+0001 2.24587540328503E+0000 + 2.43500000000000E+0001 2.54156544804573E+0000 + 2.43000000000000E+0001 2.32583221793175E+0000 + 2.42500000000000E+0001 2.75111046433449E+0000 + 2.42000000000000E+0001 2.52912409603596E+0000 + 2.41500000000000E+0001 2.43810041248798E+0000 + 2.41000000000000E+0001 2.53062830865383E+0000 + 2.40500000000000E+0001 2.77500836551189E+0000 + 2.40000000000000E+0001 2.47545982897282E+0000 + 2.39500000000000E+0001 2.24071332812309E+0000 + 2.39000000000000E+0001 2.61735351383686E+0000 + 2.38500000000000E+0001 2.48929701745510E+0000 + 2.38000000000000E+0001 2.50403045117855E+0000 + 2.37500000000000E+0001 2.44105602800846E+0000 + 2.37000000000000E+0001 2.44047328829765E+0000 + 2.36500000000000E+0001 2.09582099318504E+0000 + 2.36000000000000E+0001 2.38583125174046E+0000 + 2.35500000000000E+0001 2.63027331233025E+0000 + 2.35000000000000E+0001 2.45813499391079E+0000 + 2.34500000000000E+0001 2.02900424599648E+0000 + 2.34000000000000E+0001 2.67948944866657E+0000 + 2.33500000000000E+0001 2.38287705183029E+0000 + 2.33000000000000E+0001 2.23036034405231E+0000 + 2.32500000000000E+0001 2.52472445368767E+0000 + 2.32000000000000E+0001 2.11096523702145E+0000 + 2.31500000000000E+0001 2.17534963786602E+0000 + 2.31000000000000E+0001 2.08291381597519E+0000 + 2.30500000000000E+0001 2.09132062271237E+0000 + 2.30000000000000E+0001 2.04281430691481E+0000 + 2.29500000000000E+0001 1.98627035319805E+0000 + 2.29000000000000E+0001 2.09247663617134E+0000 + 2.28500000000000E+0001 2.34390191733837E+0000 + 2.28000000000000E+0001 1.88704006373882E+0000 + 2.27500000000000E+0001 2.37622688710690E+0000 + 2.27000000000000E+0001 2.06924049556255E+0000 + 2.26500000000000E+0001 2.19024147093296E+0000 + 2.26000000000000E+0001 2.27491390705109E+0000 + 2.25500000000000E+0001 2.45075997710228E+0000 + 2.25000000000000E+0001 2.00793593376875E+0000 + 2.24500000000000E+0001 2.17365461587906E+0000 + 2.24000000000000E+0001 1.98960783332586E+0000 + 2.23500000000000E+0001 2.18348034471273E+0000 + 2.23000000000000E+0001 2.03787610679865E+0000 + 2.22500000000000E+0001 2.12016777694225E+0000 + 2.22000000000000E+0001 2.02133623510599E+0000 + 2.21500000000000E+0001 2.48425470292568E+0000 + 2.21000000000000E+0001 2.47164371609688E+0000 + 2.20500000000000E+0001 2.15113289654255E+0000 + 2.20000000000000E+0001 2.10773463547230E+0000 + 2.19500000000000E+0001 2.07565022259951E+0000 + 2.19000000000000E+0001 1.97929252684116E+0000 + 2.18500000000000E+0001 1.90569129586220E+0000 + 2.18000000000000E+0001 1.86469408869743E+0000 + 2.17500000000000E+0001 2.19503960013390E+0000 + 2.17000000000000E+0001 2.15187226235867E+0000 + 2.16500000000000E+0001 2.11963707208633E+0000 + 2.16000000000000E+0001 1.94309159368277E+0000 + 2.15500000000000E+0001 2.01546561717987E+0000 + 2.15000000000000E+0001 2.01792152225971E+0000 + 2.14500000000000E+0001 2.34445370733738E+0000 + 2.14000000000000E+0001 2.18843615055084E+0000 + 2.13500000000000E+0001 2.18061738461256E+0000 + 2.13000000000000E+0001 2.28401806950569E+0000 + 2.12500000000000E+0001 2.31930118799210E+0000 + 2.12000000000000E+0001 1.87170914560556E+0000 + 2.11500000000000E+0001 1.98427464067936E+0000 + 2.11000000000000E+0001 1.89902545511723E+0000 + 2.10500000000000E+0001 1.89654272794724E+0000 + 2.10000000000000E+0001 1.77214059233665E+0000 + 2.09500000000000E+0001 1.86385652422905E+0000 + 2.09000000000000E+0001 2.00430124998093E+0000 + 2.08500000000000E+0001 1.69491715729237E+0000 + 2.08000000000000E+0001 2.06621655821800E+0000 + 2.07500000000000E+0001 2.05972430109978E+0000 + 2.07000000000000E+0001 1.92402702569962E+0000 + 2.06500000000000E+0001 2.20870897173882E+0000 + 2.06000000000000E+0001 2.20790895819664E+0000 + 2.05500000000000E+0001 2.10800357162952E+0000 + 2.05000000000000E+0001 2.12702704966068E+0000 + 2.04500000000000E+0001 1.92730323225260E+0000 + 2.04000000000000E+0001 2.01892870664597E+0000 + 2.03500000000000E+0001 1.97151574492455E+0000 + 2.03000000000000E+0001 2.32675857841969E+0000 + 2.02500000000000E+0001 2.39786240458488E+0000 + 2.02000000000000E+0001 2.10565750300884E+0000 + 2.01500000000000E+0001 1.68070156872272E+0000 + 2.01000000000000E+0001 2.49533046782017E+0000 + 2.00500000000000E+0001 1.88812613487244E+0000 + 2.00000000000000E+0001 1.79914479702711E+0000 + 1.99500000000000E+0001 2.32763688266277E+0000 + 1.99000000000000E+0001 2.29481129348278E+0000 + 1.98500000000000E+0001 2.19164170324802E+0000 + 1.98000000000000E+0001 2.39084675908089E+0000 + 1.97500000000000E+0001 2.19968607276678E+0000 + 1.97000000000000E+0001 1.95448726415634E+0000 + 1.96500000000000E+0001 2.15363737940788E+0000 + 1.96000000000000E+0001 2.25603961944580E+0000 + 1.95500000000000E+0001 2.04774788767099E+0000 + 1.95000000000000E+0001 2.36220329999924E+0000 + 1.94500000000000E+0001 2.30497604608536E+0000 + 1.94000000000000E+0001 2.08670121431351E+0000 + 1.93500000000000E+0001 1.82175806164742E+0000 + 1.93000000000000E+0001 2.00386460870504E+0000 + 1.92500000000000E+0001 2.01133388280869E+0000 + 1.92000000000000E+0001 2.58744840323925E+0000 + 1.91500000000000E+0001 2.43398520350456E+0000 + 1.91000000000000E+0001 2.47376728057861E+0000 + 1.90500000000000E+0001 2.21221290528774E+0000 + 1.90000000000000E+0001 2.47491319477558E+0000 + 1.89500000000000E+0001 2.47274625301361E+0000 + 1.89000000000000E+0001 2.24026998877525E+0000 + 1.88500000000000E+0001 2.80566252768040E+0000 + 1.88000000000000E+0001 2.53133086860180E+0000 + 1.87500000000000E+0001 2.55895958840847E+0000 + 1.87000000000000E+0001 2.38789537549019E+0000 + 1.86500000000000E+0001 2.64736120402813E+0000 + 1.86000000000000E+0001 2.54980678856373E+0000 + 1.85500000000000E+0001 2.37616756558418E+0000 + 1.85000000000000E+0001 2.40566270053387E+0000 + 1.84500000000000E+0001 2.21038177609444E+0000 + 1.84000000000000E+0001 2.52498985826969E+0000 + 1.83500000000000E+0001 2.27360098063946E+0000 + 1.83000000000000E+0001 2.28705212473869E+0000 + 1.82500000000000E+0001 2.52716626226902E+0000 + 1.82000000000000E+0001 2.59533245861530E+0000 + 1.81500000000000E+0001 2.29835583269596E+0000 + 1.81000000000000E+0001 2.43601945042610E+0000 + 1.80500000000000E+0001 2.14748165756464E+0000 + 1.80000000000000E+0001 2.31907659769058E+0000 + 1.79500000000000E+0001 2.44895276427269E+0000 + 1.79000000000000E+0001 2.10742010176182E+0000 + 1.78500000000000E+0001 2.24483180046082E+0000 + 1.78000000000000E+0001 2.24882759153843E+0000 + 1.77500000000000E+0001 2.32644864916801E+0000 + 1.77000000000000E+0001 2.63245315849781E+0000 + 1.76500000000000E+0001 2.35044395923614E+0000 + 1.76000000000000E+0001 2.24834443628788E+0000 + 1.75500000000000E+0001 2.49956712126732E+0000 + 1.75000000000000E+0001 2.43707047402859E+0000 + 1.74500000000000E+0001 2.51352399587631E+0000 + 1.74000000000000E+0001 2.55467993766069E+0000 + 1.73500000000000E+0001 2.70757269859314E+0000 + 1.73000000000000E+0001 2.53539465367794E+0000 + 1.72500000000000E+0001 2.44263143837452E+0000 + 1.72000000000000E+0001 2.64324827492237E+0000 + 1.71500000000000E+0001 2.76270353794098E+0000 + 1.71000000000000E+0001 2.91695328056812E+0000 + 1.70500000000000E+0001 2.35109901428223E+0000 + 1.70000000000000E+0001 2.79738911986351E+0000 + 1.69500000000000E+0001 2.83290691673756E+0000 + 1.69000000000000E+0001 2.78494761884212E+0000 + 1.68500000000000E+0001 3.03795132040977E+0000 + 1.68000000000000E+0001 2.65345597267151E+0000 + 1.67500000000000E+0001 2.64924903213978E+0000 + 1.67000000000000E+0001 2.71644783020020E+0000 + 1.66500000000000E+0001 2.83419032394886E+0000 + 1.66000000000000E+0001 3.12185657024384E+0000 + 1.65500000000000E+0001 2.91285540163517E+0000 + 1.65000000000000E+0001 2.64981909096241E+0000 + 1.64500000000000E+0001 2.60629951953888E+0000 + 1.64000000000000E+0001 2.47284618020058E+0000 + 1.63500000000000E+0001 2.42051824927330E+0000 + 1.63000000000000E+0001 2.33476369082928E+0000 + 1.62500000000000E+0001 2.73980562388897E+0000 + 1.62000000000000E+0001 2.63484987616539E+0000 + 1.61500000000000E+0001 2.97465680539608E+0000 + 1.61000000000000E+0001 2.75235819816589E+0000 + 1.60500000000000E+0001 2.41460847854614E+0000 + 1.60000000000000E+0001 2.51531171798706E+0000 + 1.59500000000000E+0001 2.59101337939501E+0000 + 1.59000000000000E+0001 2.35009665787220E+0000 + 1.58500000000000E+0001 2.47902816534042E+0000 + 1.58000000000000E+0001 2.66531035304070E+0000 + 1.57500000000000E+0001 2.48993749916554E+0000 + 1.57000000000000E+0001 2.67757834494114E+0000 + 1.56500000000000E+0001 2.51279389858246E+0000 + 1.56000000000000E+0001 2.31548173725605E+0000 + 1.55500000000000E+0001 2.60153006017208E+0000 + 1.55000000000000E+0001 2.75542141497135E+0000 + 1.54500000000000E+0001 2.29214936494827E+0000 + 1.54000000000000E+0001 2.43932954967022E+0000 + 1.53500000000000E+0001 2.45484341681004E+0000 + 1.53000000000000E+0001 2.63849362730980E+0000 + 1.52500000000000E+0001 2.54022303223610E+0000 + 1.52000000000000E+0001 2.45179672539234E+0000 + 1.51500000000000E+0001 2.01403685659170E+0000 + 1.51000000000000E+0001 2.60905268788338E+0000 + 1.50500000000000E+0001 2.19031015038490E+0000 + 1.50000000000000E+0001 2.98550345003605E+0000 + 1.49500000000000E+0001 2.70096200704575E+0000 + 1.49000000000000E+0001 2.03840570151806E+0000 + 1.48500000000000E+0001 2.17656277120113E+0000 + 1.48000000000000E+0001 2.40308445692062E+0000 + 1.47500000000000E+0001 2.42718173563480E+0000 + 1.47000000000000E+0001 2.42746214568615E+0000 + 1.46500000000000E+0001 2.27287802100182E+0000 + 1.46000000000000E+0001 2.49770276248455E+0000 + 1.45500000000000E+0001 2.42052713036537E+0000 + 1.45000000000000E+0001 2.53125715255737E+0000 + 1.44500000000000E+0001 2.47437547147274E+0000 + 1.44000000000000E+0001 2.53748616576195E+0000 + 1.43500000000000E+0001 2.33248797059059E+0000 + 1.43000000000000E+0001 2.61951586604118E+0000 + 1.42500000000000E+0001 2.36499394476414E+0000 + 1.42000000000000E+0001 2.32526823133230E+0000 + 1.41500000000000E+0001 2.63371892273426E+0000 + 1.41000000000000E+0001 2.37660561501980E+0000 + 1.40500000000000E+0001 2.30581597983837E+0000 + 1.40000000000000E+0001 2.30316344648600E+0000 + 1.39500000000000E+0001 2.56558185815811E+0000 + 1.39000000000000E+0001 2.70112639665604E+0000 + 1.38500000000000E+0001 2.66673615574837E+0000 + 1.38000000000000E+0001 2.36774699389935E+0000 + 1.37500000000000E+0001 2.63688772916794E+0000 + 1.37000000000000E+0001 1.82540755718946E+0000 + 1.36500000000000E+0001 2.40832084417343E+0000 + 1.36000000000000E+0001 2.74016170203686E+0000 + 1.35500000000000E+0001 2.38987538218498E+0000 + 1.35000000000000E+0001 2.29176509380341E+0000 + 1.34500000000000E+0001 2.56134426593781E+0000 + 1.34000000000000E+0001 2.45772051811218E+0000 + 1.33500000000000E+0001 2.33239392936230E+0000 + 1.33000000000000E+0001 2.40769097208977E+0000 + 1.32500000000000E+0001 2.55945791304111E+0000 + 1.32000000000000E+0001 2.63314147293568E+0000 + 1.31500000000000E+0001 2.24180762469769E+0000 + 1.31000000000000E+0001 2.37719419598579E+0000 + 1.30500000000000E+0001 2.76289074122906E+0000 + 1.30000000000000E+0001 2.82382993400097E+0000 + 1.29500000000000E+0001 2.82616514712572E+0000 + 1.29000000000000E+0001 2.74489927291870E+0000 + 1.28500000000000E+0001 2.64374303817749E+0000 + 1.28000000000000E+0001 2.64048480987549E+0000 + 1.27500000000000E+0001 2.62220373749733E+0000 + 1.27000000000000E+0001 2.83205558359623E+0000 + 1.26500000000000E+0001 2.80900929868221E+0000 + 1.26000000000000E+0001 2.67911998927593E+0000 + 1.25500000000000E+0001 2.75243623554707E+0000 + 1.25000000000000E+0001 2.51096631586552E+0000 + 1.24500000000000E+0001 2.52666664868593E+0000 + 1.24000000000000E+0001 2.71401119232178E+0000 + 1.23500000000000E+0001 2.62771478295326E+0000 + 1.23000000000000E+0001 2.70190191268921E+0000 + 1.22500000000000E+0001 2.59563088417053E+0000 + 1.22000000000000E+0001 2.92559149861336E+0000 + 1.21500000000000E+0001 2.75305335223675E+0000 + 1.21000000000000E+0001 2.58321470022202E+0000 + 1.20500000000000E+0001 2.41796560585499E+0000 + 1.20000000000000E+0001 2.61970224976540E+0000 + 1.19500000000000E+0001 2.33200012147427E+0000 + 1.19000000000000E+0001 2.52338376641274E+0000 + 1.18500000000000E+0001 2.49154888093472E+0000 + 1.18000000000000E+0001 2.54949519038200E+0000 + 1.17500000000000E+0001 2.24460621178150E+0000 + 1.17000000000000E+0001 2.48903748393059E+0000 + 1.16500000000000E+0001 2.96004375815392E+0000 + 1.16000000000000E+0001 2.93720643222332E+0000 + 1.15500000000000E+0001 3.04187101125717E+0000 + 1.15000000000000E+0001 3.33649054169655E+0000 + 1.14500000000000E+0001 3.20091840624809E+0000 + 1.14000000000000E+0001 2.83945576846600E+0000 + 1.13500000000000E+0001 2.81897366791964E+0000 + 1.13000000000000E+0001 3.31357844173908E+0000 + 1.12500000000000E+0001 3.15874657034874E+0000 + 1.12000000000000E+0001 3.06432573497295E+0000 + 1.11500000000000E+0001 3.54755926132202E+0000 + 1.11000000000000E+0001 3.37225839495659E+0000 + 1.10500000000000E+0001 3.30186282098293E+0000 + 1.10000000000000E+0001 2.83816558122635E+0000 + 1.09500000000000E+0001 3.64120632410049E+0000 + 1.09000000000000E+0001 3.74155727028847E+0000 + 1.08500000000000E+0001 4.00782579183578E+0000 + 1.08000000000000E+0001 3.58431529998779E+0000 + 1.07500000000000E+0001 3.85193637013435E+0000 + 1.07000000000000E+0001 4.56357443332672E+0000 + 1.06500000000000E+0001 3.84197744727135E+0000 + 1.06000000000000E+0001 4.34986221790314E+0000 + 1.05500000000000E+0001 3.80504980683327E+0000 + 1.05000000000000E+0001 3.89924320578575E+0000 + 1.04500000000000E+0001 3.85847835242748E+0000 + 1.04000000000000E+0001 4.25748714804649E+0000 + 1.03500000000000E+0001 3.94694745540619E+0000 + 1.03000000000000E+0001 4.20329451560974E+0000 + 1.02500000000000E+0001 4.40945613384247E+0000 + 1.02000000000000E+0001 4.50685155391693E+0000 + 1.01500000000000E+0001 4.33254870772362E+0000 + 1.01000000000000E+0001 3.98051294684410E+0000 + 1.00500000000000E+0001 3.82193985581398E+0000 + 1.00000000000000E+0001 3.83218666911125E+0000 + 9.94999999999999E+0000 4.17545169591904E+0000 + 9.90000000000001E+0000 3.74783682823181E+0000 + 9.84999999999999E+0000 3.60758195817471E+0000 + 9.80000000000001E+0000 3.39395475387573E+0000 + 9.75000000000000E+0000 3.90032255649567E+0000 + 9.69999999999999E+0000 4.02457943558693E+0000 + 9.65000000000001E+0000 4.16763880848885E+0000 + 9.59999999999999E+0000 3.65371760725975E+0000 + 9.55000000000001E+0000 3.80358621478081E+0000 + 9.50000000000000E+0000 3.97257086634636E+0000 + 9.44999999999999E+0000 3.19584067165852E+0000 + 9.40000000000001E+0000 3.31261475384235E+0000 + 9.34999999999999E+0000 3.36882580816746E+0000 + 9.30000000000001E+0000 3.74551528692246E+0000 + 9.25000000000000E+0000 3.63079914450645E+0000 + 9.19999999999999E+0000 3.58100965619087E+0000 + 9.15000000000001E+0000 3.44578310847282E+0000 + 9.09999999999999E+0000 3.85107558965683E+0000 + 9.05000000000001E+0000 4.08273115754127E+0000 + 9.00000000000000E+0000 3.63281662762165E+0000 + 8.94999999999999E+0000 3.48243121802807E+0000 + 8.90000000000001E+0000 3.59037916362286E+0000 + 8.84999999999999E+0000 3.71385279297829E+0000 + 8.80000000000001E+0000 3.70320822298527E+0000 + 8.75000000000000E+0000 3.49927508831024E+0000 + 8.69999999999999E+0000 3.28186550736427E+0000 + 8.65000000000001E+0000 3.10042947530746E+0000 + 8.59999999999999E+0000 3.15355111658573E+0000 + 8.55000000000001E+0000 3.83539909124374E+0000 + 8.50000000000000E+0000 3.42073538899422E+0000 + 8.44999999999999E+0000 3.73137457668781E+0000 + 8.40000000000001E+0000 3.47904960811138E+0000 + 8.34999999999999E+0000 3.33982698619366E+0000 + 8.30000000000001E+0000 2.87810678780079E+0000 + 8.25000000000000E+0000 3.28410601615906E+0000 + 8.19999999999999E+0000 3.42260494828224E+0000 + 8.15000000000001E+0000 3.07841394841671E+0000 + 8.09999999999999E+0000 3.70438945293426E+0000 + 8.05000000000001E+0000 3.57732963562012E+0000 + 8.00000000000000E+0000 3.78670901060104E+0000 + 7.94999999999999E+0000 3.60406672954559E+0000 + 7.90000000000001E+0000 3.58334042131901E+0000 + 7.84999999999999E+0000 4.02530020475388E+0000 + 7.80000000000001E+0000 3.50014328956604E+0000 + 7.75000000000000E+0000 3.87117958068848E+0000 + 7.69999999999999E+0000 4.29341921210289E+0000 + 7.65000000000001E+0000 3.71097053587437E+0000 + 7.59999999999999E+0000 3.60201050341129E+0000 + 7.55000000000001E+0000 4.20342051982880E+0000 + 7.50000000000000E+0000 4.42286667227745E+0000 + 7.44999999999999E+0000 4.39044255018234E+0000 + 7.40000000000001E+0000 4.39503514766693E+0000 + 7.34999999999999E+0000 4.23290215432644E+0000 + 7.30000000000001E+0000 4.11205059289932E+0000 + 7.25000000000000E+0000 4.71638226509094E+0000 + 7.19999999999999E+0000 4.53992044925690E+0000 + 7.15000000000001E+0000 4.09427936375141E+0000 + 7.09999999999999E+0000 5.08184850215912E+0000 + 7.05000000000001E+0000 4.79073083400726E+0000 + 7.00000000000000E+0000 4.86477202177048E+0000 + 6.94999999999999E+0000 4.64246186614037E+0000 + 6.90000000000001E+0000 4.99705395102501E+0000 + 6.84999999999999E+0000 5.23644945025444E+0000 + 6.80000000000001E+0000 5.37696582078934E+0000 + 6.75000000000000E+0000 5.00073263049126E+0000 + 6.69999999999999E+0000 4.64337584376335E+0000 + 6.65000000000001E+0000 4.82815217971802E+0000 + 6.59999999999999E+0000 4.82924640178680E+0000 + 6.55000000000001E+0000 4.95352157950401E+0000 + 6.50000000000000E+0000 5.11650347709656E+0000 + 6.44999999999999E+0000 5.46782955527306E+0000 + 6.40000000000001E+0000 5.26159164309502E+0000 + 6.34999999999999E+0000 5.99061840772629E+0000 + 6.30000000000001E+0000 5.67513877153397E+0000 + 6.25000000000000E+0000 5.22733980417252E+0000 + 6.19999999999999E+0000 5.00843951106071E+0000 + 6.15000000000001E+0000 6.13210615515709E+0000 + 6.09999999999999E+0000 5.55766323208809E+0000 + 6.05000000000001E+0000 5.33583685755730E+0000 + 6.00000000000000E+0000 6.02039259672165E+0000 + 5.94999999999999E+0000 6.47160843014717E+0000 + 5.90000000000001E+0000 6.62995982170105E+0000 + 5.84999999999999E+0000 6.71276992559433E+0000 + 5.80000000000001E+0000 5.49151283502579E+0000 + 5.75000000000000E+0000 5.76416361331940E+0000 + 5.69999999999999E+0000 5.76682651042938E+0000 + 5.65000000000001E+0000 5.44724714756012E+0000 + 5.59999999999999E+0000 4.88973209261894E+0000 + 5.55000000000001E+0000 5.09791523218155E+0000 + 5.50000000000000E+0000 5.98750138282776E+0000 + 5.44999999999999E+0000 5.04239687323570E+0000 + 5.40000000000001E+0000 5.13215172290802E+0000 + 5.34999999999999E+0000 5.47296410799026E+0000 + 5.30000000000001E+0000 5.41573721170425E+0000 + 5.25000000000000E+0000 5.27262720465660E+0000 + 5.19999999999999E+0000 5.75615382194519E+0000 + 5.15000000000001E+0000 5.50354936718941E+0000 + 5.09999999999999E+0000 4.80682826042175E+0000 + 5.05000000000001E+0000 5.16832593083382E+0000 + 5.00000000000000E+0000 5.72328898310661E+0000 + 4.94999999999999E+0000 5.29788908362389E+0000 + 4.90000000000001E+0000 5.18555858731270E+0000 + 4.84999999999999E+0000 5.23790156841278E+0000 + 4.80000000000001E+0000 5.49602347612381E+0000 + 4.75000000000000E+0000 5.29770341515541E+0000 + 4.69999999999999E+0000 5.42759388685226E+0000 + 4.65000000000001E+0000 4.96667200326920E+0000 + 4.59999999999999E+0000 5.05789387226105E+0000 + 4.55000000000001E+0000 5.33379009366035E+0000 + 4.50000000000000E+0000 4.34182864427567E+0000 + 4.44999999999999E+0000 4.36636087298393E+0000 + 4.40000000000001E+0000 3.93102777004242E+0000 + 4.34999999999999E+0000 3.74741320312023E+0000 + 4.30000000000001E+0000 4.45805349946022E+0000 + 4.25000000000000E+0000 4.17368176579475E+0000 + 4.19999999999999E+0000 4.08031046390533E+0000 + 4.15000000000001E+0000 4.05791220068932E+0000 + 4.09999999999999E+0000 3.67551127076149E+0000 + 4.05000000000001E+0000 4.12203043699265E+0000 + 4.00000000000000E+0000 3.82474830746651E+0000 + 3.94999999999999E+0000 3.76931746304035E+0000 + 3.90000000000001E+0000 3.74174764752388E+0000 + 3.84999999999999E+0000 3.50499260425568E+0000 + 3.80000000000001E+0000 3.51531828939915E+0000 + 3.75000000000000E+0000 2.85990849137306E+0000 + 3.69999999999999E+0000 3.13564038276672E+0000 + 3.65000000000001E+0000 3.17488220334053E+0000 + 3.59999999999999E+0000 2.89564336836338E+0000 + 3.55000000000001E+0000 2.56504005193710E+0000 + 3.50000000000000E+0000 2.86874312162399E+0000 + 3.44999999999999E+0000 2.65254376828670E+0000 + 3.40000000000001E+0000 2.89668110013008E+0000 + 3.34999999999999E+0000 2.41576977074146E+0000 + 3.30000000000001E+0000 2.72968608140945E+0000 + 3.25000000000000E+0000 2.52501958608627E+0000 + 3.19999999999999E+0000 2.43492577224970E+0000 + 3.15000000000001E+0000 2.37039697170258E+0000 + 3.09999999999999E+0000 2.04945958405733E+0000 + 3.05000000000001E+0000 1.84388464689255E+0000 + 3.00000000000000E+0000 1.99304676055908E+0000 + 2.94999999999999E+0000 1.75429178774357E+0000 + 2.90000000000001E+0000 1.59739506244659E+0000 + 2.84999999999999E+0000 1.63242466002703E+0000 + 2.80000000000001E+0000 1.72501459717751E+0000 + 2.75000000000000E+0000 1.57808955013752E+0000 + 2.69999999999999E+0000 1.79561227560043E+0000 + 2.65000000000001E+0000 1.54307986795902E+0000 + 2.59999999999999E+0000 1.37927049398422E+0000 + 2.55000000000001E+0000 1.47534389793873E+0000 + 2.50000000000000E+0000 1.18981967493892E+0000 + 2.44999999999999E+0000 1.37250206619501E+0000 + 2.40000000000001E+0000 9.89141654223204E-0001 + 2.34999999999999E+0000 1.45569847524166E+0000 + 2.30000000000001E+0000 1.35258138924837E+0000 + 2.25000000000000E+0000 9.16999150067568E-0001 + 2.19999999999999E+0000 8.05946823209524E-0001 + 2.15000000000001E+0000 9.22527406364679E-0001 + 2.09999999999999E+0000 9.94165139272809E-0001 + 2.05000000000001E+0000 1.14864057302475E+0000 + 2.00000000000000E+0000 8.57669375836849E-0001 + 1.94999999999999E+0000 9.57230098545551E-0001 + 1.90000000000001E+0000 1.07336241379380E+0000 + 1.84999999999999E+0000 1.01574474200606E+0000 + 1.80000000000001E+0000 9.22324649989605E-0001 + 1.75000000000000E+0000 9.61270552128553E-0001 + 1.69999999999999E+0000 8.79671327769756E-0001 + 1.65000000000001E+0000 9.82142886146903E-0001 + 1.59999999999999E+0000 1.02311153337359E+0000 + 1.55000000000001E+0000 8.41655276715756E-0001 + 1.50000000000000E+0000 9.73863039165735E-0001 + 1.44999999999999E+0000 6.88787344843149E-0001 + 1.40000000000001E+0000 8.81112145259976E-0001 + 1.34999999999999E+0000 7.30601802468300E-0001 + 1.30000000000001E+0000 6.91446810960770E-0001 + 1.25000000000000E+0000 6.64275243878365E-0001 + 1.19999999999999E+0000 7.21474505960941E-0001 + 1.15000000000001E+0000 6.28948003053665E-0001 + 1.09999999999999E+0000 7.08247113972902E-0001 + 1.05000000000001E+0000 7.24192462861538E-0001 + 1.00000000000000E+0000 6.18233390152454E-0001 + 9.49999999999989E-0001 5.34098030999303E-0001 + 9.00000000000006E-0001 7.23080754280090E-0001 + 8.49999999999994E-0001 6.58928060904145E-0001 + 8.00000000000011E-0001 6.27463474869728E-0001 + 7.50000000000000E-0001 5.59317560866475E-0001 + 6.99999999999989E-0001 6.01638249121606E-0001 + 6.50000000000006E-0001 6.49296055547893E-0001 + 5.99999999999994E-0001 4.80233382433653E-0001 + 5.50000000000011E-0001 5.11610979214311E-0001 + 5.00000000000000E-0001 6.08631603419781E-0001 + 4.49999999999989E-0001 6.94907944649458E-0001 + 4.00000000000006E-0001 6.18321130052209E-0001 + 3.49999999999994E-0001 5.04379542544484E-0001 + 3.00000000000011E-0001 5.07690574973822E-0001 + 2.50000000000000E-0001 5.35792050883174E-0001 + 1.99999999999989E-0001 5.90156726539135E-0001 + 1.50000000000006E-0001 5.62946433201432E-0001 + 9.99999999999943E-0002 5.36238485481590E-0001 + 5.00000000000114E-0002 7.14867224916816E-0001 + 0.00000000000000E+0000 7.90427211672068E-0001 +-5.00000000000114E-0002 4.88524165004492E-0001 +-9.99999999999943E-0002 8.36867759004235E-0001 +-1.50000000000006E-0001 5.61912266537547E-0001 +-1.99999999999989E-0001 5.30200763605535E-0001 +-2.50000000000000E-0001 4.38946731388569E-0001 +-3.00000000000011E-0001 5.66731855273247E-0001 +-3.49999999999994E-0001 4.38968268223107E-0001 +-4.00000000000006E-0001 5.04734127316624E-0001 +-4.49999999999989E-0001 6.03581436909735E-0001 +-5.00000000000000E-0001 7.67261642962694E-0001 +-5.50000000000011E-0001 6.53043016791344E-0001 +-5.99999999999994E-0001 5.16014045104384E-0001 +-6.50000000000006E-0001 7.37953156232834E-0001 +-6.99999999999989E-0001 5.75281007215381E-0001 +-7.50000000000000E-0001 4.68262460082769E-0001 +-8.00000000000011E-0001 6.42635536147282E-0001 +-8.49999999999994E-0001 4.71231421921402E-0001 +-9.00000000000006E-0001 5.43655759654939E-0001 +-9.49999999999989E-0001 6.44272608682513E-0001 +-1.00000000000000E+0000 5.60792919248343E-0001 +-1.05000000000001E+0000 5.16063611954451E-0001 +-1.09999999999999E+0000 6.96923234965652E-0001 +-1.15000000000001E+0000 4.87638084217906E-0001 +-1.19999999999999E+0000 6.05175330303609E-0001 +-1.25000000000000E+0000 4.96927877888083E-0001 +-1.30000000000001E+0000 6.26350548118353E-0001 +-1.34999999999999E+0000 5.99934834986925E-0001 +-1.40000000000001E+0000 4.67047068756074E-0001 +-1.44999999999999E+0000 4.44289839826524E-0001 +-1.50000000000000E+0000 6.85035027563572E-0001 +-1.55000000000001E+0000 5.30829574912786E-0001 +-1.59999999999999E+0000 4.25846525467932E-0001 +-1.65000000000001E+0000 5.83545902743936E-0001 +-1.69999999999999E+0000 3.44561672769487E-0001 +-1.75000000000000E+0000 4.46135714650154E-0001 +-1.80000000000001E+0000 5.33127903938293E-0001 +-1.84999999999999E+0000 5.63554450869560E-0001 +-1.90000000000001E+0000 5.46945231501013E-0001 +-1.94999999999999E+0000 4.93785882368684E-0001 +-2.00000000000000E+0000 5.23899157531559E-0001 +-2.05000000000001E+0000 5.14118126593530E-0001 +-2.09999999999999E+0000 4.37871924601495E-0001 +-2.15000000000001E+0000 5.55395884905010E-0001 +-2.19999999999999E+0000 6.88502367585897E-0001 +-2.25000000000000E+0000 6.44779055379331E-0001 +-2.30000000000001E+0000 7.08318799734116E-0001 +-2.34999999999999E+0000 6.11270910128951E-0001 +-2.40000000000001E+0000 5.86866244208068E-0001 +-2.44999999999999E+0000 5.16796533018351E-0001 +-2.50000000000000E+0000 7.08150416612625E-0001 +-2.55000000000001E+0000 6.30091492086649E-0001 +-2.59999999999999E+0000 4.06671871431172E-0001 +-2.65000000000001E+0000 5.33380542881787E-0001 +-2.69999999999999E+0000 6.34105144068599E-0001 +-2.75000000000000E+0000 4.82996048405766E-0001 +-2.80000000000001E+0000 5.28537129983306E-0001 +-2.84999999999999E+0000 5.41339391842484E-0001 +-2.90000000000001E+0000 5.88493483141065E-0001 +-2.94999999999999E+0000 4.32408137246966E-0001 +-3.00000000000000E+0000 5.55113313719630E-0001 +-3.05000000000001E+0000 5.17153678461909E-0001 +-3.09999999999999E+0000 6.08082729857415E-0001 +-3.15000000000001E+0000 6.06026820838451E-0001 +-3.19999999999999E+0000 7.05305140465498E-0001 +-3.25000000000000E+0000 6.74903294071555E-0001 +-3.30000000000001E+0000 7.53701001405716E-0001 +-3.34999999999999E+0000 4.57615138031542E-0001 +-3.40000000000001E+0000 4.90164607763290E-0001 +-3.44999999999999E+0000 5.03254367504269E-0001 +-3.50000000000000E+0000 5.13842325657606E-0001 +-3.55000000000001E+0000 6.12633991986513E-0001 +-3.59999999999999E+0000 4.40991451721402E-0001 +-3.65000000000001E+0000 4.21081689652055E-0001 +-3.69999999999999E+0000 5.39387122727931E-0001 +-3.75000000000000E+0000 5.41702149435878E-0001 +-3.80000000000001E+0000 4.43733604624867E-0001 +-3.84999999999999E+0000 6.38182201422751E-0001 +-3.90000000000001E+0000 5.28000004589558E-0001 +-3.94999999999999E+0000 5.29627159237862E-0001 +-4.00000000000000E+0000 4.54066683538258E-0001 +-4.05000000000001E+0000 6.16793472319841E-0001 +-4.09999999999999E+0000 5.58645641431212E-0001 +-4.15000000000001E+0000 6.42179792746902E-0001 +-4.19999999999999E+0000 5.88239585049450E-0001 +-4.25000000000000E+0000 6.90931130200625E-0001 +-4.30000000000001E+0000 5.33143237233162E-0001 +-4.34999999999999E+0000 5.45844073407352E-0001 +-4.40000000000001E+0000 7.39370113238692E-0001 +-4.44999999999999E+0000 6.84472128748894E-0001 +-4.50000000000000E+0000 5.24471544660628E-0001 +-4.55000000000001E+0000 5.11778652667999E-0001 +-4.59999999999999E+0000 5.10052446275950E-0001 +-4.65000000000001E+0000 5.60862772166729E-0001 +-4.69999999999999E+0000 7.17184476554394E-0001 +-4.75000000000000E+0000 6.33388835936785E-0001 +-4.80000000000001E+0000 4.44135803729296E-0001 +-4.84999999999999E+0000 4.61172462906688E-0001 +-4.90000000000001E+0000 4.44929774850607E-0001 +-4.94999999999999E+0000 5.46592084690928E-0001 +-5.00000000000000E+0000 6.50042893365026E-0001 +-5.05000000000001E+0000 6.32227163761854E-0001 +-5.09999999999999E+0000 4.95237484574318E-0001 +-5.15000000000001E+0000 6.43857210874557E-0001 +-5.19999999999999E+0000 5.83578459918499E-0001 +-5.25000000000000E+0000 3.88923079706728E-0001 +-5.30000000000001E+0000 7.27343861013651E-0001 +-5.34999999999999E+0000 5.78286204487085E-0001 +-5.40000000000001E+0000 8.19841336458921E-0001 +-5.44999999999999E+0000 5.51819708198309E-0001 +-5.50000000000000E+0000 5.44453877955675E-0001 +-5.55000000000001E+0000 4.83659499324858E-0001 +-5.59999999999999E+0000 4.80579167604446E-0001 +-5.65000000000001E+0000 5.09559608995914E-0001 +-5.69999999999999E+0000 4.61756427073851E-0001 +-5.75000000000000E+0000 7.11607273668051E-0001 +-5.80000000000001E+0000 4.72547665704042E-0001 +-5.84999999999999E+0000 6.10916126519442E-0001 +-5.90000000000001E+0000 6.35952476412058E-0001 +-5.94999999999999E+0000 4.78130873292685E-0001 +-6.00000000000000E+0000 5.43699096888304E-0001 +-6.05000000000001E+0000 4.66060625389218E-0001 +-6.09999999999999E+0000 6.27391984686255E-0001 +-6.15000000000001E+0000 5.48693595454097E-0001 +-6.19999999999999E+0000 5.33370579127222E-0001 +-6.25000000000000E+0000 6.36967988684774E-0001 +-6.30000000000001E+0000 4.34361170977354E-0001 +-6.34999999999999E+0000 5.28281603008509E-0001 +-6.40000000000001E+0000 4.99676296487451E-0001 +-6.44999999999999E+0000 5.19281556829810E-0001 +-6.50000000000000E+0000 5.71795098483562E-0001 +-6.55000000000001E+0000 5.40684180334210E-0001 +-6.59999999999999E+0000 3.75707619823515E-0001 +-6.65000000000001E+0000 4.77138381451368E-0001 +-6.69999999999999E+0000 7.03771770000458E-0001 +-6.75000000000000E+0000 4.10040442366153E-0001 +-6.80000000000001E+0000 4.93563810363412E-0001 +-6.84999999999999E+0000 5.42703790590167E-0001 +-6.90000000000001E+0000 5.69010160863399E-0001 +-6.94999999999999E+0000 6.07738987542689E-0001 +-7.00000000000000E+0000 5.74407609179616E-0001 +-7.05000000000001E+0000 4.75820460822433E-0001 +-7.09999999999999E+0000 5.15982428565621E-0001 +-7.15000000000001E+0000 5.52051474340260E-0001 +-7.19999999999999E+0000 4.75801467895508E-0001 +-7.25000000000000E+0000 4.08039686735719E-0001 +-7.30000000000001E+0000 5.38118572905660E-0001 +-7.34999999999999E+0000 6.08152348548174E-0001 +-7.40000000000001E+0000 3.89956217259169E-0001 +-7.44999999999999E+0000 5.66274849697948E-0001 +-7.50000000000000E+0000 5.35127231851220E-0001 +-7.55000000000001E+0000 3.59422573354095E-0001 +-7.59999999999999E+0000 5.83314625546336E-0001 +-7.65000000000001E+0000 4.28718999028206E-0001 +-7.69999999999999E+0000 3.41897248872556E-0001 +-7.75000000000000E+0000 3.42653628438711E-0001 +-7.80000000000001E+0000 4.74014316685498E-0001 +-7.84999999999999E+0000 4.45242652203888E-0001 +-7.90000000000001E+0000 4.95125769637525E-0001 +-7.94999999999999E+0000 6.14590268582106E-0001 +-8.00000000000000E+0000 6.24281238764524E-0001 +-8.05000000000001E+0000 6.26899227499962E-0001 +-8.09999999999999E+0000 7.47230619192123E-0001 +-8.15000000000001E+0000 5.62494762241840E-0001 +-8.19999999999999E+0000 4.99211603775620E-0001 +-8.25000000000000E+0000 6.44224254414439E-0001 +-8.30000000000001E+0000 6.90035115927458E-0001 +-8.34999999999999E+0000 6.02078198455274E-0001 +-8.40000000000001E+0000 4.52922230469994E-0001 +-8.44999999999999E+0000 4.67863502912223E-0001 +-8.50000000000000E+0000 5.46315815299749E-0001 +-8.55000000000001E+0000 5.01678936183453E-0001 +-8.59999999999999E+0000 3.34893839084543E-0001 +-8.65000000000001E+0000 4.04608019627631E-0001 +-8.69999999999999E+0000 4.52999679371715E-0001 +-8.75000000000000E+0000 5.11118838563561E-0001 +-8.80000000000001E+0000 5.24167224764824E-0001 +-8.84999999999999E+0000 3.83304761257023E-0001 +-8.90000000000001E+0000 4.67454543802887E-0001 +-8.94999999999999E+0000 6.50515899062157E-0001 +-9.00000000000000E+0000 4.93361646309495E-0001 +-9.05000000000001E+0000 5.13443470001221E-0001 +-9.09999999999999E+0000 6.83846585452557E-0001 +-9.15000000000001E+0000 4.62941618636250E-0001 +-9.19999999999999E+0000 5.70333175361156E-0001 +-9.25000000000000E+0000 3.92533801496029E-0001 +-9.30000000000001E+0000 4.92549730464816E-0001 +-9.34999999999999E+0000 4.70206059515476E-0001 +-9.40000000000001E+0000 3.80810637027025E-0001 +-9.44999999999999E+0000 5.28015112504363E-0001 +-9.50000000000000E+0000 5.46904560178518E-0001 +-9.55000000000001E+0000 6.83326284401119E-0001 +-9.59999999999999E+0000 5.56812757626176E-0001 +-9.65000000000001E+0000 5.38640580140054E-0001 +-9.69999999999999E+0000 5.61724657192826E-0001 +-9.75000000000000E+0000 5.90509194880724E-0001 +-9.80000000000001E+0000 4.90793318953365E-0001 +-9.84999999999999E+0000 4.46948578581214E-0001 +-9.90000000000001E+0000 5.38885318674147E-0001 +-9.94999999999999E+0000 5.90171866118908E-0001 +-1.00000000000000E+0001 5.71496622171253E-0001 + From a4984df2bcb37d0da6645592425fcc6221bb7cb1 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:08:56 +0100 Subject: [PATCH 08/41] change numpy array in scienta datamodel --- pynxtools_xps/scienta/scienta_txt_data_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py index ccee49d8..8e66037d 100644 --- a/pynxtools_xps/scienta/scienta_txt_data_model.py +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -37,7 +37,7 @@ class ScientaRegion(XpsDataclass): region_name: str = "" energy_type: str = "" energy_size: int = 0 - energy_axis: np.ndarray = np.array([]) + energy_axis: np.ndarray = field(default_factory=lambda: np.zeros(0)) lens_mode: str = "" pass_energy: float = 0.0 pass_energy_units: str = "eV" From 62003a0f5e23eeffa8e1f6bf0c946c85e028d76f Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:14:21 +0100 Subject: [PATCH 09/41] remove duplications in data model --- pynxtools_xps/scienta/scienta_txt.py | 8 ++------ pynxtools_xps/scienta/scienta_txt_data_model.py | 9 +++++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py index 7def0f65..028b2c5c 100644 --- a/pynxtools_xps/scienta/scienta_txt.py +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -509,12 +509,8 @@ def _re_map_values(self, input_key: str, value: str): for k in keys: if k in input_key: - if not isinstance(value_map[k], list): - map_methods = [value_map[k]] - else: - map_methods = value_map[k] - for method in map_methods: - value = method(value) + map_method = value_map[k] + value = map_method(value) # type: ignore[operator] return value diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py index 8e66037d..2a0a8b36 100644 --- a/pynxtools_xps/scienta/scienta_txt_data_model.py +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -35,8 +35,10 @@ class ScientaHeader(XpsDataclass): class ScientaRegion(XpsDataclass): region_id: int = 0 region_name: str = "" - energy_type: str = "" + dim_energy_type: str = "" + energy_type: str = "binding" # energy_scale energy_size: int = 0 + energy_units: int = 0 energy_axis: np.ndarray = field(default_factory=lambda: np.zeros(0)) lens_mode: str = "" pass_energy: float = 0.0 @@ -44,9 +46,8 @@ class ScientaRegion(XpsDataclass): no_of_scans: int = 0 excitation_energy: float = 0.0 excitation_energy_units: str = "eV" - energy_type: str = "binding" # energy_scale acquisition_mode: str = "" - energy_units: str = "kinetic" # ??? + # energy_units: str = "kinetic" # ??? center_energy: float = 0.0 center_energy_units: str = "eV" start_energy: float = 0.0 @@ -54,7 +55,7 @@ class ScientaRegion(XpsDataclass): stop_energy: float = 0.0 stop_energy_units: str = "eV" step_size: float = 0.0 - stop_energy_units: str = "eV" + step_size_units: str = "eV" dwell_time: float = 0.0 dwell_time_units: str = "eV" detector_first_x_channel: int = 0 From 7c93b614a150589e3837165d1299e623e42a93dc Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:55:13 +0100 Subject: [PATCH 10/41] restructure sub-reader folders by vendors --- pynxtools_xps/{txt => scienta}/__init__.py | 0 pynxtools_xps/{txt => scienta}/txt_scienta.py | 0 pynxtools_xps/{txt => vms}/txt_vamas_export.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename pynxtools_xps/{txt => scienta}/__init__.py (100%) rename pynxtools_xps/{txt => scienta}/txt_scienta.py (100%) rename pynxtools_xps/{txt => vms}/txt_vamas_export.py (100%) diff --git a/pynxtools_xps/txt/__init__.py b/pynxtools_xps/scienta/__init__.py similarity index 100% rename from pynxtools_xps/txt/__init__.py rename to pynxtools_xps/scienta/__init__.py diff --git a/pynxtools_xps/txt/txt_scienta.py b/pynxtools_xps/scienta/txt_scienta.py similarity index 100% rename from pynxtools_xps/txt/txt_scienta.py rename to pynxtools_xps/scienta/txt_scienta.py diff --git a/pynxtools_xps/txt/txt_vamas_export.py b/pynxtools_xps/vms/txt_vamas_export.py similarity index 100% rename from pynxtools_xps/txt/txt_vamas_export.py rename to pynxtools_xps/vms/txt_vamas_export.py From 5f9eda1d198f17059d68b7ce6ca189f1e49d924c Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:56:04 +0100 Subject: [PATCH 11/41] adopt file parser imports to new folder structure --- pynxtools_xps/file_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools_xps/file_parser.py b/pynxtools_xps/file_parser.py index 8962ece1..e7760cf7 100644 --- a/pynxtools_xps/file_parser.py +++ b/pynxtools_xps/file_parser.py @@ -24,10 +24,10 @@ from typing import List, Dict from pynxtools_xps.sle.sle_specs import SleMapperSpecs -from pynxtools_xps.txt.txt_scienta import TxtMapperScienta +from pynxtools_xps.scienta.txt_scienta import TxtMapperScienta # from pynxtools_xps.txt.txt_specs import TxtMapperSpecs -from pynxtools_xps.txt.txt_vamas_export import TxtMapperVamasExport +from pynxtools_xps.vms.txt_vamas_export import TxtMapperVamasExport from pynxtools_xps.vms.vamas import VamasMapper from pynxtools_xps.xy.xy_specs import XyMapperSpecs from pynxtools_xps.xml.xml_specs import XmlMapperSpecs From 49d854e00d379e495cc8f8814f50808e6e82ae05 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:53:44 +0100 Subject: [PATCH 12/41] add scienta example data --- examples/scienta/README.md | 14 ++++++ examples/scienta/eln_data.yaml | 92 ++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 examples/scienta/README.md create mode 100644 examples/scienta/eln_data.yaml diff --git a/examples/scienta/README.md b/examples/scienta/README.md new file mode 100644 index 00000000..5c039d45 --- /dev/null +++ b/examples/scienta/README.md @@ -0,0 +1,14 @@ +# Example for .txt data exported from Scienta spectrometer + +This is an example for parsing the .txt data export of Scienta Omicron +[Scienta Omicron](https://www.scientaomicron.com/en/). We thank Dr. Alexei Nefedov from [KIT](https://www.ifg.kit.edu/21_1296.php) for providing this example data set. + +The example conversion can be run with the following command. + +```console +user@box:~$ dataconverter Cu-HHTP_*.txt eln_data.yaml --reader xps --nxdl NXmpes --output Cu-HHTP.nxs +``` + +## Contact person in FAIRmat for this example +Lukas Pielsticker + \ No newline at end of file diff --git a/examples/scienta/eln_data.yaml b/examples/scienta/eln_data.yaml new file mode 100644 index 00000000..ccd05e50 --- /dev/null +++ b/examples/scienta/eln_data.yaml @@ -0,0 +1,92 @@ +title: XPS Experiment +definition: + value: NXmpes + version: "1.0" +method: XPS +User: + name: Alexei Nefedov + email: alexei.nefedov@kit.edu + affiliation: Karlsruhe Institute of Technology (KIT), Institut für Funktionelle Grenzflächen + address: KIT + orcid: 0000-0001-9361-8333 +Instrument: + energy_resolution: + unit: null + value: null + Source: + type: Synchrotron X-ray Source + name: BESSY II" + probe: x-ray + current: + value: 298 + unit: mA + Beam: + distance: + unit: mm + value: 0.0 + #current: + #value: 30 + #unit: "pA" + Analyser: + name: Hemispherical Analyser dummy + description: hemispherical + Collectioncolumn: + scheme: Angular dispersive + Energydispersion: + scheme: hemispherical + pass_energy: + unit: eV + APERTURE[entrance_slit]: + description: Analyser slit Nr. 3 + shape: curved slit + size: + value: 0.4 + unit: mm + Detector: + amplifier_type: channeltron + detector_type: Multi-anode + Manipulator: + drain_current: + unit: A + value: 0.0 + sample_temperature: + unit: K + value: 298.0 + sample_bias: + unit: V + value: 0.0 + POSITIONER[positioner_x]: + value: + value: 15.5 + unit: cm + POSITIONER[positioner_y]: + value: + value: 11 + unit: cm + POSITIONER[positioner_z]: + value: + value: 36 + unit: cm + POSITIONER[positioner_phi]: + value: + value: 45 + unit: degree +Sample: + chemical_formula: Cu + temperature: + unit: K + value: 298.0 + situation: vacuum + gas_pressure: + unit: mbar + value: 0.000000001 + bias: + unit: V + value: 0.0 + preparation_date: "2023-03-08T10:49:12+01:00" + sample_history: transferred to analysis chamber + preparation_description: loaded in the endstation and transferred to analysis chamber + description: Cu-HHTP/Glass on standard sample holder +Process: + energy_calibration: + applied: True \ No newline at end of file From 504bbed8f589caec23c5f5908104962acbc4d716 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:54:37 +0100 Subject: [PATCH 13/41] rename folder structure and imports --- ...t_scienta.json => config_scienta_txt.json} | 0 pynxtools_xps/file_parser.py | 2 +- pynxtools_xps/scienta/txt_scienta.py | 574 ------------------ 3 files changed, 1 insertion(+), 575 deletions(-) rename pynxtools_xps/config/{config_txt_scienta.json => config_scienta_txt.json} (100%) delete mode 100644 pynxtools_xps/scienta/txt_scienta.py diff --git a/pynxtools_xps/config/config_txt_scienta.json b/pynxtools_xps/config/config_scienta_txt.json similarity index 100% rename from pynxtools_xps/config/config_txt_scienta.json rename to pynxtools_xps/config/config_scienta_txt.json diff --git a/pynxtools_xps/file_parser.py b/pynxtools_xps/file_parser.py index e7760cf7..e4669757 100644 --- a/pynxtools_xps/file_parser.py +++ b/pynxtools_xps/file_parser.py @@ -24,7 +24,7 @@ from typing import List, Dict from pynxtools_xps.sle.sle_specs import SleMapperSpecs -from pynxtools_xps.scienta.txt_scienta import TxtMapperScienta +from pynxtools_xps.scienta.scienta_txt import TxtMapperScienta # from pynxtools_xps.txt.txt_specs import TxtMapperSpecs from pynxtools_xps.vms.txt_vamas_export import TxtMapperVamasExport diff --git a/pynxtools_xps/scienta/txt_scienta.py b/pynxtools_xps/scienta/txt_scienta.py deleted file mode 100644 index 09307cbe..00000000 --- a/pynxtools_xps/scienta/txt_scienta.py +++ /dev/null @@ -1,574 +0,0 @@ -""" -Class for reading XPS files from TXT export of Scienta. -""" -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# pylint: disable=too-many-lines - -import re -import copy -from datetime import datetime -import pytz -import xarray as xr -import numpy as np - -from pynxtools_xps.reader_utils import ( - XPSMapper, - construct_entry_name, - construct_data_key, - construct_detector_data_key, -) - - -class TxtMapperScienta(XPSMapper): - """ - Class for restructuring .txt data file from - Scienta TXT export into python dictionary. - """ - - config_file = "config_txt_scienta.json" - - def _select_parser(self): - """ - Select Scienta TXT parser. - Currently, there is only one parser. - - Returns - ------- - ScientaTxtHelper - Parser for reading .txt file exported by Scienta. - - """ - return ScientaTxtHelper() - - def construct_data(self): - """Map TXT format to NXmpes-ready dict.""" - # pylint: disable=duplicate-code - spectra = copy.deepcopy(self.raw_data) - - self._xps_dict["data"]: dict = {} - - key_map = { - "file_info": ["data_file", "sequence_file"], - "user": [ - "user_initials", - ], - "instrument": [ - "instrument_name", - "vendor", - ], - "source": [], - "beam": ["excitation_energy"], - "analyser": [], - "collectioncolumn": [ - "lens_mode", - ], - "energydispersion": [ - "acquisition_mode", - "pass_energy", - ], - "detector": [ - "detector_first_x_channel", - "detector_first_y_channel", - "detector_last_x_channel", - "detector_last_y_channel", - "detector_mode", - "dwell_time", - ], - "manipulator": [], - "calibration": [], - "sample": ["sample_name"], - "data": [ - "x_units", - "energy_axis", - "energy_type", - "step_size", - ], - "region": [ - "center_energy", - "energy_scale", - "energy_size", - "no_of_scans", - "region_id", - "spectrum_comment", - "start_energy", - "stop_energy", - "time_stamp", - ], - # 'unused': [ - # 'energy_unit', - # 'number_of_slices', - # 'software_version', - # 'spectrum_comment', - # 'start_date', - # 'start_time', - # 'time_per_spectrum_channel' - # ] - } - - for spectrum in spectra: - self._update_xps_dict_with_spectrum(spectrum, key_map) - - def _update_xps_dict_with_spectrum(self, spectrum, key_map): - """ - Map one spectrum from raw data to NXmpes-ready dict. - - """ - # pylint: disable=too-many-locals,duplicate-code - group_parent = f'{self._root_path}/Region_{spectrum["spectrum_type"]}' - region_parent = f'{group_parent}/regions/Region_{spectrum["region_name"]}' - file_parent = f"{region_parent}/file_info" - instrument_parent = f"{region_parent}/instrument" - analyser_parent = f"{instrument_parent}/analyser" - - path_map = { - "file_info": f"{file_parent}", - "user": f"{region_parent}/user", - "instrument": f"{instrument_parent}", - "source": f"{instrument_parent}/source", - "beam": f"{instrument_parent}/beam", - "analyser": f"{analyser_parent}", - "collectioncolumn": f"{analyser_parent}/collectioncolumn", - "energydispersion": f"{analyser_parent}/energydispersion", - "detector": f"{analyser_parent}/detector", - "manipulator": f"{instrument_parent}/manipulator", - "calibration": f"{instrument_parent}/calibration", - "sample": f"{region_parent}/sample", - "data": f"{region_parent}/data", - "region": f"{region_parent}", - } - - for grouping, spectrum_keys in key_map.items(): - root = path_map[str(grouping)] - for spectrum_key in spectrum_keys: - try: - units = re.search(r"\[([A-Za-z0-9_]+)\]", spectrum_key).group(1) - mpes_key = spectrum_key.rsplit(" ", 1)[0] - self._xps_dict[f"{root}/{mpes_key}/@units"] = units - self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] - except AttributeError: - mpes_key = spectrum_key - self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] - - # Create keys for writing to data and detector - entry = construct_entry_name(region_parent) - scan_key = construct_data_key(spectrum) - detector_data_key_child = construct_detector_data_key(spectrum) - detector_data_key = f'{path_map["detector"]}/{detector_data_key_child}/counts' - - # Write raw data to detector. - self._xps_dict[detector_data_key] = spectrum["data"]["y"] - - # If multiple spectra exist to entry, only create a new - # xr.Dataset if the entry occurs for the first time. - if entry not in self._xps_dict["data"]: - self._xps_dict["data"][entry] = xr.Dataset() - - energy = np.array(spectrum["data"]["x"]) - intensity = spectrum["data"]["y"] - - # Write to data in order: scan, cycle, channel - - # Write averaged cycle data to 'data'. - all_scan_data = [ - value - for key, value in self._xps_dict["data"][entry].items() - if scan_key.split("_")[0] in key - ] - averaged_scans = np.mean(all_scan_data, axis=0) - if averaged_scans.size == 1: - # on first scan in cycle - averaged_scans = intensity - - self._xps_dict["data"][entry][scan_key.split("_")[0]] = xr.DataArray( - data=averaged_scans, - coords={"energy": energy}, - ) - - # Write scan data to 'data'. - self._xps_dict["data"][entry][scan_key] = xr.DataArray( - data=intensity, coords={"energy": energy} - ) - - # Write channel data to 'data'. - channel_key = f"{scan_key}_chan0" - self._xps_dict["data"][entry][channel_key] = xr.DataArray( - data=intensity, coords={"energy": energy} - ) - - -class ScientaTxtHelper: - """Parser for Scienta TXT exports.""" - - # pylint: disable=too-few-public-methods - - def __init__(self): - self.lines: list = [] - self.spectra: list = [] - self.no_of_regions = 0 - - keys_map = { - "Number of Regions": "no_of_regions", - "Version": "software_version", - "Lens Mode": "lens_mode", - "Pass Energy": "pass_energy", - "Number of Sweeps": "no_of_scans", - "Excitation Energy": "excitation_energy", - "Energy Scale": "energy_scale", - "Acquisition Mode": "acquisition_mode", - "Energy Unit": "x_units", - "Center Energy": "center_energy", - "Low Energy": "start_energy", - "High Energy": "stop_energy", - "Energy Step": "step_size", - "Step Time": "dwell_time", - "Number of Slices": "number_of_slices", - "File": "data_file", - "Sequence": "sequence_file", - "Spectrum Name": "spectrum_type", - "Instrument": "instrument_name", - "Location": "vendor", - "User": "user_initials", - "Sample": "sample_name", - "Comments": "spectrum_comment", - "Date": "start_date", - "Time": "start_time", - "Time per Spectrum Channel": "time_per_spectrum_channel", - "DetectorMode": "detector_mode", - } - - self.region_keys_map = { - "Region Name": "region_name", - "name": "energy_type", - "size": "energy_size", - "scale": "energy_axis", - } - - detector_map = { - "Detector First X-Channel": "detector_first_x_channel", - "Detector Last X-Channel": "detector_last_x_channel", - "Detector First Y-Channel": "detector_first_y_channel", - "Detector Last Y-Channel": "detector_last_y_channel", - } - - lens_mode_map = {"Transmission": "fixed analyzer transmission"} - - self.key_maps = [ - keys_map, - self.region_keys_map, - detector_map, - lens_mode_map, - ] - - self.value_map = { - "no_of_regions": self._change_no_of_regions, - "x_units": self._change_energy_type, - "energy_axis": [self._separate_dimension_scale, np.array], - "energy_scale": self._change_energy_type, - "acquisition_mode": self._change_scan_mode, - } - - def parse_file(self, file): - """ - Parse the file's data and metadata into a flat - list of dictionaries. - - - Parameters - ---------- - file : str - Filepath of the TXT file to be read. - - Returns - ------- - self.spectra - Flat list of dictionaries containing one spectrum each. - - """ - self._read_lines(file) - self._parse_header() - - for region_id in range(1, self.no_of_regions + 1): - self._parse_region(region_id) - - return self.spectra - - def _read_lines(self, file): - """ - Read all lines from the input txt files. - - - Parameters - ---------- - file : str - Filepath of the TXT file to be read. - - Returns - ------- - None. - - """ - with open(file, encoding="utf-8") as txt_file: - for line in txt_file: - self.lines += [line] - - def _parse_header(self): - """ - Parse header with information about the software version - and the number of spectra in the file. - - Returns - ------- - None. - - """ - n_headerlines = 4 - header = self.lines[:n_headerlines] - self.lines = self.lines[n_headerlines:] - - for line in header: - key, value = self._get_key_value_pair(line) - if key: - value = self._re_map_values(key, value) - setattr(self, key, value) - - def _parse_region(self, region_id): - """ - Parse data from one region (i.e., one measured spectrum) - into a dictioanry and append to all spectra. - - Parameters - ---------- - region_id : int - Number of the region in the file. - - Returns - ------- - None. - - """ - - region_data = { - "region_id": region_id, - "data": {"x": [], "y": []}, - } - - begin_region = False - begin_info = False - begin_data = False - - for line in self.lines: - if line.startswith(f"[Region {region_id}"): - begin_region = True - if line.startswith(f"[Info {region_id}"): - begin_info = True - if line.startswith(f"[Data {region_id}"): - begin_data = True - continue - - if line.startswith("\n"): - begin_region = False - begin_info = False - begin_data = False - - if begin_region: - # Read region meta data. - key, value = self._get_key_value_pair(line) - if "Dimension" in key: - key = self._re_map_keys(key) - key = self.region_keys_map[key.rsplit(" ")[-1]] - key = key.rsplit(" ")[-1] - value = self._re_map_values(key, value) - if self._check_valid_value(value): - region_data[key] = value - - if begin_info: - # Read instrument meta data for this region. - key, value = self._get_key_value_pair(line) - if self._check_valid_value(value): - region_data[key] = value - - if begin_data: - # Read XY data for this region. - [energy, intensity] = [float(s) for s in line.split(" ") if s != ""] - - region_data["data"]["x"].append(energy) - region_data["data"]["y"].append(intensity) - - region_data["data"]["x"] = np.array(region_data["data"]["x"]) - region_data["data"]["y"] = np.array(region_data["data"]["y"]) - - # Convert date and time to ISO8601 date time. - start_date = region_data["start_date"] - start_time = region_data["start_time"] - region_data["time_stamp"] = self._construct_date_time(start_date, start_time) - - self.spectra.append(region_data) - - def _check_valid_value(self, value): - """ - Check if a string or an array is empty. - - Parameters - ---------- - value : obj - For testing, this can be a str or a np.ndarray. - - Returns - ------- - bool - True if the string or np.ndarray is not empty. - - """ - if isinstance(value, str) and value: - return True - if isinstance(value, np.ndarray) and value.size != 0: - return True - return False - - def _get_key_value_pair(self, line): - """ - Split the line at the '=' sign and return a - key-value pair. The values are mapped according - to the desired format. - - Parameters - ---------- - line : str - One line from the input file. - - Returns - ------- - key : str - Anything before the '=' sign, mapped to the desired - key format. - value : obj - Anything after the '=' sign, mapped to the desired - value format and type. - - """ - try: - [key, value] = line.split("=") - key = self._re_map_keys(key) - value = self._re_map_values(key, value) - return key, value - - except ValueError: - key, value = "", "" - return key, value - - def _re_map_keys(self, key): - """ - Map the keys returned from the file to the preferred keys for - the parser output. - - """ - maps = {} - for key_map in self.key_maps: - maps.update(key_map) - - keys = list(maps.keys()) - - if key in keys: - key = maps[key] - - return key - - def _change_no_of_regions(self, no_of_regions): - """ - Make no_of_regions an integer. - Maps e.g. from '0001' string to 1. - - Parameters - ---------- - no_of_regions : str - No. of regions in the data file, - read from the first line. - - Returns - ------- - int - Ineger value of the number of regions. - - """ - return int(no_of_regions) - - def _change_energy_type(self, energy): - """ - Change the strings for energy type to the preferred format. - - """ - if "Binding" in energy: - return "binding energy" - if "Kinetic" in energy: - return "kinetic energy" - return None - - def _separate_dimension_scale(self, scale): - return [float(s) for s in scale.split(" ")] - - def _change_scan_mode(self, acquisition_mode): - """ - Change the strings for acquisition mode type to - the allowed values in NXmpes. - - """ - if acquisition_mode == "Fixed": - return "fixed" - if acquisition_mode == "Swept": - return "sweep" - return None - - def _construct_date_time(self, date, time): - """ - Convert the native time format to the datetime string - in the ISO 8601 format: '%Y-%b-%dT%H:%M:%S.%fZ'. - - """ - date_time = datetime.combine( - datetime.strptime(date, "%Y-%m-%d"), - datetime.strptime(time, "%H:%M:%S").time(), - ) - - localtz = pytz.timezone("Europe/Berlin") - date_time = localtz.localize(date_time) - - return date_time.isoformat() - - def _re_map_values(self, input_key, value): - """ - Map the values returned from the file to the preferred format for - the parser output. - - """ - try: - value = value.rstrip("\n") - except AttributeError: - pass - - keys = list(self.value_map.keys()) - - for k in keys: - if k in input_key: - if not isinstance(self.value_map[k], list): - map_methods = [self.value_map[k]] - else: - map_methods = self.value_map[k] - for method in map_methods: - value = method(value) - return value From e62407e5ca2533ed3661405a656b46793805e400 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:55:18 +0100 Subject: [PATCH 14/41] pascal to snake case converter with whitespace --- pynxtools_xps/reader_utils.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pynxtools_xps/reader_utils.py b/pynxtools_xps/reader_utils.py index f8208c52..70e3cfac 100644 --- a/pynxtools_xps/reader_utils.py +++ b/pynxtools_xps/reader_utils.py @@ -112,8 +112,13 @@ def to_snake_case(str_value): def convert_pascal_to_snake(str_value): """Convert pascal case text to snake case.""" - pattern = re.compile(r"(? Date: Tue, 26 Mar 2024 00:56:12 +0100 Subject: [PATCH 15/41] use a datamodel to validate scienta reader --- pynxtools_xps/scienta/scienta_txt.py | 593 ++++++++++++++++++ .../scienta/scienta_txt_data_model.py | 78 +++ 2 files changed, 671 insertions(+) create mode 100644 pynxtools_xps/scienta/scienta_txt.py create mode 100644 pynxtools_xps/scienta/scienta_txt_data_model.py diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py new file mode 100644 index 00000000..7def0f65 --- /dev/null +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -0,0 +1,593 @@ +""" +Class for reading XPS files from TXT export of Scienta. +""" +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# pylint: disable=too-many-lines + +import re +import copy +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Union +import pytz +import xarray as xr +import numpy as np + +from pynxtools_xps.reader_utils import ( + XPSMapper, + construct_entry_name, + construct_data_key, + construct_detector_data_key, + convert_pascal_to_snake, +) + +from pynxtools_xps.scienta.scienta_txt_data_model import ScientaHeader, ScientaRegion + + +class TxtMapperScienta(XPSMapper): + """ + Class for restructuring .txt data file from + Scienta TXT export into python dictionary. + """ + + config_file = "config_scienta_txt.json" + + def _select_parser(self): + """ + Select Scienta TXT parser. + Currently, there is only one parser. + + Returns + ------- + ScientaTxtHelper + Parser for reading .txt file exported by Scienta. + + """ + return ScientaTxtHelper() + + def construct_data(self): + """Map TXT format to NXmpes-ready dict.""" + # pylint: disable=duplicate-code + spectra = copy.deepcopy(self.raw_data) + + self._xps_dict["data"]: dict = {} + + key_map = { + "file_info": ["data_file", "sequence_file"], + "user": [ + "user_name", + ], + "instrument": [ + "instrument_name", + "vendor", + ], + "source": [], + "beam": ["excitation_energy"], + "analyser": [], + "collectioncolumn": [ + "lens_mode", + ], + "energydispersion": [ + "acquisition_mode", + "pass_energy", + ], + "detector": [ + "detector_first_x_channel", + "detector_first_y_channel", + "detector_last_x_channel", + "detector_last_y_channel", + "detector_mode", + "dwell_time", + ], + "manipulator": [], + "calibration": [], + "sample": ["sample_name"], + "data": [ + "x_units", + "energy_axis", + "energy_type", + "step_size", + ], + "region": [ + "center_energy", + "energy_scale", + "energy_size", + "no_of_scans", + "region_id", + "spectrum_comment", + "start_energy", + "stop_energy", + "time_stamp", + ], + # 'unused': [ + # 'energy_unit', + # 'number_of_slices', + # 'software_version', + # 'spectrum_comment', + # 'start_date', + # 'start_time', + # 'time_per_spectrum_channel' + # ] + } + + for spectrum in spectra: + self._update_xps_dict_with_spectrum(spectrum, key_map) + + def _update_xps_dict_with_spectrum(self, spectrum, key_map): + """ + Map one spectrum from raw data to NXmpes-ready dict. + + """ + # pylint: disable=too-many-locals,duplicate-code + group_parent = f'{self._root_path}/Region_{spectrum["spectrum_type"]}' + region_parent = f'{group_parent}/regions/Region_{spectrum["region_name"]}' + file_parent = f"{region_parent}/file_info" + instrument_parent = f"{region_parent}/instrument" + analyser_parent = f"{instrument_parent}/analyser" + + path_map = { + "file_info": f"{file_parent}", + "user": f"{region_parent}/user", + "instrument": f"{instrument_parent}", + "source": f"{instrument_parent}/source", + "beam": f"{instrument_parent}/beam", + "analyser": f"{analyser_parent}", + "collectioncolumn": f"{analyser_parent}/collectioncolumn", + "energydispersion": f"{analyser_parent}/energydispersion", + "detector": f"{analyser_parent}/detector", + "manipulator": f"{instrument_parent}/manipulator", + "calibration": f"{instrument_parent}/calibration", + "sample": f"{region_parent}/sample", + "data": f"{region_parent}/data", + "region": f"{region_parent}", + } + + for grouping, spectrum_keys in key_map.items(): + root = path_map[str(grouping)] + for spectrum_key in spectrum_keys: + try: + units = re.search(r"\[([A-Za-z0-9_]+)\]", spectrum_key).group(1) + mpes_key = spectrum_key.rsplit(" ", 1)[0] + self._xps_dict[f"{root}/{mpes_key}/@units"] = units + self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] + except AttributeError: + mpes_key = spectrum_key + self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] + + # Create keys for writing to data and detector + entry = construct_entry_name(region_parent) + scan_key = construct_data_key(spectrum) + detector_data_key_child = construct_detector_data_key(spectrum) + detector_data_key = f'{path_map["detector"]}/{detector_data_key_child}/counts' + + # Write raw data to detector. + self._xps_dict[detector_data_key] = spectrum["data"]["y"] + + # If multiple spectra exist to entry, only create a new + # xr.Dataset if the entry occurs for the first time. + if entry not in self._xps_dict["data"]: + self._xps_dict["data"][entry] = xr.Dataset() + + energy = np.array(spectrum["data"]["x"]) + intensity = spectrum["data"]["y"] + + # Write to data in order: scan, cycle, channel + + # Write averaged cycle data to 'data'. + all_scan_data = [ + value + for key, value in self._xps_dict["data"][entry].items() + if scan_key.split("_")[0] in key + ] + averaged_scans = np.mean(all_scan_data, axis=0) + if averaged_scans.size == 1: + # on first scan in cycle + averaged_scans = intensity + + self._xps_dict["data"][entry][scan_key.split("_")[0]] = xr.DataArray( + data=averaged_scans, + coords={"energy": energy}, + ) + + # Write scan data to 'data'. + self._xps_dict["data"][entry][scan_key] = xr.DataArray( + data=intensity, coords={"energy": energy} + ) + + # Write channel data to 'data'. + channel_key = f"{scan_key}_chan0" + self._xps_dict["data"][entry][channel_key] = xr.DataArray( + data=intensity, coords={"energy": energy} + ) + + +# ============================================================================= +# dimension_1_name +# dimension_1_size +# dimension_1_size +# dimension_1_scale +# dimension_1_scale +# ============================================================================= + +KEY_MAP = { + "number_of_regions": "no_of_regions", + "version": "software_version", + "dimension_name": "energy_type", + "dimension_size": "energy_size", + "dimension_scale": "energy_axis", + "number_of_sweeps": "no_of_scans", + "energy_unit": "x_units", + "low_energy": "start_energy", + "high_energy": "stop_energy", + "energy_step": "step_size", + "step_time": "dwell_time", + "detector_first_x-_channel": "detector_first_x_channel", + "detector_last_x-_channel": "detector_last_x_channel", + "detector_first_y-_channel": "detector_first_y_channel", + "detector_last_y-_channel": "detector_last_y_channel", + "file": "data_file", + "sequence": "sequence_file", + "spectrum_name": "spectrum_type", + "instrument": "instrument_name", + "location": "vendor", + "user": "user_name", + "sample": "sample_name", + "comments": "spectrum_comment", + "date": "start_date", + "time": "start_time", + "name": "energy_type", + "size": "energy_size", + "scale": "energy_axis", + "Transmission": "fixed analyzer transmission", +} + + +class ScientaTxtHelper: + """Parser for Scienta TXT exports.""" + + # pylint: disable=too-few-public-methods + + def __init__(self): + self.lines: List[str] = [] + self.header = ScientaHeader() + self.spectra: Dict[str, Any] = [] + + def parse_file(self, file): + """ + Parse the file's data and metadata into a flat + list of dictionaries. + + + Parameters + ---------- + file : str + Filepath of the TXT file to be read. + + Returns + ------- + self.spectra + Flat list of dictionaries containing one spectrum each. + + """ + self._read_lines(file) + self._parse_header() + + for region_id in range(1, self.header.no_of_regions + 1): + self._parse_region(region_id) + + return self.spectra + + def _read_lines(self, file): + """ + Read all lines from the input txt files. + + + Parameters + ---------- + file : str + Filepath of the TXT file to be read. + + Returns + ------- + None. + + """ + with open(file, encoding="utf-8") as txt_file: + for line in txt_file: + self.lines += [line] + + def _parse_header(self): + """ + Parse header with information about the software version + and the number of spectra in the file. + + Returns + ------- + None. + + """ + n_headerlines = 4 + headerlines = self.lines[:n_headerlines] + self.lines = self.lines[n_headerlines:] + + for line in headerlines: + key, value = self._get_key_value_pair(line) + if key: + value = self._re_map_values(key, value) + setattr(self.header, key, value) + self.header.validate_types() + + def _parse_region(self, region_id): + """ + Parse data from one region (i.e., one measured spectrum) + into a dictioanry and append to all spectra. + + Parameters + ---------- + region_id : int + Number of the region in the file. + + Returns + ------- + None. + + """ + region = ScientaRegion() + region.region_id = region_id + + begin_region = False + begin_info = False + begin_data = False + + energies: List[float] = [] + intensities: List[float] = [] + + for line in self.lines: + if line.startswith(f"[Region {region_id}"): + begin_region = True + if line.startswith(f"[Info {region_id}"): + begin_info = True + if line.startswith(f"[Data {region_id}"): + begin_data = True + continue + + if line.startswith("\n"): + begin_region = False + begin_info = False + begin_data = False + + if begin_region: + # Read region meta data. + key, value = self._get_key_value_pair(line) + if "dimension" in key: + key_part = f"dimension_{key.rsplit('_')[-1]}" + key = self._re_map_keys(key_part) + + value = self._re_map_values(key, value) + if self._check_valid_value(value): + setattr(region, key, value) + + if begin_info: + # Read instrument meta data for this region. + key, value = self._get_key_value_pair(line) + if self._check_valid_value(value): + setattr(region, key, value) + + if begin_data: + # Read XY data for this region. + [energy, intensity] = [float(s) for s in line.split(" ") if s != ""] + + energies.append(energy) + intensities.append(intensity) + + region.data = {"x": np.array(intensities), "y": np.array(energies)} + + # Convert date and time to ISO8601 date time. + region.time_stamp = _construct_date_time(region.start_date, region.start_time) + + region.validate_types() + + region_dict = {**self.header.dict(), **region.dict()} + + self.spectra.append(region_dict) + + def _check_valid_value(self, value): + """ + Check if a string or an array is empty. + + Parameters + ---------- + value : obj + For testing, this can be a str or a np.ndarray. + + Returns + ------- + bool + True if the string or np.ndarray is not empty. + + """ + if isinstance(value, str) and value: + return True + if isinstance(value, np.ndarray) and value.size != 0: + return True + return False + + def _get_key_value_pair(self, line): + """ + Split the line at the '=' sign and return a + key-value pair. The values are mapped according + to the desired format. + + Parameters + ---------- + line : str + One line from the input file. + + Returns + ------- + key : str + Anything before the '=' sign, mapped to the desired + key format. + value : obj + Anything after the '=' sign, mapped to the desired + value format and type. + + """ + try: + [key, value] = line.split("=") + key = convert_pascal_to_snake(key) + key = self._re_map_keys(key) + value = self._re_map_values(key, value) + + except ValueError: + key, value = "", "" + + return key, value + + def _re_map_keys(self, key): + """ + Map the keys returned from the file to the preferred keys for + the parser output. + + """ + if key in KEY_MAP: + return KEY_MAP[key] + return key + + def _re_map_values(self, input_key: str, value: str): + """ + Map the values returned from the file to the preferred format for + the parser output. + + """ + try: + value = value.rstrip("\n") + except AttributeError: + pass + + value_map = { + "no_of_regions": int, + "energy_size": int, + # "energy_axis", + "pass_energy": float, + "no_of_scans": int, + "excitation_energy": float, + "center_energy": float, + "start_energy": float, + "stop_energy": float, + "step_size": float, + "dwell_time": float, + "detector_first_x_channel": int, + "detector_last_x_channel": int, + "detector_first_y_channel": int, + "detector_last_y_channel": int, + "time_per_spectrum_channel": float, + "x_units": _change_energy_type, + "energy_axis": _separate_dimension_scale, + "energy_scale": _change_energy_type, + "acquisition_mode": _change_scan_mode, + "time_per_spectrum_channel": float, + } + + keys = list(value_map.keys()) + + for k in keys: + if k in input_key: + if not isinstance(value_map[k], list): + map_methods = [value_map[k]] + else: + map_methods = value_map[k] + for method in map_methods: + value = method(value) + return value + + +def str_to_int(str_value: str): + """ + Make str_value an integer. + Maps e.g. from '0001' string to 1. + """ + return int(str_value) + + +def str_to_float(str_value: str): + """ + Make str_value an integer. + Maps e.g. from '0001' string to 1. + """ + return int(str_value) + + +def _change_energy_type(energy_type: str): + """ + Change the strings for energy type to the preferred format. + + """ + if "Binding" in energy_type: + return "binding energy" + if "Kinetic" in energy_type: + return "kinetic energy" + return None + + +def _separate_dimension_scale(scale: str): + """ + Seperate the str of the dimension scale into a numpy array + + Parameters + ---------- + scale : str + Str of the form "600 599.5 599 598.5 5". + + Returns + ------- + np.ndarray + Dimension scale as a numpy array. + + """ + return np.array([float(s) for s in scale.split(" ")]) + + +def _change_scan_mode(acquisition_mode: str): + """ + Change the strings for acquisition mode type to + the allowed values in NXmpes. + + """ + mode_map = {"Fixed": "fixed", "Swept": "sweep"} + if acquisition_mode in mode_map: + return mode_map[acquisition_mode] + return None + + +def _construct_date_time(date: str, time: str): + """ + Convert the native time format to the datetime string + in the ISO 8601 format: '%Y-%b-%dT%H:%M:%S.%fZ'. + + """ + date_time = datetime.combine( + datetime.strptime(date, "%Y-%m-%d"), + datetime.strptime(time, "%H:%M:%S").time(), + ) + + localtz = pytz.timezone("Europe/Berlin") + date_time = localtz.localize(date_time) + + return date_time.isoformat() diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py new file mode 100644 index 00000000..ccee49d8 --- /dev/null +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -0,0 +1,78 @@ +""" +Data model for Vamas ISO standard. +""" +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# pylint: disable=too-many-instance-attributes + +from dataclasses import dataclass, field +import numpy as np + +from pynxtools_xps.reader_utils import XpsDataclass + + +@dataclass +class ScientaHeader(XpsDataclass): + no_of_regions: int = 0 + software_version: str = "" + + +@dataclass +class ScientaRegion(XpsDataclass): + region_id: int = 0 + region_name: str = "" + energy_type: str = "" + energy_size: int = 0 + energy_axis: np.ndarray = np.array([]) + lens_mode: str = "" + pass_energy: float = 0.0 + pass_energy_units: str = "eV" + no_of_scans: int = 0 + excitation_energy: float = 0.0 + excitation_energy_units: str = "eV" + energy_type: str = "binding" # energy_scale + acquisition_mode: str = "" + energy_units: str = "kinetic" # ??? + center_energy: float = 0.0 + center_energy_units: str = "eV" + start_energy: float = 0.0 + start_energy_units: str = "eV" + stop_energy: float = 0.0 + stop_energy_units: str = "eV" + step_size: float = 0.0 + stop_energy_units: str = "eV" + dwell_time: float = 0.0 + dwell_time_units: str = "eV" + detector_first_x_channel: int = 0 + detector_last_x_channel: int = 0 + detector_first_y_channel: int = 0 + detector_last_y_channel: int = 0 + number_of_slices: str = "" + data_file: str = "" + sequence_file: str = "" + spectrum_type: str = "" + instrument_name: str = "" + vendor: str = "" + user_name: str = "" + sample_name: str = "" + spectrum_comment: str = "" + start_date: str = "" + start_time: str = "" + time_per_spectrum_channel: float = 0.0 + time_per_spectrum_channel_units: str = "s" + detector_mode: str = "" + data: dict = field(default_factory=dict) From 0c31714854c374c7dc75b51cd967579b12aff6ef Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:03:26 +0100 Subject: [PATCH 16/41] add test data for scienta txt reader --- .gitignore | 2 +- tests/data/scienta_txt/Ag_0001.txt | 408 ++++++++++++++ tests/data/scienta_txt/Ag_0002.txt | 848 +++++++++++++++++++++++++++++ 3 files changed, 1257 insertions(+), 1 deletion(-) create mode 100644 tests/data/scienta_txt/Ag_0001.txt create mode 100644 tests/data/scienta_txt/Ag_0002.txt diff --git a/.gitignore b/.gitignore index c14ad099..7b5a887f 100644 --- a/.gitignore +++ b/.gitignore @@ -201,6 +201,6 @@ cython_debug/ *.txt !requirements.txt !dev-requirements.txt -!mkdocs-requirements.txt +!Ag_*.txt build/ .python-version diff --git a/tests/data/scienta_txt/Ag_0001.txt b/tests/data/scienta_txt/Ag_0001.txt new file mode 100644 index 00000000..30cdf1cb --- /dev/null +++ b/tests/data/scienta_txt/Ag_0001.txt @@ -0,0 +1,408 @@ +[Info] +Number of Regions=0001 +Version=1.3.1 + +[Region 1] +Region Name=Ag3d +Dimension 1 name=Binding Energy [eV] +Dimension 1 size=361 +Dimension 1 scale=382 381.95 381.9 381.85 381.8 381.75 381.7 381.65 381.6 381.55 381.5 381.45 381.4 381.35 381.3 381.25 381.2 381.15 381.1 381.05 381 380.95 380.9 380.85 380.8 380.75 380.7 380.65 380.6 380.55 380.5 380.45 380.4 380.35 380.3 380.25 380.2 380.15 380.1 380.05 380 379.95 379.9 379.85 379.8 379.75 379.7 379.65 379.6 379.55 379.5 379.45 379.4 379.35 379.3 379.25 379.2 379.15 379.1 379.05 379 378.95 378.9 378.85 378.8 378.75 378.7 378.65 378.6 378.55 378.5 378.45 378.4 378.35 378.3 378.25 378.2 378.15 378.1 378.05 378 377.95 377.9 377.85 377.8 377.75 377.7 377.65 377.6 377.55 377.5 377.45 377.4 377.35 377.3 377.25 377.2 377.15 377.1 377.05 377 376.95 376.9 376.85 376.8 376.75 376.7 376.65 376.6 376.55 376.5 376.45 376.4 376.35 376.3 376.25 376.2 376.15 376.1 376.05 376 375.95 375.9 375.85 375.8 375.75 375.7 375.65 375.6 375.55 375.5 375.45 375.4 375.35 375.3 375.25 375.2 375.15 375.1 375.05 375 374.95 374.9 374.85 374.8 374.75 374.7 374.65 374.6 374.55 374.5 374.45 374.4 374.35 374.3 374.25 374.2 374.15 374.1 374.05 374 373.95 373.9 373.85 373.8 373.75 373.7 373.65 373.6 373.55 373.5 373.45 373.4 373.35 373.3 373.25 373.2 373.15 373.1 373.05 373 372.95 372.9 372.85 372.8 372.75 372.7 372.65 372.6 372.55 372.5 372.45 372.4 372.35 372.3 372.25 372.2 372.15 372.1 372.05 372 371.95 371.9 371.85 371.8 371.75 371.7 371.65 371.6 371.55 371.5 371.45 371.4 371.35 371.3 371.25 371.2 371.15 371.1 371.05 371 370.95 370.9 370.85 370.8 370.75 370.7 370.65 370.6 370.55 370.5 370.45 370.4 370.35 370.3 370.25 370.2 370.15 370.1 370.05 370 369.95 369.9 369.85 369.8 369.75 369.7 369.65 369.6 369.55 369.5 369.45 369.4 369.35 369.3 369.25 369.2 369.15 369.1 369.05 369 368.95 368.9 368.85 368.8 368.75 368.7 368.65 368.6 368.55 368.5 368.45 368.4 368.35 368.3 368.25 368.2 368.15 368.1 368.05 368 367.95 367.9 367.85 367.8 367.75 367.7 367.65 367.6 367.55 367.5 367.45 367.4 367.35 367.3 367.25 367.2 367.15 367.1 367.05 367 366.95 366.9 366.85 366.8 366.75 366.7 366.65 366.6 366.55 366.5 366.45 366.4 366.35 366.3 366.25 366.2 366.15 366.1 366.05 366 365.95 365.9 365.85 365.8 365.75 365.7 365.65 365.6 365.55 365.5 365.45 365.4 365.35 365.3 365.25 365.2 365.15 365.1 365.05 365 364.95 364.9 364.85 364.8 364.75 364.7 364.65 364.6 364.55 364.5 364.45 364.4 364.35 364.3 364.25 364.2 364.15 364.1 364.05 364 + +[Info 1] +Region Name=Ag3d +Lens Mode=Transmission +Pass Energy=50 +Number of Sweeps=2 +Excitation Energy=520 +Energy Scale=Binding +Acquisition Mode=Swept +Energy Unit=Kinetic +Center Energy=147 +Low Energy=138 +High Energy=156 +Energy Step=0.05 +Step Time=203 +Detector First X-Channel=43 +Detector Last X-Channel=659 +Detector First Y-Channel=91 +Detector Last Y-Channel=398 +Number of Slices=1 +File=Z:\XPS_data\2023\Mar2023\KIT\Ag_0001.txt,.pxt,.ibw +Sequence=D:\old files\data2\data\Cu-HTTP_Mar_23.seq +Spectrum Name=Ag__001 +Instrument=R3000-6MS014 +Location=Scienta +User=AN +Sample=Ag +Comments=; +Date=2023-03-08 +Time=15:24:35 +Time per Spectrum Channel=45.066 +DetectorMode=ADC +[Run Mode Information 1] + + + +[Data 1] + 3.82000000000000E+0002 1.57494897842407E+0001 + 3.81950000000000E+0002 1.64413099288940E+0001 + 3.81900000000000E+0002 1.55735635757446E+0001 + 3.81850000000000E+0002 1.54435629844666E+0001 + 3.81800000000000E+0002 1.54182739257813E+0001 + 3.81750000000000E+0002 1.56504435539246E+0001 + 3.81700000000000E+0002 1.63364887237549E+0001 + 3.81650000000000E+0002 1.57809653282166E+0001 + 3.81600000000000E+0002 1.63200769424438E+0001 + 3.81550000000000E+0002 1.59050579071045E+0001 + 3.81500000000000E+0002 1.57870745658875E+0001 + 3.81450000000000E+0002 1.55918908119202E+0001 + 3.81400000000000E+0002 1.55100755691528E+0001 + 3.81350000000000E+0002 1.54439034461975E+0001 + 3.81300000000000E+0002 1.55248527526855E+0001 + 3.81250000000000E+0002 1.41690402030945E+0001 + 3.81200000000000E+0002 1.60760860443115E+0001 + 3.81150000000000E+0002 1.48629846572876E+0001 + 3.81100000000000E+0002 1.56844453811646E+0001 + 3.81050000000000E+0002 1.47998075485229E+0001 + 3.81000000000000E+0002 1.66099176406860E+0001 + 3.80950000000000E+0002 1.55111665725708E+0001 + 3.80900000000000E+0002 1.57977375984192E+0001 + 3.80850000000000E+0002 1.47676258087158E+0001 + 3.80800000000000E+0002 1.47283148765564E+0001 + 3.80750000000000E+0002 1.49334163665771E+0001 + 3.80700000000000E+0002 1.57090630531311E+0001 + 3.80650000000000E+0002 1.43097653388977E+0001 + 3.80600000000000E+0002 1.51413059234619E+0001 + 3.80550000000000E+0002 1.43209037780762E+0001 + 3.80500000000000E+0002 1.54984273910522E+0001 + 3.80450000000000E+0002 1.58196969032288E+0001 + 3.80400000000000E+0002 1.62004394531250E+0001 + 3.80350000000000E+0002 1.49333500862122E+0001 + 3.80300000000000E+0002 1.55413570404053E+0001 + 3.80250000000000E+0002 1.35080385208130E+0001 + 3.80200000000000E+0002 1.53979387283325E+0001 + 3.80150000000000E+0002 1.50949568748474E+0001 + 3.80100000000000E+0002 1.49770488739014E+0001 + 3.80050000000000E+0002 1.54676914215088E+0001 + 3.80000000000000E+0002 1.50816597938538E+0001 + 3.79950000000000E+0002 1.59943847656250E+0001 + 3.79900000000000E+0002 1.44137086868286E+0001 + 3.79850000000000E+0002 1.51465196609497E+0001 + 3.79800000000000E+0002 1.58124761581421E+0001 + 3.79750000000000E+0002 1.51443567276001E+0001 + 3.79700000000000E+0002 1.52470436096191E+0001 + 3.79650000000000E+0002 1.50198774337769E+0001 + 3.79600000000000E+0002 1.53124737739563E+0001 + 3.79550000000000E+0002 1.49150300025940E+0001 + 3.79500000000000E+0002 1.54385724067688E+0001 + 3.79450000000000E+0002 1.51602587699890E+0001 + 3.79400000000000E+0002 1.49494242668152E+0001 + 3.79350000000000E+0002 1.50685029029846E+0001 + 3.79300000000000E+0002 1.56178331375122E+0001 + 3.79250000000000E+0002 1.52707815170288E+0001 + 3.79200000000000E+0002 1.48378114700317E+0001 + 3.79150000000000E+0002 1.40221962928772E+0001 + 3.79100000000000E+0002 1.44629292488098E+0001 + 3.79050000000000E+0002 1.51645593643188E+0001 + 3.79000000000000E+0002 1.52528409957886E+0001 + 3.78950000000000E+0002 1.47578248977661E+0001 + 3.78900000000000E+0002 1.49093451499939E+0001 + 3.78850000000000E+0002 1.49314327239990E+0001 + 3.78800000000000E+0002 1.48976922035217E+0001 + 3.78750000000000E+0002 1.43259181976318E+0001 + 3.78700000000000E+0002 1.55560269355774E+0001 + 3.78650000000000E+0002 1.50374283790588E+0001 + 3.78600000000000E+0002 1.49277997016907E+0001 + 3.78550000000000E+0002 1.52587518692017E+0001 + 3.78500000000000E+0002 1.49624061584473E+0001 + 3.78450000000000E+0002 1.51682291030884E+0001 + 3.78400000000000E+0002 1.56328234672546E+0001 + 3.78350000000000E+0002 1.50407094955444E+0001 + 3.78300000000000E+0002 1.48496618270874E+0001 + 3.78250000000000E+0002 1.43254609107971E+0001 + 3.78200000000000E+0002 1.51318750381470E+0001 + 3.78150000000000E+0002 1.48879990577698E+0001 + 3.78100000000000E+0002 1.52053098678589E+0001 + 3.78050000000000E+0002 1.55034446716309E+0001 + 3.78000000000000E+0002 1.41631789207459E+0001 + 3.77950000000000E+0002 1.47533550262451E+0001 + 3.77900000000000E+0002 1.50532965660095E+0001 + 3.77850000000000E+0002 1.48620910644531E+0001 + 3.77800000000000E+0002 1.61487989425659E+0001 + 3.77750000000000E+0002 1.62200355529785E+0001 + 3.77700000000000E+0002 1.48400707244873E+0001 + 3.77650000000000E+0002 1.51052312850952E+0001 + 3.77600000000000E+0002 1.52342233657837E+0001 + 3.77550000000000E+0002 1.52192478179932E+0001 + 3.77500000000000E+0002 1.58891410827637E+0001 + 3.77450000000000E+0002 1.44678759574890E+0001 + 3.77400000000000E+0002 1.54222111701965E+0001 + 3.77350000000000E+0002 1.54114909172058E+0001 + 3.77300000000000E+0002 1.49247450828552E+0001 + 3.77250000000000E+0002 1.56796102523804E+0001 + 3.77200000000000E+0002 1.58447494506836E+0001 + 3.77150000000000E+0002 1.60251660346985E+0001 + 3.77100000000000E+0002 1.55270276069641E+0001 + 3.77050000000000E+0002 1.61188068389893E+0001 + 3.77000000000000E+0002 1.74335250854492E+0001 + 3.76950000000000E+0002 1.60741324424744E+0001 + 3.76900000000000E+0002 1.69899473190308E+0001 + 3.76850000000000E+0002 1.75755357742310E+0001 + 3.76800000000000E+0002 1.84132165908813E+0001 + 3.76750000000000E+0002 1.93554477691650E+0001 + 3.76700000000000E+0002 2.00024967193603E+0001 + 3.76650000000000E+0002 2.00815582275391E+0001 + 3.76600000000000E+0002 2.12560024261475E+0001 + 3.76550000000000E+0002 2.33023719787598E+0001 + 3.76500000000000E+0002 2.29073934555054E+0001 + 3.76450000000000E+0002 2.61511659622192E+0001 + 3.76400000000000E+0002 2.78636026382446E+0001 + 3.76350000000000E+0002 2.86364431381226E+0001 + 3.76300000000000E+0002 2.98695917129517E+0001 + 3.76250000000000E+0002 3.13227787017822E+0001 + 3.76200000000000E+0002 3.22618303298950E+0001 + 3.76150000000000E+0002 3.32425518035889E+0001 + 3.76100000000000E+0002 3.43366584777832E+0001 + 3.76050000000000E+0002 3.36744937896729E+0001 + 3.76000000000000E+0002 3.44810085296631E+0001 + 3.75950000000000E+0002 3.59695625305176E+0001 + 3.75900000000000E+0002 3.47897396087646E+0001 + 3.75850000000000E+0002 3.43475494384766E+0001 + 3.75800000000000E+0002 3.34349670410156E+0001 + 3.75750000000000E+0002 3.45781250000000E+0001 + 3.75700000000000E+0002 3.35668334960938E+0001 + 3.75650000000000E+0002 3.29793815612793E+0001 + 3.75600000000000E+0002 3.18872461318970E+0001 + 3.75550000000000E+0002 3.22348451614380E+0001 + 3.75500000000000E+0002 3.32681827545166E+0001 + 3.75450000000000E+0002 3.27906370162964E+0001 + 3.75400000000000E+0002 3.24426841735840E+0001 + 3.75350000000000E+0002 3.17976484298706E+0001 + 3.75300000000000E+0002 3.07904434204102E+0001 + 3.75250000000000E+0002 3.05953178405762E+0001 + 3.75200000000000E+0002 3.17762117385864E+0001 + 3.75150000000000E+0002 3.28849296569824E+0001 + 3.75100000000000E+0002 3.02298536300659E+0001 + 3.75050000000000E+0002 2.95215673446655E+0001 + 3.75000000000000E+0002 2.81435985565186E+0001 + 3.74950000000000E+0002 2.83872947692871E+0001 + 3.74900000000000E+0002 2.68225383758545E+0001 + 3.74850000000000E+0002 2.45209989547730E+0001 + 3.74800000000000E+0002 2.45335168838501E+0001 + 3.74750000000000E+0002 2.44747190475464E+0001 + 3.74700000000000E+0002 2.23934144973755E+0001 + 3.74650000000000E+0002 2.20680770874023E+0001 + 3.74600000000000E+0002 2.10057821273804E+0001 + 3.74550000000000E+0002 1.99815006256104E+0001 + 3.74500000000000E+0002 1.91868152618408E+0001 + 3.74450000000000E+0002 1.88583250045776E+0001 + 3.74400000000000E+0002 1.71150598526001E+0001 + 3.74350000000000E+0002 1.68515796661377E+0001 + 3.74300000000000E+0002 1.74512701034546E+0001 + 3.74250000000000E+0002 1.61111660003662E+0001 + 3.74200000000000E+0002 1.62994050979614E+0001 + 3.74150000000000E+0002 1.58555960655212E+0001 + 3.74100000000000E+0002 1.58946795463562E+0001 + 3.74050000000000E+0002 1.53749313354492E+0001 + 3.74000000000000E+0002 1.54611630439758E+0001 + 3.73950000000000E+0002 1.52839241027832E+0001 + 3.73900000000000E+0002 1.44980049133301E+0001 + 3.73850000000000E+0002 1.51541314125061E+0001 + 3.73800000000000E+0002 1.36951303482056E+0001 + 3.73750000000000E+0002 1.40718884468079E+0001 + 3.73700000000000E+0002 1.51999187469482E+0001 + 3.73650000000000E+0002 1.45192465782166E+0001 + 3.73600000000000E+0002 1.42443904876709E+0001 + 3.73550000000000E+0002 1.42818002700806E+0001 + 3.73500000000000E+0002 1.39435510635376E+0001 + 3.73450000000000E+0002 1.47659606933594E+0001 + 3.73400000000000E+0002 1.38597416877747E+0001 + 3.73350000000000E+0002 1.37865881919861E+0001 + 3.73300000000000E+0002 1.37333679199219E+0001 + 3.73250000000000E+0002 1.50529637336731E+0001 + 3.73200000000000E+0002 1.42001576423645E+0001 + 3.73150000000000E+0002 1.43615083694458E+0001 + 3.73100000000000E+0002 1.42914781570435E+0001 + 3.73050000000000E+0002 1.40233755111694E+0001 + 3.73000000000000E+0002 1.43548207283020E+0001 + 3.72950000000000E+0002 1.43070063591003E+0001 + 3.72900000000000E+0002 1.33733487129211E+0001 + 3.72850000000000E+0002 1.34518852233887E+0001 + 3.72800000000000E+0002 1.33726849555969E+0001 + 3.72750000000000E+0002 1.39107127189636E+0001 + 3.72700000000000E+0002 1.38429369926453E+0001 + 3.72650000000000E+0002 1.45144338607788E+0001 + 3.72600000000000E+0002 1.41194915771484E+0001 + 3.72550000000000E+0002 1.44867777824402E+0001 + 3.72500000000000E+0002 1.37754874229431E+0001 + 3.72450000000000E+0002 1.37267427444458E+0001 + 3.72400000000000E+0002 1.35776705741882E+0001 + 3.72350000000000E+0002 1.46350684165955E+0001 + 3.72300000000000E+0002 1.38051037788391E+0001 + 3.72250000000000E+0002 1.55433640480041E+0001 + 3.72200000000000E+0002 1.47949943542480E+0001 + 3.72150000000000E+0002 1.36028943061829E+0001 + 3.72100000000000E+0002 1.34426980018616E+0001 + 3.72050000000000E+0002 1.39940834045410E+0001 + 3.72000000000000E+0002 1.47441644668579E+0001 + 3.71950000000000E+0002 1.47270541191101E+0001 + 3.71900000000000E+0002 1.40295715332031E+0001 + 3.71850000000000E+0002 1.46239471435547E+0001 + 3.71800000000000E+0002 1.48882236480713E+0001 + 3.71750000000000E+0002 1.45164504051208E+0001 + 3.71700000000000E+0002 1.49725885391235E+0001 + 3.71650000000000E+0002 1.58953838348389E+0001 + 3.71600000000000E+0002 1.55053730010986E+0001 + 3.71550000000000E+0002 1.55911974906921E+0001 + 3.71500000000000E+0002 1.45202012062073E+0001 + 3.71450000000000E+0002 1.51256389617920E+0001 + 3.71400000000000E+0002 1.53773498535156E+0001 + 3.71350000000000E+0002 1.51921787261963E+0001 + 3.71300000000000E+0002 1.52783823013306E+0001 + 3.71250000000000E+0002 1.60127148628235E+0001 + 3.71200000000000E+0002 1.64643192291260E+0001 + 3.71150000000000E+0002 1.62343087196350E+0001 + 3.71100000000000E+0002 1.62916545867920E+0001 + 3.71050000000000E+0002 1.73342838287354E+0001 + 3.71000000000000E+0002 1.79000425338745E+0001 + 3.70950000000000E+0002 1.83403158187866E+0001 + 3.70900000000000E+0002 1.84782981872559E+0001 + 3.70850000000000E+0002 1.92199840545654E+0001 + 3.70800000000000E+0002 2.06073207855225E+0001 + 3.70750000000000E+0002 2.28399467468262E+0001 + 3.70700000000000E+0002 2.23888978958130E+0001 + 3.70650000000000E+0002 2.49636154174805E+0001 + 3.70600000000000E+0002 2.52168426513672E+0001 + 3.70550000000000E+0002 2.75928087234497E+0001 + 3.70500000000000E+0002 3.09665937423706E+0001 + 3.70450000000000E+0002 3.26754941940308E+0001 + 3.70400000000000E+0002 3.38799076080322E+0001 + 3.70350000000000E+0002 3.61099948883057E+0001 + 3.70300000000000E+0002 3.80707473754883E+0001 + 3.70250000000000E+0002 3.88946304321289E+0001 + 3.70200000000000E+0002 4.20250263214111E+0001 + 3.70150000000000E+0002 4.38316020965576E+0001 + 3.70100000000000E+0002 4.51800842285156E+0001 + 3.70050000000000E+0002 4.85302772521973E+0001 + 3.70000000000000E+0002 4.84325256347656E+0001 + 3.69950000000000E+0002 4.90069885253906E+0001 + 3.69900000000000E+0002 4.91230640411377E+0001 + 3.69850000000000E+0002 4.72265300750732E+0001 + 3.69800000000000E+0002 4.69174137115479E+0001 + 3.69750000000000E+0002 4.61901836395264E+0001 + 3.69700000000000E+0002 4.43363113403320E+0001 + 3.69650000000000E+0002 4.37466449737549E+0001 + 3.69600000000000E+0002 4.31885070800781E+0001 + 3.69550000000000E+0002 4.28270778656006E+0001 + 3.69500000000000E+0002 4.29605751037598E+0001 + 3.69450000000000E+0002 4.32724189758301E+0001 + 3.69400000000000E+0002 4.14488849639893E+0001 + 3.69350000000000E+0002 4.27307758331299E+0001 + 3.69300000000000E+0002 4.13864974975586E+0001 + 3.69250000000000E+0002 4.05263576507568E+0001 + 3.69200000000000E+0002 4.04347705841064E+0001 + 3.69150000000000E+0002 3.89697151184082E+0001 + 3.69100000000000E+0002 3.85387306213379E+0001 + 3.69050000000000E+0002 3.81469898223877E+0001 + 3.69000000000000E+0002 3.66166744232178E+0001 + 3.68950000000000E+0002 3.53046836853027E+0001 + 3.68900000000000E+0002 3.53709297180176E+0001 + 3.68850000000000E+0002 3.25035648345947E+0001 + 3.68800000000000E+0002 3.11546001434326E+0001 + 3.68750000000000E+0002 3.15857286453247E+0001 + 3.68700000000000E+0002 2.87193651199341E+0001 + 3.68650000000000E+0002 2.60236577987671E+0001 + 3.68600000000000E+0002 2.66449270248413E+0001 + 3.68550000000000E+0002 2.38720169067383E+0001 + 3.68500000000000E+0002 2.39150276184082E+0001 + 3.68450000000000E+0002 2.21531953811646E+0001 + 3.68400000000000E+0002 1.95341606140137E+0001 + 3.68350000000000E+0002 1.91806650161743E+0001 + 3.68300000000000E+0002 1.82291097640991E+0001 + 3.68250000000000E+0002 1.76414966583252E+0001 + 3.68200000000000E+0002 1.80748758316040E+0001 + 3.68150000000000E+0002 1.78317594528198E+0001 + 3.68100000000000E+0002 1.69700202941895E+0001 + 3.68050000000000E+0002 1.79059257507324E+0001 + 3.68000000000000E+0002 1.64905881881714E+0001 + 3.67950000000000E+0002 1.53120617866516E+0001 + 3.67900000000000E+0002 1.51799402236938E+0001 + 3.67850000000000E+0002 1.44476442337036E+0001 + 3.67800000000000E+0002 1.55264472961426E+0001 + 3.67750000000000E+0002 1.48560962677002E+0001 + 3.67700000000000E+0002 1.47195467948914E+0001 + 3.67650000000000E+0002 1.43917679786682E+0001 + 3.67600000000000E+0002 1.47139253616333E+0001 + 3.67550000000000E+0002 1.35707759857178E+0001 + 3.67500000000000E+0002 1.39690403938293E+0001 + 3.67450000000000E+0002 1.48282279968262E+0001 + 3.67400000000000E+0002 1.46265621185303E+0001 + 3.67350000000000E+0002 1.36998987197876E+0001 + 3.67300000000000E+0002 1.47192778587341E+0001 + 3.67250000000000E+0002 1.39265775680542E+0001 + 3.67200000000000E+0002 1.39382052421570E+0001 + 3.67150000000000E+0002 1.41879715919495E+0001 + 3.67100000000000E+0002 1.48662767410278E+0001 + 3.67050000000000E+0002 1.41385378837585E+0001 + 3.67000000000000E+0002 1.39103469848633E+0001 + 3.66950000000000E+0002 1.48608984947205E+0001 + 3.66900000000000E+0002 1.54960737228394E+0001 + 3.66850000000000E+0002 1.51222505569458E+0001 + 3.66800000000000E+0002 1.41004304885864E+0001 + 3.66750000000000E+0002 1.42294158935547E+0001 + 3.66700000000000E+0002 1.39531588554382E+0001 + 3.66650000000000E+0002 1.33953723907471E+0001 + 3.66600000000000E+0002 1.33827085494995E+0001 + 3.66550000000000E+0002 1.41148390769959E+0001 + 3.66500000000000E+0002 1.37094802856445E+0001 + 3.66450000000000E+0002 1.40760707855225E+0001 + 3.66400000000000E+0002 1.37842106819153E+0001 + 3.66350000000000E+0002 1.44878454208374E+0001 + 3.66300000000000E+0002 1.36269545555115E+0001 + 3.66250000000000E+0002 1.40473437309265E+0001 + 3.66200000000000E+0002 1.50036888122559E+0001 + 3.66150000000000E+0002 1.42514410018921E+0001 + 3.66100000000000E+0002 1.32787837982178E+0001 + 3.66050000000000E+0002 1.36622939109802E+0001 + 3.66000000000000E+0002 1.41486802101135E+0001 + 3.65950000000000E+0002 1.35549035072327E+0001 + 3.65900000000000E+0002 1.43072447776794E+0001 + 3.65850000000000E+0002 1.35523810386658E+0001 + 3.65800000000000E+0002 1.39640274047852E+0001 + 3.65750000000000E+0002 1.38229041099548E+0001 + 3.65700000000000E+0002 1.40818195343018E+0001 + 3.65650000000000E+0002 1.35354733467102E+0001 + 3.65600000000000E+0002 1.36108450889587E+0001 + 3.65550000000000E+0002 1.31030659675598E+0001 + 3.65500000000000E+0002 1.34424591064453E+0001 + 3.65450000000000E+0002 1.41796655654907E+0001 + 3.65400000000000E+0002 1.36854448318481E+0001 + 3.65350000000000E+0002 1.37322764396667E+0001 + 3.65300000000000E+0002 1.34422760009766E+0001 + 3.65250000000000E+0002 1.30984420776367E+0001 + 3.65200000000000E+0002 1.39677639007568E+0001 + 3.65150000000000E+0002 1.36648526191711E+0001 + 3.65100000000000E+0002 1.31513757705688E+0001 + 3.65050000000000E+0002 1.50544595718384E+0001 + 3.65000000000000E+0002 1.43763031959534E+0001 + 3.64950000000000E+0002 1.36302690505981E+0001 + 3.64900000000000E+0002 1.39439554214478E+0001 + 3.64850000000000E+0002 1.42590832710266E+0001 + 3.64800000000000E+0002 1.41765475273132E+0001 + 3.64750000000000E+0002 1.37863874435425E+0001 + 3.64700000000000E+0002 1.34716482162476E+0001 + 3.64650000000000E+0002 1.42044219970703E+0001 + 3.64600000000000E+0002 1.37699837684631E+0001 + 3.64550000000000E+0002 1.35058851242065E+0001 + 3.64500000000000E+0002 1.40365624427795E+0001 + 3.64450000000000E+0002 1.49350633621216E+0001 + 3.64400000000000E+0002 1.43927721977234E+0001 + 3.64350000000000E+0002 1.35368013381958E+0001 + 3.64300000000000E+0002 1.35385813713074E+0001 + 3.64250000000000E+0002 1.40966658592224E+0001 + 3.64200000000000E+0002 1.41538577079773E+0001 + 3.64150000000000E+0002 1.33765773773193E+0001 + 3.64100000000000E+0002 1.37874016761780E+0001 + 3.64050000000000E+0002 1.38551530838013E+0001 + 3.64000000000000E+0002 1.31949939727783E+0001 + diff --git a/tests/data/scienta_txt/Ag_0002.txt b/tests/data/scienta_txt/Ag_0002.txt new file mode 100644 index 00000000..41f6ef6a --- /dev/null +++ b/tests/data/scienta_txt/Ag_0002.txt @@ -0,0 +1,848 @@ +[Info] +Number of Regions=0001 +Version=1.3.1 + +[Region 1] +Region Name=VB +Dimension 1 name=Binding Energy [eV] +Dimension 1 size=801 +Dimension 1 scale=30 29.95 29.9 29.85 29.8 29.75 29.7 29.65 29.6 29.55 29.5 29.45 29.4 29.35 29.3 29.25 29.2 29.15 29.1 29.05 29 28.95 28.9 28.85 28.8 28.75 28.7 28.65 28.6 28.55 28.5 28.45 28.4 28.35 28.3 28.25 28.2 28.15 28.1 28.05 28 27.95 27.9 27.85 27.8 27.75 27.7 27.65 27.6 27.55 27.5 27.45 27.4 27.35 27.3 27.25 27.2 27.15 27.1 27.05 27 26.95 26.9 26.85 26.8 26.75 26.7 26.65 26.6 26.55 26.5 26.45 26.4 26.35 26.3 26.25 26.2 26.15 26.1 26.05 26 25.95 25.9 25.85 25.8 25.75 25.7 25.65 25.6 25.55 25.5 25.45 25.4 25.35 25.3 25.25 25.2 25.15 25.1 25.05 25 24.95 24.9 24.85 24.8 24.75 24.7 24.65 24.6 24.55 24.5 24.45 24.4 24.35 24.3 24.25 24.2 24.15 24.1 24.05 24 23.95 23.9 23.85 23.8 23.75 23.7 23.65 23.6 23.55 23.5 23.45 23.4 23.35 23.3 23.25 23.2 23.15 23.1 23.05 23 22.95 22.9 22.85 22.8 22.75 22.7 22.65 22.6 22.55 22.5 22.45 22.4 22.35 22.3 22.25 22.2 22.15 22.1 22.05 22 21.95 21.9 21.85 21.8 21.75 21.7 21.65 21.6 21.55 21.5 21.45 21.4 21.35 21.3 21.25 21.2 21.15 21.1 21.05 21 20.95 20.9 20.85 20.8 20.75 20.7 20.65 20.6 20.55 20.5 20.45 20.4 20.35 20.3 20.25 20.2 20.15 20.1 20.05 20 19.95 19.9 19.85 19.8 19.75 19.7 19.65 19.6 19.55 19.5 19.45 19.4 19.35 19.3 19.25 19.2 19.15 19.1 19.05 19 18.95 18.9 18.85 18.8 18.75 18.7 18.65 18.6 18.55 18.5 18.45 18.4 18.35 18.3 18.25 18.2 18.15 18.1 18.05 18 17.95 17.9 17.85 17.8 17.75 17.7 17.65 17.6 17.55 17.5 17.45 17.4 17.35 17.3 17.25 17.2 17.15 17.1 17.05 17 16.95 16.9 16.85 16.8 16.75 16.7 16.65 16.6 16.55 16.5 16.45 16.4 16.35 16.3 16.25 16.2 16.15 16.1 16.05 16 15.95 15.9 15.85 15.8 15.75 15.7 15.65 15.6 15.55 15.5 15.45 15.4 15.35 15.3 15.25 15.2 15.15 15.1 15.05 15 14.95 14.9 14.85 14.8 14.75 14.7 14.65 14.6 14.55 14.5 14.45 14.4 14.35 14.3 14.25 14.2 14.15 14.1 14.05 14 13.95 13.9 13.85 13.8 13.75 13.7 13.65 13.6 13.55 13.5 13.45 13.4 13.35 13.3 13.25 13.2 13.15 13.1 13.05 13 12.95 12.9 12.85 12.8 12.75 12.7 12.65 12.6 12.55 12.5 12.45 12.4 12.35 12.3 12.25 12.2 12.15 12.1 12.05 12 11.95 11.9 11.85 11.8 11.75 11.7 11.65 11.6 11.55 11.5 11.45 11.4 11.35 11.3 11.25 11.2 11.15 11.1 11.05 11 10.95 10.9 10.85 10.8 10.75 10.7 10.65 10.6 10.55 10.5 10.45 10.4 10.35 10.3 10.25 10.2 10.15 10.1 10.05 10 9.94999999999999 9.90000000000001 9.84999999999999 9.80000000000001 9.75 9.69999999999999 9.65000000000001 9.59999999999999 9.55000000000001 9.5 9.44999999999999 9.40000000000001 9.34999999999999 9.30000000000001 9.25 9.19999999999999 9.15000000000001 9.09999999999999 9.05000000000001 9 8.94999999999999 8.90000000000001 8.84999999999999 8.80000000000001 8.75 8.69999999999999 8.65000000000001 8.59999999999999 8.55000000000001 8.5 8.44999999999999 8.40000000000001 8.34999999999999 8.30000000000001 8.25 8.19999999999999 8.15000000000001 8.09999999999999 8.05000000000001 8 7.94999999999999 7.90000000000001 7.84999999999999 7.80000000000001 7.75 7.69999999999999 7.65000000000001 7.59999999999999 7.55000000000001 7.5 7.44999999999999 7.40000000000001 7.34999999999999 7.30000000000001 7.25 7.19999999999999 7.15000000000001 7.09999999999999 7.05000000000001 7 6.94999999999999 6.90000000000001 6.84999999999999 6.80000000000001 6.75 6.69999999999999 6.65000000000001 6.59999999999999 6.55000000000001 6.5 6.44999999999999 6.40000000000001 6.34999999999999 6.30000000000001 6.25 6.19999999999999 6.15000000000001 6.09999999999999 6.05000000000001 6 5.94999999999999 5.90000000000001 5.84999999999999 5.80000000000001 5.75 5.69999999999999 5.65000000000001 5.59999999999999 5.55000000000001 5.5 5.44999999999999 5.40000000000001 5.34999999999999 5.30000000000001 5.25 5.19999999999999 5.15000000000001 5.09999999999999 5.05000000000001 5 4.94999999999999 4.90000000000001 4.84999999999999 4.80000000000001 4.75 4.69999999999999 4.65000000000001 4.59999999999999 4.55000000000001 4.5 4.44999999999999 4.40000000000001 4.34999999999999 4.30000000000001 4.25 4.19999999999999 4.15000000000001 4.09999999999999 4.05000000000001 4 3.94999999999999 3.90000000000001 3.84999999999999 3.80000000000001 3.75 3.69999999999999 3.65000000000001 3.59999999999999 3.55000000000001 3.5 3.44999999999999 3.40000000000001 3.34999999999999 3.30000000000001 3.25 3.19999999999999 3.15000000000001 3.09999999999999 3.05000000000001 3 2.94999999999999 2.90000000000001 2.84999999999999 2.80000000000001 2.75 2.69999999999999 2.65000000000001 2.59999999999999 2.55000000000001 2.5 2.44999999999999 2.40000000000001 2.34999999999999 2.30000000000001 2.25 2.19999999999999 2.15000000000001 2.09999999999999 2.05000000000001 2 1.94999999999999 1.90000000000001 1.84999999999999 1.80000000000001 1.75 1.69999999999999 1.65000000000001 1.59999999999999 1.55000000000001 1.5 1.44999999999999 1.40000000000001 1.34999999999999 1.30000000000001 1.25 1.19999999999999 1.15000000000001 1.09999999999999 1.05000000000001 1 0.949999999999989 0.900000000000006 0.849999999999994 0.800000000000011 0.75 0.699999999999989 0.650000000000006 0.599999999999994 0.550000000000011 0.5 0.449999999999989 0.400000000000006 0.349999999999994 0.300000000000011 0.25 0.199999999999989 0.150000000000006 0.0999999999999943 0.0500000000000114 0 -0.0500000000000114 -0.0999999999999943 -0.150000000000006 -0.199999999999989 -0.25 -0.300000000000011 -0.349999999999994 -0.400000000000006 -0.449999999999989 -0.5 -0.550000000000011 -0.599999999999994 -0.650000000000006 -0.699999999999989 -0.75 -0.800000000000011 -0.849999999999994 -0.900000000000006 -0.949999999999989 -1 -1.05000000000001 -1.09999999999999 -1.15000000000001 -1.19999999999999 -1.25 -1.30000000000001 -1.34999999999999 -1.40000000000001 -1.44999999999999 -1.5 -1.55000000000001 -1.59999999999999 -1.65000000000001 -1.69999999999999 -1.75 -1.80000000000001 -1.84999999999999 -1.90000000000001 -1.94999999999999 -2 -2.05000000000001 -2.09999999999999 -2.15000000000001 -2.19999999999999 -2.25 -2.30000000000001 -2.34999999999999 -2.40000000000001 -2.44999999999999 -2.5 -2.55000000000001 -2.59999999999999 -2.65000000000001 -2.69999999999999 -2.75 -2.80000000000001 -2.84999999999999 -2.90000000000001 -2.94999999999999 -3 -3.05000000000001 -3.09999999999999 -3.15000000000001 -3.19999999999999 -3.25 -3.30000000000001 -3.34999999999999 -3.40000000000001 -3.44999999999999 -3.5 -3.55000000000001 -3.59999999999999 -3.65000000000001 -3.69999999999999 -3.75 -3.80000000000001 -3.84999999999999 -3.90000000000001 -3.94999999999999 -4 -4.05000000000001 -4.09999999999999 -4.15000000000001 -4.19999999999999 -4.25 -4.30000000000001 -4.34999999999999 -4.40000000000001 -4.44999999999999 -4.5 -4.55000000000001 -4.59999999999999 -4.65000000000001 -4.69999999999999 -4.75 -4.80000000000001 -4.84999999999999 -4.90000000000001 -4.94999999999999 -5 -5.05000000000001 -5.09999999999999 -5.15000000000001 -5.19999999999999 -5.25 -5.30000000000001 -5.34999999999999 -5.40000000000001 -5.44999999999999 -5.5 -5.55000000000001 -5.59999999999999 -5.65000000000001 -5.69999999999999 -5.75 -5.80000000000001 -5.84999999999999 -5.90000000000001 -5.94999999999999 -6 -6.05000000000001 -6.09999999999999 -6.15000000000001 -6.19999999999999 -6.25 -6.30000000000001 -6.34999999999999 -6.40000000000001 -6.44999999999999 -6.5 -6.55000000000001 -6.59999999999999 -6.65000000000001 -6.69999999999999 -6.75 -6.80000000000001 -6.84999999999999 -6.90000000000001 -6.94999999999999 -7 -7.05000000000001 -7.09999999999999 -7.15000000000001 -7.19999999999999 -7.25 -7.30000000000001 -7.34999999999999 -7.40000000000001 -7.44999999999999 -7.5 -7.55000000000001 -7.59999999999999 -7.65000000000001 -7.69999999999999 -7.75 -7.80000000000001 -7.84999999999999 -7.90000000000001 -7.94999999999999 -8 -8.05000000000001 -8.09999999999999 -8.15000000000001 -8.19999999999999 -8.25 -8.30000000000001 -8.34999999999999 -8.40000000000001 -8.44999999999999 -8.5 -8.55000000000001 -8.59999999999999 -8.65000000000001 -8.69999999999999 -8.75 -8.80000000000001 -8.84999999999999 -8.90000000000001 -8.94999999999999 -9 -9.05000000000001 -9.09999999999999 -9.15000000000001 -9.19999999999999 -9.25 -9.30000000000001 -9.34999999999999 -9.40000000000001 -9.44999999999999 -9.5 -9.55000000000001 -9.59999999999999 -9.65000000000001 -9.69999999999999 -9.75 -9.80000000000001 -9.84999999999999 -9.90000000000001 -9.94999999999999 -10 + +[Info 1] +Region Name=VB +Lens Mode=Transmission +Pass Energy=50 +Number of Sweeps=10 +Excitation Energy=153 +Energy Scale=Binding +Acquisition Mode=Swept +Energy Unit=Kinetic +Center Energy=143 +Low Energy=123 +High Energy=163 +Energy Step=0.05 +Step Time=203 +Detector First X-Channel=43 +Detector Last X-Channel=659 +Detector First Y-Channel=91 +Detector Last Y-Channel=398 +Number of Slices=1 +File=Z:\XPS_data\2023\Mar2023\KIT\Ag_0002.txt,.pxt,.ibw +Sequence=D:\old files\data2\data\Cu-HTTP_Mar_23.seq +Spectrum Name=Ag__002 +Instrument=R3000-6MS014 +Location=Scienta +User=AN +Sample=Ag +Comments=; +Date=2023-03-08 +Time=15:30:27 +Time per Spectrum Channel=225.33 +DetectorMode=ADC +[Run Mode Information 1] + + + +[Data 1] + 3.00000000000000E+0001 3.66266550123692E+0000 + 2.99500000000000E+0001 3.31459234654903E+0000 + 2.99000000000000E+0001 3.23482005298138E+0000 + 2.98500000000000E+0001 3.35422047972679E+0000 + 2.98000000000000E+0001 3.50475406646729E+0000 + 2.97500000000000E+0001 3.63206753134727E+0000 + 2.97000000000000E+0001 3.12571620941162E+0000 + 2.96500000000000E+0001 3.11565870046616E+0000 + 2.96000000000000E+0001 3.28529769182205E+0000 + 2.95500000000000E+0001 3.07951352000236E+0000 + 2.95000000000000E+0001 2.62940143048763E+0000 + 2.94500000000000E+0001 2.38554352521896E+0000 + 2.94000000000000E+0001 2.42095354199409E+0000 + 2.93500000000000E+0001 2.61485190689564E+0000 + 2.93000000000000E+0001 2.48409117758274E+0000 + 2.92500000000000E+0001 2.38842275738716E+0000 + 2.92000000000000E+0001 2.46667067706585E+0000 + 2.91500000000000E+0001 2.31553335487843E+0000 + 2.91000000000000E+0001 2.23468993604183E+0000 + 2.90500000000000E+0001 2.11366702616215E+0000 + 2.90000000000000E+0001 2.19971781969070E+0000 + 2.89500000000000E+0001 2.03268237411976E+0000 + 2.89000000000000E+0001 2.31623052060604E+0000 + 2.88500000000000E+0001 2.21793137490749E+0000 + 2.88000000000000E+0001 2.00129433721304E+0000 + 2.87500000000000E+0001 2.27588658034801E+0000 + 2.87000000000000E+0001 2.00062771886587E+0000 + 2.86500000000000E+0001 2.26478563249111E+0000 + 2.86000000000000E+0001 2.03782550990582E+0000 + 2.85500000000000E+0001 2.24894687533379E+0000 + 2.85000000000000E+0001 2.50425918400288E+0000 + 2.84500000000000E+0001 2.31301398575306E+0000 + 2.84000000000000E+0001 2.03122186660767E+0000 + 2.83500000000000E+0001 2.08848619461060E+0000 + 2.83000000000000E+0001 1.99886241555214E+0000 + 2.82500000000000E+0001 2.29901018738747E+0000 + 2.82000000000000E+0001 2.28629161417484E+0000 + 2.81500000000000E+0001 1.96198201924562E+0000 + 2.81000000000000E+0001 2.29244166612625E+0000 + 2.80500000000000E+0001 2.18866746127605E+0000 + 2.80000000000000E+0001 1.96552415192127E+0000 + 2.79500000000000E+0001 2.18150199949741E+0000 + 2.79000000000000E+0001 1.91206286102533E+0000 + 2.78500000000000E+0001 2.07614804804325E+0000 + 2.78000000000000E+0001 2.10113921761513E+0000 + 2.77500000000000E+0001 2.34490393102169E+0000 + 2.77000000000000E+0001 2.22701602429152E+0000 + 2.76500000000000E+0001 2.46421316266060E+0000 + 2.76000000000000E+0001 2.23941756784916E+0000 + 2.75500000000000E+0001 2.25652363896370E+0000 + 2.75000000000000E+0001 2.34524212032557E+0000 + 2.74500000000000E+0001 2.16961623728275E+0000 + 2.74000000000000E+0001 2.13089036941528E+0000 + 2.73500000000000E+0001 2.19177383184433E+0000 + 2.73000000000000E+0001 2.22254675626755E+0000 + 2.72500000000000E+0001 2.30147020518780E+0000 + 2.72000000000000E+0001 2.53185197710991E+0000 + 2.71500000000000E+0001 2.25859765708446E+0000 + 2.71000000000000E+0001 2.37336687743664E+0000 + 2.70500000000000E+0001 2.56138157844543E+0000 + 2.70000000000000E+0001 2.72514331340790E+0000 + 2.69500000000000E+0001 2.09287858009338E+0000 + 2.69000000000000E+0001 2.16720068454742E+0000 + 2.68500000000000E+0001 2.54166665673256E+0000 + 2.68000000000000E+0001 2.34556777775288E+0000 + 2.67500000000000E+0001 2.36257047951221E+0000 + 2.67000000000000E+0001 2.23986265063286E+0000 + 2.66500000000000E+0001 2.46151624619961E+0000 + 2.66000000000000E+0001 2.55828358232975E+0000 + 2.65500000000000E+0001 2.41815313696861E+0000 + 2.65000000000000E+0001 2.25711219012737E+0000 + 2.64500000000000E+0001 2.54107356071472E+0000 + 2.64000000000000E+0001 2.24019829928875E+0000 + 2.63500000000000E+0001 2.26626796275377E+0000 + 2.63000000000000E+0001 2.20453549921513E+0000 + 2.62500000000000E+0001 2.28583087027073E+0000 + 2.62000000000000E+0001 2.24653556942940E+0000 + 2.61500000000000E+0001 2.22120447456837E+0000 + 2.61000000000000E+0001 2.26457285881042E+0000 + 2.60500000000000E+0001 2.55217237770557E+0000 + 2.60000000000000E+0001 2.45077836513519E+0000 + 2.59500000000000E+0001 2.86909189820290E+0000 + 2.59000000000000E+0001 2.38155378401279E+0000 + 2.58500000000000E+0001 2.76861149072647E+0000 + 2.58000000000000E+0001 2.63215509057045E+0000 + 2.57500000000000E+0001 2.43684473633766E+0000 + 2.57000000000000E+0001 2.51955953240395E+0000 + 2.56500000000000E+0001 2.36961326003075E+0000 + 2.56000000000000E+0001 2.29727693647146E+0000 + 2.55500000000000E+0001 2.34702840447426E+0000 + 2.55000000000000E+0001 2.17426633834839E+0000 + 2.54500000000000E+0001 2.48060998320580E+0000 + 2.54000000000000E+0001 2.47345998883247E+0000 + 2.53500000000000E+0001 2.44213882088661E+0000 + 2.53000000000000E+0001 2.53516881167889E+0000 + 2.52500000000000E+0001 2.90190277993679E+0000 + 2.52000000000000E+0001 2.69942744076252E+0000 + 2.51500000000000E+0001 2.12882409989834E+0000 + 2.51000000000000E+0001 2.55086663365364E+0000 + 2.50500000000000E+0001 2.35868926346302E+0000 + 2.50000000000000E+0001 2.84593725204468E+0000 + 2.49500000000000E+0001 2.64245490729809E+0000 + 2.49000000000000E+0001 2.48469877243042E+0000 + 2.48500000000000E+0001 2.62478529661894E+0000 + 2.48000000000000E+0001 2.41402375698090E+0000 + 2.47500000000000E+0001 2.47363732010126E+0000 + 2.47000000000000E+0001 2.55981604754925E+0000 + 2.46500000000000E+0001 2.41552107036114E+0000 + 2.46000000000000E+0001 2.52233125269413E+0000 + 2.45500000000000E+0001 2.39985303580761E+0000 + 2.45000000000000E+0001 2.35249409079552E+0000 + 2.44500000000000E+0001 2.57583066821098E+0000 + 2.44000000000000E+0001 2.24587540328503E+0000 + 2.43500000000000E+0001 2.54156544804573E+0000 + 2.43000000000000E+0001 2.32583221793175E+0000 + 2.42500000000000E+0001 2.75111046433449E+0000 + 2.42000000000000E+0001 2.52912409603596E+0000 + 2.41500000000000E+0001 2.43810041248798E+0000 + 2.41000000000000E+0001 2.53062830865383E+0000 + 2.40500000000000E+0001 2.77500836551189E+0000 + 2.40000000000000E+0001 2.47545982897282E+0000 + 2.39500000000000E+0001 2.24071332812309E+0000 + 2.39000000000000E+0001 2.61735351383686E+0000 + 2.38500000000000E+0001 2.48929701745510E+0000 + 2.38000000000000E+0001 2.50403045117855E+0000 + 2.37500000000000E+0001 2.44105602800846E+0000 + 2.37000000000000E+0001 2.44047328829765E+0000 + 2.36500000000000E+0001 2.09582099318504E+0000 + 2.36000000000000E+0001 2.38583125174046E+0000 + 2.35500000000000E+0001 2.63027331233025E+0000 + 2.35000000000000E+0001 2.45813499391079E+0000 + 2.34500000000000E+0001 2.02900424599648E+0000 + 2.34000000000000E+0001 2.67948944866657E+0000 + 2.33500000000000E+0001 2.38287705183029E+0000 + 2.33000000000000E+0001 2.23036034405231E+0000 + 2.32500000000000E+0001 2.52472445368767E+0000 + 2.32000000000000E+0001 2.11096523702145E+0000 + 2.31500000000000E+0001 2.17534963786602E+0000 + 2.31000000000000E+0001 2.08291381597519E+0000 + 2.30500000000000E+0001 2.09132062271237E+0000 + 2.30000000000000E+0001 2.04281430691481E+0000 + 2.29500000000000E+0001 1.98627035319805E+0000 + 2.29000000000000E+0001 2.09247663617134E+0000 + 2.28500000000000E+0001 2.34390191733837E+0000 + 2.28000000000000E+0001 1.88704006373882E+0000 + 2.27500000000000E+0001 2.37622688710690E+0000 + 2.27000000000000E+0001 2.06924049556255E+0000 + 2.26500000000000E+0001 2.19024147093296E+0000 + 2.26000000000000E+0001 2.27491390705109E+0000 + 2.25500000000000E+0001 2.45075997710228E+0000 + 2.25000000000000E+0001 2.00793593376875E+0000 + 2.24500000000000E+0001 2.17365461587906E+0000 + 2.24000000000000E+0001 1.98960783332586E+0000 + 2.23500000000000E+0001 2.18348034471273E+0000 + 2.23000000000000E+0001 2.03787610679865E+0000 + 2.22500000000000E+0001 2.12016777694225E+0000 + 2.22000000000000E+0001 2.02133623510599E+0000 + 2.21500000000000E+0001 2.48425470292568E+0000 + 2.21000000000000E+0001 2.47164371609688E+0000 + 2.20500000000000E+0001 2.15113289654255E+0000 + 2.20000000000000E+0001 2.10773463547230E+0000 + 2.19500000000000E+0001 2.07565022259951E+0000 + 2.19000000000000E+0001 1.97929252684116E+0000 + 2.18500000000000E+0001 1.90569129586220E+0000 + 2.18000000000000E+0001 1.86469408869743E+0000 + 2.17500000000000E+0001 2.19503960013390E+0000 + 2.17000000000000E+0001 2.15187226235867E+0000 + 2.16500000000000E+0001 2.11963707208633E+0000 + 2.16000000000000E+0001 1.94309159368277E+0000 + 2.15500000000000E+0001 2.01546561717987E+0000 + 2.15000000000000E+0001 2.01792152225971E+0000 + 2.14500000000000E+0001 2.34445370733738E+0000 + 2.14000000000000E+0001 2.18843615055084E+0000 + 2.13500000000000E+0001 2.18061738461256E+0000 + 2.13000000000000E+0001 2.28401806950569E+0000 + 2.12500000000000E+0001 2.31930118799210E+0000 + 2.12000000000000E+0001 1.87170914560556E+0000 + 2.11500000000000E+0001 1.98427464067936E+0000 + 2.11000000000000E+0001 1.89902545511723E+0000 + 2.10500000000000E+0001 1.89654272794724E+0000 + 2.10000000000000E+0001 1.77214059233665E+0000 + 2.09500000000000E+0001 1.86385652422905E+0000 + 2.09000000000000E+0001 2.00430124998093E+0000 + 2.08500000000000E+0001 1.69491715729237E+0000 + 2.08000000000000E+0001 2.06621655821800E+0000 + 2.07500000000000E+0001 2.05972430109978E+0000 + 2.07000000000000E+0001 1.92402702569962E+0000 + 2.06500000000000E+0001 2.20870897173882E+0000 + 2.06000000000000E+0001 2.20790895819664E+0000 + 2.05500000000000E+0001 2.10800357162952E+0000 + 2.05000000000000E+0001 2.12702704966068E+0000 + 2.04500000000000E+0001 1.92730323225260E+0000 + 2.04000000000000E+0001 2.01892870664597E+0000 + 2.03500000000000E+0001 1.97151574492455E+0000 + 2.03000000000000E+0001 2.32675857841969E+0000 + 2.02500000000000E+0001 2.39786240458488E+0000 + 2.02000000000000E+0001 2.10565750300884E+0000 + 2.01500000000000E+0001 1.68070156872272E+0000 + 2.01000000000000E+0001 2.49533046782017E+0000 + 2.00500000000000E+0001 1.88812613487244E+0000 + 2.00000000000000E+0001 1.79914479702711E+0000 + 1.99500000000000E+0001 2.32763688266277E+0000 + 1.99000000000000E+0001 2.29481129348278E+0000 + 1.98500000000000E+0001 2.19164170324802E+0000 + 1.98000000000000E+0001 2.39084675908089E+0000 + 1.97500000000000E+0001 2.19968607276678E+0000 + 1.97000000000000E+0001 1.95448726415634E+0000 + 1.96500000000000E+0001 2.15363737940788E+0000 + 1.96000000000000E+0001 2.25603961944580E+0000 + 1.95500000000000E+0001 2.04774788767099E+0000 + 1.95000000000000E+0001 2.36220329999924E+0000 + 1.94500000000000E+0001 2.30497604608536E+0000 + 1.94000000000000E+0001 2.08670121431351E+0000 + 1.93500000000000E+0001 1.82175806164742E+0000 + 1.93000000000000E+0001 2.00386460870504E+0000 + 1.92500000000000E+0001 2.01133388280869E+0000 + 1.92000000000000E+0001 2.58744840323925E+0000 + 1.91500000000000E+0001 2.43398520350456E+0000 + 1.91000000000000E+0001 2.47376728057861E+0000 + 1.90500000000000E+0001 2.21221290528774E+0000 + 1.90000000000000E+0001 2.47491319477558E+0000 + 1.89500000000000E+0001 2.47274625301361E+0000 + 1.89000000000000E+0001 2.24026998877525E+0000 + 1.88500000000000E+0001 2.80566252768040E+0000 + 1.88000000000000E+0001 2.53133086860180E+0000 + 1.87500000000000E+0001 2.55895958840847E+0000 + 1.87000000000000E+0001 2.38789537549019E+0000 + 1.86500000000000E+0001 2.64736120402813E+0000 + 1.86000000000000E+0001 2.54980678856373E+0000 + 1.85500000000000E+0001 2.37616756558418E+0000 + 1.85000000000000E+0001 2.40566270053387E+0000 + 1.84500000000000E+0001 2.21038177609444E+0000 + 1.84000000000000E+0001 2.52498985826969E+0000 + 1.83500000000000E+0001 2.27360098063946E+0000 + 1.83000000000000E+0001 2.28705212473869E+0000 + 1.82500000000000E+0001 2.52716626226902E+0000 + 1.82000000000000E+0001 2.59533245861530E+0000 + 1.81500000000000E+0001 2.29835583269596E+0000 + 1.81000000000000E+0001 2.43601945042610E+0000 + 1.80500000000000E+0001 2.14748165756464E+0000 + 1.80000000000000E+0001 2.31907659769058E+0000 + 1.79500000000000E+0001 2.44895276427269E+0000 + 1.79000000000000E+0001 2.10742010176182E+0000 + 1.78500000000000E+0001 2.24483180046082E+0000 + 1.78000000000000E+0001 2.24882759153843E+0000 + 1.77500000000000E+0001 2.32644864916801E+0000 + 1.77000000000000E+0001 2.63245315849781E+0000 + 1.76500000000000E+0001 2.35044395923614E+0000 + 1.76000000000000E+0001 2.24834443628788E+0000 + 1.75500000000000E+0001 2.49956712126732E+0000 + 1.75000000000000E+0001 2.43707047402859E+0000 + 1.74500000000000E+0001 2.51352399587631E+0000 + 1.74000000000000E+0001 2.55467993766069E+0000 + 1.73500000000000E+0001 2.70757269859314E+0000 + 1.73000000000000E+0001 2.53539465367794E+0000 + 1.72500000000000E+0001 2.44263143837452E+0000 + 1.72000000000000E+0001 2.64324827492237E+0000 + 1.71500000000000E+0001 2.76270353794098E+0000 + 1.71000000000000E+0001 2.91695328056812E+0000 + 1.70500000000000E+0001 2.35109901428223E+0000 + 1.70000000000000E+0001 2.79738911986351E+0000 + 1.69500000000000E+0001 2.83290691673756E+0000 + 1.69000000000000E+0001 2.78494761884212E+0000 + 1.68500000000000E+0001 3.03795132040977E+0000 + 1.68000000000000E+0001 2.65345597267151E+0000 + 1.67500000000000E+0001 2.64924903213978E+0000 + 1.67000000000000E+0001 2.71644783020020E+0000 + 1.66500000000000E+0001 2.83419032394886E+0000 + 1.66000000000000E+0001 3.12185657024384E+0000 + 1.65500000000000E+0001 2.91285540163517E+0000 + 1.65000000000000E+0001 2.64981909096241E+0000 + 1.64500000000000E+0001 2.60629951953888E+0000 + 1.64000000000000E+0001 2.47284618020058E+0000 + 1.63500000000000E+0001 2.42051824927330E+0000 + 1.63000000000000E+0001 2.33476369082928E+0000 + 1.62500000000000E+0001 2.73980562388897E+0000 + 1.62000000000000E+0001 2.63484987616539E+0000 + 1.61500000000000E+0001 2.97465680539608E+0000 + 1.61000000000000E+0001 2.75235819816589E+0000 + 1.60500000000000E+0001 2.41460847854614E+0000 + 1.60000000000000E+0001 2.51531171798706E+0000 + 1.59500000000000E+0001 2.59101337939501E+0000 + 1.59000000000000E+0001 2.35009665787220E+0000 + 1.58500000000000E+0001 2.47902816534042E+0000 + 1.58000000000000E+0001 2.66531035304070E+0000 + 1.57500000000000E+0001 2.48993749916554E+0000 + 1.57000000000000E+0001 2.67757834494114E+0000 + 1.56500000000000E+0001 2.51279389858246E+0000 + 1.56000000000000E+0001 2.31548173725605E+0000 + 1.55500000000000E+0001 2.60153006017208E+0000 + 1.55000000000000E+0001 2.75542141497135E+0000 + 1.54500000000000E+0001 2.29214936494827E+0000 + 1.54000000000000E+0001 2.43932954967022E+0000 + 1.53500000000000E+0001 2.45484341681004E+0000 + 1.53000000000000E+0001 2.63849362730980E+0000 + 1.52500000000000E+0001 2.54022303223610E+0000 + 1.52000000000000E+0001 2.45179672539234E+0000 + 1.51500000000000E+0001 2.01403685659170E+0000 + 1.51000000000000E+0001 2.60905268788338E+0000 + 1.50500000000000E+0001 2.19031015038490E+0000 + 1.50000000000000E+0001 2.98550345003605E+0000 + 1.49500000000000E+0001 2.70096200704575E+0000 + 1.49000000000000E+0001 2.03840570151806E+0000 + 1.48500000000000E+0001 2.17656277120113E+0000 + 1.48000000000000E+0001 2.40308445692062E+0000 + 1.47500000000000E+0001 2.42718173563480E+0000 + 1.47000000000000E+0001 2.42746214568615E+0000 + 1.46500000000000E+0001 2.27287802100182E+0000 + 1.46000000000000E+0001 2.49770276248455E+0000 + 1.45500000000000E+0001 2.42052713036537E+0000 + 1.45000000000000E+0001 2.53125715255737E+0000 + 1.44500000000000E+0001 2.47437547147274E+0000 + 1.44000000000000E+0001 2.53748616576195E+0000 + 1.43500000000000E+0001 2.33248797059059E+0000 + 1.43000000000000E+0001 2.61951586604118E+0000 + 1.42500000000000E+0001 2.36499394476414E+0000 + 1.42000000000000E+0001 2.32526823133230E+0000 + 1.41500000000000E+0001 2.63371892273426E+0000 + 1.41000000000000E+0001 2.37660561501980E+0000 + 1.40500000000000E+0001 2.30581597983837E+0000 + 1.40000000000000E+0001 2.30316344648600E+0000 + 1.39500000000000E+0001 2.56558185815811E+0000 + 1.39000000000000E+0001 2.70112639665604E+0000 + 1.38500000000000E+0001 2.66673615574837E+0000 + 1.38000000000000E+0001 2.36774699389935E+0000 + 1.37500000000000E+0001 2.63688772916794E+0000 + 1.37000000000000E+0001 1.82540755718946E+0000 + 1.36500000000000E+0001 2.40832084417343E+0000 + 1.36000000000000E+0001 2.74016170203686E+0000 + 1.35500000000000E+0001 2.38987538218498E+0000 + 1.35000000000000E+0001 2.29176509380341E+0000 + 1.34500000000000E+0001 2.56134426593781E+0000 + 1.34000000000000E+0001 2.45772051811218E+0000 + 1.33500000000000E+0001 2.33239392936230E+0000 + 1.33000000000000E+0001 2.40769097208977E+0000 + 1.32500000000000E+0001 2.55945791304111E+0000 + 1.32000000000000E+0001 2.63314147293568E+0000 + 1.31500000000000E+0001 2.24180762469769E+0000 + 1.31000000000000E+0001 2.37719419598579E+0000 + 1.30500000000000E+0001 2.76289074122906E+0000 + 1.30000000000000E+0001 2.82382993400097E+0000 + 1.29500000000000E+0001 2.82616514712572E+0000 + 1.29000000000000E+0001 2.74489927291870E+0000 + 1.28500000000000E+0001 2.64374303817749E+0000 + 1.28000000000000E+0001 2.64048480987549E+0000 + 1.27500000000000E+0001 2.62220373749733E+0000 + 1.27000000000000E+0001 2.83205558359623E+0000 + 1.26500000000000E+0001 2.80900929868221E+0000 + 1.26000000000000E+0001 2.67911998927593E+0000 + 1.25500000000000E+0001 2.75243623554707E+0000 + 1.25000000000000E+0001 2.51096631586552E+0000 + 1.24500000000000E+0001 2.52666664868593E+0000 + 1.24000000000000E+0001 2.71401119232178E+0000 + 1.23500000000000E+0001 2.62771478295326E+0000 + 1.23000000000000E+0001 2.70190191268921E+0000 + 1.22500000000000E+0001 2.59563088417053E+0000 + 1.22000000000000E+0001 2.92559149861336E+0000 + 1.21500000000000E+0001 2.75305335223675E+0000 + 1.21000000000000E+0001 2.58321470022202E+0000 + 1.20500000000000E+0001 2.41796560585499E+0000 + 1.20000000000000E+0001 2.61970224976540E+0000 + 1.19500000000000E+0001 2.33200012147427E+0000 + 1.19000000000000E+0001 2.52338376641274E+0000 + 1.18500000000000E+0001 2.49154888093472E+0000 + 1.18000000000000E+0001 2.54949519038200E+0000 + 1.17500000000000E+0001 2.24460621178150E+0000 + 1.17000000000000E+0001 2.48903748393059E+0000 + 1.16500000000000E+0001 2.96004375815392E+0000 + 1.16000000000000E+0001 2.93720643222332E+0000 + 1.15500000000000E+0001 3.04187101125717E+0000 + 1.15000000000000E+0001 3.33649054169655E+0000 + 1.14500000000000E+0001 3.20091840624809E+0000 + 1.14000000000000E+0001 2.83945576846600E+0000 + 1.13500000000000E+0001 2.81897366791964E+0000 + 1.13000000000000E+0001 3.31357844173908E+0000 + 1.12500000000000E+0001 3.15874657034874E+0000 + 1.12000000000000E+0001 3.06432573497295E+0000 + 1.11500000000000E+0001 3.54755926132202E+0000 + 1.11000000000000E+0001 3.37225839495659E+0000 + 1.10500000000000E+0001 3.30186282098293E+0000 + 1.10000000000000E+0001 2.83816558122635E+0000 + 1.09500000000000E+0001 3.64120632410049E+0000 + 1.09000000000000E+0001 3.74155727028847E+0000 + 1.08500000000000E+0001 4.00782579183578E+0000 + 1.08000000000000E+0001 3.58431529998779E+0000 + 1.07500000000000E+0001 3.85193637013435E+0000 + 1.07000000000000E+0001 4.56357443332672E+0000 + 1.06500000000000E+0001 3.84197744727135E+0000 + 1.06000000000000E+0001 4.34986221790314E+0000 + 1.05500000000000E+0001 3.80504980683327E+0000 + 1.05000000000000E+0001 3.89924320578575E+0000 + 1.04500000000000E+0001 3.85847835242748E+0000 + 1.04000000000000E+0001 4.25748714804649E+0000 + 1.03500000000000E+0001 3.94694745540619E+0000 + 1.03000000000000E+0001 4.20329451560974E+0000 + 1.02500000000000E+0001 4.40945613384247E+0000 + 1.02000000000000E+0001 4.50685155391693E+0000 + 1.01500000000000E+0001 4.33254870772362E+0000 + 1.01000000000000E+0001 3.98051294684410E+0000 + 1.00500000000000E+0001 3.82193985581398E+0000 + 1.00000000000000E+0001 3.83218666911125E+0000 + 9.94999999999999E+0000 4.17545169591904E+0000 + 9.90000000000001E+0000 3.74783682823181E+0000 + 9.84999999999999E+0000 3.60758195817471E+0000 + 9.80000000000001E+0000 3.39395475387573E+0000 + 9.75000000000000E+0000 3.90032255649567E+0000 + 9.69999999999999E+0000 4.02457943558693E+0000 + 9.65000000000001E+0000 4.16763880848885E+0000 + 9.59999999999999E+0000 3.65371760725975E+0000 + 9.55000000000001E+0000 3.80358621478081E+0000 + 9.50000000000000E+0000 3.97257086634636E+0000 + 9.44999999999999E+0000 3.19584067165852E+0000 + 9.40000000000001E+0000 3.31261475384235E+0000 + 9.34999999999999E+0000 3.36882580816746E+0000 + 9.30000000000001E+0000 3.74551528692246E+0000 + 9.25000000000000E+0000 3.63079914450645E+0000 + 9.19999999999999E+0000 3.58100965619087E+0000 + 9.15000000000001E+0000 3.44578310847282E+0000 + 9.09999999999999E+0000 3.85107558965683E+0000 + 9.05000000000001E+0000 4.08273115754127E+0000 + 9.00000000000000E+0000 3.63281662762165E+0000 + 8.94999999999999E+0000 3.48243121802807E+0000 + 8.90000000000001E+0000 3.59037916362286E+0000 + 8.84999999999999E+0000 3.71385279297829E+0000 + 8.80000000000001E+0000 3.70320822298527E+0000 + 8.75000000000000E+0000 3.49927508831024E+0000 + 8.69999999999999E+0000 3.28186550736427E+0000 + 8.65000000000001E+0000 3.10042947530746E+0000 + 8.59999999999999E+0000 3.15355111658573E+0000 + 8.55000000000001E+0000 3.83539909124374E+0000 + 8.50000000000000E+0000 3.42073538899422E+0000 + 8.44999999999999E+0000 3.73137457668781E+0000 + 8.40000000000001E+0000 3.47904960811138E+0000 + 8.34999999999999E+0000 3.33982698619366E+0000 + 8.30000000000001E+0000 2.87810678780079E+0000 + 8.25000000000000E+0000 3.28410601615906E+0000 + 8.19999999999999E+0000 3.42260494828224E+0000 + 8.15000000000001E+0000 3.07841394841671E+0000 + 8.09999999999999E+0000 3.70438945293426E+0000 + 8.05000000000001E+0000 3.57732963562012E+0000 + 8.00000000000000E+0000 3.78670901060104E+0000 + 7.94999999999999E+0000 3.60406672954559E+0000 + 7.90000000000001E+0000 3.58334042131901E+0000 + 7.84999999999999E+0000 4.02530020475388E+0000 + 7.80000000000001E+0000 3.50014328956604E+0000 + 7.75000000000000E+0000 3.87117958068848E+0000 + 7.69999999999999E+0000 4.29341921210289E+0000 + 7.65000000000001E+0000 3.71097053587437E+0000 + 7.59999999999999E+0000 3.60201050341129E+0000 + 7.55000000000001E+0000 4.20342051982880E+0000 + 7.50000000000000E+0000 4.42286667227745E+0000 + 7.44999999999999E+0000 4.39044255018234E+0000 + 7.40000000000001E+0000 4.39503514766693E+0000 + 7.34999999999999E+0000 4.23290215432644E+0000 + 7.30000000000001E+0000 4.11205059289932E+0000 + 7.25000000000000E+0000 4.71638226509094E+0000 + 7.19999999999999E+0000 4.53992044925690E+0000 + 7.15000000000001E+0000 4.09427936375141E+0000 + 7.09999999999999E+0000 5.08184850215912E+0000 + 7.05000000000001E+0000 4.79073083400726E+0000 + 7.00000000000000E+0000 4.86477202177048E+0000 + 6.94999999999999E+0000 4.64246186614037E+0000 + 6.90000000000001E+0000 4.99705395102501E+0000 + 6.84999999999999E+0000 5.23644945025444E+0000 + 6.80000000000001E+0000 5.37696582078934E+0000 + 6.75000000000000E+0000 5.00073263049126E+0000 + 6.69999999999999E+0000 4.64337584376335E+0000 + 6.65000000000001E+0000 4.82815217971802E+0000 + 6.59999999999999E+0000 4.82924640178680E+0000 + 6.55000000000001E+0000 4.95352157950401E+0000 + 6.50000000000000E+0000 5.11650347709656E+0000 + 6.44999999999999E+0000 5.46782955527306E+0000 + 6.40000000000001E+0000 5.26159164309502E+0000 + 6.34999999999999E+0000 5.99061840772629E+0000 + 6.30000000000001E+0000 5.67513877153397E+0000 + 6.25000000000000E+0000 5.22733980417252E+0000 + 6.19999999999999E+0000 5.00843951106071E+0000 + 6.15000000000001E+0000 6.13210615515709E+0000 + 6.09999999999999E+0000 5.55766323208809E+0000 + 6.05000000000001E+0000 5.33583685755730E+0000 + 6.00000000000000E+0000 6.02039259672165E+0000 + 5.94999999999999E+0000 6.47160843014717E+0000 + 5.90000000000001E+0000 6.62995982170105E+0000 + 5.84999999999999E+0000 6.71276992559433E+0000 + 5.80000000000001E+0000 5.49151283502579E+0000 + 5.75000000000000E+0000 5.76416361331940E+0000 + 5.69999999999999E+0000 5.76682651042938E+0000 + 5.65000000000001E+0000 5.44724714756012E+0000 + 5.59999999999999E+0000 4.88973209261894E+0000 + 5.55000000000001E+0000 5.09791523218155E+0000 + 5.50000000000000E+0000 5.98750138282776E+0000 + 5.44999999999999E+0000 5.04239687323570E+0000 + 5.40000000000001E+0000 5.13215172290802E+0000 + 5.34999999999999E+0000 5.47296410799026E+0000 + 5.30000000000001E+0000 5.41573721170425E+0000 + 5.25000000000000E+0000 5.27262720465660E+0000 + 5.19999999999999E+0000 5.75615382194519E+0000 + 5.15000000000001E+0000 5.50354936718941E+0000 + 5.09999999999999E+0000 4.80682826042175E+0000 + 5.05000000000001E+0000 5.16832593083382E+0000 + 5.00000000000000E+0000 5.72328898310661E+0000 + 4.94999999999999E+0000 5.29788908362389E+0000 + 4.90000000000001E+0000 5.18555858731270E+0000 + 4.84999999999999E+0000 5.23790156841278E+0000 + 4.80000000000001E+0000 5.49602347612381E+0000 + 4.75000000000000E+0000 5.29770341515541E+0000 + 4.69999999999999E+0000 5.42759388685226E+0000 + 4.65000000000001E+0000 4.96667200326920E+0000 + 4.59999999999999E+0000 5.05789387226105E+0000 + 4.55000000000001E+0000 5.33379009366035E+0000 + 4.50000000000000E+0000 4.34182864427567E+0000 + 4.44999999999999E+0000 4.36636087298393E+0000 + 4.40000000000001E+0000 3.93102777004242E+0000 + 4.34999999999999E+0000 3.74741320312023E+0000 + 4.30000000000001E+0000 4.45805349946022E+0000 + 4.25000000000000E+0000 4.17368176579475E+0000 + 4.19999999999999E+0000 4.08031046390533E+0000 + 4.15000000000001E+0000 4.05791220068932E+0000 + 4.09999999999999E+0000 3.67551127076149E+0000 + 4.05000000000001E+0000 4.12203043699265E+0000 + 4.00000000000000E+0000 3.82474830746651E+0000 + 3.94999999999999E+0000 3.76931746304035E+0000 + 3.90000000000001E+0000 3.74174764752388E+0000 + 3.84999999999999E+0000 3.50499260425568E+0000 + 3.80000000000001E+0000 3.51531828939915E+0000 + 3.75000000000000E+0000 2.85990849137306E+0000 + 3.69999999999999E+0000 3.13564038276672E+0000 + 3.65000000000001E+0000 3.17488220334053E+0000 + 3.59999999999999E+0000 2.89564336836338E+0000 + 3.55000000000001E+0000 2.56504005193710E+0000 + 3.50000000000000E+0000 2.86874312162399E+0000 + 3.44999999999999E+0000 2.65254376828670E+0000 + 3.40000000000001E+0000 2.89668110013008E+0000 + 3.34999999999999E+0000 2.41576977074146E+0000 + 3.30000000000001E+0000 2.72968608140945E+0000 + 3.25000000000000E+0000 2.52501958608627E+0000 + 3.19999999999999E+0000 2.43492577224970E+0000 + 3.15000000000001E+0000 2.37039697170258E+0000 + 3.09999999999999E+0000 2.04945958405733E+0000 + 3.05000000000001E+0000 1.84388464689255E+0000 + 3.00000000000000E+0000 1.99304676055908E+0000 + 2.94999999999999E+0000 1.75429178774357E+0000 + 2.90000000000001E+0000 1.59739506244659E+0000 + 2.84999999999999E+0000 1.63242466002703E+0000 + 2.80000000000001E+0000 1.72501459717751E+0000 + 2.75000000000000E+0000 1.57808955013752E+0000 + 2.69999999999999E+0000 1.79561227560043E+0000 + 2.65000000000001E+0000 1.54307986795902E+0000 + 2.59999999999999E+0000 1.37927049398422E+0000 + 2.55000000000001E+0000 1.47534389793873E+0000 + 2.50000000000000E+0000 1.18981967493892E+0000 + 2.44999999999999E+0000 1.37250206619501E+0000 + 2.40000000000001E+0000 9.89141654223204E-0001 + 2.34999999999999E+0000 1.45569847524166E+0000 + 2.30000000000001E+0000 1.35258138924837E+0000 + 2.25000000000000E+0000 9.16999150067568E-0001 + 2.19999999999999E+0000 8.05946823209524E-0001 + 2.15000000000001E+0000 9.22527406364679E-0001 + 2.09999999999999E+0000 9.94165139272809E-0001 + 2.05000000000001E+0000 1.14864057302475E+0000 + 2.00000000000000E+0000 8.57669375836849E-0001 + 1.94999999999999E+0000 9.57230098545551E-0001 + 1.90000000000001E+0000 1.07336241379380E+0000 + 1.84999999999999E+0000 1.01574474200606E+0000 + 1.80000000000001E+0000 9.22324649989605E-0001 + 1.75000000000000E+0000 9.61270552128553E-0001 + 1.69999999999999E+0000 8.79671327769756E-0001 + 1.65000000000001E+0000 9.82142886146903E-0001 + 1.59999999999999E+0000 1.02311153337359E+0000 + 1.55000000000001E+0000 8.41655276715756E-0001 + 1.50000000000000E+0000 9.73863039165735E-0001 + 1.44999999999999E+0000 6.88787344843149E-0001 + 1.40000000000001E+0000 8.81112145259976E-0001 + 1.34999999999999E+0000 7.30601802468300E-0001 + 1.30000000000001E+0000 6.91446810960770E-0001 + 1.25000000000000E+0000 6.64275243878365E-0001 + 1.19999999999999E+0000 7.21474505960941E-0001 + 1.15000000000001E+0000 6.28948003053665E-0001 + 1.09999999999999E+0000 7.08247113972902E-0001 + 1.05000000000001E+0000 7.24192462861538E-0001 + 1.00000000000000E+0000 6.18233390152454E-0001 + 9.49999999999989E-0001 5.34098030999303E-0001 + 9.00000000000006E-0001 7.23080754280090E-0001 + 8.49999999999994E-0001 6.58928060904145E-0001 + 8.00000000000011E-0001 6.27463474869728E-0001 + 7.50000000000000E-0001 5.59317560866475E-0001 + 6.99999999999989E-0001 6.01638249121606E-0001 + 6.50000000000006E-0001 6.49296055547893E-0001 + 5.99999999999994E-0001 4.80233382433653E-0001 + 5.50000000000011E-0001 5.11610979214311E-0001 + 5.00000000000000E-0001 6.08631603419781E-0001 + 4.49999999999989E-0001 6.94907944649458E-0001 + 4.00000000000006E-0001 6.18321130052209E-0001 + 3.49999999999994E-0001 5.04379542544484E-0001 + 3.00000000000011E-0001 5.07690574973822E-0001 + 2.50000000000000E-0001 5.35792050883174E-0001 + 1.99999999999989E-0001 5.90156726539135E-0001 + 1.50000000000006E-0001 5.62946433201432E-0001 + 9.99999999999943E-0002 5.36238485481590E-0001 + 5.00000000000114E-0002 7.14867224916816E-0001 + 0.00000000000000E+0000 7.90427211672068E-0001 +-5.00000000000114E-0002 4.88524165004492E-0001 +-9.99999999999943E-0002 8.36867759004235E-0001 +-1.50000000000006E-0001 5.61912266537547E-0001 +-1.99999999999989E-0001 5.30200763605535E-0001 +-2.50000000000000E-0001 4.38946731388569E-0001 +-3.00000000000011E-0001 5.66731855273247E-0001 +-3.49999999999994E-0001 4.38968268223107E-0001 +-4.00000000000006E-0001 5.04734127316624E-0001 +-4.49999999999989E-0001 6.03581436909735E-0001 +-5.00000000000000E-0001 7.67261642962694E-0001 +-5.50000000000011E-0001 6.53043016791344E-0001 +-5.99999999999994E-0001 5.16014045104384E-0001 +-6.50000000000006E-0001 7.37953156232834E-0001 +-6.99999999999989E-0001 5.75281007215381E-0001 +-7.50000000000000E-0001 4.68262460082769E-0001 +-8.00000000000011E-0001 6.42635536147282E-0001 +-8.49999999999994E-0001 4.71231421921402E-0001 +-9.00000000000006E-0001 5.43655759654939E-0001 +-9.49999999999989E-0001 6.44272608682513E-0001 +-1.00000000000000E+0000 5.60792919248343E-0001 +-1.05000000000001E+0000 5.16063611954451E-0001 +-1.09999999999999E+0000 6.96923234965652E-0001 +-1.15000000000001E+0000 4.87638084217906E-0001 +-1.19999999999999E+0000 6.05175330303609E-0001 +-1.25000000000000E+0000 4.96927877888083E-0001 +-1.30000000000001E+0000 6.26350548118353E-0001 +-1.34999999999999E+0000 5.99934834986925E-0001 +-1.40000000000001E+0000 4.67047068756074E-0001 +-1.44999999999999E+0000 4.44289839826524E-0001 +-1.50000000000000E+0000 6.85035027563572E-0001 +-1.55000000000001E+0000 5.30829574912786E-0001 +-1.59999999999999E+0000 4.25846525467932E-0001 +-1.65000000000001E+0000 5.83545902743936E-0001 +-1.69999999999999E+0000 3.44561672769487E-0001 +-1.75000000000000E+0000 4.46135714650154E-0001 +-1.80000000000001E+0000 5.33127903938293E-0001 +-1.84999999999999E+0000 5.63554450869560E-0001 +-1.90000000000001E+0000 5.46945231501013E-0001 +-1.94999999999999E+0000 4.93785882368684E-0001 +-2.00000000000000E+0000 5.23899157531559E-0001 +-2.05000000000001E+0000 5.14118126593530E-0001 +-2.09999999999999E+0000 4.37871924601495E-0001 +-2.15000000000001E+0000 5.55395884905010E-0001 +-2.19999999999999E+0000 6.88502367585897E-0001 +-2.25000000000000E+0000 6.44779055379331E-0001 +-2.30000000000001E+0000 7.08318799734116E-0001 +-2.34999999999999E+0000 6.11270910128951E-0001 +-2.40000000000001E+0000 5.86866244208068E-0001 +-2.44999999999999E+0000 5.16796533018351E-0001 +-2.50000000000000E+0000 7.08150416612625E-0001 +-2.55000000000001E+0000 6.30091492086649E-0001 +-2.59999999999999E+0000 4.06671871431172E-0001 +-2.65000000000001E+0000 5.33380542881787E-0001 +-2.69999999999999E+0000 6.34105144068599E-0001 +-2.75000000000000E+0000 4.82996048405766E-0001 +-2.80000000000001E+0000 5.28537129983306E-0001 +-2.84999999999999E+0000 5.41339391842484E-0001 +-2.90000000000001E+0000 5.88493483141065E-0001 +-2.94999999999999E+0000 4.32408137246966E-0001 +-3.00000000000000E+0000 5.55113313719630E-0001 +-3.05000000000001E+0000 5.17153678461909E-0001 +-3.09999999999999E+0000 6.08082729857415E-0001 +-3.15000000000001E+0000 6.06026820838451E-0001 +-3.19999999999999E+0000 7.05305140465498E-0001 +-3.25000000000000E+0000 6.74903294071555E-0001 +-3.30000000000001E+0000 7.53701001405716E-0001 +-3.34999999999999E+0000 4.57615138031542E-0001 +-3.40000000000001E+0000 4.90164607763290E-0001 +-3.44999999999999E+0000 5.03254367504269E-0001 +-3.50000000000000E+0000 5.13842325657606E-0001 +-3.55000000000001E+0000 6.12633991986513E-0001 +-3.59999999999999E+0000 4.40991451721402E-0001 +-3.65000000000001E+0000 4.21081689652055E-0001 +-3.69999999999999E+0000 5.39387122727931E-0001 +-3.75000000000000E+0000 5.41702149435878E-0001 +-3.80000000000001E+0000 4.43733604624867E-0001 +-3.84999999999999E+0000 6.38182201422751E-0001 +-3.90000000000001E+0000 5.28000004589558E-0001 +-3.94999999999999E+0000 5.29627159237862E-0001 +-4.00000000000000E+0000 4.54066683538258E-0001 +-4.05000000000001E+0000 6.16793472319841E-0001 +-4.09999999999999E+0000 5.58645641431212E-0001 +-4.15000000000001E+0000 6.42179792746902E-0001 +-4.19999999999999E+0000 5.88239585049450E-0001 +-4.25000000000000E+0000 6.90931130200625E-0001 +-4.30000000000001E+0000 5.33143237233162E-0001 +-4.34999999999999E+0000 5.45844073407352E-0001 +-4.40000000000001E+0000 7.39370113238692E-0001 +-4.44999999999999E+0000 6.84472128748894E-0001 +-4.50000000000000E+0000 5.24471544660628E-0001 +-4.55000000000001E+0000 5.11778652667999E-0001 +-4.59999999999999E+0000 5.10052446275950E-0001 +-4.65000000000001E+0000 5.60862772166729E-0001 +-4.69999999999999E+0000 7.17184476554394E-0001 +-4.75000000000000E+0000 6.33388835936785E-0001 +-4.80000000000001E+0000 4.44135803729296E-0001 +-4.84999999999999E+0000 4.61172462906688E-0001 +-4.90000000000001E+0000 4.44929774850607E-0001 +-4.94999999999999E+0000 5.46592084690928E-0001 +-5.00000000000000E+0000 6.50042893365026E-0001 +-5.05000000000001E+0000 6.32227163761854E-0001 +-5.09999999999999E+0000 4.95237484574318E-0001 +-5.15000000000001E+0000 6.43857210874557E-0001 +-5.19999999999999E+0000 5.83578459918499E-0001 +-5.25000000000000E+0000 3.88923079706728E-0001 +-5.30000000000001E+0000 7.27343861013651E-0001 +-5.34999999999999E+0000 5.78286204487085E-0001 +-5.40000000000001E+0000 8.19841336458921E-0001 +-5.44999999999999E+0000 5.51819708198309E-0001 +-5.50000000000000E+0000 5.44453877955675E-0001 +-5.55000000000001E+0000 4.83659499324858E-0001 +-5.59999999999999E+0000 4.80579167604446E-0001 +-5.65000000000001E+0000 5.09559608995914E-0001 +-5.69999999999999E+0000 4.61756427073851E-0001 +-5.75000000000000E+0000 7.11607273668051E-0001 +-5.80000000000001E+0000 4.72547665704042E-0001 +-5.84999999999999E+0000 6.10916126519442E-0001 +-5.90000000000001E+0000 6.35952476412058E-0001 +-5.94999999999999E+0000 4.78130873292685E-0001 +-6.00000000000000E+0000 5.43699096888304E-0001 +-6.05000000000001E+0000 4.66060625389218E-0001 +-6.09999999999999E+0000 6.27391984686255E-0001 +-6.15000000000001E+0000 5.48693595454097E-0001 +-6.19999999999999E+0000 5.33370579127222E-0001 +-6.25000000000000E+0000 6.36967988684774E-0001 +-6.30000000000001E+0000 4.34361170977354E-0001 +-6.34999999999999E+0000 5.28281603008509E-0001 +-6.40000000000001E+0000 4.99676296487451E-0001 +-6.44999999999999E+0000 5.19281556829810E-0001 +-6.50000000000000E+0000 5.71795098483562E-0001 +-6.55000000000001E+0000 5.40684180334210E-0001 +-6.59999999999999E+0000 3.75707619823515E-0001 +-6.65000000000001E+0000 4.77138381451368E-0001 +-6.69999999999999E+0000 7.03771770000458E-0001 +-6.75000000000000E+0000 4.10040442366153E-0001 +-6.80000000000001E+0000 4.93563810363412E-0001 +-6.84999999999999E+0000 5.42703790590167E-0001 +-6.90000000000001E+0000 5.69010160863399E-0001 +-6.94999999999999E+0000 6.07738987542689E-0001 +-7.00000000000000E+0000 5.74407609179616E-0001 +-7.05000000000001E+0000 4.75820460822433E-0001 +-7.09999999999999E+0000 5.15982428565621E-0001 +-7.15000000000001E+0000 5.52051474340260E-0001 +-7.19999999999999E+0000 4.75801467895508E-0001 +-7.25000000000000E+0000 4.08039686735719E-0001 +-7.30000000000001E+0000 5.38118572905660E-0001 +-7.34999999999999E+0000 6.08152348548174E-0001 +-7.40000000000001E+0000 3.89956217259169E-0001 +-7.44999999999999E+0000 5.66274849697948E-0001 +-7.50000000000000E+0000 5.35127231851220E-0001 +-7.55000000000001E+0000 3.59422573354095E-0001 +-7.59999999999999E+0000 5.83314625546336E-0001 +-7.65000000000001E+0000 4.28718999028206E-0001 +-7.69999999999999E+0000 3.41897248872556E-0001 +-7.75000000000000E+0000 3.42653628438711E-0001 +-7.80000000000001E+0000 4.74014316685498E-0001 +-7.84999999999999E+0000 4.45242652203888E-0001 +-7.90000000000001E+0000 4.95125769637525E-0001 +-7.94999999999999E+0000 6.14590268582106E-0001 +-8.00000000000000E+0000 6.24281238764524E-0001 +-8.05000000000001E+0000 6.26899227499962E-0001 +-8.09999999999999E+0000 7.47230619192123E-0001 +-8.15000000000001E+0000 5.62494762241840E-0001 +-8.19999999999999E+0000 4.99211603775620E-0001 +-8.25000000000000E+0000 6.44224254414439E-0001 +-8.30000000000001E+0000 6.90035115927458E-0001 +-8.34999999999999E+0000 6.02078198455274E-0001 +-8.40000000000001E+0000 4.52922230469994E-0001 +-8.44999999999999E+0000 4.67863502912223E-0001 +-8.50000000000000E+0000 5.46315815299749E-0001 +-8.55000000000001E+0000 5.01678936183453E-0001 +-8.59999999999999E+0000 3.34893839084543E-0001 +-8.65000000000001E+0000 4.04608019627631E-0001 +-8.69999999999999E+0000 4.52999679371715E-0001 +-8.75000000000000E+0000 5.11118838563561E-0001 +-8.80000000000001E+0000 5.24167224764824E-0001 +-8.84999999999999E+0000 3.83304761257023E-0001 +-8.90000000000001E+0000 4.67454543802887E-0001 +-8.94999999999999E+0000 6.50515899062157E-0001 +-9.00000000000000E+0000 4.93361646309495E-0001 +-9.05000000000001E+0000 5.13443470001221E-0001 +-9.09999999999999E+0000 6.83846585452557E-0001 +-9.15000000000001E+0000 4.62941618636250E-0001 +-9.19999999999999E+0000 5.70333175361156E-0001 +-9.25000000000000E+0000 3.92533801496029E-0001 +-9.30000000000001E+0000 4.92549730464816E-0001 +-9.34999999999999E+0000 4.70206059515476E-0001 +-9.40000000000001E+0000 3.80810637027025E-0001 +-9.44999999999999E+0000 5.28015112504363E-0001 +-9.50000000000000E+0000 5.46904560178518E-0001 +-9.55000000000001E+0000 6.83326284401119E-0001 +-9.59999999999999E+0000 5.56812757626176E-0001 +-9.65000000000001E+0000 5.38640580140054E-0001 +-9.69999999999999E+0000 5.61724657192826E-0001 +-9.75000000000000E+0000 5.90509194880724E-0001 +-9.80000000000001E+0000 4.90793318953365E-0001 +-9.84999999999999E+0000 4.46948578581214E-0001 +-9.90000000000001E+0000 5.38885318674147E-0001 +-9.94999999999999E+0000 5.90171866118908E-0001 +-1.00000000000000E+0001 5.71496622171253E-0001 + From 123dfb7b67ada154270bb959649be1f2a21e8871 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:08:56 +0100 Subject: [PATCH 17/41] change numpy array in scienta datamodel --- pynxtools_xps/scienta/scienta_txt_data_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py index ccee49d8..8e66037d 100644 --- a/pynxtools_xps/scienta/scienta_txt_data_model.py +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -37,7 +37,7 @@ class ScientaRegion(XpsDataclass): region_name: str = "" energy_type: str = "" energy_size: int = 0 - energy_axis: np.ndarray = np.array([]) + energy_axis: np.ndarray = field(default_factory=lambda: np.zeros(0)) lens_mode: str = "" pass_energy: float = 0.0 pass_energy_units: str = "eV" From b84ef4c1f382cc10999a7eb58d8cad07a536c76c Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:14:21 +0100 Subject: [PATCH 18/41] remove duplications in data model --- pynxtools_xps/scienta/scienta_txt.py | 8 ++------ pynxtools_xps/scienta/scienta_txt_data_model.py | 9 +++++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py index 7def0f65..028b2c5c 100644 --- a/pynxtools_xps/scienta/scienta_txt.py +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -509,12 +509,8 @@ def _re_map_values(self, input_key: str, value: str): for k in keys: if k in input_key: - if not isinstance(value_map[k], list): - map_methods = [value_map[k]] - else: - map_methods = value_map[k] - for method in map_methods: - value = method(value) + map_method = value_map[k] + value = map_method(value) # type: ignore[operator] return value diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py index 8e66037d..2a0a8b36 100644 --- a/pynxtools_xps/scienta/scienta_txt_data_model.py +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -35,8 +35,10 @@ class ScientaHeader(XpsDataclass): class ScientaRegion(XpsDataclass): region_id: int = 0 region_name: str = "" - energy_type: str = "" + dim_energy_type: str = "" + energy_type: str = "binding" # energy_scale energy_size: int = 0 + energy_units: int = 0 energy_axis: np.ndarray = field(default_factory=lambda: np.zeros(0)) lens_mode: str = "" pass_energy: float = 0.0 @@ -44,9 +46,8 @@ class ScientaRegion(XpsDataclass): no_of_scans: int = 0 excitation_energy: float = 0.0 excitation_energy_units: str = "eV" - energy_type: str = "binding" # energy_scale acquisition_mode: str = "" - energy_units: str = "kinetic" # ??? + # energy_units: str = "kinetic" # ??? center_energy: float = 0.0 center_energy_units: str = "eV" start_energy: float = 0.0 @@ -54,7 +55,7 @@ class ScientaRegion(XpsDataclass): stop_energy: float = 0.0 stop_energy_units: str = "eV" step_size: float = 0.0 - stop_energy_units: str = "eV" + step_size_units: str = "eV" dwell_time: float = 0.0 dwell_time_units: str = "eV" detector_first_x_channel: int = 0 From bf7bb0eebcbd3f5f92d1f80828b3eb691e5cb541 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:22:58 +0100 Subject: [PATCH 19/41] add scienta reader to parametrised tests --- tests/test_reader.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_reader.py b/tests/test_reader.py index 83a1d742..c832c933 100644 --- a/tests/test_reader.py +++ b/tests/test_reader.py @@ -26,6 +26,10 @@ # "pro", # id="Phi .pro reader", # ), + pytest.param( + "scienta_txt", + id="Scienta txt export reader", + ), pytest.param( "vms_regular", id="Regular VAMAS reader", From adfbaf48d35b0a612824abb8d33057722f398c4b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 10:34:43 +0100 Subject: [PATCH 20/41] error fix in vamas config --- pynxtools_xps/config/config_vms.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools_xps/config/config_vms.json b/pynxtools_xps/config/config_vms.json index d7d9cdb2..5ee12c98 100644 --- a/pynxtools_xps/config/config_vms.json +++ b/pynxtools_xps/config/config_vms.json @@ -134,7 +134,7 @@ "detector_voltage/@units":"V", "count_time":"@xps_token:detector/dwell_time", "count_time/@units":"s", - "acquisition_mode":"@xps_token:detector/signal_mode", + "signal_mode":"@xps_token:detector/signal_mode", "device_information":{ "vendor":"@eln", "model":"@eln", @@ -283,7 +283,7 @@ "data":"@data:cycle", "data/@units":"@xps_token:data/y_units_1", "energy":"@data:energy", - "energy/@type":"@xps_token:data/x_units_1", + "energy/@type":"@xps_token:data/x_units", "energy/@units":"eV", "@energy_indices":"None", "@energy_depends":"None" From 61d6fde089b72c1ac4f1e14459866c538727c230 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 10:36:33 +0100 Subject: [PATCH 21/41] unit parsing, datatype checks --- pynxtools_xps/scienta/scienta_txt.py | 120 ++++++++++-------- .../scienta/scienta_txt_data_model.py | 2 +- 2 files changed, 67 insertions(+), 55 deletions(-) diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py index 028b2c5c..7dad75fd 100644 --- a/pynxtools_xps/scienta/scienta_txt.py +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -39,6 +39,37 @@ from pynxtools_xps.scienta.scienta_txt_data_model import ScientaHeader, ScientaRegion +KEY_MAP: Dict[str, str] = { + "number_of_regions": "no_of_regions", + "version": "software_version", + "dimension_name": "energy_type", + "dimension_size": "energy_size", + "dimension_scale": "energy_axis", + "number_of_sweeps": "no_of_scans", + "low_energy": "start_energy", + "high_energy": "stop_energy", + "energy_step": "step_size", + "step_time": "dwell_time", + "detector_first_x-_channel": "detector_first_x_channel", + "detector_last_x-_channel": "detector_last_x_channel", + "detector_first_y-_channel": "detector_first_y_channel", + "detector_last_y-_channel": "detector_last_y_channel", + "file": "data_file", + "sequence": "sequence_file", + "spectrum_name": "spectrum_type", + "instrument": "instrument_name", + "location": "vendor", + "user": "user_name", + "sample": "sample_name", + "comments": "spectrum_comment", + "date": "start_date", + "time": "start_time", + "name": "energy_type", + "size": "energy_size", + "scale": "energy_axis", + "Transmission": "fixed analyzer transmission", +} + class TxtMapperScienta(XPSMapper): """ @@ -78,7 +109,10 @@ def construct_data(self): "vendor", ], "source": [], - "beam": ["excitation_energy"], + "beam": [ + "excitation_energy", + "excitation_energy/@units", + ], "analyser": [], "collectioncolumn": [ "lens_mode", @@ -86,6 +120,7 @@ def construct_data(self): "energydispersion": [ "acquisition_mode", "pass_energy", + "pass_energy/@units", ], "detector": [ "detector_first_x_channel", @@ -94,18 +129,28 @@ def construct_data(self): "detector_last_y_channel", "detector_mode", "dwell_time", + "dwell_time/@units", + "time_per_spectrum_channel", + "time_per_spectrum_channel/@units", ], "manipulator": [], "calibration": [], "sample": ["sample_name"], "data": [ - "x_units", + "energy_unit", + "energy/@units", "energy_axis", "energy_type", + "center_energy", + "center_energy/@units", + "start_energy", + "start_energy/@units", + "stop_energy", + "stop_energy/@units", "step_size", + "step_size/@units", ], "region": [ - "center_energy", "energy_scale", "energy_size", "no_of_scans", @@ -177,15 +222,15 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): detector_data_key = f'{path_map["detector"]}/{detector_data_key_child}/counts' # Write raw data to detector. - self._xps_dict[detector_data_key] = spectrum["data"]["y"] + self._xps_dict[detector_data_key] = spectrum["data"]["intensity"] # If multiple spectra exist to entry, only create a new # xr.Dataset if the entry occurs for the first time. if entry not in self._xps_dict["data"]: self._xps_dict["data"][entry] = xr.Dataset() - energy = np.array(spectrum["data"]["x"]) - intensity = spectrum["data"]["y"] + energy = np.array(spectrum["data"]["energy"]) + intensity = spectrum["data"]["intensity"] # Write to data in order: scan, cycle, channel @@ -217,47 +262,6 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): ) -# ============================================================================= -# dimension_1_name -# dimension_1_size -# dimension_1_size -# dimension_1_scale -# dimension_1_scale -# ============================================================================= - -KEY_MAP = { - "number_of_regions": "no_of_regions", - "version": "software_version", - "dimension_name": "energy_type", - "dimension_size": "energy_size", - "dimension_scale": "energy_axis", - "number_of_sweeps": "no_of_scans", - "energy_unit": "x_units", - "low_energy": "start_energy", - "high_energy": "stop_energy", - "energy_step": "step_size", - "step_time": "dwell_time", - "detector_first_x-_channel": "detector_first_x_channel", - "detector_last_x-_channel": "detector_last_x_channel", - "detector_first_y-_channel": "detector_first_y_channel", - "detector_last_y-_channel": "detector_last_y_channel", - "file": "data_file", - "sequence": "sequence_file", - "spectrum_name": "spectrum_type", - "instrument": "instrument_name", - "location": "vendor", - "user": "user_name", - "sample": "sample_name", - "comments": "spectrum_comment", - "date": "start_date", - "time": "start_time", - "name": "energy_type", - "size": "energy_size", - "scale": "energy_axis", - "Transmission": "fixed analyzer transmission", -} - - class ScientaTxtHelper: """Parser for Scienta TXT exports.""" @@ -380,8 +384,8 @@ def _parse_region(self, region_id): key = self._re_map_keys(key_part) value = self._re_map_values(key, value) - if self._check_valid_value(value): - setattr(region, key, value) + if self._check_valid_value(value): + setattr(region, key, value) if begin_info: # Read instrument meta data for this region. @@ -396,7 +400,7 @@ def _parse_region(self, region_id): energies.append(energy) intensities.append(intensity) - region.data = {"x": np.array(intensities), "y": np.array(energies)} + region.data = {"energy": np.array(energies), "intensity": np.array(intensities)} # Convert date and time to ISO8601 date time. region.time_stamp = _construct_date_time(region.start_date, region.start_time) @@ -405,6 +409,11 @@ def _parse_region(self, region_id): region_dict = {**self.header.dict(), **region.dict()} + for key in region_dict.copy().keys(): + if "_units" in key: + new_key = key.replace("_units", "/@units") + region_dict[new_key] = region_dict.pop(key) + self.spectra.append(region_dict) def _check_valid_value(self, value): @@ -422,7 +431,10 @@ def _check_valid_value(self, value): True if the string or np.ndarray is not empty. """ - if isinstance(value, str) and value: + for datatype in [str, int, float]: + if isinstance(value, datatype) and value: + return True + if isinstance(value, bool): return True if isinstance(value, np.ndarray) and value.size != 0: return True @@ -498,7 +510,7 @@ def _re_map_values(self, input_key: str, value: str): "detector_first_y_channel": int, "detector_last_y_channel": int, "time_per_spectrum_channel": float, - "x_units": _change_energy_type, + "energy_unit": _change_energy_type, "energy_axis": _separate_dimension_scale, "energy_scale": _change_energy_type, "acquisition_mode": _change_scan_mode, @@ -536,9 +548,9 @@ def _change_energy_type(energy_type: str): """ if "Binding" in energy_type: - return "binding energy" + return "binding" if "Kinetic" in energy_type: - return "kinetic energy" + return "kinetic" return None diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py index 2a0a8b36..b9d2fc8b 100644 --- a/pynxtools_xps/scienta/scienta_txt_data_model.py +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -38,7 +38,7 @@ class ScientaRegion(XpsDataclass): dim_energy_type: str = "" energy_type: str = "binding" # energy_scale energy_size: int = 0 - energy_units: int = 0 + energy_units: str = "eV" energy_axis: np.ndarray = field(default_factory=lambda: np.zeros(0)) lens_mode: str = "" pass_energy: float = 0.0 From eb687b36682bc88276c10c7c5535b73e9d309f43 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:20:47 +0100 Subject: [PATCH 22/41] update scienta ELN example --- examples/scienta/eln_data.yaml | 89 +++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/examples/scienta/eln_data.yaml b/examples/scienta/eln_data.yaml index ccd05e50..f254baca 100644 --- a/examples/scienta/eln_data.yaml +++ b/examples/scienta/eln_data.yaml @@ -1,38 +1,60 @@ -title: XPS Experiment +title: Cu-HTTP definition: value: NXmpes version: "1.0" method: XPS -User: +start_time: 2022-04-08T11:47:02.0200Z +experiment_institution: Helmholtz-Zentrum Berlin +experiment_facility: BESSY II +experiment_laboratory: XPS beamline +user: name: Alexei Nefedov email: alexei.nefedov@kit.edu affiliation: Karlsruhe Institute of Technology (KIT), Institut für Funktionelle Grenzflächen address: KIT orcid: 0000-0001-9361-8333 -Instrument: +instrument: energy_resolution: - unit: null - value: null - Source: + type: calibrated + resolution: + value: 0.1 + unit: eV + source_xray: type: Synchrotron X-ray Source - name: BESSY II" + name: BESSY II probe: x-ray + device_information: + vendor: Helmholtz-Zentrum Berlin + model: BESSY II + identifier: null current: value: 298 unit: mA - Beam: + beam_xray: distance: unit: mm value: 0.0 #current: #value: 30 #unit: "pA" - Analyser: + analyser: name: Hemispherical Analyser dummy description: hemispherical - Collectioncolumn: - scheme: Angular dispersive - Energydispersion: + device_information: + vendor: Scienta Omicron + model: null + identifier: null + collectioncolumn: + device_information: + vendor: Scienta Omicron + model: null + identifier: null + scheme: angular dispersive + energydispersion: + device_information: + vendor: Scienta Omicron + model: null + identifier: null scheme: hemispherical pass_energy: unit: eV @@ -42,19 +64,10 @@ Instrument: size: value: 0.4 unit: mm - Detector: + detector: amplifier_type: channeltron detector_type: Multi-anode - Manipulator: - drain_current: - unit: A - value: 0.0 - sample_temperature: - unit: K - value: 298.0 - sample_bias: - unit: V - value: 0.0 + manipulator: POSITIONER[positioner_x]: value: value: 15.5 @@ -71,22 +84,18 @@ Instrument: value: value: 45 unit: degree -Sample: +sample: chemical_formula: Cu - temperature: - unit: K - value: 298.0 - situation: vacuum - gas_pressure: - unit: mbar - value: 0.000000001 - bias: - unit: V - value: 0.0 - preparation_date: "2023-03-08T10:49:12+01:00" - sample_history: transferred to analysis chamber - preparation_description: loaded in the endstation and transferred to analysis chamber description: Cu-HHTP/Glass on standard sample holder -Process: - energy_calibration: - applied: True \ No newline at end of file + situation: vacuum + sample_history: + sample_preparation: + start_time: 2022-04-08T11:25:00.200Z + end_time: 2022-04-08T11:45:00.200Z + description: sputter cleaned with Ar ions for 20 min + method: Ar sputtering + PHYSICAL_PROCESS[sample_loading]: + start_time: 2023-03-08T10:49:12+01:00 + end_time: 2023-03-08T10:52:47+01:00 + description: loaded in the endstation and transferred to analysis chamber + method: vacuum transfer \ No newline at end of file From 36f1b4436e806ce225bb1b18237c2b493120987b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:22:04 +0100 Subject: [PATCH 23/41] update config file to updated NXmpes --- pynxtools_xps/config/config_scienta_txt.json | 472 +++++++++---------- 1 file changed, 233 insertions(+), 239 deletions(-) diff --git a/pynxtools_xps/config/config_scienta_txt.json b/pynxtools_xps/config/config_scienta_txt.json index a66cd96c..e48fa49a 100644 --- a/pynxtools_xps/config/config_scienta_txt.json +++ b/pynxtools_xps/config/config_scienta_txt.json @@ -1,281 +1,275 @@ { - "/@default":"None", - "/ENTRY[entry]":{ - "@default":"data", - "definition":"@eln", - "definition/@version":"@eln", - "title":"@eln", - "start_time":"@xps_token:time_stamp", - "end_time":"@eln", - "method":"@xps_token:region/analysis_method", - "experiment_institution":"@eln", - "experiment_facility":"@eln", - "experiment_laboratory":"@eln", - "entry_identifier":"@eln", - "data_file": "@xps_token:file_info/data_file", - "sequence_file": "@xps_token:file_info/sequence_file" + "/@default":"None", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"@eln", + "definition/@version":"@eln", + "title":"@eln", + "start_time":"@xps_token:time_stamp", + "end_time":"@eln", + "method":"@xps_token:region/analysis_method", + "experiment_institution":"@eln", + "experiment_facility":"@eln", + "experiment_laboratory":"@eln", + "entry_identifier":"@eln", + "data_file":"@xps_token:file_info/data_file", + "sequence_file":"@xps_token:file_info/sequence_file" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"@xps_token:user/user_name", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "@default":"electronanalyser", + "name":"@xps_token:instrument/instrument_name", + "device_information":{ + "vendor":"None", + "identifier":"None", + "model":"None" }, - "/ENTRY[entry]/USER[user]":{ + "energy_resolution":{ + "physical_quantity":"energy", + "type":"derived", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"eV" + }, + "source_TYPE[source_xray]":{ + "type":"@eln", "name":"@eln", - "affiliation":"@eln", - "address":"@eln", - "orcid":"@eln", - "email":"@eln", - "initials": "xps_token:user/user_initials" + "probe":"photon", + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" + }, + "associated_beam":"@link:/entry/instrument/beam_xray" }, - "/ENTRY[entry]/INSTRUMENT[instrument]":{ - "@default": "electronanalyser", - "name": "@xps_token:instrument/instrument_name", + "beam_TYPE[beam_xray]":{ + "distance":"@eln", + "distance/@units":"@eln", + "incident_energy":"@xps_token:beam/excitation_energy", + "incident_energy/@units":"eV", + "incident_energy_spread":"None", + "incident_energy_spread/@units":"None", + "incident_polarization":"None", + "incident_polarization/@units":"None", + "extent":"None", + "associated_source":"@link:/entry/instrument/source_xray" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default":"detector0", + "description":"@eln", + "name":"@eln", + "work_function":"@eln", + "work_function/@units":"@eln", + "fast_axes":"None", + "slow_axes":"energy", "device_information":{ "vendor":"None", - "identifier":"None", - "model":"None" + "model":"None", + "identifier":"None" }, "energy_resolution":{ "physical_quantity":"energy", - "type":"derived", + "type":"derived ", "resolution":"@xps_token:data/step_size", - "resolution/@units":"eV" + "resolution/@units":"@xps_token:data/step_size/@units" }, - "source_TYPE[source_probe]":{ - "type":"@", - "name": "@eln", - "probe":"photon", + "transmission_function":"None", + "COLLECTIONCOLUMN[collectioncolumn]":{ + "scheme":"@eln", + "lens_mode":"@xps_token:collectioncolumn/lens_mode", + "projection":"None", + "angular_acceptance":"None", + "spatial_acceptance":"None", + "field_aperture":"None", + "contrast_aperture":"None", + "iris":"None", "device_information":{ "vendor":"@eln", - "identifier":"@eln", - "model":"@eln" - }, - "associated_beam":"@link:/entry/instrument/beam_probe" - }, - "beam_TYPE[beam_probe]":{ - "distance":"@eln", - "distance/@units":"@eln", - "incident_energy":"@xps_token:beam/excitation_energy", - "incident_energy/@units":"eV", - "incident_energy_spread":"None", - "incident_energy_spread/@units":"None", - "incident_polarization":"None", - "incident_polarization/@units":"None", - "extent":"None", - "associated_source":"@link:/entry/instrument/source_probe" + "model":"@eln", + "identifier":"@eln" + } }, - "ELECTRONANALYSER[electronanalyser]":{ - "@default": "detector0", - "description":"@eln", - "name": "@eln", - "work_function":"@eln", - "work_function/@units":"@eln", - "fast_axes":"None", - "slow_axes":"energy", - "device_information":{ - "vendor":"None", - "model":"None", - "identifier":"None" - }, - "energy_resolution":{ - "physical_quantity":"energy", - "type":"@xps_token:data/step_size", - "resolution":"eV" - }, - "transmission_function":"None", - "COLLECTIONCOLUMN[collectioncolumn]":{ - "scheme":"@eln", - "lens_mode":"@xps_token:collectioncolumn/lens_mode", - "projection":"None", - "angular_acceptance":"None", - "spatial_acceptance":"None", - "field_aperture":"None", - "contrast_aperture":"None", - "iris":"None", - "device_information":{ - "vendor":"@eln", - "model":"@eln", - "identifier":"@eln" - } - }, - "ENERGYDISPERSION[energydispersion]":{ - "scheme":"@eln", - "pass_energy":"@xps_token:energydispersion/pass_energy", - "pass_energy/@units":"eV", - "energy_scan_mode":"@xps_token:energydispersion/acquisition_mode", - "entrance_slit":{ - "description":"@eln", - "shape":"@eln", - "size":"@eln", - "size/@units": "@eln" - }, - "exit_slit":"None", - "device_information":{ - "vendor":"@eln", - "model":"@eln", - "identifier":"@eln" - } + "ENERGYDISPERSION[energydispersion]":{ + "scheme":"@eln", + "pass_energy":"@xps_token:energydispersion/pass_energy", + "pass_energy/@units":"@xps_token:energydispersion/pass_energy/@units", + "energy_scan_mode":"@xps_token:energydispersion/acquisition_mode", + "entrance_slit":{ + "description":"@eln", + "shape":"@eln", + "size":"@eln", + "size/@units":"@eln" }, - "DETECTOR[detector]":{ - "@default":"raw_data", - "amplifier_type":"@eln", - "count_time": "@xps_token:region/dwell_time", - "count_time/@units": "@xps_token:region/dwell_time/time", - "detector_type":"@eln", - "device_information":{ - "vendor":"@eln", - "model":"@eln", - "identifier":"@eln" - }, - "raw_data":{ - "@signal":"None", - "raw":"@detector_data:cycles/Cycle_", - "raw/@units":"counts" - } + "exit_slit":"None", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" } }, - "MANIPULATOR[manipulator]":{ + "DETECTOR[detector]":{ + "@default":"raw_data", + "amplifier_type":"@eln", + "count_time":"@xps_token:region/dwell_time", + "count_time/@units":"@xps_token:region/dwell_time/@units", + "detector_type":"@eln", "device_information":{ "vendor":"@eln", "model":"@eln", "identifier":"@eln" }, - "temperature_sensor":{ - "name":"@eln", - "measurement":"@eln", - "type":"@eln", - "attached_to":"@eln", - "value":"@eln" - }, - "sample_heater":{ - "name":"@eln", - "physical_quantity":"@eln", - "type":"@eln", - "heater_power":"@eln", - "PID[pid]/setpoint":"@eln" - }, - "cryostat":{ - "name":"None", - "physical_quantity":"None", - "type":"None", - "PID[pid]/setpoint":"None" - }, - "drain_current_amperemeter":{ - "name":"@eln", - "measurement":"@eln", - "type":"@eln", - "value":"@eln" - }, - "sample_bias_voltmeter":{ - "name":"@eln", - "measurement":"@eln", - "type":"@eln", - "value":"@eln" - }, - "sample_bias_potentiostat":{ - "name":"@eln", - "physical_quantity":"@eln", - "type":"@eln", - "PID[pid]/setpoint":"@eln" - }, - "POSITIONER[positioner_x]":{ - "value": "@eln", - "value/@units": "@eln" - }, - "POSITIONER[positioner_y]":{ - "value": "@eln", - "value/@units": "@eln" - }, - "POSITIONER[positioner_z]":{ - "value": "@eln", - "value/@units": "@eln" - }, - "POSITIONER[positioner_phi]":{ - "value": "@eln", - "value/@units": "@eln" - } + "raw_data":{ + "@signal":"None", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"counts" + } + } + }, + "MANIPULATOR[manipulator]":{ + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" }, - "pressure_gauge":{ + "temperature_sensor":{ "name":"@eln", "measurement":"@eln", "type":"@eln", - "value":"@eln", - "value_log/value":"@eln" + "attached_to":"@eln", + "value":"@eln" }, - "flood_gun":{ + "sample_heater":{ "name":"@eln", "physical_quantity":"@eln", "type":"@eln", - "current":"@eln", - "current_log/value":"@eln" - } - }, - "/ENTRY[entry]/PROCESS[process]":{ - "energy_calibration":{ - "calibrated_axis":"@data:energy", - "calibrated_axis/@units": "eV" + "heater_power":"@eln", + "PID[pid]/setpoint":"@eln" }, - "energy_referencing":{ - "level":"None", - "reference_peak":"None", - "binding_energy":"None", - "offset":"None", - "calibrated_axis":"None" + "cryostat":{ + "name":"None", + "physical_quantity":"None", + "type":"None", + "PID[pid]/setpoint":"None" }, - "transmission_correction":{ - "transmission_function":{ - "@axes":"None", - "@signal":"None", - "kinetic_energy":"None", - "kinetic_energy/@units":"None", - "relative_intensity":"None" - } - } - }, - "/ENTRY[entry]/SAMPLE[sample]":{ - "name":"@xps_token:sample/sample_name", - "sample_id":"@eln", - "atom_types":"@eln", - "physical_form":"@eln", - "situation":"@eln", - "SUBSTANCE[substance]":{ + "drain_current_amperemeter":{ "name":"@eln", - "molecular_mass":"@eln", - "cas_number":"@eln", - "molecular_formula_hill":"@eln" + "measurement":"@eln", + "type":"@eln", + "value":"@eln" }, - "sample_history":{ - "sample_preparation":{ - "start_time":"@eln", - "end_time":"@eln", - "description":"@eln", - "method":"@eln" - } + "sample_bias_voltmeter":{ + "name":"@eln", + "measurement":"@eln", + "type":"@eln", + "value":"@eln" }, - "temperature":{ - "temperature_sensor": "@link:/entry/instrument/manipulator/temperature_sensor", - "sample_heater":"@link:/entry/instrument/manipulator/sample_heater", - "cryostat":"None" + "sample_bias_potentiostat":{ + "name":"@eln", + "physical_quantity":"@eln", + "type":"@eln", + "PID[pid]/setpoint":"@eln" }, - "gas_pressure":{ - "pressure_gauge":"@link:/entry/instrument/pressure_gauge" + "POSITIONER[positioner_x]":{ + "value":"@eln", + "value/@units":"@eln" }, - "bias":{ - "potentiostat":"@link:/entry/instrument/manipulator/sample_bias_potentiostat", - "voltmeter":"@link:/entry/instrument/manipulator/sample_bias_voltmeter" + "POSITIONER[positioner_y]":{ + "value":"@eln", + "value/@units":"@eln" }, - "drain_current":{ - "amperemeter":"@link:/entry/instrument/manipulator/drain_current_amperemeter" + "POSITIONER[positioner_z]":{ + "value":"@eln", + "value/@units":"@eln" }, - "flood_gun_current":{ - "flood_gun":"@link:/entry/instrument/flood_gun" + "POSITIONER[positioner_phi]":{ + "value":"@eln", + "value/@units":"@eln" } }, - "/ENTRY[entry]/data":{ - "@signal":"data", - "@axes":["energy"], - "data":"@data:cycle", - "data/@units":"counts_per_second", - "energy":"@data:energy", - "energy/@units":"eV", - "energy/@type":"@xps_token:data/energy_type", - "@energy_indices":"None", - "@energy_depends":"None" + "pressure_gauge":{ + "name":"@eln", + "measurement":"@eln", + "type":"@eln", + "value":"@eln", + "value_log/value":"@eln" + }, + "flood_gun":{ + "name":"@eln", + "physical_quantity":"@eln", + "type":"@eln", + "current":"@eln", + "current_log/value":"@eln" + } + }, + "/ENTRY[entry]/PROCESS[process]":{ + "energy_calibration":{ + "calibrated_axis":"@data:energy", + "calibrated_axis/@units":"eV" + }, + "energy_referencing":{ + "level":"None", + "reference_peak":"None", + "binding_energy":"None", + "offset":"None", + "calibrated_axis":"None" + }, + "transmission_correction":"None" + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"@xps_token:sample/sample_name", + "sample_id":"@eln", + "atom_types":"@eln", + "physical_form":"@eln", + "situation":"@eln", + "SUBSTANCE[substance]":{ + "name":"@eln", + "molecular_mass":"@eln", + "cas_number":"@eln", + "molecular_formula_hill":"@eln" + }, + "sample_history":{ + "sample_preparation":{ + "start_time":"@eln", + "end_time":"@eln", + "description":"@eln", + "method":"@eln" + } + }, + "temperature":{ + "temperature_sensor":"@link:/entry/instrument/manipulator/temperature_sensor", + "sample_heater":"@link:/entry/instrument/manipulator/sample_heater", + "cryostat":"None" + }, + "gas_pressure":{ + "pressure_gauge":"@link:/entry/instrument/pressure_gauge" + }, + "bias":{ + "potentiostat":"@link:/entry/instrument/manipulator/sample_bias_potentiostat", + "voltmeter":"@link:/entry/instrument/manipulator/sample_bias_voltmeter" + }, + "drain_current":{ + "amperemeter":"@link:/entry/instrument/manipulator/drain_current_amperemeter" + }, + "flood_gun_current":{ + "flood_gun":"@link:/entry/instrument/flood_gun" } - } \ No newline at end of file + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@axes":[ + "energy" + ], + "data":"@data:cycle", + "data/@units":"counts_per_second", + "energy":"@data:energy", + "energy/@units":"eV", + "energy/@type":"@xps_token:data/energy_type", + "@energy_indices":"None", + "@energy_depends":"None" + } +} \ No newline at end of file From 86495626940e0d1eab024035382ad8b86de0c65d Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:26:25 +0100 Subject: [PATCH 24/41] add eln for scienta txt test --- tests/data/scienta_txt/eln_data.yaml | 101 +++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 tests/data/scienta_txt/eln_data.yaml diff --git a/tests/data/scienta_txt/eln_data.yaml b/tests/data/scienta_txt/eln_data.yaml new file mode 100644 index 00000000..4ebcb76a --- /dev/null +++ b/tests/data/scienta_txt/eln_data.yaml @@ -0,0 +1,101 @@ +title: Cu-HTTP +definition: + value: NXmpes + version: "1.0" +method: XPS +start_time: 2022-04-08T11:47:02.0200Z +experiment_institution: Helmholtz-Zentrum Berlin +experiment_facility: BESSY II +experiment_laboratory: XPS beamline +user: + name: Alexei Nefedov + email: alexei.nefedov@kit.edu + affiliation: Karlsruhe Institute of Technology (KIT), Institut für Funktionelle Grenzflächen + address: KIT + orcid: 0000-0001-9361-8333 +instrument: + energy_resolution: + type: calibrated + resolution: + value: 0.1 + unit: eV + source_xray: + type: Synchrotron X-ray Source + name: BESSY II + probe: x-ray + device_information: + vendor: Helmholtz-Zentrum Berlin + model: BESSY II + identifier: null + current: + value: 298 + unit: mA + beam_xray: + distance: + unit: mm + value: 0.0 + #current: + #value: 30 + #unit: "pA" + analyser: + name: Hemispherical Analyser dummy + description: hemispherical + device_information: + vendor: Scienta Omicron + model: null + identifier: null + collectioncolumn: + device_information: + vendor: Scienta Omicron + model: null + identifier: null + scheme: angular dispersive + energydispersion: + device_information: + vendor: Scienta Omicron + model: null + identifier: null + scheme: hemispherical + pass_energy: + unit: eV + APERTURE[entrance_slit]: + description: Analyser slit Nr. 3 + shape: curved slit + size: + value: 0.4 + unit: mm + detector: + amplifier_type: channeltron + detector_type: Multi-anode + manipulator: + POSITIONER[positioner_x]: + value: + value: 15.5 + unit: cm + POSITIONER[positioner_y]: + value: + value: 11 + unit: cm + POSITIONER[positioner_z]: + value: + value: 36 + unit: cm + POSITIONER[positioner_phi]: + value: + value: 45 + unit: degree +sample: + chemical_formula: Au + description: Au foil on standard sample holder + situation: vacuum + sample_history: + sample_preparation: + start_time: 2022-04-08T11:25:00.200Z + end_time: 2022-04-08T11:45:00.200Z + description: sputter cleaned with Ar ions for 20 min + method: Ar sputtering + PHYSICAL_PROCESS[sample_loading]: + start_time: 2023-03-08T10:49:12+01:00 + end_time: 2023-03-08T10:52:47+01:00 + description: loaded in the endstation and transferred to analysis chamber + method: vacuum transfer \ No newline at end of file From c53a7fbb4d91f0a742eee105e367c6d2be331a97 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 21:14:00 +0100 Subject: [PATCH 25/41] change how data/energy is written --- pynxtools_xps/reader.py | 75 ++++++++++++++++++++++------------- pynxtools_xps/reader_utils.py | 19 ++++----- 2 files changed, 57 insertions(+), 37 deletions(-) diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index be357400..95dde274 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -117,6 +117,8 @@ def get_entries_and_detectors(config_dict, xps_data_dict): DETECTOR_SET.add(detector_nm) except AttributeError: continue + if not DETECTOR_SET: + DETECTOR_SET.add("detector0") # pylint: disable=too-many-locals @@ -140,18 +142,15 @@ def fill_data_group(key, key_part, entries_values, config_dict, template): count += 1 template[f"{root}@default"] = entry - data_field_key = key.replace("entry", entry) - data_group_key = data_field_key.rsplit("/data", 1)[0] + modified_key = key.replace("entry", entry) if key_part == "energy": - # Here, we need to use the energy value if the data/energy is - # written directly in the future. - energy_field_key = data_group_key energy = np.array(xr_data.coords["energy"].values) - template[energy_field_key] = energy + template[modified_key] = energy else: # Define energy axis and energy_indices + data_group_key = modified_key.rsplit("/data", 1)[0] template[f"{data_group_key}/energy/@long_name"] = "energy" template[f"{data_group_key}/@energy_indices"] = 0 @@ -169,7 +168,7 @@ def fill_data_group(key, key_part, entries_values, config_dict, template): template[indv_scan_key] = xr_data[data_var].data template[indv_scan_key_unit] = units - template[data_field_key] = np.mean( + template[modified_key] = np.mean( [ xr_data[x_arr].data for x_arr in xr_data.data_vars @@ -178,7 +177,7 @@ def fill_data_group(key, key_part, entries_values, config_dict, template): axis=0, ) - template[f"{data_field_key}_errors"] = np.std( + template[f"{modified_key}_errors"] = np.std( [ xr_data[x_arr].data for x_arr in xr_data.data_vars @@ -187,43 +186,63 @@ def fill_data_group(key, key_part, entries_values, config_dict, template): axis=0, ) - template[f"{data_field_key}/@long_name"] = "XPS intensity" + template[f"{modified_key}/@long_name"] = "XPS intensity" def fill_detector_group(key, entries_values, config_dict, xps_data_dict, template): - """Fill out fileds and attributes for NXdetector/NXdata""" + """Fill out fields and attributes for NXdetector/NXdata""" + + chan_count = "_chan" + scan_count = "_scan" for entry, xr_data in entries_values.items(): - chan_count = "_chan" + modified_key = key.replace("entry", entry) # unit_key = config_dict[f"{key}/@units"] # units = find_entry_and_value(xps_data_dict, unit_key, XPS_TOKEN) units = "counts_per_second" - # Iteration over scan + detector_scans = {detector: [] for detector in DETECTOR_SET} + + # Iteration over channels data_vars = [ data_var for data_var in xr_data.data_vars if chan_count in data_var ] - - detector_scans = {detector: [] for detector in DETECTOR_SET} + if not data_vars: + data_vars = [data_var for data_var in xr_data.data_vars] + channels_exist = False + else: + channels_exist = True for data_var in data_vars: - if chan_count in data_var: - detector_num = data_var.split(chan_count)[-1] - detector_nm = f"detector{detector_num}" - detector_scans[detector_nm] += [xr_data[data_var].data] - cycle_scan_num = data_var.split(chan_count)[0] - modified_key = key.replace("entry", entry) - modified_key = modified_key.replace("[detector]", f"[{detector_nm}]") - cycle_scan_key = modified_key.replace( - "raw_data/raw", f"raw_data/{cycle_scan_num}" - ) - template[cycle_scan_key] = xr_data[data_var].data - template[f"{cycle_scan_key}/@units"] = units + if channels_exist: + if chan_count in data_var: + detector_num = data_var.split(chan_count)[-1] + detector_nm = f"detector{detector_num}" + detector_scans[detector_nm] += [xr_data[data_var].data] + cycle_scan_num = data_var.split(chan_count)[0] + detector_key = modified_key.replace( + "[detector]", f"[{detector_nm}]" + ) + cycle_scan_key = detector_key.replace( + "raw_data/raw", f"raw_data/{cycle_scan_num}" + ) + template[cycle_scan_key] = xr_data[data_var].data + template[f"{cycle_scan_key}/@units"] = units + else: + # If there is no channel data, iterate over scans + detector_key = modified_key.replace("[detector]", "[detector0]") + if scan_count in data_var: + detector_scans["detector0"] += [xr_data[data_var].data] + scan_key = detector_key.replace( + "raw_data/raw", f"raw_data/{data_var}" + ) + + template[scan_key] = xr_data[data_var].data + template[f"{scan_key}/@units"] = units - # Add multi-dimensional `raw`array for each detector + # Add multi-dimensional `raw` array for each detector for detector_nm, value in detector_scans.items(): - modified_key = key.replace("entry", entry) modified_key = modified_key.replace("[detector]", f"[{detector_nm}]") template[modified_key] = np.array(value) diff --git a/pynxtools_xps/reader_utils.py b/pynxtools_xps/reader_utils.py index 70e3cfac..1f770d03 100644 --- a/pynxtools_xps/reader_utils.py +++ b/pynxtools_xps/reader_utils.py @@ -303,12 +303,13 @@ def construct_detector_data_key(spectrum): def construct_entry_name(key): """Construction entry name.""" - key_parts = key.split("/") - try: - # entry example : sample__name_of_scan_region - entry_name = ( - f'{key_parts[2].split("_", 1)[1]}' f"__" f'{key_parts[4].split("_", 1)[1]}' - ) - except IndexError: - entry_name = "" - return entry_name + name_parts = [] + + for key_part in ["Group_", "Region_", "RegionData_"]: + try: + pattern = rf"{key_part}(.*?)(?=\/|$)" + name_parts += [re.search(pattern, key).group(1)] + except AttributeError: + pass + + return "__".join(name_parts) From 29dda7715e9dad0d1b2be8d55c7fb593b93962fa Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Tue, 26 Mar 2024 21:14:45 +0100 Subject: [PATCH 26/41] update scienta example --- examples/scienta/Cu-HTTP.nxs | Bin 0 -> 564768 bytes examples/scienta/eln_data.yaml | 78 +++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 examples/scienta/Cu-HTTP.nxs diff --git a/examples/scienta/Cu-HTTP.nxs b/examples/scienta/Cu-HTTP.nxs new file mode 100644 index 0000000000000000000000000000000000000000..0680a901333d2618dda584664dbb6f25e233c82a GIT binary patch literal 564768 zcmeF43tUvy_Q#KDg-J4|DdvOYqr~ztJ~9%JW4=%jMnwg*m=Q+7fSCXlOJjOd*=4%b zjmmN=ODc=$_M)_KJm-)rsPR+t-_Dfh3%d_K(g?7i1sd+)W^ zUT2>(XNIfe$4@-*gi}t?=oJ#8wbM*|sNNdz((ef2ER|N}RvfeeOTmg`UQU78u1jUWx4X3=H#j#YAOfyLg(-6jXYjTD815u+cxXJ<)=t_Clq_l((%>0h(AlFBUQt# z{7YFt`L7j$(vQ)VJ}onv^D}3h^b6%@&B;}bYbvLVHzO%|Jk<$7hA!Ql*9v9DBb|-- zsza`3o$8m&a7Rh~-qDg#kSks!6<}Ce;4Ub{y5vPGWGg;x$2F8(U3=M}DO6I8FLl~+ zP2@bqGVQxi63zb4q0U=1CDM{s^dMA==c6`Sd##JGa#CtWX0ENUP<60-n>KvLGl>j2 zc3EH9fy0Q*;_~L^H_$_B%!cCTxZ` zv{06!{G9y4qJl+vqL{KU>)J_s%k8=L%%TEEzAfLDyR^_=APb}yXpQ7D9l0c#dCD8YP(C9wNA$#|C+Fp4ibger=e_++DX`@i=H(O? z%IbU9gX*s>f5D<$TY;XHQ|Po86y_|pOU3P>Uv7|S+*$S_(On0|qw+gIE;HMfpKs5l zfpd<^SDd;iwiv zuA{s;yZ1r4vR_hap*_FQQP3CpYF%Y6Dkz|(-!Dkt*gUa(?0I616zIc-n6>^WSL=RB zP60dqsmNFBCn?pIS+od76lJHOT=}K2V@{UH8-RQ@ IfdZ8`PnQPabjv~>c97kc1 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 Date: Tue, 26 Mar 2024 21:15:27 +0100 Subject: [PATCH 27/41] update default instrument in scienta config --- pynxtools_xps/config/config_scienta_txt.json | 2 +- pynxtools_xps/scienta/scienta_txt.py | 4 +- tests/data/scienta_txt/eln_data.yaml | 72 ++++++++++++++++++++ 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/pynxtools_xps/config/config_scienta_txt.json b/pynxtools_xps/config/config_scienta_txt.json index e48fa49a..3edb654c 100644 --- a/pynxtools_xps/config/config_scienta_txt.json +++ b/pynxtools_xps/config/config_scienta_txt.json @@ -124,7 +124,7 @@ "identifier":"@eln" }, "raw_data":{ - "@signal":"None", + "@signal":"raw", "raw":"@detector_data:cycles/Cycle_", "raw/@units":"counts" } diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py index 7dad75fd..28456896 100644 --- a/pynxtools_xps/scienta/scienta_txt.py +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -180,7 +180,7 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): """ # pylint: disable=too-many-locals,duplicate-code - group_parent = f'{self._root_path}/Region_{spectrum["spectrum_type"]}' + group_parent = f'{self._root_path}/Group_{spectrum["spectrum_type"]}' region_parent = f'{group_parent}/regions/Region_{spectrum["region_name"]}' file_parent = f"{region_parent}/file_info" instrument_parent = f"{region_parent}/instrument" @@ -200,7 +200,7 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): "calibration": f"{instrument_parent}/calibration", "sample": f"{region_parent}/sample", "data": f"{region_parent}/data", - "region": f"{region_parent}", + "region": f"{region_parent}/region", } for grouping, spectrum_keys in key_map.items(): diff --git a/tests/data/scienta_txt/eln_data.yaml b/tests/data/scienta_txt/eln_data.yaml index 4ebcb76a..e402ce40 100644 --- a/tests/data/scienta_txt/eln_data.yaml +++ b/tests/data/scienta_txt/eln_data.yaml @@ -68,6 +68,56 @@ instrument: amplifier_type: channeltron detector_type: Multi-anode manipulator: + device_information: + vendor: Scienta Omicron + temperature_sensor: + name: type K thermocouple + measurement: temperature + attached_to: sample + type: type K thermocouple + value: + value: 298.0 + unit: K + sample_heater: + name: Coherent Compact Evolution IR Diode LASER (DILAS) + physical_quantity: temperature + type: IR diode laser + heater_power: + value: 0.0 + unit: W + pid: + setpoint: + value: 298.0 + unit: K + cryostat: + name: null + physical_quantity: null + type: null + pid: + setpoint: null + drain_current_amperemeter: + name: Amperemeter 1.0 + measurement: current + type: wire + value: + value: 0.1 + unit: nA + sample_bias_voltmeter: + name: XPS sample voltmeter + measurement: voltage + attached_to: sample + type: oscilloscope + value: + value: 0.0 + unit: V + sample_bias_potentiostat: + name: XPS sample potentiostat + physical_quantity: voltage + type: potentiostat + pid: + setpoint: + value: 0.0 + unit: V POSITIONER[positioner_x]: value: value: 15.5 @@ -84,6 +134,28 @@ instrument: value: value: 45 unit: degree + pressure_gauge: + name: Atmion + measurement: pressure + type: hot-filament ionization gauge + value: + value: 0.000000001 + unit: mbar + value_log: + value: + value: null + unit: null + flood_gun: + name: FG 22/35 + physical_quantity: current + type: low energy electron source + current: + value: 0.0 + unit: A + current_log: + value: + value: null + unit: null sample: chemical_formula: Au description: Au foil on standard sample holder From 0cad72181f28bcc56f171799f846e0c4aa8a634f Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 07:00:34 +0100 Subject: [PATCH 28/41] write units with individual scan data --- examples/scienta/Cu-HTTP.nxs | Bin 564768 -> 154096 bytes pynxtools_xps/config/config_scienta_txt.json | 10 +++--- pynxtools_xps/reader.py | 35 ++++++++++++++----- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/examples/scienta/Cu-HTTP.nxs b/examples/scienta/Cu-HTTP.nxs index 0680a901333d2618dda584664dbb6f25e233c82a..1fad44cf42265803fbb3bff97099667df29f6414 100644 GIT binary patch delta 5934 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 B>Zt$# literal 564768 zcmeF43tUvy_Q#KDg-J4|DdvOYqr~ztJ~9%JW4=%jMnwg*m=Q+7fSCXlOJjOd*=4%b zjmmN=ODc=$_M)_KJm-)rsPR+t-_Dfh3%d_K(g?7i1sd+)W^ zUT2>(XNIfe$4@-*gi}t?=oJ#8wbM*|sNNdz((ef2ER|N}RvfeeOTmg`UQU78u1jUWx4X3=H#j#YAOfyLg(-6jXYjTD815u+cxXJ<)=t_Clq_l((%>0h(AlFBUQt# z{7YFt`L7j$(vQ)VJ}onv^D}3h^b6%@&B;}bYbvLVHzO%|Jk<$7hA!Ql*9v9DBb|-- zsza`3o$8m&a7Rh~-qDg#kSks!6<}Ce;4Ub{y5vPGWGg;x$2F8(U3=M}DO6I8FLl~+ zP2@bqGVQxi63zb4q0U=1CDM{s^dMA==c6`Sd##JGa#CtWX0ENUP<60-n>KvLGl>j2 zc3EH9fy0Q*;_~L^H_$_B%!cCTxZ` zv{06!{G9y4qJl+vqL{KU>)J_s%k8=L%%TEEzAfLDyR^_=APb}yXpQ7D9l0c#dCD8YP(C9wNA$#|C+Fp4ibger=e_++DX`@i=H(O? z%IbU9gX*s>f5D<$TY;XHQ|Po86y_|pOU3P>Uv7|S+*$S_(On0|qw+gIE;HMfpKs5l zfpd<^SDd;iwiv zuA{s;yZ1r4vR_hap*_FQQP3CpYF%Y6Dkz|(-!Dkt*gUa(?0I616zIc-n6>^WSL=RB zP60dqsmNFBCn?pIS+od76lJHOT=}K2V@{UH8-RQ@ IfdZ8`PnQPabjv~>c97kc1 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 Date: Wed, 27 Mar 2024 07:05:18 +0100 Subject: [PATCH 29/41] write units for data errors --- examples/scienta/Cu-HTTP.nxs | Bin 154096 -> 566144 bytes pynxtools_xps/reader.py | 1 + 2 files changed, 1 insertion(+) diff --git a/examples/scienta/Cu-HTTP.nxs b/examples/scienta/Cu-HTTP.nxs index 1fad44cf42265803fbb3bff97099667df29f6414..3531148e6dbba9c4adb0fc5f1a22f6f4da40a4bd 100644 GIT binary patch literal 566144 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 z

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 delta 1533 zcmZuxZ)_7~81Hj$%e}XD>zPT~S;;ySD0b`GZI$j1QV_Bc9Bf&XjePrJD( zDvJXp#?93uJZjJo6C)pp;d1JYFw=HoSb|36lVXUN5M8n_jZvA#MX$ZvZ6CPH<$Zq7 z^LyU+x#ynyjbGoGmAGja$+j~|cQbMAW|AlTvbO?whM8wDdX{V!_+UVCl3oS}pCh}u zr6$IZyUfCdC5MnTIYrqH!d(X?_C`inbTmuj?9IZ5*5yeCgU{ou@>CfNz35A^Ht55> zDfR$F@x2tg4UXaWDRv7S$G=l-Da5cO%{taUS?8~<^9MYB-?pln8n@S1=k@mILlqAS z4QL0Mw6)q3@OTw_5R+-v#tmt19$Rf-N1umBY%T+;!K9+!61}v+9Ema^Ms5wGSZ@BkCFVa(i`VltN7U; zAg0ss&Zmc@jWtt75@=#@Uxu^_=YOY?rIr$6pavW`YPu@jYIv1!?`kdY!tf-t373Lt zP9bQeZ1+Pee%MY6q?Ed zE0i}CKq=_hC@b52$LiRWt3bY848N`?Ep-e!t{Hdg!J?#CjLta|CvSZM%x2xcPFCLC z?dA;i>O^*l;(vgH-N2Kk1|}(X3N4TEa<&^5fV;R|q%Ap7uy(Uw>jaJ`#)c z4_6MxBZA=VhByIEB3#YiXF#@VhiQBC?xP}#ndxK zgk{!&3poj3@E1iufT)WxuMl8Tg(8@wPQhj6f#wxTnZ2BvU^+=D1~RM@%=qJ+B8L_= zt57Jj+MozqzfvT}idO_$%Cr=T;(bL!79RK{(?91&+V=+S&?kY#*qijEWo49d^6@_+ Co~1ef diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index 38ba1565..9b7518ac 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -194,6 +194,7 @@ def fill_data_group( ], axis=0, ) + template[f"{modified_key}_errors/@units"] = units template[f"{modified_key}/@long_name"] = "XPS intensity" From 5f89b58a494d93ea550fdf8e6ded4a76dd57c8c8 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 07:48:14 +0100 Subject: [PATCH 30/41] small changes to scienta datamodel --- examples/scienta/Cu-HTTP.nxs | Bin 566144 -> 565264 bytes pynxtools_xps/config/config_scienta_txt.json | 14 ++-- pynxtools_xps/scienta/scienta_txt.py | 66 +++++++++++------- .../scienta/scienta_txt_data_model.py | 3 +- 4 files changed, 48 insertions(+), 35 deletions(-) diff --git a/examples/scienta/Cu-HTTP.nxs b/examples/scienta/Cu-HTTP.nxs index 3531148e6dbba9c4adb0fc5f1a22f6f4da40a4bd..13ae3b5e482d31388ea13263d03b59a7c3a3f6d3 100644 GIT binary patch delta 3734 zcmeH~|5KF59mj8XpXb?qxC0&pa>q9XOD3p^91)x|)y$dL#IXr?fQ2)ta47Oc4+zMB zri~|wVoYIXL_QxT&o4o^}vpCQtltT$Hq*Xwo%#j1~X_swczeU6=Rp|!slT1Acb6C zgP^*U6=jyx)KorK*woT-xV_U;-*ULHuHNmb>27x)fqoCl*K4NrYYviO}kG>c@HGwQ}Pw}jfr)&@hM3^K0?&-%SofNOOq`&|o?VOIkh zCeCuk*FA+2F|tESGun{zmD3zJ)Y`hgrlGUNU_dZc#>@~tLS;DKjE2z}jvA2}gWZFk z%==1YTYG&+M`wF|O@q6$q26HNeIB$=A=5jVKWB4wFg%3()}WFwq93xL5}GSXIc#e{ zX}rygW=%Ns27jdw{cc^>sX7$#a_YW{L5cL{4j@SFC&&22RrGof9(_|I!F`+Y96^e| zh&ud%pPTqCJN_p@ZQ7XUehXU_G#Tj!zJr|!r5SdTT0<&o5(+qY<*=pRNd9lEEMOEGze`W zBcx#W0-{&#BrZg`k|4v3oeYzI#5!kvJJ7Ds+*u>u-C)pG+xVu~Rx%3D#o_&Md3gBAzLaKkT zh2-1hw26-{Q?vLVqH5ZQ&0-6INmfl}d_nzSvl^z&FeYXV;@z2#$~np09}a z2?}ci2lzTf6F;0Ls+E=tTZ5zm4s8_~|JWktE6A%^9NfA_R10o8I+(PIcYN4(P|NHN z+0`G-XBtnR5Z^A0atqxRS!Bogil}5?U)&+($=~6rl-|;YTJ|>Nj+*cP9R5GM^2=2*{_E|_{`3h7rOsYeW-OCs{ z!9OjR#-2nrm`WBa_^o4-itvm!aDWq06EA*KQW4HYEWGWMWL2>1T;!t$FWD&L56?)9 z#1ce!;-IuakVEJ6)I-r$sR9NAQaI)#!j=+L2IqFM1RlO1nX;1SVM~#}#ySuz0p9~` z;RT;an;(zGQSSMx^oyj}Sj)sm{PtaGA|Ymz{hy9^@PbFuEg@!0fR~NP?O#8az`d9X zVr;_5`zY-aH8os*C>`iJzW zF1uT4e7d~ZN=?StI?4Qtqtv)k4tFlmsd}9qchDNY^BW5H{*bB?4RtM&sIgY3ZaAWy z6{gSAQ8IdDL68@QXuN_{endye+|k8?ocuA3N02!esd}Z@zxyRY$|L&GPQmf>wBgEC zx{;<9Z+ymDvflP|aY^x}b=IP1tX2zTglUdx@dR%V)4$_ns>jzgwd`+dY2aPIq%+G{ zf3>XjhH722WCg`IC%ed+V%`U;7U z-KR4PTW0XH|E7*AG4hy#*IXx^m^M=eB z(I=t75WU|FhIV&X&3^Y`Hvu$G%^8ATp7YhKPDd;v6phm-kQ8lb#95WL7Nh!JT&)12#?-WY$75 zEc)q|-Z>d?)z4O8TVgQy9~2DFF7x{Vg6T^2RX%lreLHq(V0e6pRmFw^oETyav7rK< O)9jdO{zgerH~&ApjW=lk delta 4069 zcmeHJeQZ=XdXO?Bu0M8rw;Tp-dz|iPJ1=K!BV=*NBzai6Jy`f<0?HXocdW?dA!J;xf2&sFK6bmP*~0{IQKr?G!Y$1++=fkIm{p+xxIh zz9#b5{^Cj2z31F>&b{~i&hPjJVoUtLUJ@w6{s`zSi&zr+m!1 z9J#(B$u6o&oG%*v4+`}dsPT#>bDY-=w(G)rlm(@2s4(PyN@jOk&=iuc)aWiW8YS51 zOPF&WF#1s|c-v4!8u27d*u7pvaL8Ff!P0?N7L+wLZLpX2mF({7+uwVjb63~?lGeT5 z-8-Aw4s>y$q2WUCcPRexEpz>yooFRV_`|+VRKNnA$S3p8IvV${AkrPJ86!Y*_tfV`v3LZFaM3lYQh~GYoE4;}R zE?&(S{>XwPR{sDWEY#4L@~R1|g}2x7*{rI7_gke?_5TZu$?Yn1JD}p{yv*FI`6+~) zta&|8FihUZnW!BT~hV899WWB7+3|PJYD#K$vtY0sKuf0%#zHH}JDS zxVwQ@Kp6AQ0Kupyo8#mb?UKmPKB(jWosGF;>=%3Z*LfUo1tUW{Sh$<_F3OYr^P>~L zkC}qb85@ejM25k`grD(W@W>0z7K0077qE$Kd6!p^xuR-3@W~~fveQxidgG0u52SGun7Cx#KC|g@>*hnPz$wZoA--O^{pEwM+0(?~`4MrQmo+V1G z_?qEhiAo(lu50B=gT$<#847Juq$}Z^Y-4FjjP7=;5w!LdOBa>)<=&UboZ7z9eA-<& z?o@AbqYq*gqqH#vIuy&H~406@3=|#(^2&NJ-|{ zA@dE=1pZ6B#45ioDo~7^WXmhXK{Hrx3Njn37BjJ}Lzowf`1b|9tM%51Ehtrch<#cs zUR;SIVGWAO0Wr>FI>i3;T~Pt3eMr;x92FIS#)fo&UaTOL-9IH#J{3h|=F?)CAQcVk zxAZ}2rRagvVKJ7np|GwT)xdf$HL}={Xv)h-7MP?R*b$7DL*OfHVMQN^Yrm$_CmoX( zuwOMau&4eaO6jRkX`zC(m)M;xePAIcfbY$korDP^i=m`%D!_QMp(?17v7j-;G3wcU@^lRxBWrRP7SmDBiy#6IpO zX=y3LC)hs@le9&Wqd$?AIhA{fJhDlV{0@G=5}m5k-c{ zLOO)}7Kuoffw}(U?~qwVX#WXOI)u+ZqX^TIMHqQiyRGvxiJ|vNImvRAt#OpCDl2_< zb@{U^9Hna<4hvXgq`)+Nf%V47UvZ(@R@Cpg-Ca9(ceUA{@7mSd)^BgvRoAGhS=%qk z%|}~p`_)3MUieV4vOi)+4th2V6>Q`qQX%1^!|cxQiR~fsIn4Y=vMnzK=#%hnwYUdj zVQ~{I`JB|I7A)+@=Y%|Tw8C%P;ydh_FUd5j<+C&YB(80#2g|+9v;gF4>JG*zj2EM& zPtWrdYT4D?*>tG4xnIqX`XzDjK_w9ynL?*llnOcFqUA7IPxDh6w4Ih@%=C-|qh~L- z(ki6x>u;E5Jk&tTFV|98`8#F7YFdcEQ8#V5rj9NX^;i(}(OfuLN6o37hU#buytkRI zNogKmP<_lkM(}Zo{vSE`G@E*by3>C^Et&eGjN?jIIW*Q{2*yaRlvK-5lZ$dC{kgz# zQfTpTuGOIPo74X&IIg$(VAIa#{mmkvQIcyViREMrWm(fuC>B1Pbx7BT41JJwlT3YhLLah1i!*Xjwsu;SqlJW6fKsR!C3chxA73Md$f9p$)m?0= zOL1P}bdPHK`5*;pA--XXM*oGPv8j1}E(GJZl{a4H3Hq&6o5%3O6Lecj eV """ - if "Binding" in energy_type: - return "binding" - if "Kinetic" in energy_type: - return "kinetic" - return None + return re.search(r"\[(.*?)\]", energy_units).group(1) + + +def _change_energy_scale(energy_scale: str): + """ + Change the strings for energy scale to the preferred format. + + """ + energy_scale_map = { + "Binding": "binding", + "binding": "binding", + "Binding Energy": "binding", + "binding energy": "binding", + "Kinetic": "kinetic", + "kinetic": "kinetic", + "Kinetic Energy": "kinetic", + "kinetic energy": "kinetic", + } + + if energy_scale in energy_scale_map: + return energy_scale_map[energy_scale] + return energy_scale def _separate_dimension_scale(scale: str): diff --git a/pynxtools_xps/scienta/scienta_txt_data_model.py b/pynxtools_xps/scienta/scienta_txt_data_model.py index b9d2fc8b..6cae99cf 100644 --- a/pynxtools_xps/scienta/scienta_txt_data_model.py +++ b/pynxtools_xps/scienta/scienta_txt_data_model.py @@ -36,8 +36,9 @@ class ScientaRegion(XpsDataclass): region_id: int = 0 region_name: str = "" dim_energy_type: str = "" - energy_type: str = "binding" # energy_scale energy_size: int = 0 + energy_scale: str = "" + energy_scale_2: str = "" energy_units: str = "eV" energy_axis: np.ndarray = field(default_factory=lambda: np.zeros(0)) lens_mode: str = "" From f84137c9f08ab8ae8df90a04013792b22906f49a Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 07:55:03 +0100 Subject: [PATCH 31/41] removed unneeded comments --- pynxtools_xps/file_parser.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pynxtools_xps/file_parser.py b/pynxtools_xps/file_parser.py index e4669757..09b80c56 100644 --- a/pynxtools_xps/file_parser.py +++ b/pynxtools_xps/file_parser.py @@ -26,7 +26,6 @@ from pynxtools_xps.sle.sle_specs import SleMapperSpecs from pynxtools_xps.scienta.scienta_txt import TxtMapperScienta -# from pynxtools_xps.txt.txt_specs import TxtMapperSpecs from pynxtools_xps.vms.txt_vamas_export import TxtMapperVamasExport from pynxtools_xps.vms.vamas import VamasMapper from pynxtools_xps.xy.xy_specs import XyMapperSpecs @@ -43,7 +42,6 @@ class XpsDataFileParser: "sle": {"specs": SleMapperSpecs}, "txt": { "scienta": TxtMapperScienta, - # 'specs': TxtMapperSpecs, "unknown": TxtMapperVamasExport, }, "vms": {"unkwown": VamasMapper}, From 19a17aeb02ad22f81ce8fcf0cc1d6258cdf7eec6 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 08:06:00 +0100 Subject: [PATCH 32/41] add type hinting --- examples/scienta/Cu-HTTP.nxs | Bin 565264 -> 566144 bytes pynxtools_xps/scienta/scienta_txt.py | 14 ++++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/scienta/Cu-HTTP.nxs b/examples/scienta/Cu-HTTP.nxs index 13ae3b5e482d31388ea13263d03b59a7c3a3f6d3..1cf5589be55964b03eae7b9d864e57a21ccc1300 100644 GIT binary patch delta 3393 zcmeH}ZA?>F7{`0gxxMFH-n59I z0YZm&%41rc29zrHC+P+ZJhHi?=dzxAXt(Ycp*f3|<)Iw)a+UP3n8hG_l^|vlxur6@ zT>k)jwVH(VDQ%U?WT3IPxs7zqUJz|JyeP7vVlW7VzAgR$;&NdaVh%W~j5NdoN~mcs za0=bVfD0S00T|l#X@qLZK+?R_!ou~ng)6F)_f;M|R8w2Ar}9v8$^NRU-GzH=EA1Vf z3#g?`iudJCjn`LzBod6L2P!~3vsM7Ji1c~H{?pA}F8BMuu8kD|pbtl26|1&@!7!Nc zHrxI#xU(eAlL(ZZ8Up(jRia{@C4os0G@fM@wcvz^j)guoO<1Kq2T@k0uisT8|_G9`ghOA^uFO zRARAmMqpu|=b^u%q3R_2v>Y8r&{sl37${(lDrA};Ct9XQ;~RlYLUS$__~^hawUKcj zqo)X%Xpu&pP2F8EjOAWI5|%!>$4Kv8Lxi1mq06(NriE?1iR!RW-xA0vy;+WoEdDF> zzyaOGiVSG(C2ls`SH=a9RPU10Si(#vIc=<<-93qh5Y$B}1(&$j?dC*I@YwuL(RArm z6xaI^Cz0{6$jh8WraBu(N@A42Z5;KROSfL)ZV2wuso72F;%1@`YZvDfNZHhQgNvI? z$Km26I)?J;>9p;akNe8#-ZVB>6m>UXfgQcg{T2rAwy?4Rt~DGE#V_TXCN|w+!@CTQhHDi$wKP1a++}Hd_4}2d%C4M{!xKTcg&AaHy3^XmaS+IUHeY z64e{9U^o>>H9auE8QDFZ`hgW?RuG#jpK7CcfhFEjA5NBKgM9v8F+(k|n8)e`v4XQQ z5FD&up+QbVRq_l<<#I>xQspun2&7G}T%qPbC1|S&F4Qe#9t?Q+3m5g~LV-S<&Cf(P zhB>@bupXK)fub8RhM!Ev9K)M6=x*%;n|U9C#KwMniyH!A5UdL@f5r)~$okuH3K zbL8aKJ;4!R)MF0)#=u`>%m2W|O8n_(IPZ6AxsQRO;PE;>Wtcc9I;S1P4Q%HdlLZ z3CRTV!j>K5ojZ1r)ZQE-O4k9iWswDd>hi{qZ^-!*X%jd=U?yttkWbm*hF^Ek}FqMD=Cm}D;w?lfE38@h;~vbznj|0@vz{p JSfr%-e*uB-^R55@ delta 3107 zcmeH}`%e^C6vy}8J3IG|EI0}Z@{(Gb;*(WZvl>ViwbmHRE@E*NU0{`mC=WptsKFJD zqE@oF4F^*nNUhM+STayli>5JZjoDgFI%WB4F&PI_KnP5UW znxFJqCMDadsx}vt)>UdW2yW-FSnxJb3HFwwZq&h18H&YVsz9@*y%t$rQ(RkHS5sV2 zT2xnBtfaw}cd^T4U=4F6W#qfPUC5<(%j0^28K&hyc^+8}%SurUuXdmz9royM&a zGZR|u$nRwd`pO#FZ~00PM7NSX{Mu#I)Qo%gs~EU51N#V)U300~)%mTC-!tLA2&z`c zJmo#Cmr=jp?)(s2DAK!fO!<7(Mtt@(Fb68*)|a?`D)f8F1e{311GFNEIHpKOYY3or z2V&TLyDOPmO%BjN;}vxxkOB>noa7}e(oDqu(=G2qE0JtS?z2%qgH5*D8nQIKHJ zM7l}!#$dF|WMt5}l!Qg;;ZmYd^4P|vq^Q_0xibD;9{D#0I}h-0wvqz`d`F24aU5BA zXBDv~C-`3AF_8@!30IJvjK?hpRa%$6AU=YJ4)W*c$#Ma$fZNM(F5LZ^Fn+>K&W}eu zkd=YW(Ek(G@v~P+B1H@yZ%};Bzr>6u-X!-rabZ!Q&YxtGR9;ptDE#~#<~t;W2he(0 zNQswZ`)GjHO)3%_7%vj}Qn#SA7uy_yPAUuv(gJPgg!jSXKss1cE=+w?l`WrukAZJ{+1 zTQm9d--Kigo@`N$7;Z6EF7Ww-!pS+P5ZpZ^m#50wrv!P`ff<~&S{>gJqgDDV1+v^E z7q(?-8NU*zO_h;DoiTI$bgj~61A#%mUi-+2ja${Su9U2;fnvt+N!PST(gV;ukG0`J zi+iF~pbc#u4NYI6YIJ1v*ue4VjS>}p0~I0s{y!ems{D1q)>g1x7p6g4wAe%LRE^*p zoFs;W?^p!`%VZ@sWqT+*d5RboJlhn}9!JV*UV#_U6BJo*Eo*acRJPzIgQ$=*eavTM ziLH@P|AZET=_Xmp?PhTog5yu=abA-nCeJ}exIJE*%kS+G6=)smzzh~db=7AubjqRQVQ!X~3nw~7ulmq-MyyOwjayg5 z_IFgHU;44GmSy2-!lvS zg{sCaD?K(jAd31b8lEWbR8gIO+dmrV#AL}^H%cAK>9N;L3tX1BW$yTtDvI#z3Qq54I@H0(?!D-g8UinA-={?A@qMv!xBRBIjVHAY4`6cxjR@^Z~E&(w&oV+-d&cXBzJ>viK{t zCBzOlV6?LGaL3=cs)di9(0^0{JO8FpD1F##a)_5TO7v$l`jdQPqR9K6(n0?w?ayf5 zTCM-r0CrnhB5cfM>-ed4tONyTb@|KynfYvLaD3Oo(z$5^+cxYlE0-C#5*AIMcas9o z6M6y_ogmZsoo!Uu>-o{ZkV9x|36&rt5pC1 diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py index d781ef27..d7160d42 100644 --- a/pynxtools_xps/scienta/scienta_txt.py +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -167,7 +167,9 @@ def construct_data(self): for spectrum in spectra: self._update_xps_dict_with_spectrum(spectrum, key_map) - def _update_xps_dict_with_spectrum(self, spectrum, key_map): + def _update_xps_dict_with_spectrum( + self, spectrum: Dict[str, Any], key_map: Dict[str, List[str]] + ): """ Map one spectrum from raw data to NXmpes-ready dict. @@ -265,7 +267,7 @@ def __init__(self): self.header = ScientaHeader() self.spectra: Dict[str, Any] = [] - def parse_file(self, file): + def parse_file(self, file: Union[str, Path]): """ Parse the file's data and metadata into a flat list of dictionaries. @@ -290,7 +292,7 @@ def parse_file(self, file): return self.spectra - def _read_lines(self, file): + def _read_lines(self, file: Union[str, Path]): """ Read all lines from the input txt files. @@ -409,7 +411,7 @@ def _parse_region(self, region_id): self.spectra.append(region_dict) - def _check_valid_value(self, value): + def _check_valid_value(self, value: Union[str, int, float, bool, np.ndarray]): """ Check if a string or an array is empty. @@ -433,7 +435,7 @@ def _check_valid_value(self, value): return True return False - def _get_key_value_pair(self, line): + def _get_key_value_pair(self, line: str): """ Split the line at the '=' sign and return a key-value pair. The values are mapped according @@ -465,7 +467,7 @@ def _get_key_value_pair(self, line): return key, value - def _re_map_keys(self, key): + def _re_map_keys(self, key: str): """ Map the keys returned from the file to the preferred keys for the parser output. From 8c0374cf6362d6ffaa1502872baa0a3724a38caa Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:02:44 +0100 Subject: [PATCH 33/41] replace entries and detectors cleaner --- pynxtools_xps/reader.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index 9b7518ac..571e0e2f 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -145,7 +145,7 @@ def fill_data_group( count += 1 template[f"{root}@default"] = entry - modified_key = key.replace("entry", entry) + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") if key_part == "energy": energy = np.array(xr_data.coords["energy"].values) @@ -210,7 +210,7 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat unit_config_value = config_dict[f"{key}/@units"] for entry, xr_data in entries_values.items(): - modified_key = key.replace("entry", entry) + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") if XPS_TOKEN in unit_config_value: key_part = unit_config_value.split(XPS_TOKEN)[-1] @@ -240,8 +240,9 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat detector_scans[detector_nm] += [xr_data[data_var].data] cycle_scan_num = data_var.split(chan_count)[0] detector_key = modified_key.replace( - "[detector]", f"[{detector_nm}]" + "/DETECTOR[detector]/", f"/DETECTOR[{detector_nm}]/" ) + cycle_scan_key = detector_key.replace( "raw_data/raw", f"raw_data/{cycle_scan_num}" ) @@ -249,7 +250,9 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat template[f"{cycle_scan_key}/@units"] = units else: # If there is no channel data, iterate over scans - detector_key = modified_key.replace("[detector]", "[detector0]") + detector_key = modified_key.replace( + "/DETECTOR[detector]/", "/DETECTOR[detector_0]/" + ) if scan_count in data_var: detector_scans["detector0"] += [xr_data[data_var].data] scan_key = detector_key.replace( @@ -261,7 +264,9 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat # Add multi-dimensional `raw` array for each detector for detector_nm, value in detector_scans.items(): - modified_key = modified_key.replace("[detector]", f"[{detector_nm}]") + modified_key = modified_key.replace( + "/DETECTOR[detector]/", f"/DETECTOR[{detector_nm}]/" + ) template[modified_key] = np.array(value) @@ -296,14 +301,17 @@ def fill_template_with_value(key, value, template): for entry in ENTRY_SET: if isinstance(value, dict) and LINK_TOKEN in value: # Reset link to original - value[LINK_TOKEN] = initial_link_text.replace("entry", f"{entry}") + value[LINK_TOKEN] = initial_link_text.replace("/entry/", f"/{entry}/") - modified_key = key.replace("[entry]", f"[{entry}]") + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") # Do for all detectors if "[detector]" in key: for detector in DETECTOR_SET: - detr_key = modified_key.replace("[detector]", f"[{detector}]") + detr_key = modified_key.replace( + "/DETECTOR[detector]/", f"/DETECTOR[{detector}]/" + ) + template[detr_key] = value if isinstance(value, dict) and LINK_TOKEN in value: @@ -311,7 +319,7 @@ def fill_template_with_value(key, value, template): if "/detector/" in link_text: # Only replace if generic detector is given in # link. - link_text = link_text.replace("detector", f"{detector}") + link_text = link_text.replace("/detector/", f"/{detector}/") value = {LINK_TOKEN: link_text} template[detr_key] = value @@ -357,7 +365,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): xps_data_dict, key_part, dt_typ=XPS_TOKEN ) for entry, ent_value in entries_values.items(): - modified_key = key.replace("[entry]", f"[{entry}]") + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") fill_template_with_value(modified_key, ent_value, template) else: From d4cb20185605524fad1bf81c78fce5c83142dc7b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:31:53 +0100 Subject: [PATCH 34/41] entry and detector replacing --- pynxtools_xps/reader.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index 9b7518ac..571e0e2f 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -145,7 +145,7 @@ def fill_data_group( count += 1 template[f"{root}@default"] = entry - modified_key = key.replace("entry", entry) + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") if key_part == "energy": energy = np.array(xr_data.coords["energy"].values) @@ -210,7 +210,7 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat unit_config_value = config_dict[f"{key}/@units"] for entry, xr_data in entries_values.items(): - modified_key = key.replace("entry", entry) + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") if XPS_TOKEN in unit_config_value: key_part = unit_config_value.split(XPS_TOKEN)[-1] @@ -240,8 +240,9 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat detector_scans[detector_nm] += [xr_data[data_var].data] cycle_scan_num = data_var.split(chan_count)[0] detector_key = modified_key.replace( - "[detector]", f"[{detector_nm}]" + "/DETECTOR[detector]/", f"/DETECTOR[{detector_nm}]/" ) + cycle_scan_key = detector_key.replace( "raw_data/raw", f"raw_data/{cycle_scan_num}" ) @@ -249,7 +250,9 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat template[f"{cycle_scan_key}/@units"] = units else: # If there is no channel data, iterate over scans - detector_key = modified_key.replace("[detector]", "[detector0]") + detector_key = modified_key.replace( + "/DETECTOR[detector]/", "/DETECTOR[detector_0]/" + ) if scan_count in data_var: detector_scans["detector0"] += [xr_data[data_var].data] scan_key = detector_key.replace( @@ -261,7 +264,9 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat # Add multi-dimensional `raw` array for each detector for detector_nm, value in detector_scans.items(): - modified_key = modified_key.replace("[detector]", f"[{detector_nm}]") + modified_key = modified_key.replace( + "/DETECTOR[detector]/", f"/DETECTOR[{detector_nm}]/" + ) template[modified_key] = np.array(value) @@ -296,14 +301,17 @@ def fill_template_with_value(key, value, template): for entry in ENTRY_SET: if isinstance(value, dict) and LINK_TOKEN in value: # Reset link to original - value[LINK_TOKEN] = initial_link_text.replace("entry", f"{entry}") + value[LINK_TOKEN] = initial_link_text.replace("/entry/", f"/{entry}/") - modified_key = key.replace("[entry]", f"[{entry}]") + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") # Do for all detectors if "[detector]" in key: for detector in DETECTOR_SET: - detr_key = modified_key.replace("[detector]", f"[{detector}]") + detr_key = modified_key.replace( + "/DETECTOR[detector]/", f"/DETECTOR[{detector}]/" + ) + template[detr_key] = value if isinstance(value, dict) and LINK_TOKEN in value: @@ -311,7 +319,7 @@ def fill_template_with_value(key, value, template): if "/detector/" in link_text: # Only replace if generic detector is given in # link. - link_text = link_text.replace("detector", f"{detector}") + link_text = link_text.replace("/detector/", f"/{detector}/") value = {LINK_TOKEN: link_text} template[detr_key] = value @@ -357,7 +365,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): xps_data_dict, key_part, dt_typ=XPS_TOKEN ) for entry, ent_value in entries_values.items(): - modified_key = key.replace("[entry]", f"[{entry}]") + modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") fill_template_with_value(modified_key, ent_value, template) else: From f7ce09f396bebcf59af5415b8a9ffad52639bddb Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:33:28 +0100 Subject: [PATCH 35/41] add scienta txt example data --- .gitignore | 1 + examples/scienta/{Cu-HTTP.nxs => Cu-HHTP.nxs} | Bin 566144 -> 566144 bytes examples/scienta/Cu-HHTP_0001.txt | 1268 +++++++++++++++++ examples/scienta/Cu-HHTP_0002.txt | 348 +++++ examples/scienta/Cu-HHTP_0003.txt | 368 +++++ examples/scienta/Cu-HHTP_0004.txt | 368 +++++ examples/scienta/Cu-HHTP_0005.txt | 848 +++++++++++ 7 files changed, 3201 insertions(+) rename examples/scienta/{Cu-HTTP.nxs => Cu-HHTP.nxs} (99%) create mode 100644 examples/scienta/Cu-HHTP_0001.txt create mode 100644 examples/scienta/Cu-HHTP_0002.txt create mode 100644 examples/scienta/Cu-HHTP_0003.txt create mode 100644 examples/scienta/Cu-HHTP_0004.txt create mode 100644 examples/scienta/Cu-HHTP_0005.txt diff --git a/.gitignore b/.gitignore index 7b5a887f..1b287025 100644 --- a/.gitignore +++ b/.gitignore @@ -201,6 +201,7 @@ cython_debug/ *.txt !requirements.txt !dev-requirements.txt +!Cu-*.txt !Ag_*.txt build/ .python-version diff --git a/examples/scienta/Cu-HTTP.nxs b/examples/scienta/Cu-HHTP.nxs similarity index 99% rename from examples/scienta/Cu-HTTP.nxs rename to examples/scienta/Cu-HHTP.nxs index 1cf5589be55964b03eae7b9d864e57a21ccc1300..9e3ed146c331a1649060945ebc5d6d3d71b96474 100644 GIT binary patch delta 911 zcmZoTuG9cTTNqukroZ0L&NQu>*B#U(|hxv6<2`UOR) z#l@vXsqyKFrRk~d{ke?W`*WE@FQaRJ;J{3T_V>=r+uu90q+-}UVI2z*+UIX%**olE153#R*KF-lKfzDRO=Ll)y3CS{noer8^ANl|HTYF>$c zK~ZXPacNO%e0pMOdMZPEe=g(p{#+)}%UDc#;J{3zDes+`x4(C0NyX-t3F}yhG-duq zmhJO5vX-V`aZ7+08}q@l=2oVb zR)&UpW(Jlfrqdk{uq&a7Z7)2)UfqkZu{MH3dis5FM$YLHejFtTaoI=?>Fw+NIL5M@G$=>`ME;)6MSSrB5jNgUeK?}u}!B7}G&fTnHt c Date: Thu, 28 Mar 2024 08:54:04 +0100 Subject: [PATCH 36/41] remove unused convenient functions, to be added to pynx.utils --- pynxtools_xps/scienta/scienta_txt.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/pynxtools_xps/scienta/scienta_txt.py b/pynxtools_xps/scienta/scienta_txt.py index d7160d42..dafaf41f 100644 --- a/pynxtools_xps/scienta/scienta_txt.py +++ b/pynxtools_xps/scienta/scienta_txt.py @@ -522,22 +522,6 @@ def _re_map_values(self, input_key: str, value: str): return value -def str_to_int(str_value: str): - """ - Make str_value an integer. - Maps e.g. from '0001' string to 1. - """ - return int(str_value) - - -def str_to_float(str_value: str): - """ - Make str_value an integer. - Maps e.g. from '0001' string to 1. - """ - return int(str_value) - - def _extract_energy_units(energy_units: str): """ Extract energy units from the strings for energy_units. From e4e07612ab487a15dd025b8d80b64c61c604545a Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Thu, 28 Mar 2024 10:16:41 +0100 Subject: [PATCH 37/41] change checking for specfic tokens in config file --- examples/scienta/Cu-HHTP.nxs | Bin 566144 -> 566144 bytes pynxtools_xps/reader.py | 12 ++++++------ tests/test_reader.py | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/scienta/Cu-HHTP.nxs b/examples/scienta/Cu-HHTP.nxs index 9e3ed146c331a1649060945ebc5d6d3d71b96474..9e5c48620b5e80cfbf6ad8edc54ca15da9ff6fd1 100644 GIT binary patch delta 95 zcmZoTuG9cTEsQNpEzB(}EvzkUTi6W`I9eze8dw<`S{WPb8JHOu7#M3C7+M(^NH9Qv Y0+co~Ff!3KFxEA~P`|zC06X7f07&H&`v3p{ delta 95 zcmZoTuG9cTEsQNpEzB(}EvzkUTi6W`IGQUM8CV$`SQ%L88Cw_|8X0IC7+M(^NH9Qv Y0+co~Ff!3KFxEA~P`|zC06X7f089ZD5dZ)H diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index 571e0e2f..8b34b847 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -157,7 +157,7 @@ def fill_data_group( template[f"{data_group_key}/energy/@long_name"] = "energy" template[f"{data_group_key}/@energy_indices"] = 0 - if XPS_TOKEN in unit_config_value: + if unit_config_value.startswith(XPS_TOKEN): key_part = unit_config_value.split(XPS_TOKEN)[-1] for key, val in xps_data_dict.items(): if key.endswith(key_part): @@ -212,7 +212,7 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat for entry, xr_data in entries_values.items(): modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") - if XPS_TOKEN in unit_config_value: + if unit_config_value.startswith(XPS_TOKEN): key_part = unit_config_value.split(XPS_TOKEN)[-1] for key, val in xps_data_dict.items(): if key.endswith(key_part): @@ -340,7 +340,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): if isinstance(config_value, str) and any( token in config_value for token in TOKEN_SET ): - if XPS_DATA_TOKEN in str(config_value): + if str(config_value).startswith(XPS_DATA_TOKEN): key_part = config_value.split(XPS_DATA_TOKEN)[-1] entries_values = find_entry_and_value( xps_data_dict, key_part, dt_typ=XPS_DATA_TOKEN @@ -349,7 +349,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): key, key_part, entries_values, config_dict, xps_data_dict, template ) - elif XPS_DETECTOR_TOKEN in str(config_value): + elif str(config_value).startswith(XPS_DETECTOR_TOKEN): key_part = config_value.split(XPS_DATA_TOKEN)[-1] entries_values = find_entry_and_value( xps_data_dict, key_part, dt_typ=XPS_DETECTOR_TOKEN @@ -359,7 +359,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): key, entries_values, config_dict, xps_data_dict, template ) - elif XPS_TOKEN in str(config_value): + elif str(config_value).startswith(XPS_TOKEN): key_part = config_value.split(XPS_TOKEN)[-1] entries_values = find_entry_and_value( xps_data_dict, key_part, dt_typ=XPS_TOKEN @@ -375,7 +375,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): def fill_template_with_eln_data(eln_data_dict, config_dict, template): """Fill the template from provided eln data""" for key, config_value in config_dict.items(): - if ELN_TOKEN in str(config_value): + if str(config_value).startswith(ELN_TOKEN): try: field_value = eln_data_dict[key] fill_template_with_value(key, field_value, template) diff --git a/tests/test_reader.py b/tests/test_reader.py index c832c933..623a8213 100644 --- a/tests/test_reader.py +++ b/tests/test_reader.py @@ -16,7 +16,7 @@ @pytest.mark.parametrize( - "reader_dir", + "sub_reader_data_dir", [ # pytest.param( # "spe", @@ -44,7 +44,7 @@ ), ], ) -def test_example_data(reader_dir): +def test_example_data(sub_reader_data_dir): """ Test the example data for the XPS reader """ @@ -54,7 +54,7 @@ def test_example_data(reader_dir): def_dir = get_nexus_definitions_path() data_dir = os.path.join(os.path.dirname(__file__), "data") - reader_dir = os.path.join(data_dir, reader_dir) + reader_dir = os.path.join(data_dir, sub_reader_data_dir) input_files = sorted(glob(os.path.join(reader_dir, "*"))) From 885cac8488f9b9401061b5803dcd46e9b65115d4 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 29 Mar 2024 11:41:31 +0100 Subject: [PATCH 38/41] units for intensity in phi reader --- pynxtools_xps/config/config_phi.json | 5 +++-- pynxtools_xps/phi/spe_pro_phi.py | 3 +++ pynxtools_xps/reader.py | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pynxtools_xps/config/config_phi.json b/pynxtools_xps/config/config_phi.json index f1bf367a..4efa3e2c 100644 --- a/pynxtools_xps/config/config_phi.json +++ b/pynxtools_xps/config/config_phi.json @@ -408,7 +408,7 @@ "raw_data":{ "@signal":"raw", "raw":"@detector_data:cycles/Cycle_", - "raw/@units":"@xps_token:detector/raw_data/raw/@units" + "raw/@units":"counts" } } }, @@ -528,7 +528,8 @@ "binding_energy":"@xps_token:process/energy_reference_energy", "binding_energy/@units":"@xps_token:process/energy_reference_energy/@units", "offset":"None", - "calibrated_axis":"@data:energy" + "calibrated_axis":"@data:energy", + "calibrated_axis/@units":"@xps_token:data/energy/@units" }, "transmission_correction":{ "intensity_calibration_coefficients":"@xps_token:data/intensity_calibration_coefficients" diff --git a/pynxtools_xps/phi/spe_pro_phi.py b/pynxtools_xps/phi/spe_pro_phi.py index fd136d4b..6b9936f7 100644 --- a/pynxtools_xps/phi/spe_pro_phi.py +++ b/pynxtools_xps/phi/spe_pro_phi.py @@ -221,6 +221,7 @@ ] UNIT_MISSING: Dict[str, str] = { + "intensity": "counts_per_second", "grid_voltage": "V", "condenser_lens_voltage": "V", "objective_lens_voltage": "V", @@ -613,6 +614,7 @@ def construct_data(self): "energy/@type", "energy/@units", "n_values", + "intensity/@units", ], "file_info": [ "experiment_id", @@ -1320,6 +1322,7 @@ def add_metadata_to_each_spectrum(self): for spectrum in self.spectra: spectrum.update(flattened_metadata) + spectrum["intensity/@units"] = UNIT_MISSING["intensity"] def _flatten_dict(self, metadata_dict: Dict[str, Any]): """ diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index 0bc0d02b..8dcc0aa9 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -253,7 +253,7 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat else: # If there is no channel data, iterate over scans detector_key = modified_key.replace( - "/DETECTOR[detector]/", "/DETECTOR[detector_0]/" + "/DETECTOR[detector]/", "/DETECTOR[detector0]/" ) if scan_count in data_var: detector_scans["detector0"] += [xr_data[data_var].data] From 0f5dbc0f9124c69428c4f38433d601d0067c9969 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 29 Mar 2024 11:45:55 +0100 Subject: [PATCH 39/41] script for regenerating examples --- examples/regenerate_examples.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 examples/regenerate_examples.sh diff --git a/examples/regenerate_examples.sh b/examples/regenerate_examples.sh new file mode 100644 index 00000000..a1b6a871 --- /dev/null +++ b/examples/regenerate_examples.sh @@ -0,0 +1,33 @@ +#!/bin/bash +function update_phi_examples { + echo "Update Phi examples" + cd phi/ + echo "Update .spe (single spectrum) examples" + dataconverter SnO2_10nm.spe eln_data_phi.yaml --reader xps --nxdl NXmpes --output SnO2_10nm.spe.nxs + echo "Update .pro (depth_profiling) examples" + dataconverter SnO2_10nm_1.pro eln_data_phi.yaml --reader xps --nxdl NXmpes --output SnO2_10nm_1.pro.nxs + cd .. + echo +} + +function update_scienta_examples { + echo "Update scienta examples" + cd scienta/ + echo "Update .txt example" + dataconverter Cu-HHTP_*.txt eln_data.yaml --reader xps --nxdl NXmpes --output Cu-HHTP.nxs + cd .. + echo +} + +function update_sle_examples { + echo "Update SPECS examples" + cd sle/ + echo "Update .sle example" + dataconverter --params-file params.yaml + cd .. + echo +} + +update_phi_examples +update_scienta_examples +update_sle_examples \ No newline at end of file From 08ecca210dad0be23f7920e283703e5e8293d5a2 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 29 Mar 2024 12:30:44 +0100 Subject: [PATCH 40/41] fix error in writing units for data group --- pynxtools_xps/reader.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/pynxtools_xps/reader.py b/pynxtools_xps/reader.py index 8dcc0aa9..936dd2a2 100644 --- a/pynxtools_xps/reader.py +++ b/pynxtools_xps/reader.py @@ -147,21 +147,28 @@ def fill_data_group( modified_key = key.replace("/ENTRY[entry]/", f"/ENTRY[{entry}]/") + long_names = { + "energy": "energy", + } + if key_part == "energy": energy = np.array(xr_data.coords["energy"].values) template[modified_key] = energy + long_name = key_part + if key_part in long_names: + long_name = long_names[key_part] + template[f"{modified_key}/@long_name"] = long_name else: # Define energy long name and energy_indices data_group_key = modified_key.rsplit("/data", 1)[0] - template[f"{data_group_key}/energy/@long_name"] = "energy" template[f"{data_group_key}/@energy_indices"] = 0 units = "counts_per_seconds" if unit_config_value.startswith(XPS_TOKEN): key_part = unit_config_value.split(XPS_TOKEN)[-1] - for key, val in xps_data_dict.items(): - if key.endswith(key_part): + for unit_key, val in xps_data_dict.items(): + if unit_key.endswith(key_part): units = val else: units = unit_config_value @@ -171,11 +178,12 @@ def fill_data_group( for data_var in xr_data.data_vars: cycle_scan = data_var # Collecting only accumulated counts - # indivisual channeltron counts goes to detector data section + # individual channeltron counts go to detector data section if chan_count not in cycle_scan and scan_count in cycle_scan: indv_scan_key = f"{data_group_key}/{cycle_scan}" indv_scan_key_unit = f"{indv_scan_key}/@units" template[indv_scan_key] = xr_data[data_var].data + if units: template[indv_scan_key_unit] = units @@ -215,8 +223,8 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat units = "counts" if unit_config_value.startswith(XPS_TOKEN): key_part = unit_config_value.split(XPS_TOKEN)[-1] - for key, val in xps_data_dict.items(): - if key.endswith(key_part): + for unit_key, val in xps_data_dict.items(): + if unit_key.endswith(key_part): units = val else: units = unit_config_value @@ -352,7 +360,7 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): ) elif str(config_value).startswith(XPS_DETECTOR_TOKEN): - key_part = config_value.split(XPS_DATA_TOKEN)[-1] + key_part = config_value.split(XPS_DETECTOR_TOKEN)[-1] entries_values = find_entry_and_value( xps_data_dict, key_part, dt_typ=XPS_DETECTOR_TOKEN ) From bb83f8c68ffdd2736d3f6a9ee745856b16cafa49 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 29 Mar 2024 12:39:03 +0100 Subject: [PATCH 41/41] regenerate examples --- examples/phi/SnO2_10nm.spe.nxs | Bin 278240 -> 275672 bytes examples/phi/SnO2_10nm_1.pro.nxs | Bin 1865888 -> 1851080 bytes examples/regenerate_examples.sh | 1 + examples/scienta/Cu-HHTP.nxs | Bin 566144 -> 566144 bytes examples/sle/Au_25_mbar_O2_no_align.nxs | Bin 7902944 -> 7902968 bytes 5 files changed, 1 insertion(+) diff --git a/examples/phi/SnO2_10nm.spe.nxs b/examples/phi/SnO2_10nm.spe.nxs index 66932a92fca62c627363e27fdaaf6c80dc5431a6..f00fc7ce1145ee092602ff4783b668de700e6cd4 100644 GIT binary patch delta 16001 zcmaKT3wTpiws7`7p(K5g@=DUuCZ&ajM@w2>p%qAZ78FQ9uz+A&UIAb}?-L`qh29BD{ z&ZfJ_6m}jdr?T&ngOBA7vXg0S+8`Gx6@1DB<~nxYpaL?TMG!wjw3;be`I*(`BIRrh z{?1|x@OQRoHHRIv*~wgipU2MI3dnr%TOo8`AbuB$9(XbuSvRtWpt#K;gAsS|Tkiif&LEvv-ebpo@V)eLiy4FbQB zofzhFZcAwz0Fr?9PzlGeEt) zMLw?=%iGx%tlgoox)g7bs5I>qJa-A6y9LiZg6D0VCuv}j;dXL6=Ro#~-+e5@ZYOt$ z-~FQPovhsMA_rKF-R=x4DOA0ETmgIzvSw^`h*LTbOO#1QhRIZ1G+AKoV&{?OZa8== zb&-3xDn}jOF}}NqsP)K~spVN&a4Rm}9tn3xBERMl<T;#dEagNcO}E#lhs3nkWG#kAf>kO1$n(j%wa4rCK%f)Nqjbvn-mg7K;zF z?ko%K=E1riHd;xhGms}qt5l0%uPk&$B7f6^-;&&;YAyeSu@2%QlxwZ|1`_sm&Zsd} z4@k9i<-!VX`H8})*G0&n)Wy11TQVzdxwc72!A&)6l`Cge!ve3N_!b?q``K`}IS zZIPw;t@0gKbe@oeb-I9pLp$KShprG-@aOQ9^;FocCF@p>U22ZxF#nGh)|TfUshcEl zvY*h;B;0VaIr0o^d)m_8lJBu(j6m!lUSpBf+3b(wT?cXy7-+z{u$*Rq-B=bwpjwSY z*vN&~i4>vgMdt>(yx9Z!XgBf%t`EO zp=%hAcVjCb!l^91C@Z%NOGEKb*XcT5V}Pf#Eky+f{D?_0V9T+bZh&WD+1P*-5={?LZ-JpZ&0-ek53#Rry13jE#d-^ia*@Q>p- z)zeBW8Z}>rum~_!eSFDu5Y5f()S z^XzRDv=(8bVz(gt@CTzWrW9q&FuFqx;^i~cFW>Q*3Smk%v6E>?QA#VVjV~*!v)d*;TKLO)DPZycHqY_bW4v<5IZK}*yw3HSbB-wxeKxK>A8mUZZ@ODp1Mb`j0OD75eK`yWK!jAh%@?T1HwkR zxA%khB5ahquOEB|`=P`>>`ugrNkVCl!)Kx_d7^8%(PD=XYqZkge!T8N*ckD5BP^cq zcE8bX_pm1>+O3xDLZXSV*CxJ{fXdqUPr5fL0bbXhR%QUFw?AHP0B5upRv5sU?PnH` zOR>hDky3-~-7E*mX-{5Nt0fqgvo-M-+sCd=vPMI>nvK$m&1`RL&VU^?XjyoGkus4o zO)hqFb2UkVUu@KZ?C_Rh&}k#rCAiFHi%wOtpY; zJi|)eOWDw8MraqGGeOGjq=@_#UJYs^BC(Hg;+pE9P0z8+nvKbUXJw1fbL`QjOL1j7 zJu}PNa#b>_A&`f^|&IIn$8{CayHx^p4fR$$E(5e!##%P%$ zRSv?5!KA?2l&XX0ONlGF>oci$!%1PKTvj(`4g2cvZxIVS|EY^BhO5QmO8`wRbT3=D zyoxQn`hhk4o$9n0CU38Wwtd4&dpBA`U&)FlXimYUaJ)B_IT^V1F3zYyc#VZD>`v^EQgoEk>y@d2+( zGPNnVt3qNdaK%jQ$yJ&J8wQAF8N@S*H93JJ>{M?h?*7i)yarC&$Wn9=_`!nnSN8xL zX@M(a&8|qyL3jvgmUL+$Un=Ykk&P)mR>|3sD!GgmTuO#ZE=d_=2kl9X;#zPDfxueg zB!gkgS~7tSk!(6LB%6jolFji9!3J)$k+pC-%P_i2AT5Jzr454>GoC|elO47!L2gc^ zlwBz`R4HYb+}$UmhpdMC zi^w}#*BDg9U1+TsCl$lvgMk#<<`ax`5B#=+Y)tNR14u3-OL1q-b8+Kh*#HB)00Mbt zt2N=KQ2H{G6-QqvA(%RRV}$|`pNKr0#!GE@CTS^@75+&)dLg%vyw3Ayw01K2fC~Sp znoOcNx%3hUm*N1KO5o8_veBAwbXNY&d zyLy^Ii%_Wqyl)cASYQ7zDv=%Qo+RI1#UWhA8@!U+j{Bv7ZL|Kxz&$hImHC($g8eiwgn^LlQ5po4UrRrd& zr_X~0oloZ{ov|#D7#jM#Q;@_IVdHYiN@v)n;I5mvN$wOT=}Rhd_)CQgj$DW?XeyWH z79LPFTL5A%3C@uf+yiLCTn@Y@Ot<$2ZaO#m=7*mY(M1H8DAz|~r}+xOmY9m;717g` zEsTiEcu8nj_sl~fvSXod0>q<}hZ78tQu@vKo@T8D=8tre;Y zLyld~#dp*SAJn|-Wj1Q7k=ZD)Pj)i2AL}t|FM_ln8DY6wVr69CgvmXz&6i{qA}!Cl z)sVH8imXN4aJH88<@d(TD*J6x*{|<_K*(DF)3=kKC+6H`D)j}UGKlyT(OoZD*yANj^03#G@9TUe>J zUvg`EOmgdbT$*~h$h8++)rhcnN7^B9FAj2SB&@oZEVPF54ZIgnG8sB8;zM6Sc$7ow zbOr|#be$@iLbZ}Yr)xPVOR>Z9Emk_&NZj+#wS?}6CF}=49}(v`DTc4jgm*>5yJj4X|(0vBxs3l&(#J|+Ij@GFmewy<-u2s97=fS zO4$DpS(2k~_4rwU++~o&F2i)cVTd(HlXShNX2Y!AeZfIvKY>HX(RB=Wco>OL;zRL`@LM|qdhN!0%o@eu39{nA)?g1pH? zpEOR-S{!}0tanuO+%v>srj`?u2hQ}Q8j7F9j|hBQ75b@E8`s~f;L!7OkQVUazY z)eDH#nxK=*n<|lXcbvv-9)K$+QE$G#Yds~pbL=JDb38A5hTVC#t(|Dra}g=Yuy(Sv z$+c7G3$p6s&*iLmbM%3i`9h(yP4JM5B6qt4yw_uHuW85J?thVEJM+m1%kL$55J)p|d%7ePcu&3+4^xI(9tB>K z_z+BcnJmNM+JBa0r8K-OvB!TwASIQIrmxBL(D4h{`v%UhZLdo^@U>hlrnomCk+Gyc#h+!9fOLY2gF&s3x{X+LIMK6;B%786z2>2N8Nom`gq71RQ)IwrV{%dp`Ji(`3zZQ6FqiW-Unm36{ z>|?3#ZC*DI;_n$^c%9gcu6kdF#uNWeYQgp_u|}PLAh(e*ooWajie1|!**Bg2@hcMU z;hzD;YULe?i2q7@;5u02Bl+|XhOB_cE?Ve4{IpR>>&AAdNkg_WnY{gcM_)X){Fmrg zVl~$GSK0qS54Aeqkgatd*ABolI5X4LF!3YIG`9CeD-mMB529!d+?{y;LZ0W_#-F{< zw~e?6aDRBMwzT7q(Y+s&I|;S@r=k6y^!68I`#=8$Z6{KG%STd`*k5?cAEi~C@5iwF zFMtd?VAZF%*79{Hn35(a{u6n&ITn;|dHORsEPuX0*29+1$;rg@5R7JjVRV_zPP{Z1pnNJ^G{r+CqC%t1kzrES(Ju`luqFD%mqzwmqrGt> zd}}oAD2Qhf=W1~HvNfr1ae@ufK z2;DOb10x(-Ur69l!-uF2KiHuSUrJTGl*>0lt@ zcak7>LB2Z`!)^sD&=hmYZiEKOceko&Qm{_fbiJ%UH&xLoGx*hNO48xij=tp;AC4l3 z55hS%p^QvITj8S>G@t&^7llV_oH$G(1ugUSOCN@WE`;j2&-aNGs;g)SB0;C8sz4eB zRW_dG;>`AL8WpDu@Np7-i^h6|%N)CzTB(UfB54G=Ewt}oa5wZ8(|uZ(nO<}5LW5d# zY%0BzXfYnI*`j@tYM)L;@_NupRq_c8R2H^Uk$ifR`*CZs!YiBU%aAgJzNuZba*pEY z)(^Q~5_@~~w50@Uhf#5q_TV789x{j1zQofIeP=i|Opdq1M|QeX^OsZh_R1W~A}L(W zjgG|<^aWJnX&NIDZR14Z@m|1#q1jGanaFEUave(g#r`qh=Ny8b6aH(s2~_eN3XTa58;M^Ni;*L>z=6!%JOJ|DVZ1 z0#8mgaJn0Mr_!A%9TTLL&K1iDtDb1!%s(pi6h~hv z5+x3UK)J!m?-NVBS7ss0P#(#a>bB?S@pN%z5bJ5oueOzxDPRFN- zG7l%MwN#WvICYd^`HY<4O6E%rIdhQRtO^Mf&84;CRA}h}Iz`iLGelbvKW->4(&NYL z=lB%e1zToGwtRNaT#RPYj~tTJ%3z5BH&EhA15#rBVidoyQUZ4_p|!`BQroyDHC%dB z8ir3en0`voGe;63opcSowUJ|%cR@~1K92E zwMp=xhh|P|3&?TNec8h#+^VG59+j{@ksklw60VBkZ1#JSVweYI?Cs~VXSFPoWQILp zRRA(q(t6EzFV|08=dmRr!Y`p( zPoT_PEze#0K&Od# zwR%=dMcn!)0xLLI(t>DfEv+KN0q0lK0xfiNLV9=&7B5JNM>iPwr$@ioKo66Yj=mm? ziLtu2f7n(>abo0QTO+vg?zOIyX$3b4tKscCaHi7L93+#0!9Id(W3Z1aUuA3(S*8OX z3*&6tz>O%fjMlYTG3Ha?*M|&@ZIZENtL(q0PG*_5`aZ_u({)8%H2EHyj9*LhAZI^1 zU3jcbYpF{}=-DPDh-{g8AARYl#Q~kSQU{@M{#IJx6!#I(4W$^9shnTdz{d=^b=2+@ zS0gwmka)YzEAQDQL1i7C?;NPmI+?d<;uL=U%>of@jVBAgsl(fE$?z$@oZ^a(fmi*u z`VG8&D&*E9aT-jkN8)r?$zOw@nImoD<;>u8_~>$$)sJ`c8#;sGEGHf!UJ%3ccc|Eg zowGyDHf-&H+qYr06CT+{3rHrM-A1R9EckvKoj^vwm=M-w!-5c<;N+LD_@f6#u>?&n zXbvGGJYz;V&Rm5R_ieDexN7R{q1KX--b5|RhS+mU5HRBor+@PaByu{%fqOOv|L zhMgu;0bJRRT6iFL2R0c4KBMzv0A%@aYb0S_I|W z=nxpclcqW+^pjFtR9sSom$kf5xf9hdhRr)szY=(PC$gCcS2%JKSa+dSCPVQq>TpbR z7nhVyoK!k-a*=nk&pUDIIB#*O*E{9^TRRn+cOfSqlzYv1Hx|zBLiO-F7k`xj*^PDA ziPy2+G>~CYO5#bwuic*XAiYOd=K?OCzi-E zSrxdAT0|9DE<`~1HX4A7w^6T?AIS12(Y0;6YIbejR=*mG8&K@cQp6hZg6an3Q*{S2 zzC{?tSuNW31y|k94eL0n2F_w@XYKz`y-sQoZ$OPLyOG^S*uEE~ZGy_%v01QRvzlGo z@Uk%8W0M22MNpBg5aGls+U2z*B-$FN5zXr)alN$SHYw4zmsUY|FD^=V$?DzW1uc8g zVxnWWOZ;9qQHaLhC-u5RBKHf4IG6cPnG^dE3Qs?PE5y)5c<%w~)hzc>czinvSk(8A!TfYSkfR`ed06IGE+vfD_VN)hGT`|;GeID=H7ex6I?hyQI0nny zxH`;JI_IIo(uj7P zd;GvYk9V@die0o(x@YW^a!*#iyhigQ>HZtYAEKEpv;tR8{aOx%GbeD19tSSbsvoPF zAhHsd)O>lZRXv7Pc&}=@c_0Zw^J9E#fG2}m6~;~WnnchIJB(n? z)0CfvMs26)IjS|Bq>)p-;%bxC_kz?%?gyGm@f_2A5{{gv^;sRqu2r@BSqYo4c_drz z@C`WpI@gz!lKH21t)<_9X2PNuaX>xK3!S+=wD8ZQ{(R|Q@d=hM;0-McyZ_{-(ebD-bi=F0Pp=x4xbwr=U?0={o0=PI=^_bN5p8YNzL0bh@zyDHy)MR%@0-9Hpv zFN%CxTzj)#lBkBy;g#>`!o=K>#=jwI9XL!pA80L?g_2@mdg8pyzlCa+uXvFkqd30C zk_`Ax9`K8Jz@NiX-6~${)`Lll3;X}O<``^-Y)aNeVviDtQ_YrgTxnfB#0;zNC37LB zX#+;9`7l>i@|XV6&tRTwTx>AfJ>N2vPbC;G(RX|4KzdBmFewZZoEH@68!n!o^(Vo# z&zRS69U?~4GTaV!K>IUB#G7EZy-EI-I03*)7DV`L2zLuNXn(w1gB zf{u6feM^dLZ&9}cLP;=okXAp=r`YIDRNco`m_%Rs*{FtN4C1iHt%))}tQmJ)t$g(M zUbB>gRuJu*lwm6di#Gg_Mynbk%KYBa${uwLueYyCc%tlHn`$3a*3sz<))Ex@xFzJn zi6m`4#7CR^mR=5dTA!xL%Xs1vmS6GjNQNClw0dW(Uw;}bvLDCc>>$k*^|s?mH6?*e z)>xT)frb+?`*Cv?+p?lUb049Qy_&v3Q$;8FJ#;!q_8kv$F^%X^$nI*3r@{6GBF4u^sfBb39#D2(&8;Q^tcd)fEde1v!ex)^Li7tr9@6Oiv z7Y4rl*P0Sqwj6;}kM=t)l&8VlgGmw1S7sJ>9<|^|jqPjA#(#LxdaT_OrQ$s-vibUi z#8K?-lXaSRw8p+Y$>*pQg<35+2iu)yoV8y;+ubZ|ho9-So;3+GT5iE&OkVQWrv~lf zdcj1W6WrKGeNJdlS+s9XNax3FgW01etF)HKL_2*kK9Z+w=-i}jNv?WNno3SKQ&c|6 zGcs0b7a5C37uYpiwyeNO2(MV$n`24hEQz)qiB8(ArQ^pJ-H2Kj4l!ohUqG0D0I*rj zJm$nwDx4z9)wgP1ttr(Ui8#bRHXQgV?LHD6KiFJPwRnP!>Hb9Y>m};GAAV;yzcH?< z->e<$+cpTbJC*t^Xo+^ZW!@0x#s7XC}aj z@U5|S63iWCAf5~lk20{D0$&(wr^58n=9?0%eDJstoCdu{uoTu57>NCF#t6=eW_!$K zl(yu;si?I>TL8V&&DTTQcth%12xrC{dUic~U`!r(3e7=i*o#|RybQ$; zMl`t{Hp}hs0EtYJ+u?z7JM1ko`{Z^wMIxGt%<3c}O>LNq%<2rlCK+VN4LhET;h~0; zZ%O%MkuTE@bv!Xt?$3uw;^FdThsrzXFs;snr>gwu#3^_0neq%HOTI>k|0>4+(@wR6 z-)pXb&fRzvoC^oNW)~R=XLsYlN}eRm7o?-$U0&snUh$fzrb5GXb3=09zof#|>1Odg QV(|>~J*oN}&o^=Z4fb%z00000 delta 16061 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 IVB5j}1=}uMk^lez diff --git a/examples/phi/SnO2_10nm_1.pro.nxs b/examples/phi/SnO2_10nm_1.pro.nxs index 026579564ff8c6bc03024b0956246958e6dfc2c8..aa374886187237d38fe224fd146c7fb0cb937c60 100644 GIT binary patch delta 82350 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 bv~Tc4@We7hYwwPt9^2BL|M72A`l9~>FykBF diff --git a/examples/regenerate_examples.sh b/examples/regenerate_examples.sh index a1b6a871..d5b407b9 100644 --- a/examples/regenerate_examples.sh +++ b/examples/regenerate_examples.sh @@ -4,6 +4,7 @@ function update_phi_examples { cd phi/ echo "Update .spe (single spectrum) examples" dataconverter SnO2_10nm.spe eln_data_phi.yaml --reader xps --nxdl NXmpes --output SnO2_10nm.spe.nxs + echo echo "Update .pro (depth_profiling) examples" dataconverter SnO2_10nm_1.pro eln_data_phi.yaml --reader xps --nxdl NXmpes --output SnO2_10nm_1.pro.nxs cd .. diff --git a/examples/scienta/Cu-HHTP.nxs b/examples/scienta/Cu-HHTP.nxs index 9e5c48620b5e80cfbf6ad8edc54ca15da9ff6fd1..bc6fd2564b39588eab347955bd92e72775f8f49b 100644 GIT binary patch delta 4125 zcmeHJYgAO%6=vVpxePPIFbD&V$e1iEOGSp4A^}U(G>Gz2kcSTxB`S&%7;1eWqsE9v z1Rdk{M@-b3)TV7Jt$Nhf6+o?z#?+Oy+N`csqsFdPW3@HLwkAv3o;hdcf)juEza5yn z@7{Osea`;A+524Yh3CBN{}{xXu*3^y7(+*z;8r3Yoh_TeO=Ctwoe7&(%ENtE^9u0u z44A){LcY&C+D7+f!h^AB_d)@FR10RzIwsrb{aP?7_}n=qTW|k03G;t^Ba(*fje~Gn zwFLeuk@T9HDX!FJEUX8o@4Z7qska{PO3w$(Da%$idzxAr>Q;JE8k_2xn_HUdYL+Z) zSyC4kMmrneiXC32^SqE~g>kfXC$uF&3MQNaC&p2D2&vR^5+Y$#8e7-K{`{ZzTHvyT zUkB`uUIC2WDYwzSQ&10(Nt1sCo%-t8^1>oG*DING?y{-qoFn zUEfG?G^<`Z9D|47mQK*!UdcWjzUxcKIZmtJkuIAc&v&i2neKaEx~ss8SQr5ded8XP z=>4BdW);_;mOQlaIJ<=@wDq*qIvMW_lM7%5eW_m>1vpic=i-9-l1{JwTk;Tii6{O> zlgGshnu=*=f-IO>ic*qX4d26i9WqD3jg6<2D0(VMPPK6+WX1$b5RZ9pXi>Cuq8zSp z+F%iVH&_18Qz*HSCqE-4f1e^VN|w?yv*pBCD4^F?$Q4rLbcR$A{zs1`jG!7r^~xxK1+;a!@+o2T`MEWDl(bk_v8y|pmTXt5MQdQ*CAk3Y zZz|Q1wSx+;%$5Cx=kjK`_@-iu65O?6@-f+Y;zvrp!rKgUwku}3;3vw%r!dj=f%1$@ zywk00whLaj(uQ+Nq7@%sS7!KJ**1Fn6Gbtj`6j!ZEYjY`L)VpRSVsG=E0F;8c%?*p zm;U0W!n&Y=Cfrg|ra==e9ILV}@C+b+B28t0w>$xO99=p|of?Z}9+mxIx56B{s9cS* z!fKAz=*8+~6V7N;J#^_R^{#?BXVqHX20b2?VZN4LS)(${*U`c@b=_oiol|nck96sL z3GjpL>QjdStf#qWRmMRp&wBZ{>fc79%?ncv-yu|epauq&VB?d=YBg-Yh6iLi$G^Q_ zy=ue8+44Y8Jm-P-ST$XFGTks56Rkb1FG^yyXJn%$UfVeI$$}DCLAx7tnwO!Ot+0s} zPS$G7uo*iZ5+`0P(jLMVdZt)o)9dv?zaoYSha+@)UF=oG^lB>AYQaE4qSt0>$Hu|| z-yLTWz0sz9E#tv`S}~RYG1H9Kw0lCQjqTc=Xd{eJ%UfEpYUtquw9}r0n%Nl{q{S4% zf6^H(XQUAqK^s2TKC~LTnKO3hORdjj*erZ9CiQE7R-_|c_;DqvrHv99GO&6i?I2|J zfNrA}3;D|wBSRGJFCo7phHmGpY_B2*T>PxUo&#C|?p{k~I)dAd9t7#hFV%s@%wI=# zjQaMWWcwj`My3@m0G@ZDhJIiibQPU8M}z;Dodi4F3wn{5=Yo+Ej9znADRRd~416PNIK znb(lduhaNe*~jb+GtKv70I(s>P<}2r-wJ%?_BG{_5{vAU08bjWD<_2CJ_X{)>1m zi}|%qfba^>yZ2HM+NI(LuuLphFXEQ-h!p~ZhLDX0F<2=uSQU62z@Rap3JhKiXrUN1 z@pa;xLsADZ@QB^C2=RTfsntUKKwz+jmkeu#SSQ4K;nFI^1|iybFqBJ`z4Z|pF)(8s)bc5*a2oCJ@5A6LMx|B5bq~nb#`qXYTfZU% zQi8L>Imr2vymDvZU3?fO=Blq9t4HTb7?-Hh$+dKub+z~Ap+0gFXI9bV~ROU>wH zX|r~+w5zaVCo}xiZ+PT4yo!aLEUX!S*2%)WB5b3tpFEEX&JsOd3K=xP877MvCfjcGV;Q>t1vUJ5 Au>b%7 delta 3530 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 delta 15353 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