From 9f8fe41b0081b016c2070f3c4b9a1d8097d6a2f9 Mon Sep 17 00:00:00 2001 From: domna Date: Mon, 8 Jan 2024 14:09:34 +0100 Subject: [PATCH 01/88] Definitions upgraded to latest mpes-refactor --- pynxtools/definitions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/definitions b/pynxtools/definitions index 615ff37cb..0b3e18e1a 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 615ff37cbafd2ca017fb61c119c0f5c0cf052a34 +Subproject commit 0b3e18e1a95436ee454772738d85bb41acc9f00b From b86a5fe4d1fe776e753454f3af90e2b383e929f2 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 11 Jan 2024 14:48:16 +0100 Subject: [PATCH 02/88] Adapt vscode settings and update definitions, again --- .vscode/settings.json | 4 ++-- pynxtools/definitions | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 48b73f9c2..13b89efa2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,8 +6,8 @@ "[python]": { "editor.formatOnSave": true, "editor.codeActionsOnSave": { - "source.fixAll": true, - "source.organizeImports": true + "source.fixAll": "explicit", + "source.organizeImports": "explicit" }, "editor.defaultFormatter": "charliermarsh.ruff" }, diff --git a/pynxtools/definitions b/pynxtools/definitions index 0b3e18e1a..4bd779277 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 0b3e18e1a95436ee454772738d85bb41acc9f00b +Subproject commit 4bd7792772e9932a562c6226cb3455f8b5e83b81 From a0ca147a9fa3e2d34341c6c5059d259f21667d7d Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 15 Jan 2024 14:25:37 +0100 Subject: [PATCH 03/88] new default MPES template --- .../readers/xps/config/template.json | 181 +++++++++++++----- 1 file changed, 129 insertions(+), 52 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/template.json b/pynxtools/dataconverter/readers/xps/config/template.json index c35a10a1f..9f7bd2fcf 100644 --- a/pynxtools/dataconverter/readers/xps/config/template.json +++ b/pynxtools/dataconverter/readers/xps/config/template.json @@ -1,30 +1,25 @@ { - "/ENTRY[entry]/DATA[data]/@signal": "None", - "/ENTRY[entry]/DATA[data]/data": "None", - "/ENTRY[entry]/DATA[data]/data/@units": "None", - "/ENTRY[entry]/DATA[data]/energy": "None", - "/ENTRY[entry]/DATA[data]/energy/@type": "None", - "/ENTRY[entry]/DATA[data]/energy/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "None", @@ -32,50 +27,132 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/@units": "None", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": "None", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/associated_source": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/distance": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/distance/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/extent": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy_spread": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy_spread/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_polarization": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_polarization/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/associated_beam": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/name": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/probe": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/type_other": "None", + "/ENTRY[entry]/PROCESS[process]/angular_calibration/calibrated_axis": "None", "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "None", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": "None", - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", + "/ENTRY[entry]/PROCESS[process]/momentum_calibration/calibrated_axis": "None", + "/ENTRY[entry]/PROCESS[process]/spatial_calibration/calibrated_axis": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/@axes": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/@signal": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/kinetic_energy": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/kinetic_energy/@units": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/relative_intensity": "None", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/end_time": "None", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/method": "None", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/start_time": "None", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "None", + "/ENTRY[entry]/SAMPLE[sample]/atom_types": "None", "/ENTRY[entry]/SAMPLE[sample]/bias": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "None", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "None", + "/ENTRY[entry]/SAMPLE[sample]/bias/sample_bias_potentiostat": "None", + "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": "None", + "/ENTRY[entry]/SAMPLE[sample]/drain_current": "None", + "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": "None", + "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current": "None", + "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun": "None", "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "None", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "None", + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": "None", "/ENTRY[entry]/SAMPLE[sample]/name": "None", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "None", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "None", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "None", + "/ENTRY[entry]/SAMPLE[sample]/physical_form": "None", "/ENTRY[entry]/SAMPLE[sample]/situation": "None", "/ENTRY[entry]/SAMPLE[sample]/temperature": "None", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "None", - "/ENTRY[entry]/USER[user]/address": "None", + "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat": "None", + "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater": "None", + "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": "None", "/ENTRY[entry]/USER[user]/affiliation": "None", - "/ENTRY[entry]/USER[user]/email": "None", "/ENTRY[entry]/USER[user]/name": "None", - "/ENTRY[entry]/USER[user]/orcid": "None", - "/ENTRY[entry]/method": "None", + "/ENTRY[entry]/data/@energy_depends": "None", + "/ENTRY[entry]/data/@energy_indices": "None", + "/ENTRY[entry]/data/@signal": "None", + "/ENTRY[entry]/data/data": "None", + "/ENTRY[entry]/data/data/@units": "None", + "/ENTRY[entry]/data/energy": "None", + "/ENTRY[entry]/data/energy/@type": "None", + "/ENTRY[entry]/data/energy/@units": "None", "/ENTRY[entry]/definition": "None", "/ENTRY[entry]/definition/@version": "None", + "/ENTRY[entry]/end_time": "None", + "/ENTRY[entry]/method": "None", "/ENTRY[entry]/start_time": "None", "/ENTRY[entry]/title": "None" -} \ No newline at end of file +} From 0256281fecdf44d66b861277bf8b9437372424bc Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:33:16 +0100 Subject: [PATCH 04/88] initial change of XPS SLE config file --- .../readers/xps/config/config_sle_specs.json | 242 ++++++++++++------ .../readers/xps/sle/sle_specs.py | 9 +- 2 files changed, 166 insertions(+), 85 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 39ddb7d2a..2a359e353 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -1,26 +1,65 @@ { - "/ENTRY[entry]/DATA[data]/@signal": "", - "/ENTRY[entry]/DATA[data]/data": "@data:cycle", - "/ENTRY[entry]/DATA[data]/data/@units": "CPS", - "/ENTRY[entry]/DATA[data]/energy": "@data:energy", - "/ENTRY[entry]/DATA[data]/energy/@type": "binding energy", - "/ENTRY[entry]/DATA[data]/energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", + "/ENTRY[entry]/definition": "@eln", + "/ENTRY[entry]/definition/@version": "@eln", + "/ENTRY[entry]/title": "@eln", + "/ENTRY[entry]/start_time": "@eln", + "/ENTRY[entry]/end_time": "@eln", + "/ENTRY[entry]/method": "X-ray photoelectron spectroscopy (XPS)", + "/ENTRY[entry]/USER[user]/name": "@eln", + "/ENTRY[entry]/USER[user]/affiliation": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "eV", + #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", ### available in file? + #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "SPECS GmbH", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name": "@xps_token:source/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam": {"link": "/entry/instrument/beam_probe"}, + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy": "@xps_token:beam/excitation_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source": {"link": "/entry/instrument/source_probe"}, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "@xps_token:analyser/work_function", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", # available in file??? + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "@xps_token:data/step_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@signal": "", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@axes": ["kinetic_energy", "relative_intensity"] + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity": "@xps_token:collectioncolumn/transmission_function/data", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/transmission_function": "@xps_token:collectioncolumn/transmission_function/data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/transmission_function/@units": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/transmission_function/@file": "@xps_token:collectioncolumn/transmission_function/file", + ######"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", # available in file? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris": "@xps_token:collectioncolumn/iris_diameter", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor": "SPECS GmnH", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name": "Lens 1", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage": "@xps_token:collectioncolumn/lens1_voltage", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units": "@xps_token:collectioncolumn/lens1_voltage/@units", @@ -39,71 +78,112 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name": "Focus Displacement", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current": "@xps_token:collectioncolumn/focus_displacement_current", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units": "@xps_token:collectioncolumn/focus_displacement_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "counts", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/size": "@xps_token:energydispersion/entrance_slit", ## what is available? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/size": "@xps_token:energydispersion/exit_slit", ## what is available? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "SPECS GmbH", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "channeltron", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "@xps_token:energydispersion/entrance_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "@xps_token:energydispersion/exit_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/iris": "@xps_token:energydispersion/iris_diameter", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/analyzer_radius": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/analyzer_radius/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "@xps_token:source/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function": "@xps_token:instrument/workfunction", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/manufacturer": "SPECS GmbH", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_file": "@xps_token:detector/calibration_file", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "Surface Concept GmbH", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", # any more available?? + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "raw", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units": "counts", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "temperature", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity": "temperature", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement": "current", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "potentiostat", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units": "@eln" + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement": "pressure", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity": "current", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units": "@eln", "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/intensity_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/intensity_calibration/transmission_function": "@xps_token:collectioncolumn/transmission_function/data", - "/ENTRY[entry]/PROCESS[process]/intensity_calibration/transmission_function/@units": "", - "/ENTRY[entry]/PROCESS[process]/intensity_calibration/transmission_function/@file": "@xps_token:collectioncolumn/transmission_function/file", - "/ENTRY[entry]/SAMPLE[sample]/bias": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "None", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type": "file", + ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", ## file path vs. actual file + ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function": {"link": "/entry/instrument/electronanalyser/transmission_function"}, + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type": "file", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path": "@xps_token:collectioncolumn/transmission_function/file", "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "None", + "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/physical_form": "@eln", "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/orcid": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/end_time": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/title": "@eln" + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/start_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/end_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/description": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/method": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/start_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/end_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/description": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/method": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": {"link": "/entry/instrument/manipulator/temperature_sensor"}, + "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater": {"link": "/entry/instrument/manipulator/sample_heater"}, + "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat": {"link": "/entry/instrument/manipulator/sample_heater"}, + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": {"link": "/entry/instrument/pressure_gauge"}, + "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat": {"link": "/entry/instrument/manipulator/sample_bias_potentiostat"}, + "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": {"link": "/entry/instrument/manipulator/sample_bias_voltmeter"}, + "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": {"link": "/entry/instrument/manipulator/drain_current_amperemeter"}, + "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun": {"link": "/entry/instrument/flood_gun"}, + "/ENTRY[entry]/data/@signal": "", + "/ENTRY[entry]/data/data": "@data:cycle", + "/ENTRY[entry]/data/data/@units": "CPS", + "/ENTRY[entry]/data/energy": "@data:energy", + "/ENTRY[entry]/data/energy/@type": "binding", + "/ENTRY[entry]/data/energy/@units": "eV", + #####"/ENTRY[entry]/data/@energy_indices": "None", + #####"/ENTRY[entry]/data/@energy_depends": "None", } diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index 16f12d6a1..a34e78abf 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -107,7 +107,6 @@ def construct_data(self): key_map = { "user": [], "instrument": [ - "workfunction", "bias_voltage_ions [V]", "bias_voltage_electrons [V]", "polar_angle", @@ -120,7 +119,9 @@ def construct_data(self): "emission_current", ], "beam": ["excitation_energy"], - "analyser": [], + "analyser": [ + "work_function", + ], "collectioncolumn": [ "lens1_voltage [nU]", "lens2_voltage [nU]", @@ -131,12 +132,12 @@ def construct_data(self): "transmission_function/data", "transmission_function/file", "lens_mode", + "iris_diameter", ], "energydispersion": [ "scan_mode", "entrance_slit", "exit_slit", - "iris_diameter", "pass_energy", ], "detector": [ @@ -284,7 +285,7 @@ def __init__(self): "EpassOrRR": "pass_energy", "EnergyType": "x_units", "Samples": "n_values", - "Wf": "workfunction", + "Wf": "work_function", "Step": "step", "Ubias": "electron_bias", "DwellTime": "dwell_time", From aa5525586b86575a689c27d82f11aa2d2bf71e9b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:38:42 +0100 Subject: [PATCH 05/88] update submodules to recent mpes-refactor branch --- .gitmodules | 1 + pynxtools/definitions | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 13255c151..55562b2d5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "pynxtools/definitions"] path = pynxtools/definitions url = https://github.com/FAIRmat-NFDI/nexus_definitions.git + branch = mpes-refactor diff --git a/pynxtools/definitions b/pynxtools/definitions index 615ff37cb..5ea63b4a6 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 615ff37cbafd2ca017fb61c119c0f5c0cf052a34 +Subproject commit 5ea63b4a69330d0151535b9b7c186590500149d3 From 9fdad710bc18d29cea1316188461709ae1548c4f Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:33:02 +0100 Subject: [PATCH 06/88] update definitions following MPES refactor --- .gitmodules | 3 +-- pynxtools/definitions | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 55562b2d5..304dc9b2d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,3 @@ [submodule "pynxtools/definitions"] path = pynxtools/definitions - url = https://github.com/FAIRmat-NFDI/nexus_definitions.git - branch = mpes-refactor + url = https://github.com/FAIRmat-NFDI/nexus_definitions.git \ No newline at end of file diff --git a/pynxtools/definitions b/pynxtools/definitions index 5ea63b4a6..7977c7ecc 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 5ea63b4a69330d0151535b9b7c186590500149d3 +Subproject commit 7977c7ecc146d09c5ac3c445948073ad9f38d95f From c332433926425992b289cda9c8b8d705ad7d68c8 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:34:11 +0100 Subject: [PATCH 07/88] remove comments from XPS SLE config file --- .../readers/xps/config/config_sle_specs.json | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 2a359e353..83929af58 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -11,15 +11,15 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "eV", - #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", ### available in file? - #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "SPECS GmbH", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "@eln", + "ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "SPECS GmbH", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name": "@xps_token:source/name", "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam": {"link": "/entry/instrument/beam_probe"}, "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "@eln", @@ -37,22 +37,22 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", # available in file??? - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "@xps_token:data/step_size", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "eV", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@signal": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@axes": ["kinetic_energy", "relative_intensity"] - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@axes": ["kinetic_energy", "relative_intensity"], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy/@units": "eV", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity": "@xps_token:collectioncolumn/transmission_function/data", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - ######"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", # available in file? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", @@ -82,8 +82,8 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/size": "@xps_token:energydispersion/entrance_slit", ## what is available? - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/size": "@xps_token:energydispersion/exit_slit", ## what is available? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/size": "@xps_token:energydispersion/entrance_slit", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/size": "@xps_token:energydispersion/exit_slit", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "SPECS GmbH", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", @@ -92,8 +92,8 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "channeltron", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "Surface Concept GmbH", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", # any more available?? - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "raw", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units": "counts", @@ -126,7 +126,7 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "voltage", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "potentiostat", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units": "@eln" + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "@eln", @@ -147,8 +147,8 @@ "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type": "file", - ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", ## file path vs. actual file - ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", @@ -184,6 +184,6 @@ "/ENTRY[entry]/data/energy": "@data:energy", "/ENTRY[entry]/data/energy/@type": "binding", "/ENTRY[entry]/data/energy/@units": "eV", - #####"/ENTRY[entry]/data/@energy_indices": "None", - #####"/ENTRY[entry]/data/@energy_depends": "None", + "/ENTRY[entry]/data/@energy_indices": "None", + "/ENTRY[entry]/data/@energy_depends": "None", } From ffb0d216a91fef67b4c7f3f3aa57827a86e0a5f8 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:34:41 +0100 Subject: [PATCH 08/88] typo fix in sle specs XPS reader --- pynxtools/dataconverter/readers/xps/sle/sle_specs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index a34e78abf..bda602c3c 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -325,7 +325,7 @@ def __init__(self): self.sql_metadata_map = { "EnergyType": "x_units", "EpassOrRR": "pass_energy", - "Wf": "workfunction", + "Wf": "work_function", "Timestamp": "time_stamp", "Samples": "n_values", "ElectronEnergy": "start_energy", @@ -998,7 +998,7 @@ def _get_spectrum_metadata_from_sql(self): cur.execute(query) results = ET.fromstring(cur.fetchall()[0][0]) for i in results.iter("AnalyzerSpectrumParameters"): - spectrum["workfunction"] = i.attrib["Workfunction"] + spectrum["work_function"] = i.attrib["Workfunction"] spectrum["step_size"] = float(i.attrib["ScanDelta"]) def _get_scan_metadata(self, raw_id): From be523d02ef460ab7a8ccc091086757e7bd65d6af Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 10:53:56 +0100 Subject: [PATCH 09/88] add detector data reading in SLE XPS config --- .../readers/xps/config/config_sle_specs.json | 407 ++++++++++-------- 1 file changed, 220 insertions(+), 187 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 83929af58..3b6af7744 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -1,189 +1,222 @@ { - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/title": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/end_time": "@eln", - "/ENTRY[entry]/method": "X-ray photoelectron spectroscopy (XPS)", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "eV", - "ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "SPECS GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name": "@xps_token:source/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam": {"link": "/entry/instrument/beam_probe"}, - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source": {"link": "/entry/instrument/source_probe"}, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "@xps_token:analyser/work_function", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@signal": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@axes": ["kinetic_energy", "relative_intensity"], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity": "@xps_token:collectioncolumn/transmission_function/data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris": "@xps_token:collectioncolumn/iris_diameter", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor": "SPECS GmnH", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name": "Lens 1", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage": "@xps_token:collectioncolumn/lens1_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units": "@xps_token:collectioncolumn/lens1_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name": "Lens 2", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage": "@xps_token:collectioncolumn/lens2_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units": "@xps_token:collectioncolumn/lens2_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name": "Coil", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current": "@xps_token:collectioncolumn/coil_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units": "@xps_token:collectioncolumn/coil_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name": "Pre-Deflector X", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current": "@xps_token:collectioncolumn/pre_deflector_x_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units": "@xps_token:collectioncolumn/pre_deflector_x_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name": "Pre-Deflector Y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current": "@xps_token:collectioncolumn/pre_deflector_y_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units": "@xps_token:collectioncolumn/pre_deflector_y_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name": "Focus Displacement", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current": "@xps_token:collectioncolumn/focus_displacement_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units": "@xps_token:collectioncolumn/focus_displacement_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", + "/ENTRY[entry]/definition":"@eln", + "/ENTRY[entry]/definition/@version":"@eln", + "/ENTRY[entry]/title":"@eln", + "/ENTRY[entry]/start_time":"@eln", + "/ENTRY[entry]/end_time":"@eln", + "/ENTRY[entry]/method":"X-ray photoelectron spectroscopy (XPS)", + "/ENTRY[entry]/USER[user]/name":"@eln", + "/ENTRY[entry]/USER[user]/affiliation":"@eln", + "/ENTRY[entry]/USER[user]/address":"@eln", + "/ENTRY[entry]/USER[user]/orcid":"@eln", + "/ENTRY[entry]/USER[user]/email":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity":"energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units":"eV", + "ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor":"SPECS GmbH", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name":"@xps_token:source/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/probe":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam":{ + "link":"/entry/instrument/beam_probe" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy":"@xps_token:beam/excitation_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source":{ + "link":"/entry/instrument/source_probe" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name":"@xps_token:analyser/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function":"@xps_token:analyser/work_function", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes":"energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type":"estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity":"energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution":"@xps_token:data/step_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@signal":"", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@axes":[ + "kinetic_energy", + "relative_intensity" + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity/transmission_function":"@xps_token:collectioncolumn/transmission_function/data", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode":"@xps_token:collectioncolumn/lens_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris":"@xps_token:collectioncolumn/iris_diameter", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name":"Lens 1", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage":"@xps_token:collectioncolumn/lens1_voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units":"@xps_token:collectioncolumn/lens1_voltage/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name":"Lens 2", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage":"@xps_token:collectioncolumn/lens2_voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units":"@xps_token:collectioncolumn/lens2_voltage/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name":"Coil", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current":"@xps_token:collectioncolumn/coil_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units":"@xps_token:collectioncolumn/coil_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name":"Pre-Deflector X", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current":"@xps_token:collectioncolumn/pre_deflector_x_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units":"@xps_token:collectioncolumn/pre_deflector_x_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name":"Pre-Deflector Y", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current":"@xps_token:collectioncolumn/pre_deflector_y_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units":"@xps_token:collectioncolumn/pre_deflector_y_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name":"Focus Displacement", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current":"@xps_token:collectioncolumn/focus_displacement_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme":"@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/size": "@xps_token:energydispersion/entrance_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/size": "@xps_token:energydispersion/exit_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "SPECS GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "channeltron", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "Surface Concept GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "temperature", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity": "temperature", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement": "current", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "potentiostat", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement": "pressure", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity": "current", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units": "@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type": "file", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function": {"link": "/entry/instrument/electronanalyser/transmission_function"}, - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type": "file", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path": "@xps_token:collectioncolumn/transmission_function/file", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/physical_form": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/start_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/end_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/method": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/start_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/end_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/method": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": {"link": "/entry/instrument/manipulator/temperature_sensor"}, - "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater": {"link": "/entry/instrument/manipulator/sample_heater"}, - "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat": {"link": "/entry/instrument/manipulator/sample_heater"}, - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": {"link": "/entry/instrument/pressure_gauge"}, - "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat": {"link": "/entry/instrument/manipulator/sample_bias_potentiostat"}, - "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": {"link": "/entry/instrument/manipulator/sample_bias_voltmeter"}, - "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": {"link": "/entry/instrument/manipulator/drain_current_amperemeter"}, - "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun": {"link": "/entry/instrument/flood_gun"}, - "/ENTRY[entry]/data/@signal": "", - "/ENTRY[entry]/data/data": "@data:cycle", - "/ENTRY[entry]/data/data/@units": "CPS", - "/ENTRY[entry]/data/energy": "@data:energy", - "/ENTRY[entry]/data/energy/@type": "binding", - "/ENTRY[entry]/data/energy/@units": "eV", - "/ENTRY[entry]/data/@energy_indices": "None", - "/ENTRY[entry]/data/@energy_depends": "None", -} + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode":"@xps_token:energydispersion/scan_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/description":"@xps_token:energydispersion/entrance_slit", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/description":"@xps_token:energydispersion/exit_slit", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal":"raw", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw":"@detector_data:cycles/Cycle_", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units":"counts", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/attached_to":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type":"potentiostat", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement":"pressure", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity":"current", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units":"@eln", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis":"@data:energy", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units":"eV", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type":"file", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path":"@xps_token:detector/calibration_file", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file":"@xps_token:detector/calibration_file", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/level":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis":"None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function":{ + "link":"/entry/instrument/electronanalyser/transmission_function" + }, + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type":"file", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path":"@xps_token:collectioncolumn/transmission_function/file", + "/ENTRY[entry]/SAMPLE[sample]/name":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/atom_types":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/situation":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/name":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/cas_number":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/start_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/end_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/description":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/method":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/start_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/end_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/description":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/method":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor":{ + "link":"/entry/instrument/manipulator/temperature_sensor" + }, + "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater":{ + "link":"/entry/instrument/manipulator/sample_heater" + }, + "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat":{ + "link":"/entry/instrument/manipulator/sample_heater" + }, + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge":{ + "link":"/entry/instrument/pressure_gauge" + }, + "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat":{ + "link":"/entry/instrument/manipulator/sample_bias_potentiostat" + }, + "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter":{ + "link":"/entry/instrument/manipulator/sample_bias_voltmeter" + }, + "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter":{ + "link":"/entry/instrument/manipulator/drain_current_amperemeter" + }, + "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun":{ + "link":"/entry/instrument/flood_gun" + }, + "/ENTRY[entry]/data/@signal":"", + "/ENTRY[entry]/data/data":"@data:cycle", + "/ENTRY[entry]/data/data/@units":"CPS", + "/ENTRY[entry]/data/energy":"@data:energy", + "/ENTRY[entry]/data/energy/@type":"binding", + "/ENTRY[entry]/data/energy/@units":"eV", + "/ENTRY[entry]/data/@energy_indices":"None", + "/ENTRY[entry]/data/@energy_depends":"None" + } \ No newline at end of file From ea1cfdd89004e50cb47bfe442c5dbb5b83bababe Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 10:54:57 +0100 Subject: [PATCH 10/88] handle datetime writing in XPS reader --- pynxtools/dataconverter/readers/xps/reader.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index 513b3f80a..746f4d884 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -23,6 +23,7 @@ from typing import Tuple import sys import json +import datetime import yaml import numpy as np @@ -57,9 +58,11 @@ "Energydispersion": "ENERGYDISPERSION[energydispersion]", "Detector": "DETECTOR[detector]", "Manipulator": "MANIPULATOR[manipulator]", + "PID": "PID[pid]", "Process": "PROCESS[process]", "Sample": "SAMPLE[sample]", - "Data": "DATA[data]", + "Substance": "SUBSTANCE[substance]", + # "Data": "DATA[data]", } REPLACE_NESTED: Dict[str, str] = {} @@ -275,7 +278,10 @@ def fill_atom_types(key): for entry in entry_set: modified_key = key.replace("[entry]", f"[{entry}]") + if isinstance(field_value, datetime.datetime): + field_value = field_value.isoformat() template[modified_key] = field_value + if atom_types: modified_key = modified_key.replace("chemical_formula", "atom_types") template[modified_key] = ", ".join(atom_types) From c78f831fa5834dd583998c4bc03ef21b7df501b1 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 12:37:20 +0100 Subject: [PATCH 11/88] temporary add old XPS config files --- .../xps/config/config_sle_specs_old.json | 45 +++++ .../config_sle_specs_with_comments.json | 189 ++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json create mode 100644 pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json new file mode 100644 index 000000000..0897a4f23 --- /dev/null +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json @@ -0,0 +1,45 @@ +{ +# "/ENTRY[entry]/DATA[data]/@signal": "", +# "/ENTRY[entry]/DATA[data]/data": "@data:cycle", +# "/ENTRY[entry]/DATA[data]/data/@units": "CPS", +# "/ENTRY[entry]/DATA[data]/energy": "@data:energy", +# "/ENTRY[entry]/DATA[data]/energy/@type": "binding energy", +# "/ENTRY[entry]/DATA[data]/energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", + + + + + + + + "/ENTRY[entry]/SAMPLE[sample]/bias": "None", + "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "None", + "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history": "None", + "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", + "/ENTRY[entry]/USER[user]/address": "@eln", + "/ENTRY[entry]/USER[user]/affiliation": "@eln", + "/ENTRY[entry]/USER[user]/email": "@eln", + "/ENTRY[entry]/USER[user]/name": "@eln", + "/ENTRY[entry]/USER[user]/orcid": "@eln", + "/ENTRY[entry]/definition": "@eln", + "/ENTRY[entry]/definition/@version": "@eln", + "/ENTRY[entry]/end_time": "@eln", + "/ENTRY[entry]/start_time": "@eln", + "/ENTRY[entry]/title": "@eln" +} diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json new file mode 100644 index 000000000..2a359e353 --- /dev/null +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json @@ -0,0 +1,189 @@ +{ + "/ENTRY[entry]/definition": "@eln", + "/ENTRY[entry]/definition/@version": "@eln", + "/ENTRY[entry]/title": "@eln", + "/ENTRY[entry]/start_time": "@eln", + "/ENTRY[entry]/end_time": "@eln", + "/ENTRY[entry]/method": "X-ray photoelectron spectroscopy (XPS)", + "/ENTRY[entry]/USER[user]/name": "@eln", + "/ENTRY[entry]/USER[user]/affiliation": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "eV", + #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", ### available in file? + #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "SPECS GmbH", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name": "@xps_token:source/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam": {"link": "/entry/instrument/beam_probe"}, + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy": "@xps_token:beam/excitation_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source": {"link": "/entry/instrument/source_probe"}, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "@xps_token:analyser/work_function", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", # available in file??? + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "@xps_token:data/step_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@signal": "", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@axes": ["kinetic_energy", "relative_intensity"] + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity": "@xps_token:collectioncolumn/transmission_function/data", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", + ######"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", # available in file? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris": "@xps_token:collectioncolumn/iris_diameter", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor": "SPECS GmnH", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name": "Lens 1", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage": "@xps_token:collectioncolumn/lens1_voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units": "@xps_token:collectioncolumn/lens1_voltage/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name": "Lens 2", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage": "@xps_token:collectioncolumn/lens2_voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units": "@xps_token:collectioncolumn/lens2_voltage/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name": "Coil", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current": "@xps_token:collectioncolumn/coil_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units": "@xps_token:collectioncolumn/coil_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name": "Pre-Deflector X", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current": "@xps_token:collectioncolumn/pre_deflector_x_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units": "@xps_token:collectioncolumn/pre_deflector_x_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name": "Pre-Deflector Y", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current": "@xps_token:collectioncolumn/pre_deflector_y_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units": "@xps_token:collectioncolumn/pre_deflector_y_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name": "Focus Displacement", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current": "@xps_token:collectioncolumn/focus_displacement_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units": "@xps_token:collectioncolumn/focus_displacement_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/size": "@xps_token:energydispersion/entrance_slit", ## what is available? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/size": "@xps_token:energydispersion/exit_slit", ## what is available? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "SPECS GmbH", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "channeltron", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "Surface Concept GmbH", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", # any more available?? + ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "raw", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units": "counts", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "temperature", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity": "temperature", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement": "current", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "potentiostat", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units": "@eln" + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement": "pressure", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity": "current", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units": "@eln", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type": "file", + ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", ## file path vs. actual file + ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis": "None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function": {"link": "/entry/instrument/electronanalyser/transmission_function"}, + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type": "file", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path": "@xps_token:collectioncolumn/transmission_function/file", + "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/physical_form": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/start_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/end_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/description": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/method": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/start_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/end_time": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/description": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/method": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": {"link": "/entry/instrument/manipulator/temperature_sensor"}, + "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater": {"link": "/entry/instrument/manipulator/sample_heater"}, + "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat": {"link": "/entry/instrument/manipulator/sample_heater"}, + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": {"link": "/entry/instrument/pressure_gauge"}, + "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat": {"link": "/entry/instrument/manipulator/sample_bias_potentiostat"}, + "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": {"link": "/entry/instrument/manipulator/sample_bias_voltmeter"}, + "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": {"link": "/entry/instrument/manipulator/drain_current_amperemeter"}, + "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun": {"link": "/entry/instrument/flood_gun"}, + "/ENTRY[entry]/data/@signal": "", + "/ENTRY[entry]/data/data": "@data:cycle", + "/ENTRY[entry]/data/data/@units": "CPS", + "/ENTRY[entry]/data/energy": "@data:energy", + "/ENTRY[entry]/data/energy/@type": "binding", + "/ENTRY[entry]/data/energy/@units": "eV", + #####"/ENTRY[entry]/data/@energy_indices": "None", + #####"/ENTRY[entry]/data/@energy_depends": "None", +} From 837b10406344058e3068ab43ea6108cef411fc79 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 13:10:01 +0100 Subject: [PATCH 12/88] update XPS config template --- .../readers/xps/config/config_sle_specs.json | 28 +++++++++---------- .../readers/xps/config/template.json | 3 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 3b6af7744..0ab621d44 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -24,7 +24,7 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model":"@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier":"@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam":{ - "link":"/entry/instrument/beam_probe" + "link":"/entry/instrument/beam_probe" }, "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance":"@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units":"@eln", @@ -36,7 +36,7 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units":"None", "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent":"None", "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source":{ - "link":"/entry/instrument/source_probe" + "link":"/entry/instrument/source_probe" }, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name":"@xps_token:analyser/name", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description":"@eln", @@ -53,8 +53,8 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units":"eV", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@signal":"", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@axes":[ - "kinetic_energy", - "relative_intensity" + "kinetic_energy", + "relative_intensity" ], "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy":"None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy/@units":"eV", @@ -167,7 +167,7 @@ "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset":"None", "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis":"None", "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function":{ - "link":"/entry/instrument/electronanalyser/transmission_function" + "link":"/entry/instrument/electronanalyser/transmission_function" }, "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type":"file", "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path":"@xps_token:collectioncolumn/transmission_function/file", @@ -188,28 +188,28 @@ "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/description":"@eln", "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/method":"@eln", "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor":{ - "link":"/entry/instrument/manipulator/temperature_sensor" + "link":"/entry/instrument/manipulator/temperature_sensor" }, "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater":{ - "link":"/entry/instrument/manipulator/sample_heater" + "link":"/entry/instrument/manipulator/sample_heater" }, "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat":{ - "link":"/entry/instrument/manipulator/sample_heater" + "link":"/entry/instrument/manipulator/sample_heater" }, "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge":{ - "link":"/entry/instrument/pressure_gauge" + "link":"/entry/instrument/pressure_gauge" }, "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat":{ - "link":"/entry/instrument/manipulator/sample_bias_potentiostat" + "link":"/entry/instrument/manipulator/sample_bias_potentiostat" }, "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter":{ - "link":"/entry/instrument/manipulator/sample_bias_voltmeter" + "link":"/entry/instrument/manipulator/sample_bias_voltmeter" }, "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter":{ - "link":"/entry/instrument/manipulator/drain_current_amperemeter" + "link":"/entry/instrument/manipulator/drain_current_amperemeter" }, "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun":{ - "link":"/entry/instrument/flood_gun" + "link":"/entry/instrument/flood_gun" }, "/ENTRY[entry]/data/@signal":"", "/ENTRY[entry]/data/data":"@data:cycle", @@ -219,4 +219,4 @@ "/ENTRY[entry]/data/energy/@units":"eV", "/ENTRY[entry]/data/@energy_indices":"None", "/ENTRY[entry]/data/@energy_depends":"None" - } \ No newline at end of file +} diff --git a/pynxtools/dataconverter/readers/xps/config/template.json b/pynxtools/dataconverter/readers/xps/config/template.json index 9f7bd2fcf..87acfe03c 100644 --- a/pynxtools/dataconverter/readers/xps/config/template.json +++ b/pynxtools/dataconverter/readers/xps/config/template.json @@ -39,6 +39,7 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "None", @@ -124,7 +125,7 @@ "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "None", "/ENTRY[entry]/SAMPLE[sample]/atom_types": "None", "/ENTRY[entry]/SAMPLE[sample]/bias": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/sample_bias_potentiostat": "None", + "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat": "None", "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": "None", "/ENTRY[entry]/SAMPLE[sample]/drain_current": "None", "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": "None", From ff69cd7936f29236c03882122f739eb3d90f03b7 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 13:26:42 +0100 Subject: [PATCH 13/88] change commented SLE config file --- .../config_sle_specs_with_comments.json | 403 ++++++++++-------- 1 file changed, 219 insertions(+), 184 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json index 2a359e353..d9cfacdbd 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json @@ -1,189 +1,224 @@ + { - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/title": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/end_time": "@eln", - "/ENTRY[entry]/method": "X-ray photoelectron spectroscopy (XPS)", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "eV", - #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", ### available in file? - #####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "SPECS GmbH", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name": "@xps_token:source/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam": {"link": "/entry/instrument/beam_probe"}, - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source": {"link": "/entry/instrument/source_probe"}, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "@xps_token:analyser/work_function", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", # available in file??? - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@signal": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/@axes": ["kinetic_energy", "relative_intensity"] - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/kinetic_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity": "@xps_token:collectioncolumn/transmission_function/data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - ######"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", # available in file? - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris": "@xps_token:collectioncolumn/iris_diameter", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor": "SPECS GmnH", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name": "Lens 1", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage": "@xps_token:collectioncolumn/lens1_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units": "@xps_token:collectioncolumn/lens1_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name": "Lens 2", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage": "@xps_token:collectioncolumn/lens2_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units": "@xps_token:collectioncolumn/lens2_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name": "Coil", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current": "@xps_token:collectioncolumn/coil_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units": "@xps_token:collectioncolumn/coil_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name": "Pre-Deflector X", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current": "@xps_token:collectioncolumn/pre_deflector_x_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units": "@xps_token:collectioncolumn/pre_deflector_x_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name": "Pre-Deflector Y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current": "@xps_token:collectioncolumn/pre_deflector_y_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units": "@xps_token:collectioncolumn/pre_deflector_y_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name": "Focus Displacement", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current": "@xps_token:collectioncolumn/focus_displacement_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units": "@xps_token:collectioncolumn/focus_displacement_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", + "/ENTRY[entry]/definition":"@eln", + "/ENTRY[entry]/definition/@version":"@eln", + "/ENTRY[entry]/title":"@eln", + "/ENTRY[entry]/start_time":"@eln", + "/ENTRY[entry]/end_time":"@eln", + "/ENTRY[entry]/method":"X-ray photoelectron spectroscopy (XPS)", + "/ENTRY[entry]/USER[user]/name":"@eln", + "/ENTRY[entry]/USER[user]/affiliation":"@eln", + "/ENTRY[entry]/USER[user]/address":"@eln", + "/ENTRY[entry]/USER[user]/orcid":"@eln", + "/ENTRY[entry]/USER[user]/email":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity":"energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units":"eV", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier":"None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model":"None", + ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor":"SPECS GmbH", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name":"@xps_token:source/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/probe":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam":{ + "link":"/entry/instrument/beam_probe" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy":"@xps_token:beam/excitation_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source":{ + "link":"/entry/instrument/source_probe" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name":"@xps_token:analyser/name", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function":"@xps_token:analyser/work_function", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes":"energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type":"estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity":"energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution":"@xps_token:data/step_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@signal":"", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@axes":[ + "kinetic_energy", + "relative_intensity" + ], + #### "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy":"None", # available in file + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity/transmission_function":"@xps_token:collectioncolumn/transmission_function/data", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode":"@xps_token:collectioncolumn/lens_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection":"None", + #####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", # available in file? + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris":"@xps_token:collectioncolumn/iris_diameter", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name":"Lens 1", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage":"@xps_token:collectioncolumn/lens1_voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units":"@xps_token:collectioncolumn/lens1_voltage/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name":"Lens 2", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage":"@xps_token:collectioncolumn/lens2_voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units":"@xps_token:collectioncolumn/lens2_voltage/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name":"Coil", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current":"@xps_token:collectioncolumn/coil_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units":"@xps_token:collectioncolumn/coil_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name":"Pre-Deflector X", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current":"@xps_token:collectioncolumn/pre_deflector_x_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units":"@xps_token:collectioncolumn/pre_deflector_x_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name":"Pre-Deflector Y", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current":"@xps_token:collectioncolumn/pre_deflector_y_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units":"@xps_token:collectioncolumn/pre_deflector_y_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name":"Focus Displacement", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current":"@xps_token:collectioncolumn/focus_displacement_current", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme":"@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/size": "@xps_token:energydispersion/entrance_slit", ## what is available? - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/size": "@xps_token:energydispersion/exit_slit", ## what is available? - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "SPECS GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "channeltron", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "Surface Concept GmbH", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", # any more available?? - ####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "temperature", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity": "temperature", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement": "current", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "potentiostat", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units": "@eln" - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement": "pressure", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity": "current", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units": "@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type": "file", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units":"eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode":"@xps_token:energydispersion/scan_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/description":"@xps_token:energydispersion/entrance_slit", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/description":"@xps_token:energydispersion/exit_slit", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal":"raw", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw":"@detector_data:cycles/Cycle_", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units":"counts", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/attached_to":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units":"None", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type":"potentiostat", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement":"pressure", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity":"current", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value":"@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units":"@eln", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis":"@data:energy", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units":"eV", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type":"file", ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", ## file path vs. actual file ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function": {"link": "/entry/instrument/electronanalyser/transmission_function"}, - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type": "file", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path": "@xps_token:collectioncolumn/transmission_function/file", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/physical_form": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/start_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/end_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/method": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/start_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/end_time": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/PHYSICAL_PROCESS[sample_loading]/method": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": {"link": "/entry/instrument/manipulator/temperature_sensor"}, - "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater": {"link": "/entry/instrument/manipulator/sample_heater"}, - "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat": {"link": "/entry/instrument/manipulator/sample_heater"}, - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": {"link": "/entry/instrument/pressure_gauge"}, - "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat": {"link": "/entry/instrument/manipulator/sample_bias_potentiostat"}, - "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": {"link": "/entry/instrument/manipulator/sample_bias_voltmeter"}, - "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": {"link": "/entry/instrument/manipulator/drain_current_amperemeter"}, - "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun": {"link": "/entry/instrument/flood_gun"}, - "/ENTRY[entry]/data/@signal": "", - "/ENTRY[entry]/data/data": "@data:cycle", - "/ENTRY[entry]/data/data/@units": "CPS", - "/ENTRY[entry]/data/energy": "@data:energy", - "/ENTRY[entry]/data/energy/@type": "binding", - "/ENTRY[entry]/data/energy/@units": "eV", - #####"/ENTRY[entry]/data/@energy_indices": "None", - #####"/ENTRY[entry]/data/@energy_depends": "None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/level":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset":"None", + "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis":"None", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function":{ + "link":"/entry/instrument/electronanalyser/transmission_function" + }, + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type":"file", + "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path":"@xps_token:collectioncolumn/transmission_function/file", + + "/ENTRY[entry]/SAMPLE[sample]/name":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/atom_types":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/situation":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/name":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/cas_number":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/start_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/end_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/description":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/method":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/start_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/end_time":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/description":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/method":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor":{ + "link":"/entry/instrument/manipulator/temperature_sensor" + }, + "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater":{ + "link":"/entry/instrument/manipulator/sample_heater" + }, + "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat":{ + "link":"/entry/instrument/manipulator/sample_heater" + }, + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge":{ + "link":"/entry/instrument/pressure_gauge" + }, + "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat":{ + "link":"/entry/instrument/manipulator/sample_bias_potentiostat" + }, + "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter":{ + "link":"/entry/instrument/manipulator/sample_bias_voltmeter" + }, + "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter":{ + "link":"/entry/instrument/manipulator/drain_current_amperemeter" + }, + "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun":{ + "link":"/entry/instrument/flood_gun" + }, + "/ENTRY[entry]/data/@signal":"", + "/ENTRY[entry]/data/data":"@data:cycle", + "/ENTRY[entry]/data/data/@units":"CPS", + "/ENTRY[entry]/data/energy":"@data:energy", + "/ENTRY[entry]/data/energy/@type":"binding", + "/ENTRY[entry]/data/energy/@units":"eV", + #####"/ENTRY[entry]/data/@energy_indices":"None", + #####"/ENTRY[entry]/data/@energy_depends":"None" } From 525f5d958b8288b0a5834283f394030b518846cc Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 13:27:37 +0100 Subject: [PATCH 14/88] revert changes to logger for now --- pynxtools/dataconverter/logger.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pynxtools/dataconverter/logger.py b/pynxtools/dataconverter/logger.py index a0098427c..13a4cf4ea 100644 --- a/pynxtools/dataconverter/logger.py +++ b/pynxtools/dataconverter/logger.py @@ -22,8 +22,4 @@ logger = logging.getLogger("pynxtools") # Lowest level log allows to other levels erros, crittical, info and debug -handler = logging.StreamHandler() -formatter = logging.Formatter("%(message)s") -handler.setFormatter(formatter) -logger.addHandler(handler) logger.setLevel(logging.DEBUG) From b53dcb09717fce4dc4d66f1dfcb7d430fdadaa8f Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Wed, 17 Jan 2024 13:56:26 +0100 Subject: [PATCH 15/88] update definitions to mpes-fixes branch --- .gitmodules | 3 ++- .../dataconverter/readers/xps/config/config_sle_specs.json | 1 + pynxtools/definitions | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 304dc9b2d..e5f3cf69f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "pynxtools/definitions"] path = pynxtools/definitions - url = https://github.com/FAIRmat-NFDI/nexus_definitions.git \ No newline at end of file + url = https://github.com/FAIRmat-NFDI/nexus_definitions.git + branch = mpes-fixes \ No newline at end of file diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 0ab621d44..27137f183 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -177,6 +177,7 @@ "/ENTRY[entry]/SAMPLE[sample]/situation":"@eln", "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/name":"@eln", "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass":"@eln", + "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass/@units":"@eln", "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/cas_number":"@eln", "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill":"@eln", "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/start_time":"@eln", diff --git a/pynxtools/definitions b/pynxtools/definitions index 7977c7ecc..6fb39a75f 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 7977c7ecc146d09c5ac3c445948073ad9f38d95f +Subproject commit 6fb39a75f599933b0f57df542bcb7edf92bf8b1a From 781826bec2affe9a0a3d287b974bb72426c5e685 Mon Sep 17 00:00:00 2001 From: domna Date: Wed, 17 Jan 2024 16:11:42 +0100 Subject: [PATCH 16/88] Updates definitions --- pynxtools/definitions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/definitions b/pynxtools/definitions index 4bd779277..5753d0488 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 4bd7792772e9932a562c6226cb3455f8b5e83b81 +Subproject commit 5753d04882e220d2b150da9e28fa096a9fa19398 From 26841e4bf3ec571f7c3a9856d20dcdf14ed44515 Mon Sep 17 00:00:00 2001 From: domna Date: Wed, 17 Jan 2024 16:11:52 +0100 Subject: [PATCH 17/88] Updates config file --- .../readers/mpes/config_file.json | 710 +++++++++--------- 1 file changed, 370 insertions(+), 340 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 125243397..0b9c44343 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -1,341 +1,371 @@ -{ - "/@default": "entry", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/definition": "NXmpes", - "/ENTRY[entry]/definition/@version": "None", - "/ENTRY[entry]/title": "@attrs:metadata/entry_title", - "/ENTRY[entry]/start_time": "@attrs:metadata/timing/acquisition_start", - "/ENTRY[entry]/experiment_institution": "Fritz Haber Institute - Max Planck Society", - "/ENTRY[entry]/experiment_facility": "Time Resolved ARPES", - "/ENTRY[entry]/experiment_laboratory": "Clean Room 4", - "/ENTRY[entry]/entry_identifier": "@attrs:metadata/entry_identifier", - "/ENTRY[entry]/end_time": "@attrs:metadata/timing/acquisition_stop", - "/ENTRY[entry]/duration": "@attrs:metadata/timing/acquisition_duration", - "/ENTRY[entry]/duration/@units": "s", - "/ENTRY[entry]/collection_time": "@attrs:metadata/timing/collection_time", - "/ENTRY[entry]/collection_time/@units": "s", - "/ENTRY[entry]/USER[user]/name": "@attrs:metadata/user0/name", - "/ENTRY[entry]/USER[user]/role": "@attrs:metadata/user0/role", - "/ENTRY[entry]/USER[user]/affiliation": "@attrs:metadata/user0/affiliation", - "/ENTRY[entry]/USER[user]/address": "@attrs:metadata/user0/address", - "/ENTRY[entry]/USER[user]/email": "@attrs:metadata/user0/email", - "/ENTRY[entry]/INSTRUMENT[instrument]/name": "Time-of-flight momentum microscope equipped delay line detector, at the endstation of the high rep-rate HHG source at FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/name/@short_name": "TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": 140.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "meV", - "/ENTRY[entry]/INSTRUMENT[instrument]/temporal_resolution": 35.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/temporal_resolution/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/momentum_resolution": { - "link": "/entry/instrument/electronanalyser/momentum_resolution" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/momentum_resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/momentum_resolution/@units": "1/angstrom", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Metis 1000 Momentum Microscope", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": 110.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "meV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": [ - "kx", - "ky", - "E" - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/instrument/analyzer/slow_axes", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/instrument/analyzer/projection", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "Momentum Microscope", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/instrument/analyzer/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_voltage": "@attrs:metadata/file/KTOF:Lens:Extr:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_current": "@attrs:metadata/file/KTOF:Lens:Extr:I", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_current/@units": "µA", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 4.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/name": "A", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/voltage": "@attrs:metadata/file/KTOF:Lens:A:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/name": "B", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/voltage": "@attrs:metadata/file/KTOF:Lens:B:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/name": "C", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/voltage": "@attrs:metadata/file/KTOF:Lens:C:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/name": "D", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/voltage": "@attrs:metadata/file/KTOF:Lens:D:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/name": "E", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/voltage": "@attrs:metadata/file/KTOF:Lens:E:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/name": "F", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/voltage": "@attrs:metadata/file/KTOF:Lens:F:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/name": "G", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/voltage": "@attrs:metadata/file/KTOF:Lens:G:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/name": "H", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/voltage": "@attrs:metadata/file/KTOF:Lens:H:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/name": "I", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/voltage": "@attrs:metadata/file/KTOF:Lens:I:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/name": "UCA", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/voltage": "@attrs:metadata/file/KTOF:Lens:UCA:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/name": "UFA", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/voltage": "@attrs:metadata/file/KTOF:Lens:UFA:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/name": "Foc", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/voltage": "@attrs:metadata/file/KTOF:Lens:Foc:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/shape": "@attrs:metadata/instrument/analyzer/fa_shape", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/size": "@attrs:metadata/instrument/analyzer/fa_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/size/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m1]/value": "@attrs:metadata/file/KTOF:Apertures:m1.RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m1]/value/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m2]/value": "@attrs:metadata/file/KTOF:Apertures:m2.RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m2]/value/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/shape": "@attrs:metadata/instrument/analyzer/ca_shape", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/size": "@attrs:metadata/instrument/analyzer/ca_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/size/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/POSITIONER[ca_m3]/value": "@attrs:metadata/file/KTOF:Apertures:m3.RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/POSITIONER[ca_m3]/value/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "fixed", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/file/KTOF:Lens:TOF:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "tof", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/tof_distance": 0.9, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/tof_distance/@units": "m", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ - 1800, - 1800 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/file/KTOF:Lens:MCPfront:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/file/KTOF:Lens:MCPback:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/file/KTOF:Lens:UDLD:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "rot_y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": 4.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@depends_on": ".", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]": -115.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "HHG @ TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "ultraviolet", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "HHG laser", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/mode": "Single Bunch", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/frequency": "@attrs:metadata/instrument/beam/probe/frequency", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/frequency/@units": "kHz", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/photon_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "@attrs:metadata/instrument/beam/probe/incident_energy_spread", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/pulse_duration": "@attrs:metadata/instrument/beam/probe/pulse_duration", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/pulse_duration/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "@attrs:metadata/instrument/beam/probe/incident_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "V^2/mm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/extent": "@attrs:metadata/instrument/beam/probe/extent", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/extent/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/name": "OPCPA @ TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/probe": "visible light", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/type": "Optical Laser", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/mode": "Single Bunch", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/frequency": "@attrs:metadata/instrument/beam/pump/frequency", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/frequency/@units": "kHz", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/photon_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/distance": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy_spread": "@attrs:metadata/instrument/beam/pump/incident_energy_spread", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy_spread/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_wavelength": "@attrs:metadata/instrument/beam/pump/incident_wavelength", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_wavelength/@units": "nm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_duration": "@attrs:metadata/instrument/beam/pump/pulse_duration", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_duration/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_polarization": "@attrs:metadata/instrument/beam/pump/incident_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_polarization/@units": "V^2/mm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_energy": "@attrs:metadata/instrument/beam/pump/pulse_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_energy/@units": "µJ", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/average_power": "@attrs:metadata/instrument/beam/pump/average_power", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/average_power/@units": "mW", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/extent": "@attrs:metadata/instrument/beam/pump/extent", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/extent/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/fluence": "@attrs:metadata/instrument/beam/pump/fluence", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/fluence/@units": "mJ/cm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@attrs:metadata/file/trARPES:Carving:TEMP_RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "K", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "@attrs:metadata/file/KTOF:Lens:Sample:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/depends_on": "/entry/instrument/manipulator/transformations/trans_z", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "rot_z", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": -0.32, - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "m", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@depends_on": "rot_x", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]": -25.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@depends_on": ".", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]": -90.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@vector": [ - 1, - 0, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@attrs:metadata/sample/preparation_date", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/description": "@attrs:metadata/sample/sample_history", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description/description": "Here should be a description of the preparation procedure.", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@attrs:metadata/sample/chemical_formula", - "/ENTRY[entry]/SAMPLE[sample]/description": "@attrs:metadata/sample/chemical_formula", - "/ENTRY[entry]/SAMPLE[sample]/name": "@attrs:metadata/sample/chemical_formula", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "mbar", - "/ENTRY[entry]/SAMPLE[sample]/situation": "vacuum", - "/ENTRY[entry]/SAMPLE[sample]/temperature": { - "link": "/entry/instrument/manipulator/sample_temperature" - }, - "/ENTRY[entry]/SAMPLE[sample]/bias": { - "link": "/entry/instrument/manipulator/sample_bias" - }, - "/ENTRY[entry]/SAMPLE[sample]/depends_on": "/entry/sample/transformations/corrected_phi", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@depends_on": "rot_omg", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]": 90.0, - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@depends_on": "rot_phi", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]": "@attrs:metadata/file/trARPES:Carving:OMG.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@vector": [ - 1, - 0, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@depends_on": "rot_tht", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]": "@attrs:metadata/file/trARPES:Carving:PHI.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@depends_on": "trans_z", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]": "@attrs:metadata/file/trARPES:Carving:THT.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "trans_y", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": "@attrs:metadata/file/trARPES:Carving:TRZ.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@depends_on": "trans_x", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]": "@attrs:metadata/file/trARPES:Carving:TRY.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@units": "mm", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@transformation_type": "translation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@depends_on": "/entry/instrument/manipulator/transformations/trans_z", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]": "@attrs:metadata/file/trARPES:Carving:TRX.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@units": "mm", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@transformation_type": "translation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@vector": [ - 1, - 0, - 0 - ], - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/applied": true, - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/symmetry": "@attrs:metadata/momentum_correction/rotsym", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/original_centre": "@attrs:metadata/momentum_correction/pcent", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/original_points": "@attrs:metadata/momentum_correction/pouter", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/cdeform_field": "@attrs:metadata/momentum_correction/cdeform_field", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/rdeform_field": "@attrs:metadata/momentum_correction/rdeform_field", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/applied": true, - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/depends_on": "/entry/process/registration/tranformations/rot_z", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]": "@attrs:metadata/momentum_correction/adjust_params/xtrans", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@transformation_type": "translation", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@units": "pixels", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@vector": "@attrs:metadata/momentum_correction/adjust_params/x_vector", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@depends_on": ".", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]": "@attrs:metadata/momentum_correction/adjust_params/ytrans", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@units": "pixels", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@transformation_type": "translation", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@vector": "@attrs:metadata/momentum_correction/adjust_params/y_vector", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@depends_on": "trans_x", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]": "@attrs:metadata/momentum_correction/adjust_params/angle", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@units": "degrees", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@transformation_type": "rotation", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@offset": "@attrs:metadata/momentum_correction/adjust_params/offset", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@vector": "@attrs:metadata/momentum_correction/adjust_params/rotation_vector", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@depends_on": "trans_y", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/coefficients": "@attrs:metadata/energy_correction/calibration/coefficients", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/fit_function": "@attrs:metadata/energy_correction/calibration/fit_function", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/original_axis": "@attrs:metadata/energy_correction/tof", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@attrs:metadata/energy_correction/calibration/axis", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/applied": true, - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/scaling": "@attrs:metadata/momentum_correction/calibration/scale_kx", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/offset": "@attrs:metadata/momentum_correction/offset_kx", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_kx", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/applied": true, - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/scaling": "@attrs:metadata/momentum_correction/calibration/scale_ky", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/offset": "@attrs:metadata/momentum_correction/offset_ky", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_ky", - "/ENTRY[entry]/DATA[data]/@axes": "@data:dims", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@*_indices]": "@data:*.index", - "/ENTRY[entry]/DATA[data]/@signal": "data", - "/ENTRY[entry]/DATA[data]/data": "@data:data", - "/ENTRY[entry]/DATA[data]/data/@units": "counts", - "/ENTRY[entry]/DATA[data]/AXISNAME[*]": "@data:*.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[*]/@units": "@data:*.unit" +{ + "/@default": "entry", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/definition": "NXmpes", + "/ENTRY[entry]/definition/@version": "None", + "/ENTRY[entry]/title": "@attrs:metadata/entry_title", + "/ENTRY[entry]/start_time": "@attrs:metadata/timing/acquisition_start", + "/ENTRY[entry]/experiment_institution": "Fritz Haber Institute - Max Planck Society", + "/ENTRY[entry]/experiment_facility": "Time Resolved ARPES", + "/ENTRY[entry]/experiment_laboratory": "Clean Room 4", + "/ENTRY[entry]/entry_identifier": "@attrs:metadata/entry_identifier", + "/ENTRY[entry]/end_time": "@attrs:metadata/timing/acquisition_stop", + "/ENTRY[entry]/duration": "@attrs:metadata/timing/acquisition_duration", + "/ENTRY[entry]/duration/@units": "s", + "/ENTRY[entry]/collection_time": "@attrs:metadata/timing/collection_time", + "/ENTRY[entry]/collection_time/@units": "s", + "/ENTRY[entry]/USER[user]/name": "@attrs:metadata/user0/name", + "/ENTRY[entry]/USER[user]/role": "@attrs:metadata/user0/role", + "/ENTRY[entry]/USER[user]/affiliation": "@attrs:metadata/user0/affiliation", + "/ENTRY[entry]/USER[user]/address": "@attrs:metadata/user0/address", + "/ENTRY[entry]/USER[user]/email": "@attrs:metadata/user0/email", + "/ENTRY[entry]/INSTRUMENT[instrument]/name": "Time-of-flight momentum microscope equipped delay line detector, at the endstation of the high rep-rate HHG source at FHI", + "/ENTRY[entry]/INSTRUMENT[instrument]/name/@short_name": "TR-ARPES @ FHI", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": 140.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "meV", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/resolution": 35.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/resolution/@units": "fs", + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/physical_quantity": "time", + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/resolution": { + "link": "/entry/instrument/electronanalyser/momentum_resolution" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/resolution/@units": "1/angstrom", + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/physical_quantity": "momentum", + "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Metis 1000 Momentum Microscope", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "SPECS GmbH", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "Metis 1000 Momentum Microscope", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": [ + "kx", + "ky", + "E" + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/instrument/analyzer/slow_axes", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": 110.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "meV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/resolution/@units": "1/angstrom", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/physical_quantity": "momentum", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/resolution/@units": "\u00b5m", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/physical_quantity": "length", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/type": "estimated", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": 4.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "rot_y", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]": -115.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@depends_on": ".", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@transformation_type": "rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@vector": [ + 0, + 1, + 0 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/instrument/analyzer/projection", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "angular dispersive", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/instrument/analyzer/lens_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_voltage": "@attrs:metadata/file/KTOF:Lens:Extr:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_current": "@attrs:metadata/file/KTOF:Lens:Extr:I", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_current/@units": "\u00b5A", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 4.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/name": "A", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/voltage": "@attrs:metadata/file/KTOF:Lens:A:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/name": "B", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/voltage": "@attrs:metadata/file/KTOF:Lens:B:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/name": "C", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/voltage": "@attrs:metadata/file/KTOF:Lens:C:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/name": "D", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/voltage": "@attrs:metadata/file/KTOF:Lens:D:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/name": "E", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/voltage": "@attrs:metadata/file/KTOF:Lens:E:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/name": "F", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/voltage": "@attrs:metadata/file/KTOF:Lens:F:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/name": "G", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/voltage": "@attrs:metadata/file/KTOF:Lens:G:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/name": "H", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/voltage": "@attrs:metadata/file/KTOF:Lens:H:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/name": "I", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/voltage": "@attrs:metadata/file/KTOF:Lens:I:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/name": "UCA", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/voltage": "@attrs:metadata/file/KTOF:Lens:UCA:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/name": "UFA", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/voltage": "@attrs:metadata/file/KTOF:Lens:UFA:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/name": "Foc", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/voltage": "@attrs:metadata/file/KTOF:Lens:Foc:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/shape": "@attrs:metadata/instrument/analyzer/fa_shape", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/size": "@attrs:metadata/instrument/analyzer/fa_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/size/@units": "\u00b5m", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m1]/value": "@attrs:metadata/file/KTOF:Apertures:m1.RBV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m1]/value/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m2]/value": "@attrs:metadata/file/KTOF:Apertures:m2.RBV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m2]/value/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/shape": "@attrs:metadata/instrument/analyzer/ca_shape", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/size": "@attrs:metadata/instrument/analyzer/ca_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/size/@units": "\u00b5m", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/POSITIONER[ca_m3]/value": "@attrs:metadata/file/KTOF:Apertures:m3.RBV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/POSITIONER[ca_m3]/value/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/file/KTOF:Lens:TOF:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "tof", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/tof_distance": 0.9, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/tof_distance/@units": "m", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ + 1800, + 1800 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/file/KTOF:Lens:MCPfront:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/file/KTOF:Lens:MCPback:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/file/KTOF:Lens:UDLD:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/name": "HHG @ TR-ARPES @ FHI", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/probe": "photon", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/mode": "Single Bunch", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/frequency": "@attrs:metadata/instrument/beam/probe/frequency", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/frequency/@units": "kHz", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/photon_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/associated_beam": "/entry/instrument/beam_probe", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/distance": 0.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy_spread": "@attrs:metadata/instrument/beam/probe/incident_energy_spread", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy_spread/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/pulse_duration": "@attrs:metadata/instrument/beam/probe/pulse_duration", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/pulse_duration/@units": "fs", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_polarization": "@attrs:metadata/instrument/beam/probe/incident_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_polarization/@units": "V^2/mm^2", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/extent": "@attrs:metadata/instrument/beam/probe/extent", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/extent/@units": "\u00b5m", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/associated_source": "/entry/instrument/source_probe", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/name": "OPCPA @ TR-ARPES @ FHI", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/probe": "visible light", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/type": "Optical Laser", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/mode": "Single Bunch", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/frequency": "@attrs:metadata/instrument/beam/pump/frequency", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/frequency/@units": "kHz", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/photon_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/associated_beam": "/entry/instrument/beam_pump", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/distance": 0.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy_spread": "@attrs:metadata/instrument/beam/pump/incident_energy_spread", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy_spread/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_wavelength": "@attrs:metadata/instrument/beam/pump/incident_wavelength", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_wavelength/@units": "nm", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_duration": "@attrs:metadata/instrument/beam/pump/pulse_duration", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_duration/@units": "fs", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_polarization": "@attrs:metadata/instrument/beam/pump/incident_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_polarization/@units": "V^2/mm^2", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_energy": "@attrs:metadata/instrument/beam/pump/pulse_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_energy/@units": "\u00b5J", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/average_power": "@attrs:metadata/instrument/beam/pump/average_power", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/average_power/@units": "mW", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/extent": "@attrs:metadata/instrument/beam/pump/extent", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/extent/@units": "\u00b5m", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/fluence": "@attrs:metadata/instrument/beam/pump/fluence", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/fluence/@units": "mJ/cm^2", + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/associated_source": "/entry/instrument/source_pump", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "sample_temperature", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "temperature", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "@attrs:metadata/file/trARPES:Carving:TEMP_RBV", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value/@units": "K", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "sample_bias", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "voltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "@attrs:metadata/file/KTOF:Lens:Sample:V", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/name": "sample_chamber_pressure", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/measurement": "pressure", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/value": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/value/@units": "mbar", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/depends_on": "/entry/instrument/manipulator/transformations/trans_z", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": -0.32, + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "rot_z", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "m", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@depends_on": "rot_x", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]": -25.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@transformation_type": "rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@vector": [ + 0, + 0, + 1 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@depends_on": ".", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]": -90.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@transformation_type": "rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@vector": [ + 1, + 0, + 0 + ], + "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@attrs:metadata/sample/preparation_date", + "/ENTRY[entry]/SAMPLE[sample]/sample_history/notes": "@attrs:metadata/sample/sample_history", + "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@attrs:metadata/sample/chemical_formula", + "/ENTRY[entry]/SAMPLE[sample]/description": "@attrs:metadata/sample/chemical_formula", + "/ENTRY[entry]/SAMPLE[sample]/name": "@attrs:metadata/sample/chemical_formula", + "/ENTRY[entry]/SAMPLE[sample]/situation": "vacuum", + "/ENTRY[entry]/SAMPLE[sample]/SUSBTANCE[substance]/molecular_formula_hill": { + "link": "/entry/sample/chemical_formula" + }, + "/ENTRY[entry]/SAMPLE[sample]/physical_form": "thin film", + "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": { + "link": "/entry/instrument/manipulator/temperature_sensor" + }, + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": { + "link": "/entry/instrument/manipulator/pressure_gauge" + }, + "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": { + "link": "/entry/instrument/manipulator/sample_bias_voltmeter" + }, + "/ENTRY[entry]/SAMPLE[sample]/depends_on": "/entry/sample/transformations/corrected_phi", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@depends_on": "rot_omg", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]": 90.0, + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@units": "degrees", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@transformation_type": "rotation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@vector": [ + 0, + 1, + 0 + ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@depends_on": "rot_phi", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]": "@attrs:metadata/file/trARPES:Carving:OMG.RBV", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@units": "degrees", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@transformation_type": "rotation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@vector": [ + 1, + 0, + 0 + ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@depends_on": "rot_tht", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]": "@attrs:metadata/file/trARPES:Carving:PHI.RBV", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@units": "degrees", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@transformation_type": "rotation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@vector": [ + 0, + 1, + 0 + ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@depends_on": "trans_z", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]": "@attrs:metadata/file/trARPES:Carving:THT.RBV", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@units": "degrees", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@transformation_type": "rotation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@vector": [ + 0, + 0, + 1 + ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "trans_y", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": "@attrs:metadata/file/trARPES:Carving:TRZ.RBV", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@depends_on": "trans_x", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]": "@attrs:metadata/file/trARPES:Carving:TRY.RBV", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@units": "mm", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@transformation_type": "translation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@vector": [ + 0, + 1, + 0 + ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@depends_on": "/entry/instrument/manipulator/transformations/trans_z", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]": "@attrs:metadata/file/trARPES:Carving:TRX.RBV", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@units": "mm", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@transformation_type": "translation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@vector": [ + 1, + 0, + 0 + ], + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/applied": true, + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/symmetry": "@attrs:metadata/momentum_correction/rotsym", + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/original_centre": "@attrs:metadata/momentum_correction/pcent", + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/original_points": "@attrs:metadata/momentum_correction/pouter", + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/cdeform_field": "@attrs:metadata/momentum_correction/cdeform_field", + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/rdeform_field": "@attrs:metadata/momentum_correction/rdeform_field", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/applied": true, + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/depends_on": "/entry/process/registration/tranformations/rot_z", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]": "@attrs:metadata/momentum_correction/adjust_params/xtrans", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@transformation_type": "translation", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@units": "pixels", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@vector": "@attrs:metadata/momentum_correction/adjust_params/x_vector", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@depends_on": ".", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]": "@attrs:metadata/momentum_correction/adjust_params/ytrans", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@units": "pixels", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@transformation_type": "translation", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@vector": "@attrs:metadata/momentum_correction/adjust_params/y_vector", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@depends_on": "trans_x", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]": "@attrs:metadata/momentum_correction/adjust_params/angle", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@units": "degrees", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@transformation_type": "rotation", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@offset": "@attrs:metadata/momentum_correction/adjust_params/offset", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@vector": "@attrs:metadata/momentum_correction/adjust_params/rotation_vector", + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@depends_on": "trans_y", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": true, + "/ENTRY[entry]/PROCESS[process]/energy_calibration/coefficients": "@attrs:metadata/energy_correction/calibration/coefficients", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/fit_function": "@attrs:metadata/energy_correction/calibration/fit_function", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/original_axis": "@attrs:metadata/energy_correction/tof", + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@attrs:metadata/energy_correction/calibration/axis", + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/applied": true, + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/scaling": "@attrs:metadata/momentum_correction/calibration/scale_kx", + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/offset": "@attrs:metadata/momentum_correction/offset_kx", + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_kx", + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/applied": true, + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/scaling": "@attrs:metadata/momentum_correction/calibration/scale_ky", + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/offset": "@attrs:metadata/momentum_correction/offset_ky", + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_ky", + "/ENTRY[entry]/DATA[data]/@axes": "@data:dims", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@*_indices]": "@data:*.index", + "/ENTRY[entry]/DATA[data]/@signal": "data", + "/ENTRY[entry]/DATA[data]/data": "@data:data", + "/ENTRY[entry]/DATA[data]/data/@units": "counts", + "/ENTRY[entry]/DATA[data]/AXISNAME[*]": "@data:*.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[*]/@units": "@data:*.unit", + "/ENTRY[entry]/DATA[data]/energy/@type": "binding" } \ No newline at end of file From 872fa05e35f2e4a89441556f0b2f42fbca52abe2 Mon Sep 17 00:00:00 2001 From: domna Date: Wed, 17 Jan 2024 16:56:41 +0100 Subject: [PATCH 18/88] Use nested config file structure --- .../dataconverter/readers/mpes/reader.py | 13 +- pynxtools/dataconverter/readers/utils.py | 83 +- .../readers/mpes/config_file.json | 779 +++++++++--------- 3 files changed, 496 insertions(+), 379 deletions(-) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index 9adfc4e75..27ab2cefa 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -17,18 +17,20 @@ # """MPES reader implementation for the DataConverter.""" import errno -import json import os from functools import reduce -from typing import Any -from typing import Tuple +from typing import Any, Tuple import h5py import xarray as xr import yaml from pynxtools.dataconverter.readers.base.reader import BaseReader -from pynxtools.dataconverter.readers.utils import flatten_and_replace, FlattenSettings +from pynxtools.dataconverter.readers.utils import ( + FlattenSettings, + flatten_and_replace, + parse_flatten_json, +) DEFAULT_UNITS = { "X": "step", @@ -208,8 +210,7 @@ def handle_h5_and_json_file(file_paths, objects): if file_extension == ".h5": x_array_loaded = h5_to_xarray(file_path) elif file_extension == ".json": - with open(file_path, encoding="utf-8") as file: - config_file_dict = json.load(file) + config_file_dict = parse_flatten_json(file_path) elif file_extension in [".yaml", ".yml"]: with open(file_path, encoding="utf-8") as feln: eln_data_dict = flatten_and_replace( diff --git a/pynxtools/dataconverter/readers/utils.py b/pynxtools/dataconverter/readers/utils.py index f40f98be0..98919bda0 100644 --- a/pynxtools/dataconverter/readers/utils.py +++ b/pynxtools/dataconverter/readers/utils.py @@ -16,11 +16,13 @@ # limitations under the License. # """Utility functions for the NeXus reader classes.""" +import json import logging -from dataclasses import dataclass, replace -from typing import List, Any, Dict, Optional, Tuple +import re from collections.abc import Mapping -import json +from dataclasses import dataclass, replace +from typing import Any, Dict, List, Optional, Tuple + import yaml logger = logging.getLogger(__name__) @@ -197,6 +199,66 @@ def parse_yml( ) +short_notation_regex = re.compile(r"\*\{([\w,]+)\}") + + +def flatten_json( + json_data: Dict[str, Any], + base_key: Optional[str] = None, + replace: Optional[str] = None, +) -> Dict[str, Any]: + """ + Flattens a json dict into a flat dictionary of absolute paths. + + Args: + json_data (Dict[str, Any]): The dictionary read from the json file. + base_key (Optional[str], optional): + A base key to prefix to all keys. + Defaults to None. + replace (Optional[str], optional): + A replacement key which replaces all occurences of * with this string. + Defaults to None. + + Returns: + Dict[str, Any]: The flattened dict + """ + flattened_config = {} + for key, value in json_data.items(): + if base_key is not None: + key = f"{base_key}/{key}" + + if replace is not None: + key = key.replace("*", replace) + if isinstance(value, str): + value = value.replace("*", replace) + + expand_match = short_notation_regex.search(key) + if replace is None and expand_match is not None: + expand_keys = expand_match.group(1).split(",") + for ekey in expand_keys: + rkey = key.replace(expand_match.group(0), ekey) + + if isinstance(value, dict): + flattened_config.update( + flatten_json(value, base_key=rkey, replace=ekey) + ) + elif isinstance(value, str) and value.startswith("@link:"): + flattened_config[rkey] = {"link": value.removeprefix("@link:")} + elif isinstance(value, str): + flattened_config[rkey.replace("*", ekey)] = value.replace("*", ekey) + else: + flattened_config[rkey.replace("*", ekey)] = value + continue + + if isinstance(value, dict): + flattened_config.update(flatten_json(value, base_key=key)) + elif isinstance(value, str) and value.startswith("@link:"): + flattened_config[key] = {"link": value.removeprefix("@link:")} + else: + flattened_config[key] = value + return flattened_config + + def parse_json(file_path: str) -> Dict[str, Any]: """Parses a metadata json file into a dictionary. @@ -210,6 +272,21 @@ def parse_json(file_path: str) -> Dict[str, Any]: return json.load(file) +def parse_flatten_json(file_path: str) -> Dict[str, Any]: + """ + Parses a metadata json file into a dictionary and + flattens it into a flat dictionary of absolute paths. + + Args: + file_path (str): The file path of the json file. + + Returns: + Dict[str, Any]: + The flattened dictionary containing the data readout from the json. + """ + return flatten_json(parse_json(file_path)) + + def handle_objects(objects: Tuple[Any]) -> Dict[str, Any]: """Handle objects and generate template entries from them""" if objects is None: diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 0b9c44343..36b650f9e 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -1,371 +1,410 @@ -{ - "/@default": "entry", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/definition": "NXmpes", - "/ENTRY[entry]/definition/@version": "None", - "/ENTRY[entry]/title": "@attrs:metadata/entry_title", - "/ENTRY[entry]/start_time": "@attrs:metadata/timing/acquisition_start", - "/ENTRY[entry]/experiment_institution": "Fritz Haber Institute - Max Planck Society", - "/ENTRY[entry]/experiment_facility": "Time Resolved ARPES", - "/ENTRY[entry]/experiment_laboratory": "Clean Room 4", - "/ENTRY[entry]/entry_identifier": "@attrs:metadata/entry_identifier", - "/ENTRY[entry]/end_time": "@attrs:metadata/timing/acquisition_stop", - "/ENTRY[entry]/duration": "@attrs:metadata/timing/acquisition_duration", - "/ENTRY[entry]/duration/@units": "s", - "/ENTRY[entry]/collection_time": "@attrs:metadata/timing/collection_time", - "/ENTRY[entry]/collection_time/@units": "s", - "/ENTRY[entry]/USER[user]/name": "@attrs:metadata/user0/name", - "/ENTRY[entry]/USER[user]/role": "@attrs:metadata/user0/role", - "/ENTRY[entry]/USER[user]/affiliation": "@attrs:metadata/user0/affiliation", - "/ENTRY[entry]/USER[user]/address": "@attrs:metadata/user0/address", - "/ENTRY[entry]/USER[user]/email": "@attrs:metadata/user0/email", - "/ENTRY[entry]/INSTRUMENT[instrument]/name": "Time-of-flight momentum microscope equipped delay line detector, at the endstation of the high rep-rate HHG source at FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/name/@short_name": "TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": 140.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "meV", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/resolution": 35.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/resolution/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/physical_quantity": "time", - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[temporal_resolution]/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/resolution": { - "link": "/entry/instrument/electronanalyser/momentum_resolution" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/resolution/@units": "1/angstrom", - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/physical_quantity": "momentum", - "/ENTRY[entry]/INSTRUMENT[instrument]/RESOLUTION[momentum_resolution]/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Metis 1000 Momentum Microscope", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "SPECS GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "Metis 1000 Momentum Microscope", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": [ - "kx", - "ky", - "E" - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/instrument/analyzer/slow_axes", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": 110.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units": "meV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/resolution/@units": "1/angstrom", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/physical_quantity": "momentum", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/resolution/@units": "\u00b5m", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/physical_quantity": "length", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]/type": "estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": 4.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "rot_y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]": -115.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@depends_on": ".", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/instrument/analyzer/projection", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "angular dispersive", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/instrument/analyzer/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_voltage": "@attrs:metadata/file/KTOF:Lens:Extr:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_current": "@attrs:metadata/file/KTOF:Lens:Extr:I", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/extractor_current/@units": "\u00b5A", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 4.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/name": "A", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/voltage": "@attrs:metadata/file/KTOF:Lens:A:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_A]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/name": "B", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/voltage": "@attrs:metadata/file/KTOF:Lens:B:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_B]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/name": "C", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/voltage": "@attrs:metadata/file/KTOF:Lens:C:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_C]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/name": "D", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/voltage": "@attrs:metadata/file/KTOF:Lens:D:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_D]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/name": "E", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/voltage": "@attrs:metadata/file/KTOF:Lens:E:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_E]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/name": "F", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/voltage": "@attrs:metadata/file/KTOF:Lens:F:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_F]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/name": "G", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/voltage": "@attrs:metadata/file/KTOF:Lens:G:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_G]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/name": "H", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/voltage": "@attrs:metadata/file/KTOF:Lens:H:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_H]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/name": "I", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/voltage": "@attrs:metadata/file/KTOF:Lens:I:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_I]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/name": "UCA", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/voltage": "@attrs:metadata/file/KTOF:Lens:UCA:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UCA]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/name": "UFA", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/voltage": "@attrs:metadata/file/KTOF:Lens:UFA:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_UFA]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/name": "Foc", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/voltage": "@attrs:metadata/file/KTOF:Lens:Foc:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[lens_Foc]/voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/shape": "@attrs:metadata/instrument/analyzer/fa_shape", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/size": "@attrs:metadata/instrument/analyzer/fa_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/size/@units": "\u00b5m", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m1]/value": "@attrs:metadata/file/KTOF:Apertures:m1.RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m1]/value/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m2]/value": "@attrs:metadata/file/KTOF:Apertures:m2.RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture/POSITIONER[fa_m2]/value/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/shape": "@attrs:metadata/instrument/analyzer/ca_shape", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/size": "@attrs:metadata/instrument/analyzer/ca_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/size/@units": "\u00b5m", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/POSITIONER[ca_m3]/value": "@attrs:metadata/file/KTOF:Apertures:m3.RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture/POSITIONER[ca_m3]/value/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/file/KTOF:Lens:TOF:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "tof", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/tof_distance": 0.9, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/tof_distance/@units": "m", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "DLD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ - 1800, - 1800 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/file/KTOF:Lens:MCPfront:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/file/KTOF:Lens:MCPback:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/file/KTOF:Lens:UDLD:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/name": "HHG @ TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/probe": "photon", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/mode": "Single Bunch", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/frequency": "@attrs:metadata/instrument/beam/probe/frequency", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/frequency/@units": "kHz", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/photon_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]/associated_beam": "/entry/instrument/beam_probe", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/distance": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy_spread": "@attrs:metadata/instrument/beam/probe/incident_energy_spread", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_energy_spread/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/pulse_duration": "@attrs:metadata/instrument/beam/probe/pulse_duration", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/pulse_duration/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_polarization": "@attrs:metadata/instrument/beam/probe/incident_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/incident_polarization/@units": "V^2/mm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/extent": "@attrs:metadata/instrument/beam/probe/extent", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/extent/@units": "\u00b5m", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]/associated_source": "/entry/instrument/source_probe", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/name": "OPCPA @ TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/probe": "visible light", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/type": "Optical Laser", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/mode": "Single Bunch", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/frequency": "@attrs:metadata/instrument/beam/pump/frequency", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/frequency/@units": "kHz", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/photon_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]/associated_beam": "/entry/instrument/beam_pump", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/distance": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy_spread": "@attrs:metadata/instrument/beam/pump/incident_energy_spread", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_energy_spread/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_wavelength": "@attrs:metadata/instrument/beam/pump/incident_wavelength", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_wavelength/@units": "nm", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_duration": "@attrs:metadata/instrument/beam/pump/pulse_duration", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_duration/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_polarization": "@attrs:metadata/instrument/beam/pump/incident_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/incident_polarization/@units": "V^2/mm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_energy": "@attrs:metadata/instrument/beam/pump/pulse_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/pulse_energy/@units": "\u00b5J", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/average_power": "@attrs:metadata/instrument/beam/pump/average_power", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/average_power/@units": "mW", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/extent": "@attrs:metadata/instrument/beam/pump/extent", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/extent/@units": "\u00b5m", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/fluence": "@attrs:metadata/instrument/beam/pump/fluence", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/fluence/@units": "mJ/cm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]/associated_source": "/entry/instrument/source_pump", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "sample_temperature", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "temperature", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "@attrs:metadata/file/trARPES:Carving:TEMP_RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value/@units": "K", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "sample_bias", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "@attrs:metadata/file/KTOF:Lens:Sample:V", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/name": "sample_chamber_pressure", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/measurement": "pressure", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/value": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/pressure_gauge/value/@units": "mbar", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/depends_on": "/entry/instrument/manipulator/transformations/trans_z", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": -0.32, - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "rot_z", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "m", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@depends_on": "rot_x", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]": -25.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@depends_on": ".", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]": -90.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/TRANSFORMATIONS[transformations]/AXISNAME[rot_x]/@vector": [ - 1, - 0, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@attrs:metadata/sample/preparation_date", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/notes": "@attrs:metadata/sample/sample_history", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@attrs:metadata/sample/chemical_formula", - "/ENTRY[entry]/SAMPLE[sample]/description": "@attrs:metadata/sample/chemical_formula", - "/ENTRY[entry]/SAMPLE[sample]/name": "@attrs:metadata/sample/chemical_formula", - "/ENTRY[entry]/SAMPLE[sample]/situation": "vacuum", - "/ENTRY[entry]/SAMPLE[sample]/SUSBTANCE[substance]/molecular_formula_hill": { - "link": "/entry/sample/chemical_formula" - }, - "/ENTRY[entry]/SAMPLE[sample]/physical_form": "thin film", - "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": { - "link": "/entry/instrument/manipulator/temperature_sensor" - }, - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": { - "link": "/entry/instrument/manipulator/pressure_gauge" - }, - "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": { - "link": "/entry/instrument/manipulator/sample_bias_voltmeter" - }, - "/ENTRY[entry]/SAMPLE[sample]/depends_on": "/entry/sample/transformations/corrected_phi", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@depends_on": "rot_omg", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]": 90.0, - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_phi]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@depends_on": "rot_phi", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]": "@attrs:metadata/file/trARPES:Carving:OMG.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_omg]/@vector": [ - 1, - 0, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@depends_on": "rot_tht", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]": "@attrs:metadata/file/trARPES:Carving:PHI.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_phi]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@depends_on": "trans_z", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]": "@attrs:metadata/file/trARPES:Carving:THT.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@depends_on": "trans_y", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": "@attrs:metadata/file/trARPES:Carving:TRZ.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@transformation_type": "translation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@depends_on": "trans_x", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]": "@attrs:metadata/file/trARPES:Carving:TRY.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@units": "mm", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@transformation_type": "translation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_y]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@depends_on": "/entry/instrument/manipulator/transformations/trans_z", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]": "@attrs:metadata/file/trARPES:Carving:TRX.RBV", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@units": "mm", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@transformation_type": "translation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_x]/@vector": [ - 1, - 0, - 0 - ], - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/applied": true, - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/symmetry": "@attrs:metadata/momentum_correction/rotsym", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/original_centre": "@attrs:metadata/momentum_correction/pcent", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/original_points": "@attrs:metadata/momentum_correction/pouter", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/cdeform_field": "@attrs:metadata/momentum_correction/cdeform_field", - "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]/rdeform_field": "@attrs:metadata/momentum_correction/rdeform_field", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/applied": true, - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/depends_on": "/entry/process/registration/tranformations/rot_z", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]": "@attrs:metadata/momentum_correction/adjust_params/xtrans", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@transformation_type": "translation", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@units": "pixels", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@vector": "@attrs:metadata/momentum_correction/adjust_params/x_vector", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_x]/@depends_on": ".", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]": "@attrs:metadata/momentum_correction/adjust_params/ytrans", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@units": "pixels", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@transformation_type": "translation", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@vector": "@attrs:metadata/momentum_correction/adjust_params/y_vector", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[trans_y]/@depends_on": "trans_x", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]": "@attrs:metadata/momentum_correction/adjust_params/angle", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@units": "degrees", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@transformation_type": "rotation", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@offset": "@attrs:metadata/momentum_correction/adjust_params/offset", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@vector": "@attrs:metadata/momentum_correction/adjust_params/rotation_vector", - "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]/TRANSFORMATIONS[tranformations]/AXISNAME[rot_z]/@depends_on": "trans_y", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/coefficients": "@attrs:metadata/energy_correction/calibration/coefficients", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/fit_function": "@attrs:metadata/energy_correction/calibration/fit_function", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/original_axis": "@attrs:metadata/energy_correction/tof", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@attrs:metadata/energy_correction/calibration/axis", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/applied": true, - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/scaling": "@attrs:metadata/momentum_correction/calibration/scale_kx", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/offset": "@attrs:metadata/momentum_correction/offset_kx", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]/calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_kx", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/applied": true, - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/scaling": "@attrs:metadata/momentum_correction/calibration/scale_ky", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/offset": "@attrs:metadata/momentum_correction/offset_ky", - "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]/calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_ky", - "/ENTRY[entry]/DATA[data]/@axes": "@data:dims", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@*_indices]": "@data:*.index", - "/ENTRY[entry]/DATA[data]/@signal": "data", - "/ENTRY[entry]/DATA[data]/data": "@data:data", - "/ENTRY[entry]/DATA[data]/data/@units": "counts", - "/ENTRY[entry]/DATA[data]/AXISNAME[*]": "@data:*.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[*]/@units": "@data:*.unit", - "/ENTRY[entry]/DATA[data]/energy/@type": "binding" +{ + "/@default": "entry", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/definition": "NXmpes", + "/ENTRY[entry]/definition/@version": "None", + "/ENTRY[entry]/title": "@attrs:metadata/entry_title", + "/ENTRY[entry]/start_time": "@attrs:metadata/timing/acquisition_start", + "/ENTRY[entry]/experiment_institution": "Fritz Haber Institute - Max Planck Society", + "/ENTRY[entry]/experiment_facility": "Time Resolved ARPES", + "/ENTRY[entry]/experiment_laboratory": "Clean Room 4", + "/ENTRY[entry]/entry_identifier": "@attrs:metadata/entry_identifier", + "/ENTRY[entry]/end_time": "@attrs:metadata/timing/acquisition_stop", + "/ENTRY[entry]/duration": "@attrs:metadata/timing/acquisition_duration", + "/ENTRY[entry]/duration/@units": "s", + "/ENTRY[entry]/collection_time": "@attrs:metadata/timing/collection_time", + "/ENTRY[entry]/collection_time/@units": "s", + "/ENTRY[entry]/USER[user]": { + "name": "@attrs:metadata/user0/name", + "role": "@attrs:metadata/user0/role", + "affiliation": "@attrs:metadata/user0/affiliation", + "address": "@attrs:metadata/user0/address", + "email": "@attrs:metadata/user0/email" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]": { + "name": "Time-of-flight momentum microscope equipped delay line detector, at the endstation of the high rep-rate HHG source at FHI", + "name/@short_name": "TR-ARPES @ FHI", + "energy_resolution": { + "resolution": 140.0, + "resolution/@units": "meV", + "physical_quantity": "energy", + "type": "estimated" + }, + "RESOLUTION[temporal_resolution]": { + "resolution": 35.0, + "resolution/@units": "fs", + "physical_quantity": "time", + "type": "estimated" + }, + "RESOLUTION[momentum_resolution]": { + "resolution": "@link:/entry/instrument/electronanalyser/momentum_resolution", + "resolution/@units": "1/angstrom", + "physical_quantity": "momentum", + "type": "estimated" + } + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]": { + "description": "SPECS Metis 1000 Momentum Microscope", + "device_information": { + "vendor": "SPECS GmbH", + "model": "Metis 1000 Momentum Microscope" + }, + "fast_axes": [ + "kx", + "ky", + "E" + ], + "slow_axes": "@attrs:metadata/instrument/analyzer/slow_axes", + "energy_resolution": { + "resolution": 110.0, + "resolution/@units": "meV", + "physical_quantity": "energy", + "type": "estimated" + }, + "RESOLUTION[momentum_resolution]": { + "resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", + "resolution/@units": "1/angstrom", + "physical_quantity": "momentum", + "type": "estimated" + }, + "RESOLUTION[spatial_resolution]": { + "resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", + "resolution/@units": "µm", + "physical_quantity": "length", + "type": "estimated" + }, + "depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", + "TRANSFORMATIONS[transformations]": { + "AXISNAME[trans_z]": 4.0, + "AXISNAME[trans_z]/@depends_on": "rot_y", + "AXISNAME[trans_z]/@transformation_type": "translation", + "AXISNAME[trans_z]/@units": "mm", + "AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "AXISNAME[rot_y]": -115.0, + "AXISNAME[rot_y]/@depends_on": ".", + "AXISNAME[rot_y]/@transformation_type": "rotation", + "AXISNAME[rot_y]/@units": "degrees", + "AXISNAME[rot_y]/@vector": [ + 0, + 1, + 0 + ] + } + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]": { + "projection": "@attrs:metadata/instrument/analyzer/projection", + "scheme": "angular dispersive", + "mode": "@attrs:metadata/instrument/analyzer/lens_mode", + "extractor_voltage": "@attrs:metadata/file/KTOF:Lens:Extr:V", + "extractor_voltage/@units": "V", + "extractor_current": "@attrs:metadata/file/KTOF:Lens:Extr:I", + "extractor_current/@units": "µA", + "working_distance": 4.0, + "working_distance/@units": "mm", + "LENS_EM[lens_*{A,B,C,D,E,F,G,H,I,UCA,UFA,Foc}]": { + "name": "*", + "voltage": "@attrs:metadata/file/KTOF:Lens:*:V", + "voltage/@units": "V" + }, + "field_aperture": { + "shape": "@attrs:metadata/instrument/analyzer/fa_shape", + "size": "@attrs:metadata/instrument/analyzer/fa_size", + "size/@units": "µm", + "POSITIONER[fa_m1]": { + "value": "@attrs:metadata/file/KTOF:Apertures:m1.RBV", + "value/@units": "mm" + }, + "POSITIONER[fa_m2]": { + "value": "@attrs:metadata/file/KTOF:Apertures:m2.RBV", + "value/@units": "mm" + } + }, + "contrast_aperture": { + "shape": "@attrs:metadata/instrument/analyzer/ca_shape", + "size": "@attrs:metadata/instrument/analyzer/ca_size", + "size/@units": "µm", + "POSITIONER[ca_m3]": { + "value": "@attrs:metadata/file/KTOF:Apertures:m3.RBV", + "value/@units": "mm" + } + } + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]": { + "pass_energy": "@attrs:metadata/file/KTOF:Lens:TOF:V", + "pass_energy/@units": "eV", + "scheme": "tof", + "tof_distance": 0.9, + "tof_distance/@units": "m" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]": { + "amplifier_type": "MCP", + "detector_type": "DLD", + "sensor_pixels": [ + 1800, + 1800 + ], + "amplifier_bias": "@attrs:metadata/file/KTOF:Lens:MCPfront:V", + "amplifier_bias/@units": "V", + "amplifier_voltage": "@attrs:metadata/file/KTOF:Lens:MCPback:V", + "amplifier_voltage/@units": "V", + "detector_voltage": "@attrs:metadata/file/KTOF:Lens:UDLD:V", + "detector_voltage/@units": "V" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]": { + "name": "HHG @ TR-ARPES @ FHI", + "probe": "photon", + "mode": "Single Bunch", + "frequency": "@attrs:metadata/instrument/beam/probe/frequency", + "frequency/@units": "kHz", + "photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", + "photon_energy/@units": "eV", + "associated_beam": "/entry/instrument/beam_probe" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]": { + "distance": 0.0, + "distance/@units": "mm", + "incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", + "incident_energy/@units": "eV", + "incident_energy_spread": "@attrs:metadata/instrument/beam/probe/incident_energy_spread", + "incident_energy_spread/@units": "eV", + "pulse_duration": "@attrs:metadata/instrument/beam/probe/pulse_duration", + "pulse_duration/@units": "fs", + "incident_polarization": "@attrs:metadata/instrument/beam/probe/incident_polarization", + "incident_polarization/@units": "V^2/mm^2", + "extent": "@attrs:metadata/instrument/beam/probe/extent", + "extent/@units": "µm", + "associated_source": "/entry/instrument/source_probe" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]": { + "name": "OPCPA @ TR-ARPES @ FHI", + "probe": "visible light", + "type": "Optical Laser", + "mode": "Single Bunch", + "frequency": "@attrs:metadata/instrument/beam/pump/frequency", + "frequency/@units": "kHz", + "photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", + "photon_energy/@units": "eV", + "associated_beam": "/entry/instrument/beam_pump" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]": { + "distance": 0.0, + "distance/@units": "mm", + "incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", + "incident_energy/@units": "eV", + "incident_energy_spread": "@attrs:metadata/instrument/beam/pump/incident_energy_spread", + "incident_energy_spread/@units": "eV", + "incident_wavelength": "@attrs:metadata/instrument/beam/pump/incident_wavelength", + "incident_wavelength/@units": "nm", + "pulse_duration": "@attrs:metadata/instrument/beam/pump/pulse_duration", + "pulse_duration/@units": "fs", + "incident_polarization": "@attrs:metadata/instrument/beam/pump/incident_polarization", + "incident_polarization/@units": "V^2/mm^2", + "pulse_energy": "@attrs:metadata/instrument/beam/pump/pulse_energy", + "pulse_energy/@units": "µJ", + "average_power": "@attrs:metadata/instrument/beam/pump/average_power", + "average_power/@units": "mW", + "extent": "@attrs:metadata/instrument/beam/pump/extent", + "extent/@units": "µm", + "fluence": "@attrs:metadata/instrument/beam/pump/fluence", + "fluence/@units": "mJ/cm^2", + "associated_source": "/entry/instrument/source_pump" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]": { + "temperature_sensor": { + "name": "sample_temperature", + "measurement": "temperature", + "value": "@attrs:metadata/file/trARPES:Carving:TEMP_RBV", + "value/@units": "K" + }, + "sample_bias_voltmeter": { + "name": "sample_bias", + "measurement": "voltage", + "value": "@attrs:metadata/file/KTOF:Lens:Sample:V", + "value/@units": "V" + }, + "pressure_gauge": { + "name": "sample_chamber_pressure", + "measurement": "pressure", + "value": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", + "value/@units": "mbar" + }, + "depends_on": "/entry/instrument/manipulator/transformations/trans_z", + "TRANSFORMATIONS[transformations]": { + "AXISNAME[trans_z]": -0.32, + "AXISNAME[trans_z]/@depends_on": "rot_z", + "AXISNAME[trans_z]/@transformation_type": "translation", + "AXISNAME[trans_z]/@units": "m", + "AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "AXISNAME[rot_z]/@depends_on": "rot_x", + "AXISNAME[rot_z]": -25.0, + "AXISNAME[rot_z]/@transformation_type": "rotation", + "AXISNAME[rot_z]/@units": "degrees", + "AXISNAME[rot_z]/@vector": [ + 0, + 0, + 1 + ], + "AXISNAME[rot_x]/@depends_on": ".", + "AXISNAME[rot_x]": -90.0, + "AXISNAME[rot_x]/@transformation_type": "rotation", + "AXISNAME[rot_x]/@units": "degrees", + "AXISNAME[rot_x]/@vector": [ + 1, + 0, + 0 + ] + } + }, + "/ENTRY[entry]/SAMPLE[sample]": { + "preparation_date": "@attrs:metadata/sample/preparation_date", + "sample_history/notes": "@attrs:metadata/sample/sample_history", + "chemical_formula": "@attrs:metadata/sample/chemical_formula", + "description": "@attrs:metadata/sample/chemical_formula", + "name": "@attrs:metadata/sample/chemical_formula", + "situation": "vacuum", + "SUSBTANCE[substance]/molecular_formula_hill": "@link:/entry/sample/chemical_formula", + "physical_form": "thin film", + "temperature": { + "temperature_sensor": "@link:/entry/instrument/manipulator/temperature_sensor" + }, + "gas_pressure": { + "pressure_gauge": "@link:/entry/instrument/manipulator/pressure_gauge" + }, + "bias": { + "voltmeter": "@link:/entry/instrument/manipulator/sample_bias_voltmeter" + }, + "depends_on": "/entry/sample/transformations/corrected_phi", + "TRANSFORMATIONS[transformations]": { + "AXISNAME[corrected_phi]/@depends_on": "rot_omg", + "AXISNAME[corrected_phi]": 90.0, + "AXISNAME[corrected_phi]/@units": "degrees", + "AXISNAME[corrected_phi]/@transformation_type": "rotation", + "AXISNAME[corrected_phi]/@vector": [ + 0, + 1, + 0 + ], + "AXISNAME[rot_omg]/@depends_on": "rot_phi", + "AXISNAME[rot_omg]": "@attrs:metadata/file/trARPES:Carving:OMG.RBV", + "AXISNAME[rot_omg]/@units": "degrees", + "AXISNAME[rot_omg]/@transformation_type": "rotation", + "AXISNAME[rot_omg]/@vector": [ + 1, + 0, + 0 + ], + "AXISNAME[rot_phi]/@depends_on": "rot_tht", + "AXISNAME[rot_phi]": "@attrs:metadata/file/trARPES:Carving:PHI.RBV", + "AXISNAME[rot_phi]/@units": "degrees", + "AXISNAME[rot_phi]/@transformation_type": "rotation", + "AXISNAME[rot_phi]/@vector": [ + 0, + 1, + 0 + ], + "AXISNAME[rot_tht]/@depends_on": "trans_z", + "AXISNAME[rot_tht]": "@attrs:metadata/file/trARPES:Carving:THT.RBV", + "AXISNAME[rot_tht]/@units": "degrees", + "AXISNAME[rot_tht]/@transformation_type": "rotation", + "AXISNAME[rot_tht]/@vector": [ + 0, + 0, + 1 + ], + "AXISNAME[trans_z]/@depends_on": "trans_y", + "AXISNAME[trans_z]": "@attrs:metadata/file/trARPES:Carving:TRZ.RBV", + "AXISNAME[trans_z]/@units": "mm", + "AXISNAME[trans_z]/@transformation_type": "translation", + "AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "AXISNAME[trans_y]/@depends_on": "trans_x", + "AXISNAME[trans_y]": "@attrs:metadata/file/trARPES:Carving:TRY.RBV", + "AXISNAME[trans_y]/@units": "mm", + "AXISNAME[trans_y]/@transformation_type": "translation", + "AXISNAME[trans_y]/@vector": [ + 0, + 1, + 0 + ], + "AXISNAME[trans_x]/@depends_on": "/entry/instrument/manipulator/transformations/trans_z", + "AXISNAME[trans_x]": "@attrs:metadata/file/trARPES:Carving:TRX.RBV", + "AXISNAME[trans_x]/@units": "mm", + "AXISNAME[trans_x]/@transformation_type": "translation", + "AXISNAME[trans_x]/@vector": [ + 1, + 0, + 0 + ] + } + }, + "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]": { + "applied": true, + "symmetry": "@attrs:metadata/momentum_correction/rotsym", + "original_centre": "@attrs:metadata/momentum_correction/pcent", + "original_points": "@attrs:metadata/momentum_correction/pouter", + "cdeform_field": "@attrs:metadata/momentum_correction/cdeform_field", + "rdeform_field": "@attrs:metadata/momentum_correction/rdeform_field" + }, + "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]": { + "applied": true, + "depends_on": "/entry/process/registration/tranformations/rot_z", + "TRANSFORMATIONS[tranformations]": { + "AXISNAME[trans_x]": "@attrs:metadata/momentum_correction/adjust_params/xtrans", + "AXISNAME[trans_x]/@transformation_type": "translation", + "AXISNAME[trans_x]/@units": "pixels", + "AXISNAME[trans_x]/@vector": "@attrs:metadata/momentum_correction/adjust_params/x_vector", + "AXISNAME[trans_x]/@depends_on": ".", + "AXISNAME[trans_y]": "@attrs:metadata/momentum_correction/adjust_params/ytrans", + "AXISNAME[trans_y]/@units": "pixels", + "AXISNAME[trans_y]/@transformation_type": "translation", + "AXISNAME[trans_y]/@vector": "@attrs:metadata/momentum_correction/adjust_params/y_vector", + "AXISNAME[trans_y]/@depends_on": "trans_x", + "AXISNAME[rot_z]": "@attrs:metadata/momentum_correction/adjust_params/angle", + "AXISNAME[rot_z]/@units": "degrees", + "AXISNAME[rot_z]/@transformation_type": "rotation", + "AXISNAME[rot_z]/@offset": "@attrs:metadata/momentum_correction/adjust_params/offset", + "AXISNAME[rot_z]/@vector": "@attrs:metadata/momentum_correction/adjust_params/rotation_vector", + "AXISNAME[rot_z]/@depends_on": "trans_y" + } + }, + "/ENTRY[entry]/PROCESS[process]/energy_calibration":{ + "applied": true, + "coefficients": "@attrs:metadata/energy_correction/calibration/coefficients", + "fit_function": "@attrs:metadata/energy_correction/calibration/fit_function", + "original_axis": "@attrs:metadata/energy_correction/tof", + "calibrated_axis": "@attrs:metadata/energy_correction/calibration/axis" + }, + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]": { + "applied": true, + "scaling": "@attrs:metadata/momentum_correction/calibration/scale_kx", + "offset": "@attrs:metadata/momentum_correction/offset_kx", + "calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_kx" + }, + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]": { + "applied": true, + "scaling": "@attrs:metadata/momentum_correction/calibration/scale_ky", + "offset": "@attrs:metadata/momentum_correction/offset_ky", + "calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_ky" + }, + "/ENTRY[entry]/DATA[data]": { + "@axes": "@data:dims", + "AXISNAME_indices[@*_indices]": "@data:*.index", + "@signal": "data", + "data": "@data:data", + "data/@units": "counts", + "AXISNAME[*]": "@data:*.data", + "AXISNAME[*]/@units": "@data:*.unit", + "energy/@type": "binding" + } } \ No newline at end of file From 9a3246b3043c3be16a9fe7771f2e608006b95445 Mon Sep 17 00:00:00 2001 From: domna Date: Wed, 17 Jan 2024 17:35:33 +0100 Subject: [PATCH 19/88] flatten_json cleaned up --- pynxtools/dataconverter/readers/utils.py | 44 ++++++++++++------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/pynxtools/dataconverter/readers/utils.py b/pynxtools/dataconverter/readers/utils.py index 98919bda0..040c313bc 100644 --- a/pynxtools/dataconverter/readers/utils.py +++ b/pynxtools/dataconverter/readers/utils.py @@ -205,7 +205,7 @@ def parse_yml( def flatten_json( json_data: Dict[str, Any], base_key: Optional[str] = None, - replace: Optional[str] = None, + replacement_key: Optional[str] = None, ) -> Dict[str, Any]: """ Flattens a json dict into a flat dictionary of absolute paths. @@ -215,7 +215,7 @@ def flatten_json( base_key (Optional[str], optional): A base key to prefix to all keys. Defaults to None. - replace (Optional[str], optional): + replacement_key (Optional[str], optional): A replacement key which replaces all occurences of * with this string. Defaults to None. @@ -223,39 +223,39 @@ def flatten_json( Dict[str, Any]: The flattened dict """ flattened_config = {} + + def update_config(key, value, rkey): + if isinstance(value, dict): + flattened_config.update( + flatten_json(value, base_key=key, replacement_key=rkey) + ) + elif isinstance(value, str) and value.startswith("@link:"): + flattened_config[key] = {"link": value.removeprefix("@link:")} + else: + flattened_config[key] = value + for key, value in json_data.items(): if base_key is not None: key = f"{base_key}/{key}" - if replace is not None: - key = key.replace("*", replace) + if replacement_key is not None: + key = key.replace("*", replacement_key) if isinstance(value, str): - value = value.replace("*", replace) + value = value.replace("*", replacement_key) expand_match = short_notation_regex.search(key) - if replace is None and expand_match is not None: + if replacement_key is None and expand_match is not None: expand_keys = expand_match.group(1).split(",") for ekey in expand_keys: rkey = key.replace(expand_match.group(0), ekey) - if isinstance(value, dict): - flattened_config.update( - flatten_json(value, base_key=rkey, replace=ekey) - ) - elif isinstance(value, str) and value.startswith("@link:"): - flattened_config[rkey] = {"link": value.removeprefix("@link:")} - elif isinstance(value, str): - flattened_config[rkey.replace("*", ekey)] = value.replace("*", ekey) - else: - flattened_config[rkey.replace("*", ekey)] = value + if isinstance(value, str): + value = value.replace("*", ekey) + + update_config(rkey, value, ekey) continue - if isinstance(value, dict): - flattened_config.update(flatten_json(value, base_key=key)) - elif isinstance(value, str) and value.startswith("@link:"): - flattened_config[key] = {"link": value.removeprefix("@link:")} - else: - flattened_config[key] = value + update_config(key, value, None) return flattened_config From 4d469fa3ea7aa1b419a0704a8bbe86a00d67e90e Mon Sep 17 00:00:00 2001 From: domna Date: Wed, 17 Jan 2024 18:05:08 +0100 Subject: [PATCH 20/88] Updates definitions --- pynxtools/definitions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/definitions b/pynxtools/definitions index 5753d0488..ff3c3317c 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 5753d04882e220d2b150da9e28fa096a9fa19398 +Subproject commit ff3c3317c2cc590f2d0f98f34c189b7a04f4690b From 6e56b02f8b35debd5934c4ca25f9f928eb48e107 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 09:12:41 +0100 Subject: [PATCH 21/88] Renames DATA[data] to just data --- tests/data/dataconverter/readers/mpes/config_file.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 36b650f9e..908b6272a 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -397,7 +397,7 @@ "offset": "@attrs:metadata/momentum_correction/offset_ky", "calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_ky" }, - "/ENTRY[entry]/DATA[data]": { + "/ENTRY[entry]/data": { "@axes": "@data:dims", "AXISNAME_indices[@*_indices]": "@data:*.index", "@signal": "data", From e72f25e7e6c594da7fb779860368a60d932559d0 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 10:46:05 +0100 Subject: [PATCH 22/88] Use beam_TYPE and source_TYPE --- tests/data/dataconverter/readers/mpes/config_file.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 908b6272a..91e04fa84 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -154,9 +154,10 @@ "detector_voltage": "@attrs:metadata/file/KTOF:Lens:UDLD:V", "detector_voltage/@units": "V" }, - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_probe]": { + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE[source_probe]": { "name": "HHG @ TR-ARPES @ FHI", "probe": "photon", + "type": "HHG laser", "mode": "Single Bunch", "frequency": "@attrs:metadata/instrument/beam/probe/frequency", "frequency/@units": "kHz", @@ -164,7 +165,7 @@ "photon_energy/@units": "eV", "associated_beam": "/entry/instrument/beam_probe" }, - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_probe]": { + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE[beam_probe]": { "distance": 0.0, "distance/@units": "mm", "incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", @@ -179,7 +180,7 @@ "extent/@units": "µm", "associated_source": "/entry/instrument/source_probe" }, - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_pump]": { + "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE[source_pump]": { "name": "OPCPA @ TR-ARPES @ FHI", "probe": "visible light", "type": "Optical Laser", @@ -190,7 +191,7 @@ "photon_energy/@units": "eV", "associated_beam": "/entry/instrument/beam_pump" }, - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam_pump]": { + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE[beam_pump]": { "distance": 0.0, "distance/@units": "mm", "incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", From fa4e27f9961f5eb30791aaed3e04de035d5b3648 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 11:25:29 +0100 Subject: [PATCH 23/88] Add flag to reatin link dicts for flatten_json --- pynxtools/dataconverter/readers/utils.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/utils.py b/pynxtools/dataconverter/readers/utils.py index 040c313bc..2c4c09ba1 100644 --- a/pynxtools/dataconverter/readers/utils.py +++ b/pynxtools/dataconverter/readers/utils.py @@ -206,6 +206,7 @@ def flatten_json( json_data: Dict[str, Any], base_key: Optional[str] = None, replacement_key: Optional[str] = None, + dont_flatten_link_dict: bool = False, ) -> Dict[str, Any]: """ Flattens a json dict into a flat dictionary of absolute paths. @@ -218,16 +219,32 @@ def flatten_json( replacement_key (Optional[str], optional): A replacement key which replaces all occurences of * with this string. Defaults to None. + dont_flatten_link_dict (bool): + If true, the dict will not be flattened if it only contains a link key. + Defaults to False. Returns: Dict[str, Any]: The flattened dict """ + if ( + dont_flatten_link_dict + and base_key is not None + and len(json_data) == 1 + and "link" in json_data + ): + return {base_key: json_data} + flattened_config = {} def update_config(key, value, rkey): if isinstance(value, dict): flattened_config.update( - flatten_json(value, base_key=key, replacement_key=rkey) + flatten_json( + value, + base_key=key, + replacement_key=rkey, + dont_flatten_link_dict=dont_flatten_link_dict, + ) ) elif isinstance(value, str) and value.startswith("@link:"): flattened_config[key] = {"link": value.removeprefix("@link:")} From 669dc52e343279996e9521e9111c7f65b01ad066 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 11:26:12 +0100 Subject: [PATCH 24/88] Properly resolve upper/lower case group fields --- pynxtools/dataconverter/helpers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pynxtools/dataconverter/helpers.py b/pynxtools/dataconverter/helpers.py index 002c33a61..ff3899102 100644 --- a/pynxtools/dataconverter/helpers.py +++ b/pynxtools/dataconverter/helpers.py @@ -385,9 +385,15 @@ def is_valid_data_field(value, nxdl_type, path): def path_in_data_dict(nxdl_path: str, data: dict) -> Tuple[bool, str]: """Checks if there is an accepted variation of path in the dictionary & returns the path.""" + accepted_unfilled_key = None for key in data.keys(): if nxdl_path == convert_data_converter_dict_to_nxdl_path(key): + if data[key] is None: + accepted_unfilled_key = key + continue return True, key + if accepted_unfilled_key: + return True, accepted_unfilled_key return False, None From faa279246e341c47ba2202d30c53bd1df0c4d0af Mon Sep 17 00:00:00 2001 From: Sherjeel Shabih Date: Thu, 18 Jan 2024 11:28:38 +0100 Subject: [PATCH 25/88] Fixes a lookup error when keys have been filled in template with a different name --- pynxtools/dataconverter/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/helpers.py b/pynxtools/dataconverter/helpers.py index ff3899102..8a6842788 100644 --- a/pynxtools/dataconverter/helpers.py +++ b/pynxtools/dataconverter/helpers.py @@ -438,7 +438,7 @@ def all_required_children_are_set(optional_parent_path, data, nxdl_root): if ( nxdl_key[0 : nxdl_key.rfind("/")] == optional_parent_path and is_node_required(nxdl_key, nxdl_root) - and data[key] is None + and data[path_in_data_dict(nxdl_key, data)[1]] is None ): return False From 7514c1dc315b706fce4ee924a93c935cc7495977 Mon Sep 17 00:00:00 2001 From: Sherjeel Shabih Date: Thu, 18 Jan 2024 11:39:54 +0100 Subject: [PATCH 26/88] Fixes the case where the reader sends back a template entry with the concept name included --- pynxtools/dataconverter/helpers.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pynxtools/dataconverter/helpers.py b/pynxtools/dataconverter/helpers.py index 8a6842788..377f4f12e 100644 --- a/pynxtools/dataconverter/helpers.py +++ b/pynxtools/dataconverter/helpers.py @@ -383,11 +383,14 @@ def is_valid_data_field(value, nxdl_type, path): return value -def path_in_data_dict(nxdl_path: str, data: dict) -> Tuple[bool, str]: +def path_in_data_dict(nxdl_path: str, hdf_path: str, data: dict) -> Tuple[bool, str]: """Checks if there is an accepted variation of path in the dictionary & returns the path.""" accepted_unfilled_key = None for key in data.keys(): - if nxdl_path == convert_data_converter_dict_to_nxdl_path(key): + if ( + nxdl_path == convert_data_converter_dict_to_nxdl_path(key) + or convert_data_dict_path_to_hdf5_path(key) == hdf_path + ): if data[key] is None: accepted_unfilled_key = key continue @@ -438,7 +441,12 @@ def all_required_children_are_set(optional_parent_path, data, nxdl_root): if ( nxdl_key[0 : nxdl_key.rfind("/")] == optional_parent_path and is_node_required(nxdl_key, nxdl_root) - and data[path_in_data_dict(nxdl_key, data)[1]] is None + and data[ + path_in_data_dict( + nxdl_key, convert_data_dict_path_to_hdf5_path(key), data + )[1] + ] + is None ): return False @@ -500,7 +508,9 @@ def ensure_all_required_fields_exist(template, data, nxdl_root, logger=pynx_logg if entry_name == "@units": continue nxdl_path = convert_data_converter_dict_to_nxdl_path(path) - is_path_in_data_dict, renamed_path = path_in_data_dict(nxdl_path, data) + is_path_in_data_dict, renamed_path = path_in_data_dict( + nxdl_path, convert_data_dict_path_to_hdf5_path(path), data + ) renamed_path = path if renamed_path is None else renamed_path if path in template["lone_groups"]: From fc4b034217298f1c2fa6c4ee6bde63f75edc8c70 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 13:25:12 +0100 Subject: [PATCH 27/88] Correct coeffs path for raw data file --- tests/data/dataconverter/readers/mpes/config_file.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 91e04fa84..389509f3e 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -381,7 +381,7 @@ }, "/ENTRY[entry]/PROCESS[process]/energy_calibration":{ "applied": true, - "coefficients": "@attrs:metadata/energy_correction/calibration/coefficients", + "coefficients": "@attrs:metadata/energy_correction/calibration/coeffs", "fit_function": "@attrs:metadata/energy_correction/calibration/fit_function", "original_axis": "@attrs:metadata/energy_correction/tof", "calibrated_axis": "@attrs:metadata/energy_correction/calibration/axis" From 697a86d67bed49d2a0171904a454657dc72ff7f6 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:39:43 +0100 Subject: [PATCH 28/88] add unit parsing to XPS SLE reader --- .../readers/xps/sle/sle_specs.py | 178 +++++++++++++----- 1 file changed, 131 insertions(+), 47 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index bda602c3c..cb8e1d04e 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -63,6 +63,19 @@ def __init__(self): self.sql_connection = None + self.units = { + "analyser/work_function": "eV", + "beam/excitation_energy": "eV", + "collectioncolumn/iris_diameter": "mm", + "data/step_size": "eV", + "detector/detector_voltage": "V", + "detector/dwell_time": "s", + "detector/raw_data/raw": "counts", ################# + "energydispersion/pass_energy": "eV", + "source/emission_current": "A", + "source/source_voltage": "V", + "transmission_function/kinetic_energy": "eV", + } super().__init__() def _select_parser(self): @@ -107,8 +120,6 @@ def construct_data(self): key_map = { "user": [], "instrument": [ - "bias_voltage_ions [V]", - "bias_voltage_electrons [V]", "polar_angle", "azimuth_angle", ], @@ -129,22 +140,25 @@ def construct_data(self): "pre_deflector_x_current [nU]", "pre_deflector_y_current [nU]", "focus_displacement_current [nU]", + "iris_diameter", + "lens_mode", "transmission_function/data", "transmission_function/file", - "lens_mode", - "iris_diameter", + "voltage_range", ], "energydispersion": [ - "scan_mode", + "energy_scan_mode", "entrance_slit", "exit_slit", "pass_energy", ], "detector": [ + "bias_voltage_electrons [V]", + "bias_voltage_ions [V]", "calibration_file/dir", "calibration_file", "detector_voltage [V]", - "detector_voltage_range", + "dwell_time", ], "manipulator": [], "calibration": [ @@ -153,11 +167,17 @@ def construct_data(self): "calibration_file/dir", "calibration_file", ], - "data": ["x_units", "y_units", "n_values", "step_size", "dwell_time"], + "data": [ + "energy_type", + "energy/@units", + "intensity/@units", + "n_values", + "step_size", + "dwell_time", + ], "region": [ "analysis_method", "start_energy", - "dwell_time", "spectrum_comment", "time_stamp", "total_scans", @@ -191,20 +211,20 @@ 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(): 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] + mpes_key = spectrum_key.rsplit(" ", 1)[0] + self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] + + unit_key = f"{grouping}/{spectrum_key}" + + units = self._get_units_for_key(unit_key) + if units: 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] self._xps_dict[f'{path_map["analyser"]}/name'] = spectrum["devices"][0] self._xps_dict[f'{path_map["source"]}/name'] = spectrum["devices"][1] @@ -264,6 +284,30 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): data=cps, coords={"energy": energy} ) + def _get_units_for_key(self, unit_key): + """ + Get correct units for a given key. + + Parameters + ---------- + unit_key : str + Key of type :, e.g. + detector/detector_voltage + + Returns + ------- + str + Unit for that unit_key. + + """ + try: + return re.search(r"\[([A-Za-z0-9_]+)\]", unit_key).group(1) + except AttributeError: + try: + return self.units[unit_key] + except KeyError: + return "" + class SleProdigyParser(ABC): """ @@ -283,7 +327,7 @@ def __init__(self): "ElectronEnergy": "start_energy", "SpectrumID": "spectrum_id", "EpassOrRR": "pass_energy", - "EnergyType": "x_units", + "EnergyType": "energy_type", "Samples": "n_values", "Wf": "work_function", "Step": "step", @@ -294,8 +338,8 @@ def __init__(self): "Timestamp": "time_stamp", "Entrance": "entrance_slit", "Exit": "exit_slit", - "ScanMode": "scan_mode", - "VoltageRange": "detector_voltage_range", + "ScanMode": "energy_scan_mode", + "VoltageRange": "voltage_range", } spectrometer_setting_map = { @@ -323,7 +367,7 @@ def __init__(self): } self.sql_metadata_map = { - "EnergyType": "x_units", + "EnergyType": "energy_type", "EpassOrRR": "pass_energy", "Wf": "work_function", "Timestamp": "time_stamp", @@ -340,8 +384,10 @@ def __init__(self): ] self.value_map = { - "x_units": self._change_energy_type, + "energy_type": self._change_energy_type, "time_stamp": self._convert_date_time, + # "measurement_type": self._convert_date_measurement_type, + "energy_scan_mode": self._convert_energy_scan_mode, } self.keys_to_drop = [ @@ -352,6 +398,21 @@ def __init__(self): self.measurement_types = ["XPS", "UPS", "ElectronSpectroscopy"] + self.measurement_types_map = { + "XPS": "X-ray photoelectron spectroscopy (XPS)", + "UPS": "ultraviolet photoelectron spectroscopy (UPS)", + "ElectronSpectroscopy": "electron spectroscopy for chemical analysis (ESCA)", + "NAPXPS": "near ambient pressure X-ray photoelectron spectroscopy (NAPXPS)", + "ARXPS": "angle-resolved X-ray photoelectron spectroscopy (ARXPS)", + } + + self.energy_scan_mode_map = { + "FixedAnalyzerTransmission": "fixed_analyser_transmission", + "FixedRetardationRatio": "fixed_retardation_ratio", + "FixedEnergies": "fixed_energy", + "Snapshot": "snapshot", + } + def initiate_file_connection(self, filepath): """Set the filename of the file to be opened.""" sql_connection = filepath @@ -555,7 +616,7 @@ def _separate_channels(self, data, n_channels): # mcd_head = int(raw_data["mcd_head"]) # mcd_tail = int(raw_data["mcd_tail"]) # excitation_energy = raw_data["excitation_energy"] - # scan_mode = raw_data["scan_mode"] + # energy_scan_mode = raw_data["energy_scan_mode"] # kinetic_energy = raw_data["kinetic_energy"] # scan_delta = raw_data["scan_delta"] # pass_energy = raw_data["pass_energy"] @@ -618,7 +679,7 @@ def _separate_channels(self, data, n_channels): # # "scan" in individual CountsSeq # scan_counts = raw_data["scans"][scan_nm] # - # if scan_mode == "FixedAnalyzerTransmission": + # if energy_scan_mode == "fixed_analyser_transmission": # for row in np.arange(mcd_num): # # count_on_row = scan_counts[row::mcd_num] @@ -701,7 +762,7 @@ def _separate_channels(self, data, n_channels): # # "scan" in individual CountsSeq # scan_counts = raw_data["scans"][scan_nm] # - # if scan_mode == "FixedAnalyzerTransmission": + # if energy_scan_mode == "fixed_analyser_transmission": # for row in np.arange(mcd_num): # # count_on_row = scan_counts[row::mcd_num] @@ -1152,12 +1213,12 @@ def _get_energy_data(self, spectrum): List of uniformly separated energy values. """ - if spectrum["x_units"] == "binding energy": + if spectrum["energy_type"] == "binding": start = spectrum["start_energy"] step = spectrum["step_size"] points = spectrum["n_values"] energy = [start - i * step for i in range(points)] - elif spectrum["x_units"] == "kinetic energy": + elif spectrum["energy_type"] == "kinetic": start = spectrum["start_energy"] step = spectrum["step_size"] points = spectrum["n_values"] @@ -1210,16 +1271,6 @@ def _close_con(self): """ self.con.close() - def _convert_date_time(self, timestamp): - """ - Convert the native time format to the one we decide to use. - Returns datetime string in the format '%Y-%b-%d %H:%M:%S.%f'. - - """ - date_time = datetime.strptime(timestamp, "%Y-%b-%d %H:%M:%S.%f") - date_time = datetime.strftime(date_time, "%Y-%m-%d %H:%M:%S.%f") - return date_time - def _re_map_keys(self, dictionary, key_map): """ Map the keys returned from the SQL table to the preferred keys for @@ -1252,17 +1303,39 @@ def _drop_unused_keys(self, dictionary, keys_to_drop): if key in dictionary.keys(): dictionary.pop(key) - def _change_energy_type(self, energy): + def _change_energy_type(self, energy_type): """ Change the strings for energy type to the preferred format. """ - if energy == "Binding": - return "binding energy" - if energy == "Kinetic": - return "kinetic energy" + if energy_type == "Binding": + return "binding" + elif energy_type == "Kinetic": + return "kinetic" return None + def _convert_date_time(self, timestamp): + """ + Convert the native time format to the one we decide to use. + Returns datetime string in the format '%Y-%b-%d %H:%M:%S.%f'. + + """ + date_time = datetime.strptime(timestamp, "%Y-%b-%d %H:%M:%S.%f") + date_time = datetime.strftime(date_time, "%Y-%m-%d %H:%M:%S.%f") + return date_time + + def _convert_energy_scan_mode(self, energy_scan_mode): + """ + Convert the native names for the energy scan modes to the ones + used in NXmpes. + + """ + try: + energy_scan_mode = self.energy_scan_mode_map[energy_scan_mode] + except KeyError: + pass + return energy_scan_mode + def _re_map_values(self, dictionary): """ Map the values returned from the SQL table to the preferred format. @@ -1390,14 +1463,15 @@ def _convert_to_common_format(self): for channel_key in channels: spec.pop(channel_key) - spec["y_units"] = "Counts per Second" + spec["energy/@units"] = "eV" + spec["intensity/@units"] = "Counts per Second" def _remove_fixed_energies(self): """ Remove spectra measured with the scan mode FixedEnergies. """ self.spectra = [ - spec for spec in self.spectra if spec["scan_mode"] != "FixedEnergies" + spec for spec in self.spectra if spec["energy_scan_mode"] != "fixed_energy" ] def _remove_syntax(self): @@ -1414,7 +1488,7 @@ def _remove_snapshot(self): Remove spectra required in Snapshot mode. """ self.spectra = [ - spec for spec in self.spectra if "Snapshot" not in spec["scan_mode"] + spec for spec in self.spectra if "snapshot" not in spec["energy_scan_mode"] ] def get_sle_version(self): @@ -1460,7 +1534,12 @@ def _flatten_xml(self, xml): for measurement_type in self.measurement_types: for group in xml.iter(measurement_type): data = {} - data["analysis_method"] = measurement_type + try: + data["analysis_method"] = self.measurement_types_map[ + measurement_type + ] + except KeyError: + data["analysis_method"] = measurement_type data["devices"] = [] for device in group.iter("DeviceCommand"): @@ -1527,7 +1606,7 @@ def _extract_comm_settings(self, comm_settings): common_spectrum_settings = {} for setting in comm_settings.iter(): if setting.tag == "ScanMode": - common_spectrum_settings[setting.tag] = setting.attrib["Name"] + energy_scan_mode = self.energy_scan_mode_map[setting.attrib["Name"]] elif setting.tag == "SlitInfo": for key, val in setting.attrib.items(): common_spectrum_settings[key] = val @@ -1630,7 +1709,12 @@ def _flatten_xml(self, xml): for measurement_type in self.measurement_types: for group in xml.iter(measurement_type): data = {} - data["analysis_method"] = measurement_type + try: + data["analysis_method"] = self.measurement_types_map[ + measurement_type + ] + except KeyError: + data["analysis_method"] = measurement_type data["devices"] = [] data["device_group_id"] = group.attrib["ID"] From 920fb283aba861088972af7f70fa3f3f39468ccf Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:42:07 +0100 Subject: [PATCH 29/88] use nested config file in XPS SLE reader --- .../readers/xps/config/config_sle_specs.json | 536 ++++++++++-------- 1 file changed, 314 insertions(+), 222 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 27137f183..3f372f7e7 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -1,223 +1,315 @@ { - "/ENTRY[entry]/definition":"@eln", - "/ENTRY[entry]/definition/@version":"@eln", - "/ENTRY[entry]/title":"@eln", - "/ENTRY[entry]/start_time":"@eln", - "/ENTRY[entry]/end_time":"@eln", - "/ENTRY[entry]/method":"X-ray photoelectron spectroscopy (XPS)", - "/ENTRY[entry]/USER[user]/name":"@eln", - "/ENTRY[entry]/USER[user]/affiliation":"@eln", - "/ENTRY[entry]/USER[user]/address":"@eln", - "/ENTRY[entry]/USER[user]/orcid":"@eln", - "/ENTRY[entry]/USER[user]/email":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity":"energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units":"eV", - "ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor":"SPECS GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name":"@xps_token:source/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/probe":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam":{ - "link":"/entry/instrument/beam_probe" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy":"@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source":{ - "link":"/entry/instrument/source_probe" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name":"@xps_token:analyser/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function":"@xps_token:analyser/work_function", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes":"energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type":"estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity":"energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution":"@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@signal":"", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@axes":[ - "kinetic_energy", - "relative_intensity" - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity/transmission_function":"@xps_token:collectioncolumn/transmission_function/data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode":"@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris":"@xps_token:collectioncolumn/iris_diameter", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name":"Lens 1", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage":"@xps_token:collectioncolumn/lens1_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units":"@xps_token:collectioncolumn/lens1_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name":"Lens 2", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage":"@xps_token:collectioncolumn/lens2_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units":"@xps_token:collectioncolumn/lens2_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name":"Coil", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current":"@xps_token:collectioncolumn/coil_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units":"@xps_token:collectioncolumn/coil_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name":"Pre-Deflector X", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current":"@xps_token:collectioncolumn/pre_deflector_x_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units":"@xps_token:collectioncolumn/pre_deflector_x_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name":"Pre-Deflector Y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current":"@xps_token:collectioncolumn/pre_deflector_y_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units":"@xps_token:collectioncolumn/pre_deflector_y_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name":"Focus Displacement", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current":"@xps_token:collectioncolumn/focus_displacement_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode":"@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/description":"@xps_token:energydispersion/entrance_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/description":"@xps_token:energydispersion/exit_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal":"raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw":"@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units":"counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/attached_to":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type":"potentiostat", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement":"pressure", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity":"current", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units":"@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis":"@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units":"eV", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type":"file", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path":"@xps_token:detector/calibration_file", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file":"@xps_token:detector/calibration_file", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/level":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis":"None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function":{ - "link":"/entry/instrument/electronanalyser/transmission_function" - }, - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type":"file", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path":"@xps_token:collectioncolumn/transmission_function/file", - "/ENTRY[entry]/SAMPLE[sample]/name":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/name":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass/@units":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/cas_number":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/start_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/end_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/description":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/method":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/start_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/end_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/description":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/method":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor":{ - "link":"/entry/instrument/manipulator/temperature_sensor" - }, - "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater":{ - "link":"/entry/instrument/manipulator/sample_heater" - }, - "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat":{ - "link":"/entry/instrument/manipulator/sample_heater" - }, - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge":{ - "link":"/entry/instrument/pressure_gauge" - }, - "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat":{ - "link":"/entry/instrument/manipulator/sample_bias_potentiostat" - }, - "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter":{ - "link":"/entry/instrument/manipulator/sample_bias_voltmeter" - }, - "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter":{ - "link":"/entry/instrument/manipulator/drain_current_amperemeter" - }, - "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun":{ - "link":"/entry/instrument/flood_gun" - }, - "/ENTRY[entry]/data/@signal":"", - "/ENTRY[entry]/data/data":"@data:cycle", - "/ENTRY[entry]/data/data/@units":"CPS", - "/ENTRY[entry]/data/energy":"@data:energy", - "/ENTRY[entry]/data/energy/@type":"binding", - "/ENTRY[entry]/data/energy/@units":"eV", - "/ENTRY[entry]/data/@energy_indices":"None", - "/ENTRY[entry]/data/@energy_depends":"None" -} + "/@default": "entry", + "/ENTRY[entry]": { + "@default": "data", + "/definition":"@eln", + "definition/@version":"@eln", + "title": "@eln", + "start_time": "@eln", + "end_time": "@attrs:metadata/timing/acquisition_stop", + "experiment_institution": "@eln", + "experiment_facility": "@eln", + "experiment_laboratory": "@eln", + "entry_identifier": "@eln", + ####"duration": "@attrs:metadata/timing/acquisition_duration", + ####"duration/@units": "s", + "method": "@xps_token:region/analysis_method" + }, + "/ENTRY[entry]/USER[user]": { + "name": "@eln", + "affiliation": "@eln", + "address": "@eln", + "orcid": "@eln", + "email": "@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]": { + "device_information": { + "vendor": "@eln", + "identifier": "@eln", + "model": "@eln" + }, + "energy_resolution": { + "physical_quantity": "energy", + "type": "@eln", + "resolution": "@eln", + "resolution/@units": "@eln" + }, + "SOURCE[source_probe]": { + "type":"@eln", + "name":"@xps_token:source/name", + "probe":"@eln", + "current":"@xps_token:source/emission_current", + "current/@units":"@xps_token:source/emission_current/@units", + "voltage":"@xps_token:source/source_voltage", + "voltage/@units":"@xps_token:source/source_voltage/@units", + "device_information": { + "vendor": "@eln", + "identifier": "@eln", + "model": "@eln" + }, + "associated_beam":{"@link":"/entry/instrument/beam_probe"} + }, + "BEAM[beam_probe]": { + "distance":"@eln", + "distance/@units":"@eln", + "incident_energy":"@xps_token:beam/excitation_energy", + "incident_energy/@units":"@xps_token:beam/excitation_energy/@units", + "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"} + }, + "ELECTRONANALYSER[electronanalyser]": { + "name":"@xps_token:analyser/name", + "description":"@eln", + "work_function":"@xps_token:analyser/work_function", + "work_function/@units":"@xps_token:analyser/work_function/@units", + "fast_axes":"None", + "slow_axes":"energy", + "device_information": { + "vendor": "@eln", + "model": "@eln", + "identifier": "@eln" + }, + "energy_resolution": { + "physical_quantity": "energy", + "type": "estimated", + "resolution": "@xps_token:data/step_size", + "resolution/@units": "@xps_token:data/step_size/@units" + }, + "transmission_function": { + "@default": "relative_intensity", + "@signal": "", + "@axes":["kinetic_energy", "relative_intensity"], + "kinetic_energy":"None", + "kinetic_energy/@units":"@xps_token:transmission_function/kinetic_energy/@units", + "relative_intensity":"@xps_token:collectioncolumn/transmission_function/data" + }, + "COLLECTIONCOLUMN[collectioncolumn]": { + "scheme":"@eln", + "mode":"@xps_token:collectioncolumn/lens_mode", + "projection":"None", + "angular_acceptance":"None", + "spatial_acceptance":"None", + "field_aperture":"None", + "contrast_aperture":"None", + "iris": { + "size":"@xps_token:collectioncolumn/iris_diameter", + "size/@units":"@xps_token:collectioncolumn/iris_diameter/@units" + }, + "device_information": { + "vendor": "@eln", + "model": "@eln", + "identifier": "@eln" + }, + "LENS_EM[L1]": { + "name":"Lens 1", + "voltage":"@xps_token:collectioncolumn/lens1_voltage", + "voltage/@units":"@xps_token:collectioncolumn/lens1_voltage/@units" + }, + "LENS_EM[L2]": { + "name":"Lens 2", + "voltage":"@xps_token:collectioncolumn/lens2_voltage", + "voltage/@units":"@xps_token:collectioncolumn/lens2_voltage/@units" + }, + "LENS_EM[coil]": { + "name":"Coil", + "current":"@xps_token:collectioncolumn/coil_current", + "current/@units":"@xps_token:collectioncolumn/coil_current/@units" + }, + "LENS_EM[Pre Defl X]": { + "name":"Pre-Deflector X", + "current":"@xps_token:collectioncolumn/pre_deflector_x_current", + "current/@units":"@xps_token:collectioncolumn/pre_deflector_x_current/@units" + }, + "LENS_EM[Pre Defl Y]": { + "name":"Pre-Deflector Y", + "current":"@xps_token:collectioncolumn/pre_deflector_y_current", + "current/@units":"@xps_token:collectioncolumn/pre_deflector_y_current/@units" + }, + "LENS_EM[Focus Displacement]": { + "name":"Focus Displacement", + "current":"@xps_token:collectioncolumn/focus_displacement_current", + "current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units" + } + }, + "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/scan_mode", + "entrance_slit/description":"@xps_token:energydispersion/entrance_slit", + "exit_slit/description":"@xps_token:energydispersion/exit_slit", + "device_information": { + "vendor": "@eln", + "model": "@eln", + "identifier": "@eln" + }, + "diameter":"@eln", + "diameter/@units":"@eln" + }, + "DETECTOR[detector]": { + "amplifier_type":"@eln", + "detector_type":"@eln", + "detector_voltage":"@xps_token:detector/detector_voltage", + "detector_voltage/@units":"@xps_token:detector/detector_voltage/@units", + "amplifier_bias":"@xps_token:detector/bias_voltage_electrons/", + "amplifier_bias/@units":"@xps_token:detector/bias_voltage_electrons/@units", + "count_time":"@xps_token:detector/dwell_time", + "count_time/@units":"@xps_token:detector/dwell_time/@units", + "device_information": { + "vendor": "@eln", + "model": "@eln", + "identifier": "@eln" + }, + "raw_data": { + "@signal":"raw", + "@default":"raw", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"@xps_token:detector/raw_data/raw/@units" + } + }, + }, + "MANIPULATOR[manipulator]": { + "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", + "heater_power":"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":"None", + "type":"@eln", + "PID[pid]/setpoint":"@eln" + } + }, + "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" + } + }, + "PROCESS[process]": { + "energy_calibration": { + "calibrated_axis":"@data:energy", + "calibrated_axis/@units":"@xps_token:data/energy/type", + "calibration_object": { + "type":"file", + "path":"@xps_token:detector/calibration_file" + } + }, + "energy_referencing": { + "level":"None", + "reference_peak":"None", + "binding_energy":"None", + "offset":"None", + "calibrated_axis":"None" + }, + "transmission_correction": { + "transmission_function":{"@link":"/entry/instrument/electronanalyser/transmission_function"}, + "calibration_object": { + "type":"file", + "path":"@xps_token:collectioncolumn/transmission_function/file" + } + } + }, + "SAMPLE[sample]": { + "name":"@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" + }, + "PHYSICAL_PROCESS[sample_loading]": { + "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":{"@link":"/entry/instrument/manipulator/cryostat"} + }, + "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": { + "amperemeter":{"@link":"/entry/instrument/manipulator/flood_gun"} + } + }, + "data": { + "@signal":"", + "@default":"data", + "data":"@data:cycle", + "data/@units":"@xps_token:data/intensity/@units", + "energy":"@data:energy", + "energy/@type":"@xps_token:data/energy_type", + "energy/@units":"@xps_token:data/energy/@units", + "/@energy_indices":"None", + "@energy_depends":"None" + } +} \ No newline at end of file From 0db2ddba39ab7feb143adc13c371ee3bb359e1e0 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:42:38 +0100 Subject: [PATCH 30/88] read nested configs in XPS reader --- pynxtools/dataconverter/readers/xps/reader.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index 746f4d884..154926f59 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -51,8 +51,8 @@ "version": "@version", "User": "USER[user]", "Instrument": "INSTRUMENT[instrument]", - "Source": "SOURCE[source]", - "Beam": "BEAM[beam]", + "Source": "SOURCE[source_probe]", + "Beam": "BEAM[beam_probe]", "Analyser": "ELECTRONANALYSER[electronanalyser]", "Collectioncolumn": "COLLECTIONCOLUMN[collectioncolumn]", "Energydispersion": "ENERGYDISPERSION[energydispersion]", @@ -389,7 +389,7 @@ def read( config_file = Path(file) with open(config_file, encoding="utf-8", mode="r") as cfile: - config_dict = json.load(cfile) + config_dict = parse_flatten_json(cfile) fill_template_with_xps_data(config_dict, xps_data_dict, template, ENTRY_SET) if eln_data_dict: From 57a390050e98cecd56384ec3f720cc7966df7ca9 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 13:42:46 +0100 Subject: [PATCH 31/88] Fix path in data dict test --- tests/dataconverter/test_helpers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/dataconverter/test_helpers.py b/tests/dataconverter/test_helpers.py index d368fe955..e260a6f97 100644 --- a/tests/dataconverter/test_helpers.py +++ b/tests/dataconverter/test_helpers.py @@ -429,7 +429,12 @@ def test_validate_data_dict( ) def test_path_in_data_dict(nxdl_path, expected, template): """Unit test for helper function to check if an NXDL path exists in the reader dictionary.""" - assert helpers.path_in_data_dict(nxdl_path, template) == expected + assert ( + helpers.path_in_data_dict( + nxdl_path, helpers.convert_data_dict_path_to_hdf5_path(nxdl_path), template + ) + == expected + ) def test_atom_type_extractor_and_hill_conversion(): From c9142e94a5a9295c01e5b9076c9953eef596ab70 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 13:43:50 +0100 Subject: [PATCH 32/88] Update mpes reference file --- .../readers/mpes/Ref_nexus_mpes.log | 2869 ++++++++++++----- 1 file changed, 2148 insertions(+), 721 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 04dec42eb..9d8cb25de 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -70,12 +70,43 @@ DEBUG - NXentry.nxdl.xml:/collection_time@units [NX_TIME] DEBUG - ===== GROUP (//entry/data [NXmpes::/NXentry/NXdata]): DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/DATA): -DEBUG - +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data): +DEBUG - + The default NXdata field containing a view on the measured data. + This NXdata field contains a collection of the main relevant fields (axes). + In NXmpes, it is required to provide an energy axis. + If you want to provide additional views on your data, you can additionally use + the generic NXdata group of NXentry. + The other data fields inside this NXdata group should be named according to conventions + to ensure compatibility. We recommened the following field names + for common data fields: + + - **kx**: Calibrated x axis in k-space. Unit category: NX_ANY (e.g., 1/Angström). + - **ky**: Calibrated y axis in k-space. Unit category: NX_ANY (1/Angström). + - **kz**: Calibrated z axis in k-space. Unit category: NX_ANY (1/Angström). + - **angular0**: Fast-axis angular coordinate (or second slow axis if angularly integrated). + Unit category: NX_ANGLE + - **angular1**: Slow-axis angular coordinate (or second fast axis if simultaneously dispersed in 2 dimensions) + Unit category: NX_ANGLE + - **spatial0**: Fast-axis spatial coordinate (or second slow axis if spatially integrated) + Unit category: NX_LENGTH + - **spatial1**: Slow-axis spatial coordinate (or second fast axis if simultaneously dispersed in 2 dimensions) + Unit category: NX_LENGTH + - **delay**: Calibrated delay time. Unit category: NX_TIME (s). + - **polarization_angle**: Linear polarization angle of the incoming or + outgoing beam. This could be a link to + /entry/instrument/beam/incident_polarization_angle or + /entry/instrument/beam/final_polarization_angle if they exist. + Unit category: NX_ANGLE (° or rad) + - **ellipticity**: Ellipticity of the incoming or outgoing beam. + Could be a link to /entry/instrument/beam/incident_ellipticity or + /entry/instrument/beam/final_ellipticity if they exist. + Unit category: NX_ANGLE (° or rad) + DEBUG - documentation (NXentry.nxdl.xml:/DATA): DEBUG - The data group @@ -107,121 +138,121 @@ DEBUG - DEBUG - documentation (NXdata.nxdl.xml:): DEBUG - - :ref:`NXdata` describes the plottable data and related dimension scales. - - .. index:: plotting - - It is strongly recommended that there is at least one :ref:`NXdata` - group in each :ref:`NXentry` group. - Note that the fields named ``AXISNAME`` and ``DATA`` - can be defined with different names. - (Upper case is used to indicate that the actual name is left to the user.) - The ``signal`` and ``axes`` attributes of the - ``data`` group define which items - are plottable data and which are *dimension scales*, respectively. - - :ref:`NXdata` is used to implement one of the basic motivations in NeXus, - to provide a default plot for the data of this :ref:`NXentry`. The actual data - might be stored in another group and (hard) linked to the :ref:`NXdata` group. - - * Each :ref:`NXdata` group will define one field as the default - plottable data. The value of the ``signal`` attribute names this field. - Additional fields may be used to describe the dimension scales and - uncertainities. - The ``auxiliary_signals`` attribute is a list of the other fields - to be plotted with the ``signal`` data. - * The plottable data may be of arbitrary rank up to a maximum - of ``NX_MAXRANK=32`` (for compatibility with backend file formats). - * The plottable data will be named as the value of - the group ``signal`` attribute, such as:: - - data:NXdata - @signal = "counts" - @axes = "mr" - @mr_indices = 0 - counts: float[100] --> the default dependent data - mr: float[100] --> the default independent data - - The field named in the ``signal`` attribute **must** exist, either - directly as a NeXus field or defined through a link. - - * The group ``axes`` attribute will name the - *dimension scale* associated with the plottable data. - - If available, the standard deviations of the data are to be - stored in a data set of the same rank and dimensions, with the name ``errors``. - - * For each data dimension, there should be a one-dimensional array - of the same length. - * These one-dimensional arrays are the *dimension scales* of the - data, *i.e*. the values of the independent variables at which the data - is measured, such as scattering angle or energy transfer. - - .. index:: link - .. index:: axes (attribute) - - The preferred method to associate each data dimension with - its respective dimension scale is to specify the field name - of each dimension scale in the group ``axes`` attribute as a string list. - Here is an example for a 2-D data set *data* plotted - against *time*, and *pressure*. (An additional *temperature* data set - is provided and could be selected as an alternate for the *pressure* axis.):: - - data_2d:NXdata - @signal="data" - @axes=["time", "pressure"] - @pressure_indices=1 - @temperature_indices=1 - @time_indices=0 - data: float[1000,20] - pressure: float[20] - temperature: float[20] - time: float[1000] - - .. rubric:: Old methods to identify the plottable data - - There are two older methods of associating - each data dimension to its respective dimension scale. - Both are now out of date and - should not be used when writing new data files. - However, client software should expect to see data files - written with any of these methods. - - * One method uses the ``axes`` - attribute to specify the names of each *dimension scale*. - - * The oldest method uses the ``axis`` attribute on each - *dimension scale* to identify - with an integer the axis whose value is the number of the dimension. - - .. index: !plot; axis label - plot, axis units - units - dimension scale - - Each axis of the plot may be labeled with information from the - dimension scale for that axis. The optional ``@long_name`` attribute - is provided as the axis label default. If ``@long_name`` is not - defined, then use the name of the dimension scale. A ``@units`` attribute, - if available, may be added to the axis label for further description. - See the section :ref:`Design-Units` for more information. - - .. index: !plot; axis title - - The optional ``title`` field, if available, provides a suggested - title for the plot. If no ``title`` field is found in the :ref:`NXdata` - group, look for a ``title`` field in the parent :ref:`NXentry` group, - with a fallback to displaying the path to the :ref:`NXdata` group. - - NeXus is about how to find and annotate the data to be plotted - but not to describe how the data is to be plotted. - (https://www.nexusformat.org/NIAC2018Minutes.html#nxdata-plottype--attribute) - + :ref:`NXdata` describes the plottable data and related dimension scales. + + .. index:: plotting + + It is strongly recommended that there is at least one :ref:`NXdata` + group in each :ref:`NXentry` group. + Note that the fields named ``AXISNAME`` and ``DATA`` + can be defined with different names. + (Upper case is used to indicate that the actual name is left to the user.) + The ``signal`` and ``axes`` attributes of the + ``data`` group define which items + are plottable data and which are *dimension scales*, respectively. + + :ref:`NXdata` is used to implement one of the basic motivations in NeXus, + to provide a default plot for the data of this :ref:`NXentry`. The actual data + might be stored in another group and (hard) linked to the :ref:`NXdata` group. + + * Each :ref:`NXdata` group will define one field as the default + plottable data. The value of the ``signal`` attribute names this field. + Additional fields may be used to describe the dimension scales and + uncertainities. + The ``auxiliary_signals`` attribute is a list of the other fields + to be plotted with the ``signal`` data. + * The plottable data may be of arbitrary rank up to a maximum + of ``NX_MAXRANK=32`` (for compatibility with backend file formats). + * The plottable data will be named as the value of + the group ``signal`` attribute, such as:: + + data:NXdata + @signal = "counts" + @axes = "mr" + @mr_indices = 0 + counts: float[100] --> the default dependent data + mr: float[100] --> the default independent data + + The field named in the ``signal`` attribute **must** exist, either + directly as a NeXus field or defined through a link. + + * The group ``axes`` attribute will name the + *dimension scale* associated with the plottable data. + + If available, the standard deviations of the data are to be + stored in a data set of the same rank and dimensions, with the name ``errors``. + + * For each data dimension, there should be a one-dimensional array + of the same length. + * These one-dimensional arrays are the *dimension scales* of the + data, *i.e*. the values of the independent variables at which the data + is measured, such as scattering angle or energy transfer. + + .. index:: link + .. index:: axes (attribute) + + The preferred method to associate each data dimension with + its respective dimension scale is to specify the field name + of each dimension scale in the group ``axes`` attribute as a string list. + Here is an example for a 2-D data set *data* plotted + against *time*, and *pressure*. (An additional *temperature* data set + is provided and could be selected as an alternate for the *pressure* axis.):: + + data_2d:NXdata + @signal="data" + @axes=["time", "pressure"] + @pressure_indices=1 + @temperature_indices=1 + @time_indices=0 + data: float[1000,20] + pressure: float[20] + temperature: float[20] + time: float[1000] + + .. rubric:: Old methods to identify the plottable data + + There are two older methods of associating + each data dimension to its respective dimension scale. + Both are now out of date and + should not be used when writing new data files. + However, client software should expect to see data files + written with any of these methods. + + * One method uses the ``axes`` + attribute to specify the names of each *dimension scale*. + + * The oldest method uses the ``axis`` attribute on each + *dimension scale* to identify + with an integer the axis whose value is the number of the dimension. + + .. index: !plot; axis label + plot, axis units + units + dimension scale + + Each axis of the plot may be labeled with information from the + dimension scale for that axis. The optional ``@long_name`` attribute + is provided as the axis label default. If ``@long_name`` is not + defined, then use the name of the dimension scale. A ``@units`` attribute, + if available, may be added to the axis label for further description. + See the section :ref:`Design-Units` for more information. + + .. index: !plot; axis title + + The optional ``title`` field, if available, provides a suggested + title for the plot. If no ``title`` field is found in the :ref:`NXdata` + group, look for a ``title`` field in the parent :ref:`NXentry` group, + with a fallback to displaying the path to the :ref:`NXdata` group. + + NeXus is about how to find and annotate the data to be plotted + but not to describe how the data is to be plotted. + (https://www.nexusformat.org/NIAC2018Minutes.html#nxdata-plottype--attribute) + DEBUG - ===== ATTRS (//entry/data@NX_class) DEBUG - value: NXdata DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: DEBUG - @NX_class [NX_CHAR] @@ -230,51 +261,51 @@ DEBUG - ===== ATTRS (//entry/data@axes) DEBUG - value: ['kx' 'ky' 'energy' 'delay'] DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: DEBUG - NXdata.nxdl.xml:@axes - [NX_CHAR] DEBUG - <> DEBUG - documentation (NXdata.nxdl.xml:/axes): DEBUG - - .. index:: plotting - - Array of strings holding the :ref:`names ` of - the independent data fields used in the default plot for all of - the dimensions of the :ref:`signal ` - as well as any :ref:`auxiliary signals `. - - One name is provided for every dimension in the *signal* or *auxiliary signal* fields. - - The *axes* values are the names of fields or links that *must* exist and be direct - children of this NXdata group. - - An axis slice is specified using a field named ``AXISNAME_indices`` - as described below (where the text shown here as ``AXISNAME`` is to be - replaced by the actual field name). - - When no default axis is available for a particular dimension - of the plottable data, use a "." in that position. - Such as:: - - @axes=["time", ".", "."] - - Since there are three items in the list, the *signal* field - must be a three-dimensional array (rank=3). The first dimension - is described by the values of a one-dimensional array named ``time`` - while the other two dimensions have no fields to be used as dimension scales. - - See examples provided on the NeXus wiki: - https://www.nexusformat.org/2014_axes_and_uncertainties.html - - If there are no axes at all (such as with a stack of images), - the axes attribute can be omitted. - + .. index:: plotting + + Array of strings holding the :ref:`names ` of + the independent data fields used in the default plot for all of + the dimensions of the :ref:`signal ` + as well as any :ref:`auxiliary signals `. + + One name is provided for every dimension in the *signal* or *auxiliary signal* fields. + + The *axes* values are the names of fields or links that *must* exist and be direct + children of this NXdata group. + + An axis slice is specified using a field named ``AXISNAME_indices`` + as described below (where the text shown here as ``AXISNAME`` is to be + replaced by the actual field name). + + When no default axis is available for a particular dimension + of the plottable data, use a "." in that position. + Such as:: + + @axes=["time", ".", "."] + + Since there are three items in the list, the *signal* field + must be a three-dimensional array (rank=3). The first dimension + is described by the values of a one-dimensional array named ``time`` + while the other two dimensions have no fields to be used as dimension scales. + + See examples provided on the NeXus wiki: + https://www.nexusformat.org/2014_axes_and_uncertainties.html + + If there are no axes at all (such as with a stack of images), + the axes attribute can be omitted. + DEBUG - ===== ATTRS (//entry/data@delay_indices) DEBUG - value: 3 DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: DEBUG - @delay_indices - IS NOT IN SCHEMA @@ -283,16 +314,18 @@ DEBUG - ===== ATTRS (//entry/data@energy_indices) DEBUG - value: 2 DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: -DEBUG - @energy_indices - IS NOT IN SCHEMA +DEBUG - NXmpes.nxdl.xml:/ENTRY/data@energy_indices - [NX_CHAR] +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/energy_indices): DEBUG - DEBUG - ===== ATTRS (//entry/data@kx_indices) DEBUG - value: 0 DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: DEBUG - @kx_indices - IS NOT IN SCHEMA @@ -301,7 +334,7 @@ DEBUG - ===== ATTRS (//entry/data@ky_indices) DEBUG - value: 1 DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: DEBUG - @ky_indices - IS NOT IN SCHEMA @@ -310,40 +343,40 @@ DEBUG - ===== ATTRS (//entry/data@signal) DEBUG - value: data DEBUG - classpath: ['NXentry', 'NXdata'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA +NXmpes.nxdl.xml:/ENTRY/data NXentry.nxdl.xml:/DATA NXdata.nxdl.xml: -DEBUG - NXmpes.nxdl.xml:/ENTRY/DATA@signal - [NX_CHAR] +DEBUG - NXmpes.nxdl.xml:/ENTRY/data@signal - [NX_CHAR] DEBUG - <> -DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/DATA/signal): +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/data/signal): DEBUG - -> data -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/DATA/signal): +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/signal): DEBUG - DEBUG - NXdata.nxdl.xml:@signal - [NX_CHAR] DEBUG - documentation (NXdata.nxdl.xml:/signal): DEBUG - - .. index:: find the default plottable data - .. index:: plotting - .. index:: signal attribute value - - Declares which NeXus field is the default. - The value is the :ref:`name ` of the data field to be plotted. - This field or link *must* exist and be a direct child of this NXdata group. - - It is recommended (as of NIAC2014) to use this attribute - rather than adding a signal attribute to the field. - See https://www.nexusformat.org/2014_How_to_find_default_data.html - for a summary of the discussion. - + .. index:: find the default plottable data + .. index:: plotting + .. index:: signal attribute value + + Declares which NeXus field is the default. + The value is the :ref:`name ` of the data field to be plotted. + This field or link *must* exist and be a direct child of this NXdata group. + + It is recommended (as of NIAC2014) to use this attribute + rather than adding a signal attribute to the field. + See https://www.nexusformat.org/2014_How_to_find_default_data.html + for a summary of the discussion. + DEBUG - ===== FIELD (//entry/data/data): DEBUG - value: [[[1.14760e+04 1.64560e+04 1.55440e+04 1.48940e+04 1.08810e+04] ... DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA/data +NXmpes.nxdl.xml:/ENTRY/data/data NXdata.nxdl.xml:/DATA DEBUG - <> DEBUG - Dataset referenced as NXdata SIGNAL -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/DATA/data): +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/data): DEBUG - Represents a measure of one- or more-dimensional photoemission counts, where the varied axis may be for example energy, momentum, spatial coordinate, pump-probe @@ -352,22 +385,22 @@ DEBUG - DEBUG - documentation (NXdata.nxdl.xml:/DATA): DEBUG - - .. index:: plotting - - This field contains the data values to be used as the - NeXus *plottable data*. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + .. index:: plotting + + This field contains the data values to be used as the + NeXus *plottable data*. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/data@units) DEBUG - value: counts DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/DATA/data +NXmpes.nxdl.xml:/ENTRY/data/data NXdata.nxdl.xml:/DATA -DEBUG - NXmpes.nxdl.xml:/ENTRY/DATA/data@units [NX_ANY] +DEBUG - NXmpes.nxdl.xml:/ENTRY/data/data@units [NX_ANY] DEBUG - NXdata.nxdl.xml:/DATA@units - REQUIRED, but undefined unit category DEBUG - ===== FIELD (//entry/data/delay): DEBUG - value: [-2000. 125. 2250. 4375. 6500.] @@ -378,12 +411,12 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #3 DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/delay@units) DEBUG - value: ps DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -394,22 +427,49 @@ DEBUG - ===== FIELD (//entry/data/energy): > +DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #2 +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/energy): +DEBUG - + Calibrated energy axis. + + This could be a link to either + /entry/process/energy_calibration/calibrated_axis or + /entry/process/energy_correction/calibrated_axis. + DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + +DEBUG - ===== ATTRS (//entry/data/energy@type) +DEBUG - value: binding +DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/energy +NXdata.nxdl.xml:/AXISNAME +DEBUG - NXmpes.nxdl.xml:/ENTRY/data/energy@type - [NX_CHAR] +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/data/energy/type): +DEBUG - -> kinetic +DEBUG - -> binding +DEBUG - Dataset referenced as NXdata AXIS #2 +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/data/energy/type): +DEBUG - + The energy can be either stored as kinetic or as binding energy. + DEBUG - ===== ATTRS (//entry/data/energy@units) DEBUG - value: eV DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/data/energy NXdata.nxdl.xml:/AXISNAME +DEBUG - NXmpes.nxdl.xml:/ENTRY/data/energy@units [NX_ENERGY] DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category DEBUG - ===== FIELD (//entry/data/kx): DEBUG - value: [-1.5 -1.16666667 -0.83333333 -0.5 -0.16666667 0.16666667 ... @@ -420,12 +480,12 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #0 DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/kx@units) DEBUG - value: 1/A DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -441,12 +501,12 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #1 DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/ky@units) DEBUG - value: 1/A DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -516,8 +576,15 @@ DEBUG - ===== FIELD (//entry/end_time): > +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/end_time): +DEBUG - + Datetime of the end of the measurement. + Should be a ISO8601 date/time stamp. It is recommended to add an explicit time zone, + otherwise the local time zone is assumed per ISO8601. + DEBUG - documentation (NXentry.nxdl.xml:/end_time): DEBUG - Ending time of measurement @@ -571,6 +638,12 @@ NXinstrument.nxdl.xml: DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT): DEBUG - + Description of the MPES spectrometer and its individual parts. + + This concept is related to term `12.58`_ of the ISO 18115-1:2023 standard. + + .. _12.58: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.58 + DEBUG - documentation (NXentry.nxdl.xml:/INSTRUMENT): DEBUG - DEBUG - documentation (NXinstrument.nxdl.xml:): @@ -593,15 +666,12 @@ NXentry.nxdl.xml:/INSTRUMENT NXinstrument.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== GROUP (//entry/instrument/beam [NXmpes::/NXentry/NXinstrument/NXbeam]): +DEBUG - ===== GROUP (//entry/instrument/beam_probe [NXmpes::/NXentry/NXinstrument/NXbeam]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM NXinstrument.nxdl.xml:/BEAM NXbeam.nxdl.xml: -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM): -DEBUG - +DEBUG - <> DEBUG - documentation (NXinstrument.nxdl.xml:/BEAM): DEBUG - DEBUG - documentation (NXbeam.nxdl.xml:): @@ -622,32 +692,36 @@ DEBUG - To support these use cases, the explicit dimensionality of these fields is not specified, but it can be inferred by the presense of and shape of accompanying fields, such as incident_wavelength_weights for a polychromatic beam. -DEBUG - ===== ATTRS (//entry/instrument/beam@NX_class) +DEBUG - ===== ATTRS (//entry/instrument/beam_probe@NX_class) DEBUG - value: NXbeam DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM NXinstrument.nxdl.xml:/BEAM NXbeam.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/instrument/beam/distance): +DEBUG - ===== FIELD (//entry/instrument/beam_probe/associated_source): +DEBUG - value: b'/entry/instrument/source_probe' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/beam_probe/distance): DEBUG - value: 0.0 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance): +NXbeam.nxdl.xml:/distance +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/distance): DEBUG - - Distance of the point of evaluation of the beam from the sample surface. - -DEBUG - ===== ATTRS (//entry/instrument/beam/distance@units) + Distance from sample. Note, it is recommended to use NXtransformations instead. + +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/distance@units) DEBUG - value: mm -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance@units [NX_LENGTH] -DEBUG - ===== FIELD (//entry/instrument/beam/extent): +NXbeam.nxdl.xml:/distance +DEBUG - NXbeam.nxdl.xml:/distance@units [NX_LENGTH] +DEBUG - ===== FIELD (//entry/instrument/beam_probe/extent): DEBUG - value: [ 80. 190.] DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: @@ -658,21 +732,18 @@ DEBUG - Size of the beam entering this component. Note this represents a rectangular beam aperture, and values represent FWHM -DEBUG - ===== ATTRS (//entry/instrument/beam/extent@units) +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/extent@units) DEBUG - value: µm DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: NXbeam.nxdl.xml:/extent DEBUG - NXbeam.nxdl.xml:/extent@units [NX_LENGTH] -DEBUG - ===== FIELD (//entry/instrument/beam/incident_energy): +DEBUG - ===== FIELD (//entry/instrument/beam_probe/incident_energy): DEBUG - value: 21.7 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy NXbeam.nxdl.xml:/incident_energy -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy): -DEBUG - +DEBUG - <> DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy): DEBUG - Energy carried by each particle of the beam on entering the beamline component. @@ -692,23 +763,18 @@ DEBUG - Note, variants are a good way to represent several of these use cases in a single dataset, e.g. if a calibrated, single-value energy value is available along with the original spectrum from which it was calibrated. -DEBUG - ===== ATTRS (//entry/instrument/beam/incident_energy@units) +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/incident_energy@units) DEBUG - value: eV DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy NXbeam.nxdl.xml:/incident_energy -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy@units [NX_ENERGY] DEBUG - NXbeam.nxdl.xml:/incident_energy@units [NX_ENERGY] -DEBUG - ===== FIELD (//entry/instrument/beam/incident_energy_spread): +DEBUG - ===== FIELD (//entry/instrument/beam_probe/incident_energy_spread): DEBUG - value: 0.11 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread NXbeam.nxdl.xml:/incident_energy_spread -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread): -DEBUG - +DEBUG - <> DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy_spread): DEBUG - The energy spread FWHM for the corresponding energy(ies) in incident_energy. In the case of shot-to-shot variation in @@ -716,37 +782,30 @@ DEBUG - (slow to fast) of the spreads of the corresponding wavelength in incident_wavelength. -DEBUG - ===== ATTRS (//entry/instrument/beam/incident_energy_spread@units) +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/incident_energy_spread@units) DEBUG - value: eV DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread NXbeam.nxdl.xml:/incident_energy_spread -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread@units [NX_ENERGY] DEBUG - NXbeam.nxdl.xml:/incident_energy_spread@units [NX_ENERGY] -DEBUG - ===== FIELD (//entry/instrument/beam/incident_polarization): +DEBUG - ===== FIELD (//entry/instrument/beam_probe/incident_polarization): DEBUG - value: [1. 1. 0. 0.] DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization NXbeam.nxdl.xml:/incident_polarization -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization): -DEBUG - +DEBUG - <> DEBUG - documentation (NXbeam.nxdl.xml:/incident_polarization): DEBUG - Incident polarization as a Stokes vector on entering beamline component -DEBUG - ===== ATTRS (//entry/instrument/beam/incident_polarization@units) +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/incident_polarization@units) DEBUG - value: V^2/mm^2 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization NXbeam.nxdl.xml:/incident_polarization -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization@units [NX_ANY] DEBUG - NXbeam.nxdl.xml:/incident_polarization@units [NX_ANY] -DEBUG - ===== FIELD (//entry/instrument/beam/pulse_duration): +DEBUG - ===== FIELD (//entry/instrument/beam_probe/pulse_duration): DEBUG - value: 20.0 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: @@ -756,21 +815,18 @@ DEBUG - documentation (NXbeam.nxdl.xml:/pulse_duration): DEBUG - FWHM duration of the pulses at the diagnostic point -DEBUG - ===== ATTRS (//entry/instrument/beam/pulse_duration@units) +DEBUG - ===== ATTRS (//entry/instrument/beam_probe/pulse_duration@units) DEBUG - value: fs DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: NXbeam.nxdl.xml:/pulse_duration DEBUG - NXbeam.nxdl.xml:/pulse_duration@units [NX_TIME] -DEBUG - ===== GROUP (//entry/instrument/beam_pump [NXmpes::/NXentry/NXinstrument/NXbeam]): +DEBUG - ===== GROUP (//entry/instrument/beam_pump [NXmpes::/NXentry/NXinstrument/NXbeam]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM NXinstrument.nxdl.xml:/BEAM NXbeam.nxdl.xml: -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM): -DEBUG - +DEBUG - <> DEBUG - documentation (NXinstrument.nxdl.xml:/BEAM): DEBUG - DEBUG - documentation (NXbeam.nxdl.xml:): @@ -795,11 +851,15 @@ DEBUG - ===== ATTRS (//entry/instrument/beam_pump@NX_class) DEBUG - value: NXbeam DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM NXinstrument.nxdl.xml:/BEAM NXbeam.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - +DEBUG - ===== FIELD (//entry/instrument/beam_pump/associated_source): +DEBUG - value: b'/entry/instrument/source_pump' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== FIELD (//entry/instrument/beam_pump/average_power): DEBUG - value: 444.0 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] @@ -818,20 +878,20 @@ NXbeam.nxdl.xml:/average_power DEBUG - NXbeam.nxdl.xml:/average_power@units [NX_POWER] DEBUG - ===== FIELD (//entry/instrument/beam_pump/distance): DEBUG - value: 0.0 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance): +NXbeam.nxdl.xml:/distance +DEBUG - <> +DEBUG - documentation (NXbeam.nxdl.xml:/distance): DEBUG - - Distance of the point of evaluation of the beam from the sample surface. - + Distance from sample. Note, it is recommended to use NXtransformations instead. + DEBUG - ===== ATTRS (//entry/instrument/beam_pump/distance@units) DEBUG - value: mm -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/distance@units [NX_LENGTH] +NXbeam.nxdl.xml:/distance +DEBUG - NXbeam.nxdl.xml:/distance@units [NX_LENGTH] DEBUG - ===== FIELD (//entry/instrument/beam_pump/extent): DEBUG - value: [155. 367.] DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] @@ -869,11 +929,8 @@ DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_energy): > -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy): -DEBUG - +DEBUG - <> DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy): DEBUG - Energy carried by each particle of the beam on entering the beamline component. @@ -897,19 +954,14 @@ DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_energy@units) DEBUG - value: eV DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy NXbeam.nxdl.xml:/incident_energy -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy@units [NX_ENERGY] DEBUG - NXbeam.nxdl.xml:/incident_energy@units [NX_ENERGY] DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_energy_spread): DEBUG - value: 0.05 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread NXbeam.nxdl.xml:/incident_energy_spread -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread): -DEBUG - +DEBUG - <> DEBUG - documentation (NXbeam.nxdl.xml:/incident_energy_spread): DEBUG - The energy spread FWHM for the corresponding energy(ies) in incident_energy. In the case of shot-to-shot variation in @@ -921,19 +973,14 @@ DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_energy_spread@units) DEBUG - value: eV DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread NXbeam.nxdl.xml:/incident_energy_spread -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_energy_spread@units [NX_ENERGY] DEBUG - NXbeam.nxdl.xml:/incident_energy_spread@units [NX_ENERGY] DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_polarization): DEBUG - value: [1 1 0 0] DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization NXbeam.nxdl.xml:/incident_polarization -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization): -DEBUG - +DEBUG - <> DEBUG - documentation (NXbeam.nxdl.xml:/incident_polarization): DEBUG - Incident polarization as a Stokes vector @@ -943,9 +990,7 @@ DEBUG - ===== ATTRS (//entry/instrument/beam_pump/incident_polarization@units) DEBUG - value: V^2/mm^2 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_NUMBER'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization NXbeam.nxdl.xml:/incident_polarization -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/BEAM/incident_polarization@units [NX_ANY] DEBUG - NXbeam.nxdl.xml:/incident_polarization@units [NX_ANY] DEBUG - ===== FIELD (//entry/instrument/beam_pump/incident_wavelength): DEBUG - value: 1030.0 @@ -1026,7 +1071,7 @@ DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXbeam', 'NX_FLOAT'] DEBUG - classes: NXbeam.nxdl.xml:/pulse_energy DEBUG - NXbeam.nxdl.xml:/pulse_energy@units [NX_ENERGY] -DEBUG - ===== GROUP (//entry/instrument/electronanalyser [NXmpes::/NXentry/NXinstrument/NXelectronanalyser]): +DEBUG - ===== GROUP (//entry/instrument/electronanalyser [NXmpes::/NXentry/NXinstrument/NXelectronanalyser]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER @@ -1036,7 +1081,11 @@ DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER): DEBUG - DEBUG - documentation (NXelectronanalyser.nxdl.xml:): DEBUG - - Subclass of NXinstrument to describe a photoelectron analyser. + Basic class for describing a electron analyzer. + + This concept is related to term `12.59`_ of the ISO 18115-1:2023 standard. + + .. _12.59: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.59 DEBUG - ===== ATTRS (//entry/instrument/electronanalyser@NX_class) DEBUG - value: NXelectronanalyser @@ -2088,19 +2137,16 @@ DEBUG - The space projected in the angularly dispersive directions, real or reciprocal DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/scheme): -DEBUG - value: b'Momentum Microscope' +DEBUG - value: b'angular dispersive' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_CHAR'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme NXcollectioncolumn.nxdl.xml:/scheme DEBUG - <> DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme): -DEBUG - -> Standard -DEBUG - -> Angular dispersive -DEBUG - -> Selective area -DEBUG - -> Deflector -DEBUG - -> PEEM -DEBUG - -> Momentum Microscope +DEBUG - -> angular dispersive +DEBUG - -> spatial dispersive +DEBUG - -> non-dispersive DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme): DEBUG - Scheme of the electron collection column. @@ -2134,8 +2180,8 @@ NXelectronanalyser.nxdl.xml:/depends_on DEBUG - <> DEBUG - documentation (NXelectronanalyser.nxdl.xml:/depends_on): DEBUG - - Refers to the last transformation specifying the positon of the manipulator in - the NXtransformations chain. + Refers to the last transformation specifying the position of the electron analyser + in the NXtransformations chain. DEBUG - ===== FIELD (//entry/instrument/electronanalyser/description): DEBUG - value: b'SPECS Metis 1000 Momentum Microscope' @@ -2274,31 +2320,153 @@ DEBUG - documentation (NXdetector.nxdl.xml:/sensor_pixels): DEBUG - Number of raw active elements in each dimension. Important for swept scans. -DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution): -DEBUG - value: 110.0 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/device_information [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXfabrication]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information +NXelectronanalyser.nxdl.xml:/FABRICATION +NXfabrication.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/FABRICATION): +DEBUG - +DEBUG - documentation (NXfabrication.nxdl.xml:): +DEBUG - + Details about a component as it is defined by its manufacturer. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/device_information@NX_class) +DEBUG - value: NXfabrication +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information +NXelectronanalyser.nxdl.xml:/FABRICATION +NXfabrication.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/device_information/model): +DEBUG - value: b'Metis 1000 Momentum Microscope' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/model +NXfabrication.nxdl.xml:/model +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/model): +DEBUG - +DEBUG - documentation (NXfabrication.nxdl.xml:/model): +DEBUG - + Version or model of the component named by the manufacturer. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/device_information/vendor): +DEBUG - value: b'SPECS GmbH' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXfabrication', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/vendor +NXfabrication.nxdl.xml:/vendor +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/device_information/vendor): +DEBUG - +DEBUG - documentation (NXfabrication.nxdl.xml:/vendor): +DEBUG - + Company name of the manufacturer. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/energy_resolution [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution NXelectronanalyser.nxdl.xml:/energy_resolution +NXresolution.nxdl.xml: DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution): DEBUG - - Energy resolution of the analyser with the current setting. May be linked from a - NXcalibration. - DEBUG - documentation (NXelectronanalyser.nxdl.xml:/energy_resolution): DEBUG - - Energy resolution of the electron analyser (FWHM of gaussian broadening) + Energy resolution of the analyser with the current setting. May be linked from an + NXcalibration. + + This concept is related to term `10.24`_ of the ISO 18115-1:2023 standard. + + .. _10.24: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.24 -DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution@units) -DEBUG - value: meV -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_FLOAT'] +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution NXelectronanalyser.nxdl.xml:/energy_resolution -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution@units [NX_ENERGY] -DEBUG - NXelectronanalyser.nxdl.xml:/energy_resolution@units [NX_ENERGY] -DEBUG - ===== GROUP (//entry/instrument/electronanalyser/energydispersion [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXenergydispersion]): +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/physical_quantity): +DEBUG - value: b'energy' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/physical_quantity +NXelectronanalyser.nxdl.xml:/energy_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/physical_quantity): +DEBUG - -> energy +DEBUG - enumeration (NXelectronanalyser.nxdl.xml:/energy_resolution/physical_quantity): +DEBUG - -> energy +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/energy_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/resolution): +DEBUG - value: 110.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution +NXelectronanalyser.nxdl.xml:/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution): +DEBUG - +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/energy_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution/resolution@units) +DEBUG - value: meV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution +NXelectronanalyser.nxdl.xml:/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution@units - REQUIRED, but undefined unit category +DEBUG - NXelectronanalyser.nxdl.xml:/energy_resolution/resolution@units [NX_ENERGY] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/type +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/type): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/energydispersion [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXenergydispersion]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION @@ -2325,22 +2493,6 @@ NXelectronanalyser.nxdl.xml:/ENERGYDISPERSION NXenergydispersion.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energydispersion/energy_scan_mode): -DEBUG - value: b'fixed' -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_CHAR'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/energy_scan_mode -NXenergydispersion.nxdl.xml:/energy_scan_mode -DEBUG - <> -DEBUG - enumeration (NXenergydispersion.nxdl.xml:/energy_scan_mode): -DEBUG - -> fixed -DEBUG - -> sweep -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/ENERGYDISPERSION/energy_scan_mode): -DEBUG - -DEBUG - documentation (NXenergydispersion.nxdl.xml:/energy_scan_mode): -DEBUG - - Way of scanning the energy axis (fixed or sweep). - DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energydispersion/pass_energy): DEBUG - value: 30.0 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXenergydispersion', 'NX_FLOAT'] @@ -2354,6 +2506,10 @@ DEBUG - documentation (NXenergydispersion.nxdl.xml:/pass_energy): DEBUG - Energy of the electrons on the mean path of the analyser. Pass energy for hemispherics, drift energy for tofs. + + This concept is related to term `12.63`_ of the ISO 18115-1:2023 standard. + + .. _12.63: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.63 DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energydispersion/pass_energy@units) DEBUG - value: eV @@ -2426,22 +2582,88 @@ DEBUG - Axes may be less abstract than this, i.e. ['detector_x', 'detector_y']. If energy_scan_mode=sweep, fast_axes: ['energy', 'kx']; slow_axes: ['energy'] is allowed. -DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution): -DEBUG - value: 0.08 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/momentum_resolution [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] DEBUG - classes: NXelectronanalyser.nxdl.xml:/momentum_resolution +NXresolution.nxdl.xml: DEBUG - <> DEBUG - documentation (NXelectronanalyser.nxdl.xml:/momentum_resolution): DEBUG - Momentum resolution of the electron analyser (FWHM) +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/momentum_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/momentum_resolution@units) DEBUG - value: 1/angstrom -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_FLOAT'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] DEBUG - classes: NXelectronanalyser.nxdl.xml:/momentum_resolution -DEBUG - NXelectronanalyser.nxdl.xml:/momentum_resolution@units [NX_WAVENUMBER] +NXresolution.nxdl.xml: +DEBUG - @units - IS NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution/physical_quantity): +DEBUG - value: b'momentum' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXelectronanalyser.nxdl.xml:/momentum_resolution/physical_quantity): +DEBUG - -> momentum +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/momentum_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution/resolution): +DEBUG - value: 0.08 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/momentum_resolution/resolution@units) +DEBUG - value: 1/angstrom +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXelectronanalyser.nxdl.xml:/momentum_resolution/resolution@units [NX_WAVENUMBER] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/momentum_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + DEBUG - ===== FIELD (//entry/instrument/electronanalyser/slow_axes): DEBUG - value: b'delay' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_CHAR'] @@ -2456,22 +2678,84 @@ DEBUG - List of the axes that are acquired by scanning a physical parameter, listed in order of decreasing speed. See fast_axes for examples. -DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution): -DEBUG - value: 10.0 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/instrument/electronanalyser/spatial_resolution [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] DEBUG - classes: NXelectronanalyser.nxdl.xml:/spatial_resolution +NXresolution.nxdl.xml: DEBUG - <> DEBUG - documentation (NXelectronanalyser.nxdl.xml:/spatial_resolution): DEBUG - Spatial resolution of the electron analyser (Airy disk radius) + + This concept is related to term `10.15 ff.`_ of the ISO 18115-1:2023 standard. + + .. _10.15 ff.: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.15 -DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/spatial_resolution@units) -DEBUG - value: µm -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NX_FLOAT'] +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/spatial_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution'] DEBUG - classes: NXelectronanalyser.nxdl.xml:/spatial_resolution -DEBUG - NXelectronanalyser.nxdl.xml:/spatial_resolution@units [NX_LENGTH] +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution/physical_quantity): +DEBUG - value: b'length' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXelectronanalyser.nxdl.xml:/spatial_resolution/physical_quantity): +DEBUG - -> length +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/spatial_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution/resolution): +DEBUG - value: 10.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/spatial_resolution/resolution@units) +DEBUG - value: µm +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXelectronanalyser.nxdl.xml:/spatial_resolution/resolution@units [NX_LENGTH] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/spatial_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + DEBUG - ===== GROUP (//entry/instrument/electronanalyser/transformations [NXmpes::/NXentry/NXinstrument/NXelectronanalyser/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations'] DEBUG - classes: @@ -2484,7 +2768,7 @@ DEBUG - geometry of the electron analyser as a component in the instrument. Conventions from the NXtransformations base class are used. In principle, the McStas coordinate system is used. The first transformation has to point either to - another component of the system or . (for pointing to the reference frame) to + another component of the system or "." (for pointing to the reference frame) to relate it relative to the experimental setup. Typically, the components of a system should all be related relative to each other and only one component should relate to the reference coordinate system. @@ -2512,23 +2796,42 @@ DEBUG - * ``NX_UNITLESS`` for axes for which no transformation type is specified This class will usually contain all axes of a sample stage or goniometer or - a detector. The NeXus default McSTAS coordinate frame is assumed, but additional - useful coordinate axes may be defined by using axes for which no transformation - type has been specified. + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. - The entry point (``depends_on``) will be outside of this class and point to a - field in here. Following the chain may also require following ``depends_on`` - links to transformations outside, for example to a common base table. If - a relative path is given, it is relative to the group enclosing the ``depends_on`` - specification. + **Transformation chain** + + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` - and that in turn depends on :math:`T_3`, the final transformation :math:`T_f` is + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 - .. math:: T_f = T_3 T_2 T_1 + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by - In explicit terms, the transformations are a subset of affine transformations - expressed as 4x4 matrices that act on homogeneous coordinates, :math:`w=(x,y,z,1)^T`. + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. + + **Transformation matrix** + + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. For rotation and translation, @@ -2542,8 +2845,8 @@ DEBUG - attribute multiplied by the field value, and :math:`R` is defined as a rotation about an axis in the direction of ``vector``, of angle of the field value. - NOTE - + **Usage** + One possible use of ``NXtransformations`` is to define the motors and transformations for a diffractometer (goniometer). Such use is mentioned in the ``NXinstrument`` base class. Use one ``NXtransformations`` group @@ -2551,8 +2854,7 @@ DEBUG - Collecting the motors of a sample table or xyz-stage in an NXtransformations group is equally possible. - - Following the section on the general dscription of axis in NXtransformations is a section which + Following the section on the general description of axis in NXtransformations is a section which documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever there is a need for positioning a beam line component please use the existing names. Use as many fields as needed in order to position the component. Feel free to add more axis if required. In the description @@ -2565,15 +2867,152 @@ DEBUG - * depends_on as needed. - -DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations@NX_class) -DEBUG - value: NXtransformations -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations'] -DEBUG - classes: -NXelectronanalyser.nxdl.xml:/TRANSFORMATIONS -NXtransformations.nxdl.xml: -DEBUG - @NX_class [NX_CHAR] -DEBUG - + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + + +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations@NX_class) +DEBUG - value: NXtransformations +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations'] +DEBUG - classes: +NXelectronanalyser.nxdl.xml:/TRANSFORMATIONS +NXtransformations.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - DEBUG - ===== FIELD (//entry/instrument/electronanalyser/transformations/rot_y): DEBUG - value: -115.0 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXtransformations', 'NX_NUMBER'] @@ -2602,7 +3041,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/rot_y@transformation_type) DEBUG - value: rotation @@ -2676,7 +3115,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/transformations/trans_z@transformation_type) DEBUG - value: translation @@ -2722,28 +3161,96 @@ DEBUG - increasing displacement. For general axes, an appropriate direction should be chosen. -DEBUG - ===== FIELD (//entry/instrument/energy_resolution): -DEBUG - value: 140.0 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/instrument/energy_resolution [NXmpes::/NXentry/NXinstrument/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution -NXinstrument.nxdl.xml:/energy_resolution -DEBUG - <> +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution): DEBUG - -DEBUG - documentation (NXinstrument.nxdl.xml:/energy_resolution): + Overall energy resolution of the MPES instrument + + This concept is related to term `10.7 ff.`_ of the ISO 18115-1:2023 standard. + + .. _10.7 ff.: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.7 + + This concept is related to term `10.24`_ of the ISO 18115-1:2023 standard. + + .. _10.24: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:10.24 + +DEBUG - documentation (NXinstrument.nxdl.xml:/RESOLUTION): DEBUG - - Energy resolution of the experiment (FWHM or gaussian broadening) - -DEBUG - ===== ATTRS (//entry/instrument/energy_resolution@units) -DEBUG - value: meV -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/energy_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution -NXinstrument.nxdl.xml:/energy_resolution -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution@units [NX_ENERGY] -DEBUG - NXinstrument.nxdl.xml:/energy_resolution@units [NX_ENERGY] -DEBUG - ===== GROUP (//entry/instrument/manipulator [NXmpes::/NXentry/NXinstrument/NXmanipulator]): +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/energy_resolution/physical_quantity): +DEBUG - value: b'energy' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/physical_quantity +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/physical_quantity): +DEBUG - -> energy +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/physical_quantity): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/energy_resolution/resolution): +DEBUG - value: 140.0 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): +DEBUG - + The resolution of the physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/energy_resolution/resolution@units) +DEBUG - value: meV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/resolution@units [NX_ENERGY] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/energy_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/type +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/energy_resolution/type): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + +DEBUG - ===== GROUP (//entry/instrument/manipulator [NXmpes::/NXentry/NXinstrument/NXmanipulator]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR @@ -2777,50 +3284,243 @@ DEBUG - Refers to the last transformation specifying the positon of the manipulator in the NXtransformations chain. -DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias): -DEBUG - value: 17.799719004221362 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/instrument/manipulator/pressure_gauge [NXmpes::/NXentry/NXinstrument/NXmanipulator/pressure_gauge]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/pressure_gauge/measurement): +DEBUG - value: b'pressure' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/pressure_gauge/name): +DEBUG - value: b'sample_chamber_pressure' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/pressure_gauge/value): +DEBUG - value: 4.5599999999999996e-11 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/manipulator/pressure_gauge/value@units) +DEBUG - value: mbar +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== GROUP (//entry/instrument/manipulator/sample_bias_voltmeter [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter +NXmanipulator.nxdl.xml:/sample_bias_voltmeter +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias_voltmeter): +DEBUG - + Sensor measuring the voltage applied to sample and sample holder. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias_voltmeter@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter +NXmanipulator.nxdl.xml:/sample_bias_voltmeter +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias_voltmeter/measurement): +DEBUG - value: b'voltage' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias -NXmanipulator.nxdl.xml:/sample_bias +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/measurement +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/measurement +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/measurement): +DEBUG - -> voltage +DEBUG - enumeration (NXmanipulator.nxdl.xml:/sample_bias_voltmeter/measurement): +DEBUG - -> voltage +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/measurement): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias_voltmeter/measurement): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias_voltmeter/name): +DEBUG - value: b'sample_bias' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/name +NXsensor.nxdl.xml:/name DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias): +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/name): DEBUG - -DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias): +DEBUG - documentation (NXsensor.nxdl.xml:/name): DEBUG - - Possible bias of the sample with trespect to analyser ground. This field may - also be found in NXsample if present. + Name for the sensor -DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias@units) +DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_bias_voltmeter/value): +DEBUG - value: 17.799719004221362 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value): +DEBUG - + In case of a single or averaged bias measurement, this is the scalar voltage measured between + sample and sample holder. It can also be an 1D array of measured voltages (without time stamps). + +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias_voltmeter/value@units) DEBUG - value: V -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NX_FLOAT'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value@units - REQUIRED, but undefined unit category +DEBUG - NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value@units [NX_VOLTAGE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] +DEBUG - ===== GROUP (//entry/instrument/manipulator/temperature_sensor [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor +NXmanipulator.nxdl.xml:/temperature_sensor +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/temperature_sensor): +DEBUG - + Temperature sensor measuring the sample temperature. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/temperature_sensor@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias -NXmanipulator.nxdl.xml:/sample_bias -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias@units [NX_CURRENT] -DEBUG - NXmanipulator.nxdl.xml:/sample_bias@units [NX_CURRENT] -DEBUG - ===== FIELD (//entry/instrument/manipulator/sample_temperature): -DEBUG - value: 23.050763803680983 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NX_FLOAT'] +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor +NXmanipulator.nxdl.xml:/temperature_sensor +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/manipulator/temperature_sensor/measurement): +DEBUG - value: b'temperature' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_temperature -NXmanipulator.nxdl.xml:/sample_temperature +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/measurement +NXmanipulator.nxdl.xml:/temperature_sensor/measurement +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/measurement): +DEBUG - -> temperature +DEBUG - enumeration (NXmanipulator.nxdl.xml:/temperature_sensor/measurement): +DEBUG - -> temperature +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/measurement): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/temperature_sensor/measurement): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/instrument/manipulator/temperature_sensor/name): +DEBUG - value: b'sample_temperature' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/name +NXsensor.nxdl.xml:/name DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_temperature): +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/name): DEBUG - -DEBUG - documentation (NXmanipulator.nxdl.xml:/sample_temperature): +DEBUG - documentation (NXsensor.nxdl.xml:/name): DEBUG - - Temperature at the closest point to the sample. This field may also be found in - NXsample if present. + Name for the sensor -DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_temperature@units) -DEBUG - value: K -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NX_FLOAT'] +DEBUG - ===== FIELD (//entry/instrument/manipulator/temperature_sensor/value): +DEBUG - value: 23.050763803680983 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_temperature -NXmanipulator.nxdl.xml:/sample_temperature -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_temperature@units [NX_TEMPERATURE] -DEBUG - NXmanipulator.nxdl.xml:/sample_temperature@units [NX_TEMPERATURE] +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value +NXmanipulator.nxdl.xml:/temperature_sensor/value +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value): +DEBUG - +DEBUG - documentation (NXmanipulator.nxdl.xml:/temperature_sensor/value): +DEBUG - + In case of a single or averaged temperature measurement, this is the scalar temperature measured + by the sample temperature sensor. It can also be a 1D array of measured temperatures + (without time stamps). + +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/instrument/manipulator/temperature_sensor/value@units) +DEBUG - value: K +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value +NXmanipulator.nxdl.xml:/temperature_sensor/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value@units - REQUIRED, but undefined unit category +DEBUG - NXmanipulator.nxdl.xml:/temperature_sensor/value@units [NX_TEMPERATURE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/instrument/manipulator/transformations [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations'] DEBUG - classes: @@ -2861,23 +3561,42 @@ DEBUG - * ``NX_UNITLESS`` for axes for which no transformation type is specified This class will usually contain all axes of a sample stage or goniometer or - a detector. The NeXus default McSTAS coordinate frame is assumed, but additional - useful coordinate axes may be defined by using axes for which no transformation - type has been specified. + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. - The entry point (``depends_on``) will be outside of this class and point to a - field in here. Following the chain may also require following ``depends_on`` - links to transformations outside, for example to a common base table. If - a relative path is given, it is relative to the group enclosing the ``depends_on`` - specification. + **Transformation chain** + + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` - and that in turn depends on :math:`T_3`, the final transformation :math:`T_f` is + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by - .. math:: T_f = T_3 T_2 T_1 + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} - In explicit terms, the transformations are a subset of affine transformations - expressed as 4x4 matrices that act on homogeneous coordinates, :math:`w=(x,y,z,1)^T`. + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. + + **Transformation matrix** + + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. For rotation and translation, @@ -2891,8 +3610,8 @@ DEBUG - attribute multiplied by the field value, and :math:`R` is defined as a rotation about an axis in the direction of ``vector``, of angle of the field value. - NOTE - + **Usage** + One possible use of ``NXtransformations`` is to define the motors and transformations for a diffractometer (goniometer). Such use is mentioned in the ``NXinstrument`` base class. Use one ``NXtransformations`` group @@ -2900,8 +3619,7 @@ DEBUG - Collecting the motors of a sample table or xyz-stage in an NXtransformations group is equally possible. - - Following the section on the general dscription of axis in NXtransformations is a section which + Following the section on the general description of axis in NXtransformations is a section which documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever there is a need for positioning a beam line component please use the existing names. Use as many fields as needed in order to position the component. Feel free to add more axis if required. In the description @@ -2914,6 +3632,143 @@ DEBUG - * depends_on as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations@NX_class) DEBUG - value: NXtransformations @@ -2951,7 +3806,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_x@transformation_type) DEBUG - value: rotation @@ -3025,7 +3880,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/rot_z@transformation_type) DEBUG - value: rotation @@ -3099,7 +3954,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/instrument/manipulator/transformations/trans_z@transformation_type) DEBUG - value: translation @@ -3145,22 +4000,86 @@ DEBUG - increasing displacement. For general axes, an appropriate direction should be chosen. -DEBUG - ===== FIELD (//entry/instrument/momentum_resolution): -DEBUG - value: 0.08 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/instrument/momentum_resolution [NXmpes::/NXentry/NXinstrument/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] DEBUG - classes: -NXinstrument.nxdl.xml:/momentum_resolution +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: DEBUG - <> -DEBUG - documentation (NXinstrument.nxdl.xml:/momentum_resolution): +DEBUG - documentation (NXinstrument.nxdl.xml:/RESOLUTION): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:): DEBUG - - Momentum resolution of the experiment (FWHM) + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/physical_quantity): +DEBUG - value: b'momentum' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. -DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution@units) +DEBUG - ===== GROUP (//entry/instrument/momentum_resolution/resolution [NXmpes::/NXentry/NXinstrument/NXresolution/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution/resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution/resolution@units) DEBUG - value: 1/angstrom -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/resolution/physical_quantity): +DEBUG - value: b'momentum' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/resolution/resolution): +DEBUG - value: 0.08 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/instrument/momentum_resolution/resolution/resolution@units) +DEBUG - value: 1/angstrom +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/momentum_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] DEBUG - classes: -NXinstrument.nxdl.xml:/momentum_resolution -DEBUG - NXinstrument.nxdl.xml:/momentum_resolution@units [NX_WAVENUMBER] +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + DEBUG - ===== FIELD (//entry/instrument/name): DEBUG - value: b'Time-of-flight momentum microscope equipped delay line detector, at the endstation of the high rep-rate HHG source at FHI' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_CHAR'] @@ -3182,36 +4101,35 @@ DEBUG - documentation (NXinstrument.nxdl.xml:/name/short_name): DEBUG - short name for instrument, perhaps the acronym -DEBUG - ===== GROUP (//entry/instrument/source [NXmpes::/NXentry/NXinstrument/NXsource]): +DEBUG - ===== GROUP (//entry/instrument/source_probe [NXmpes::/NXentry/NXinstrument/NXsource]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE NXinstrument.nxdl.xml:/SOURCE NXsource.nxdl.xml: -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE): -DEBUG - - The source used to generate the primary photons. Properties refer strictly to - parameters of the source, not of the output beam. For example, the energy of the - source is not the optical power of the beam, but the energy of the electron beam - in a synchrotron and so on. - +DEBUG - <> DEBUG - documentation (NXinstrument.nxdl.xml:/SOURCE): DEBUG - DEBUG - documentation (NXsource.nxdl.xml:): DEBUG - - The neutron or x-ray storage ring/facility. + Radiation source emitting a beam. + + Examples include particle sources (electrons, neutrons, protons) or sources for electromagnetic radiation (photons). + This base class can also be used to describe neutron or x-ray storage ring/facilities. -DEBUG - ===== ATTRS (//entry/instrument/source@NX_class) +DEBUG - ===== ATTRS (//entry/instrument/source_probe@NX_class) DEBUG - value: NXsource DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE NXinstrument.nxdl.xml:/SOURCE NXsource.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/instrument/source/frequency): +DEBUG - ===== FIELD (//entry/instrument/source_probe/associated_beam): +DEBUG - value: b'/entry/instrument/beam_probe' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/source_probe/frequency): DEBUG - value: 500.0 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] DEBUG - classes: @@ -3221,13 +4139,13 @@ DEBUG - documentation (NXsource.nxdl.xml:/frequency): DEBUG - Frequency of pulsed source -DEBUG - ===== ATTRS (//entry/instrument/source/frequency@units) +DEBUG - ===== ATTRS (//entry/instrument/source_probe/frequency@units) DEBUG - value: kHz DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] DEBUG - classes: NXsource.nxdl.xml:/frequency DEBUG - NXsource.nxdl.xml:/frequency@units [NX_FREQUENCY] -DEBUG - ===== FIELD (//entry/instrument/source/mode): +DEBUG - ===== FIELD (//entry/instrument/source_probe/mode): DEBUG - value: b'Single Bunch' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] DEBUG - classes: @@ -3240,20 +4158,17 @@ DEBUG - documentation (NXsource.nxdl.xml:/mode): DEBUG - source operating mode -DEBUG - ===== FIELD (//entry/instrument/source/name): +DEBUG - ===== FIELD (//entry/instrument/source_probe/name): DEBUG - value: b'HHG @ TR-ARPES @ FHI' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/name NXsource.nxdl.xml:/name -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/name): -DEBUG - +DEBUG - <> DEBUG - documentation (NXsource.nxdl.xml:/name): DEBUG - Name of source -DEBUG - ===== FIELD (//entry/instrument/source/photon_energy): +DEBUG - ===== FIELD (//entry/instrument/source_probe/photon_energy): DEBUG - value: 21.7 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] DEBUG - classes: @@ -3264,25 +4179,21 @@ DEBUG - The center photon energy of the source, before it is monochromatized or converted -DEBUG - ===== ATTRS (//entry/instrument/source/photon_energy@units) +DEBUG - ===== ATTRS (//entry/instrument/source_probe/photon_energy@units) DEBUG - value: eV DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] DEBUG - classes: NXsource.nxdl.xml:/photon_energy DEBUG - NXsource.nxdl.xml:/photon_energy@units [NX_ENERGY] -DEBUG - ===== FIELD (//entry/instrument/source/probe): -DEBUG - value: b'ultraviolet' +DEBUG - ===== FIELD (//entry/instrument/source_probe/probe): +DEBUG - value: b'photon' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe NXsource.nxdl.xml:/probe -DEBUG - <> -DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe): -DEBUG - -> x-ray -DEBUG - -> ultraviolet -DEBUG - -> visible light +DEBUG - <> DEBUG - enumeration (NXsource.nxdl.xml:/probe): DEBUG - -> neutron +DEBUG - -> photon DEBUG - -> x-ray DEBUG - -> muon DEBUG - -> electron @@ -3290,32 +4201,16 @@ DEBUG - -> ultraviolet DEBUG - -> visible light DEBUG - -> positron DEBUG - -> proton -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe): -DEBUG - - Type of probe. In photoemission it's always photons, so the full NIAC list is - restricted. - DEBUG - documentation (NXsource.nxdl.xml:/probe): DEBUG - type of radiation probe (pick one from the enumerated list and spell exactly) -DEBUG - ===== FIELD (//entry/instrument/source/type): +DEBUG - ===== FIELD (//entry/instrument/source_probe/type): DEBUG - value: b'HHG laser' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/type NXsource.nxdl.xml:/type -DEBUG - <> -DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/type): -DEBUG - -> Synchrotron X-ray Source -DEBUG - -> Rotating Anode X-ray -DEBUG - -> Fixed Tube X-ray -DEBUG - -> UV Laser -DEBUG - -> Free-Electron Laser -DEBUG - -> Optical Laser -DEBUG - -> UV Plasma Source -DEBUG - -> Metal Jet X-ray -DEBUG - -> HHG laser +DEBUG - <> DEBUG - enumeration (NXsource.nxdl.xml:/type): DEBUG - -> Spallation Neutron Source DEBUG - -> Pulsed Reactor Neutron Source @@ -3330,41 +4225,38 @@ DEBUG - -> Optical Laser DEBUG - -> Ion Source DEBUG - -> UV Plasma Source DEBUG - -> Metal Jet X-ray -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/type): -DEBUG - DEBUG - documentation (NXsource.nxdl.xml:/type): DEBUG - type of radiation source (pick one from the enumerated list and spell exactly) -DEBUG - ===== GROUP (//entry/instrument/source_pump [NXmpes::/NXentry/NXinstrument/NXsource]): +DEBUG - ===== GROUP (//entry/instrument/source_pump [NXmpes::/NXentry/NXinstrument/NXsource]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE NXinstrument.nxdl.xml:/SOURCE NXsource.nxdl.xml: -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE): -DEBUG - - The source used to generate the primary photons. Properties refer strictly to - parameters of the source, not of the output beam. For example, the energy of the - source is not the optical power of the beam, but the energy of the electron beam - in a synchrotron and so on. - +DEBUG - <> DEBUG - documentation (NXinstrument.nxdl.xml:/SOURCE): DEBUG - DEBUG - documentation (NXsource.nxdl.xml:): DEBUG - - The neutron or x-ray storage ring/facility. + Radiation source emitting a beam. + + Examples include particle sources (electrons, neutrons, protons) or sources for electromagnetic radiation (photons). + This base class can also be used to describe neutron or x-ray storage ring/facilities. DEBUG - ===== ATTRS (//entry/instrument/source_pump@NX_class) DEBUG - value: NXsource DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE NXinstrument.nxdl.xml:/SOURCE NXsource.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - +DEBUG - ===== FIELD (//entry/instrument/source_pump/associated_beam): +DEBUG - value: b'/entry/instrument/beam_pump' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== FIELD (//entry/instrument/source_pump/frequency): DEBUG - value: 500.0 DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] @@ -3398,11 +4290,8 @@ DEBUG - ===== FIELD (//entry/instrument/source_pump/name): > -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/name): -DEBUG - +DEBUG - <> DEBUG - documentation (NXsource.nxdl.xml:/name): DEBUG - Name of source @@ -3428,15 +4317,11 @@ DEBUG - ===== FIELD (//entry/instrument/source_pump/probe): > -DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe): -DEBUG - -> x-ray -DEBUG - -> ultraviolet -DEBUG - -> visible light +DEBUG - <> DEBUG - enumeration (NXsource.nxdl.xml:/probe): DEBUG - -> neutron +DEBUG - -> photon DEBUG - -> x-ray DEBUG - -> muon DEBUG - -> electron @@ -3444,11 +4329,6 @@ DEBUG - -> ultraviolet DEBUG - -> visible light DEBUG - -> positron DEBUG - -> proton -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe): -DEBUG - - Type of probe. In photoemission it's always photons, so the full NIAC list is - restricted. - DEBUG - documentation (NXsource.nxdl.xml:/probe): DEBUG - type of radiation probe (pick one from the enumerated list and spell exactly) @@ -3457,19 +4337,8 @@ DEBUG - ===== FIELD (//entry/instrument/source_pump/type): > -DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/type): -DEBUG - -> Synchrotron X-ray Source -DEBUG - -> Rotating Anode X-ray -DEBUG - -> Fixed Tube X-ray -DEBUG - -> UV Laser -DEBUG - -> Free-Electron Laser -DEBUG - -> Optical Laser -DEBUG - -> UV Plasma Source -DEBUG - -> Metal Jet X-ray -DEBUG - -> HHG laser +DEBUG - <> DEBUG - enumeration (NXsource.nxdl.xml:/type): DEBUG - -> Spallation Neutron Source DEBUG - -> Pulsed Reactor Neutron Source @@ -3484,35 +4353,79 @@ DEBUG - -> Optical Laser DEBUG - -> Ion Source DEBUG - -> UV Plasma Source DEBUG - -> Metal Jet X-ray -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/type): -DEBUG - DEBUG - documentation (NXsource.nxdl.xml:/type): DEBUG - type of radiation source (pick one from the enumerated list and spell exactly) -DEBUG - ===== FIELD (//entry/instrument/temporal_resolution): +DEBUG - ===== GROUP (//entry/instrument/temporal_resolution [NXmpes::/NXentry/NXinstrument/NXresolution]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXinstrument.nxdl.xml:/RESOLUTION): +DEBUG - +DEBUG - documentation (NXresolution.nxdl.xml:): +DEBUG - + Describes the resolution of a physical quantity. + +DEBUG - ===== ATTRS (//entry/instrument/temporal_resolution@NX_class) +DEBUG - value: NXresolution +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution'] +DEBUG - classes: +NXinstrument.nxdl.xml:/RESOLUTION +NXresolution.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/temporal_resolution/physical_quantity): +DEBUG - value: b'time' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] +DEBUG - classes: +NXresolution.nxdl.xml:/physical_quantity +DEBUG - <> +DEBUG - documentation (NXresolution.nxdl.xml:/physical_quantity): +DEBUG - + The physical quantity of the resolution, e.g., + energy, momentum, time, etc. + +DEBUG - ===== FIELD (//entry/instrument/temporal_resolution/resolution): DEBUG - value: 35.0 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] DEBUG - classes: -NXinstrument.nxdl.xml:/temporal_resolution +NXresolution.nxdl.xml:/resolution DEBUG - <> -DEBUG - documentation (NXinstrument.nxdl.xml:/temporal_resolution): +DEBUG - documentation (NXresolution.nxdl.xml:/resolution): DEBUG - - Temporal resolution of the experiment (FWHM) + The resolution of the physical quantity. -DEBUG - ===== ATTRS (//entry/instrument/temporal_resolution@units) +DEBUG - ===== ATTRS (//entry/instrument/temporal_resolution/resolution@units) DEBUG - value: fs -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXresolution.nxdl.xml:/resolution +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] +DEBUG - ===== FIELD (//entry/instrument/temporal_resolution/type): +DEBUG - value: b'estimated' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXresolution', 'NX_CHAR'] DEBUG - classes: -NXinstrument.nxdl.xml:/temporal_resolution -DEBUG - NXinstrument.nxdl.xml:/temporal_resolution@units [NX_TIME] +NXresolution.nxdl.xml:/type +DEBUG - <> +DEBUG - enumeration (NXresolution.nxdl.xml:/type): +DEBUG - -> estimated +DEBUG - -> derived +DEBUG - -> calibrated +DEBUG - -> other +DEBUG - documentation (NXresolution.nxdl.xml:/type): +DEBUG - + The process by which the resolution was determined. + DEBUG - ===== GROUP (//entry/process [NXmpes::/NXentry/NXprocess]): DEBUG - classpath: ['NXentry', 'NXprocess'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/PROCESS NXentry.nxdl.xml:/PROCESS NXprocess.nxdl.xml: -DEBUG - <> +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/PROCESS): DEBUG - Document an event of data processing, reconstruction, or analysis for this data. @@ -3624,7 +4537,7 @@ DEBUG - .. _symmetry-guided distortion correction: https://www.sciencedirect.com/science/article/abs/pii/S0304399118303474?via%3Dihub -DEBUG - ===== GROUP (//entry/process/energy_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - ===== GROUP (//entry/process/energy_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration @@ -3633,6 +4546,13 @@ NXcalibration.nxdl.xml: DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration): DEBUG - + Calibration event on the energy axis. + + For XPS, the calibration should ideally be performed according to + `ISO 15472:2010`_ specification. + + .. _ISO 15472:2010: https://www.iso.org/standard/74811.html + DEBUG - documentation (NXprocess.nxdl.xml:/CALIBRATION): DEBUG - Describes the operations of calibration procedures, e.g. axis calibrations. @@ -3654,13 +4574,8 @@ DEBUG - ===== FIELD (//entry/process/energy_calibration/applied): > -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration/applied): -DEBUG - - Has an energy calibration been applied? - +DEBUG - <> DEBUG - documentation (NXcalibration.nxdl.xml:/applied): DEBUG - Has the calibration been applied? @@ -3680,6 +4595,18 @@ DEBUG - documentation (NXcalibration.nxdl.xml:/calibrated_axis): DEBUG - A vector representing the axis after calibration, matching the data length +DEBUG - ===== FIELD (//entry/process/energy_calibration/coefficients): +DEBUG - value: [ 6.33783929e-01 8.68180227e-07 -2.41647784e+01] +DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] +DEBUG - classes: +NXcalibration.nxdl.xml:/coefficients +DEBUG - <> +DEBUG - documentation (NXcalibration.nxdl.xml:/coefficients): +DEBUG - + For non-linear energy calibrations, e.g. in a TOF, a polynomial function is fit + to a set of features (peaks) at well defined energy positions to determine + E(TOF). Here we can store the array of fit coefficients. + DEBUG - ===== FIELD (//entry/process/energy_calibration/fit_function): DEBUG - value: b'(a0/(x0-a1))**2 + a2' DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_CHAR'] @@ -3918,23 +4845,42 @@ DEBUG - * ``NX_UNITLESS`` for axes for which no transformation type is specified This class will usually contain all axes of a sample stage or goniometer or - a detector. The NeXus default McSTAS coordinate frame is assumed, but additional - useful coordinate axes may be defined by using axes for which no transformation - type has been specified. + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. + + **Transformation chain** - The entry point (``depends_on``) will be outside of this class and point to a - field in here. Following the chain may also require following ``depends_on`` - links to transformations outside, for example to a common base table. If - a relative path is given, it is relative to the group enclosing the ``depends_on`` - specification. + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` - and that in turn depends on :math:`T_3`, the final transformation :math:`T_f` is + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by + + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. - .. math:: T_f = T_3 T_2 T_1 + **Transformation matrix** - In explicit terms, the transformations are a subset of affine transformations - expressed as 4x4 matrices that act on homogeneous coordinates, :math:`w=(x,y,z,1)^T`. + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. For rotation and translation, @@ -3948,8 +4894,8 @@ DEBUG - attribute multiplied by the field value, and :math:`R` is defined as a rotation about an axis in the direction of ``vector``, of angle of the field value. - NOTE - + **Usage** + One possible use of ``NXtransformations`` is to define the motors and transformations for a diffractometer (goniometer). Such use is mentioned in the ``NXinstrument`` base class. Use one ``NXtransformations`` group @@ -3957,8 +4903,7 @@ DEBUG - Collecting the motors of a sample table or xyz-stage in an NXtransformations group is equally possible. - - Following the section on the general dscription of axis in NXtransformations is a section which + Following the section on the general description of axis in NXtransformations is a section which documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever there is a need for positioning a beam line component please use the existing names. Use as many fields as needed in order to position the component. Feel free to add more axis if required. In the description @@ -3971,6 +4916,143 @@ DEBUG - * depends_on as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + DEBUG - ===== ATTRS (//entry/process/registration/tranformations@NX_class) DEBUG - value: NXtransformations @@ -4008,7 +5090,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/process/registration/tranformations/rot_z@offset) DEBUG - value: [256. 256. 0.] @@ -4095,7 +5177,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_x@transformation_type) DEBUG - value: translation @@ -4169,7 +5251,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/process/registration/tranformations/trans_y@transformation_type) DEBUG - value: translation @@ -4215,7 +5297,7 @@ DEBUG - increasing displacement. For general axes, an appropriate direction should be chosen. -DEBUG - ===== GROUP (//entry/sample [NXmpes::/NXentry/NXsample]): +DEBUG - ===== GROUP (//entry/sample [NXmpes::/NXentry/NXsample]): DEBUG - classpath: ['NXentry', 'NXsample'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE @@ -4243,34 +5325,132 @@ NXentry.nxdl.xml:/SAMPLE NXsample.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/sample/bias): -DEBUG - value: 17.799719004221362 -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/sample/bias [NXmpes::/NXentry/NXsample/NXenvironment]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias -DEBUG - <> +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias): DEBUG - - Voltage applied to sample and sample holder. + Bias of the sample with respect to analyser ground. + + This concept is related to term `8.41`_ of the ISO 18115-1:2023 standard. + + .. _8.41: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:8.41 -DEBUG - ===== ATTRS (//entry/sample/bias@units) -DEBUG - value: V -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_FLOAT'] +DEBUG - documentation (NXsample.nxdl.xml:/ENVIRONMENT): +DEBUG - + Any environmental or external stimuli/measurements. + These can include, among others: + applied pressure, surrounding gas phase and gas pressure, + external electric/magnetic/mechanical fields, temperature, ... + +DEBUG - documentation (NXenvironment.nxdl.xml:): +DEBUG - + Parameters for controlling external conditions + +DEBUG - ===== ATTRS (//entry/sample/bias@NX_class) +DEBUG - value: NXenvironment +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias -DEBUG - NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias@units [NX_VOLTAGE] +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/bias/voltmeter [NXmpes::/NXentry/NXsample/NXenvironment/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias/voltmeter +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias/voltmeter): +DEBUG - + Sensor measuring the applied voltage. + + This should be a link to /entry/instrument/manipulator/sample_bias_voltmeter. + +DEBUG - documentation (NXenvironment.nxdl.xml:/SENSOR): +DEBUG - + Any sensor used to monitor the environment. This can be linked to a sensor + defined in an NXinstrument instance. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/sample/bias/voltmeter@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/bias/voltmeter +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/bias/voltmeter/measurement): +DEBUG - value: b'voltage' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/sample/bias/voltmeter/name): +DEBUG - value: b'sample_bias' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/sample/bias/voltmeter/value): +DEBUG - value: 17.799719004221362 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/sample/bias/voltmeter/value@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== FIELD (//entry/sample/chemical_formula): DEBUG - value: b'MoTe2' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/SAMPLE/chemical_formula NXsample.nxdl.xml:/chemical_formula -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/chemical_formula): -DEBUG - - The chemical formula of the sample. For mixtures use the NXsample_component - group in NXsample instead. - +DEBUG - <> DEBUG - documentation (NXsample.nxdl.xml:/chemical_formula): DEBUG - The chemical formula specified using CIF conventions. @@ -4317,20 +5497,61 @@ DEBUG - documentation (NXsample.nxdl.xml:/description): DEBUG - Description of the sample -DEBUG - ===== FIELD (//entry/sample/gas_pressure): -DEBUG - value: 4.5599999999999996e-11 -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/sample/gas_pressure [NXmpes::/NXentry/NXsample/NXenvironment]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure -DEBUG - <> +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure): DEBUG - -DEBUG - ===== ATTRS (//entry/sample/gas_pressure@units) -DEBUG - value: mbar -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_FLOAT'] + Gas pressure surrounding the sample. + +DEBUG - documentation (NXsample.nxdl.xml:/ENVIRONMENT): +DEBUG - + Any environmental or external stimuli/measurements. + These can include, among others: + applied pressure, surrounding gas phase and gas pressure, + external electric/magnetic/mechanical fields, temperature, ... + +DEBUG - documentation (NXenvironment.nxdl.xml:): +DEBUG - + Parameters for controlling external conditions + +DEBUG - ===== ATTRS (//entry/sample/gas_pressure@NX_class) +DEBUG - value: NXenvironment +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure -DEBUG - NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure@units [NX_PRESSURE] +NXsample.nxdl.xml:/ENVIRONMENT +NXenvironment.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/gas_pressure/pressure_gauge [NXmpes::/NXentry/NXsample/NXenvironment/pressure_gauge]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/measurement): +DEBUG - value: b'pressure' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/name): +DEBUG - value: b'sample_chamber_pressure' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/value): +DEBUG - value: 4.5599999999999996e-11 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== ATTRS (//entry/sample/gas_pressure/pressure_gauge/value@units) +DEBUG - value: mbar +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== FIELD (//entry/sample/name): DEBUG - value: b'MoTe2' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] @@ -4344,103 +5565,74 @@ DEBUG - documentation (NXsample.nxdl.xml:/name): DEBUG - Descriptive name of sample +DEBUG - ===== FIELD (//entry/sample/physical_form): +DEBUG - value: b'thin film' +DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/physical_form +NXsample.nxdl.xml:/physical_form +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/physical_form): +DEBUG - +DEBUG - documentation (NXsample.nxdl.xml:/physical_form): +DEBUG - + Physical form of the sample material. + Examples include single crystal, foil, pellet, powder, thin film, disc, foam, gas, liquid, amorphous. + DEBUG - ===== FIELD (//entry/sample/preparation_date): DEBUG - value: b'2019-05-22T14:00:00+00:00' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_DATE_TIME'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/SAMPLE/preparation_date NXsample.nxdl.xml:/preparation_date -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/preparation_date): -DEBUG - - Date of preparation of the sample for the XPS experiment (i.e. cleaving, last - annealing). - +DEBUG - <> DEBUG - documentation (NXsample.nxdl.xml:/preparation_date): DEBUG - Date of preparation of the sample -DEBUG - ===== GROUP (//entry/sample/preparation_description [NXmpes::/NXentry/NXsample/NXnote]): -DEBUG - classpath: ['NXentry', 'NXsample', 'NXnote'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/SAMPLE/preparation_description -NXnote.nxdl.xml: -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/preparation_description): -DEBUG - - Description of the surface preparation technique for the XPS experiment, i.e. - UHV cleaving, in-situ growth, sputtering/annealing etc. Ideally, a full report - of the previous operations, in any format(NXnote allows to add pictures, audio, - movies). Alternatively, a reference to the location or a unique identifier or - other metadata file. In the case these are not available, free-text description. - -DEBUG - documentation (NXnote.nxdl.xml:): -DEBUG - - Any additional freeform information not covered by the other base classes. - - This class can be used to store additional information in a - NeXus file e.g. pictures, movies, audio, additional text logs - -DEBUG - ===== ATTRS (//entry/sample/preparation_description@NX_class) -DEBUG - value: NXnote -DEBUG - classpath: ['NXentry', 'NXsample', 'NXnote'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/SAMPLE/preparation_description -NXnote.nxdl.xml: -DEBUG - @NX_class [NX_CHAR] -DEBUG - -DEBUG - ===== FIELD (//entry/sample/preparation_description/description): -DEBUG - value: b'Here should be a description of the preparation procedure.' -DEBUG - classpath: ['NXentry', 'NXsample', 'NXnote', 'NX_CHAR'] -DEBUG - classes: -NXnote.nxdl.xml:/description -DEBUG - <> -DEBUG - documentation (NXnote.nxdl.xml:/description): -DEBUG - Title of an image or other details of the note -DEBUG - ===== GROUP (//entry/sample/sample_history [NXmpes::/NXentry/NXsample/NXnote]): -DEBUG - classpath: ['NXentry', 'NXsample', 'NXnote'] +DEBUG - ===== GROUP (//entry/sample/sample_history [NXmpes::/NXentry/NXsample/NXsample_history]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsample_history'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/sample_history -NXnote.nxdl.xml: +NXsample.nxdl.xml:/SAMPLE_HISTORY +NXsample_history.nxdl.xml: DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/sample_history): DEBUG - - A descriptor to keep track of the treatment of the sample before entering the - photoemission experiment. Ideally, a full report of the previous operations, in - any format (NXnote allows to add pictures, audio, movies). Alternatively, a - reference to the location or a unique identifier or other metadata file. In the - case these are not available, free-text description. + A set of activities that occurred to the sample prior to/during photoemission + experiment. -DEBUG - documentation (NXnote.nxdl.xml:): +DEBUG - documentation (NXsample.nxdl.xml:/SAMPLE_HISTORY): DEBUG - - Any additional freeform information not covered by the other base classes. - - This class can be used to store additional information in a - NeXus file e.g. pictures, movies, audio, additional text logs - + A set of physical processes that occurred to the sample prior/during experiment. + +DEBUG - documentation (NXsample_history.nxdl.xml:): +DEBUG - + A set of activities that occurred to the sample prior/during experiment. + + Ideally, a full report of the previous operations (or links to a chain of operations). + Alternatively, notes allow for additional descriptors in any format. + DEBUG - ===== ATTRS (//entry/sample/sample_history@NX_class) -DEBUG - value: NXnote -DEBUG - classpath: ['NXentry', 'NXsample', 'NXnote'] +DEBUG - value: NXsample_history +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsample_history'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/sample_history -NXnote.nxdl.xml: +NXsample.nxdl.xml:/SAMPLE_HISTORY +NXsample_history.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/sample/sample_history/description): +DEBUG - ===== FIELD (//entry/sample/sample_history/notes): DEBUG - value: b'Cleaved' -DEBUG - classpath: ['NXentry', 'NXsample', 'NXnote', 'NX_CHAR'] -DEBUG - classes: -NXnote.nxdl.xml:/description -DEBUG - <> -DEBUG - documentation (NXnote.nxdl.xml:/description): -DEBUG - Title of an image or other details of the note +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsample_history'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== FIELD (//entry/sample/situation): DEBUG - value: b'vacuum' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/situation NXsample.nxdl.xml:/situation -DEBUG - <> +DEBUG - <> DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/SAMPLE/situation): DEBUG - -> vacuum DEBUG - -> inert atmosphere @@ -4462,32 +5654,121 @@ DEBUG - its details will be stored; the relevant components will be indicated by the entry in the sample_component member. -DEBUG - ===== FIELD (//entry/sample/temperature): -DEBUG - value: 23.050763803680983 -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_FLOAT'] +DEBUG - ===== GROUP (//entry/sample/substance [NXmpes::/NXentry/NXsample/substance]): +DEBUG - classpath: ['NXentry', 'NXsample'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== FIELD (//entry/sample/substance/molecular_formula_hill): +DEBUG - value: b'MoTe2' +DEBUG - classpath: ['NXentry', 'NXsample'] +DEBUG - NOT IN SCHEMA +DEBUG - +DEBUG - ===== GROUP (//entry/sample/temperature [NXmpes::/NXentry/NXsample/NXenvironment]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature -NXsample.nxdl.xml:/temperature -DEBUG - <> +NXenvironment.nxdl.xml: +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature): DEBUG - - In the case of a fixed temperature measurement this is the scalar temperature of - the sample. In the case of an experiment in which the temperature is changed and - recoded, this is an array of length m of temperatures. This should be a link to - /entry/instrument/manipulator/sample_temperature. + Sample temperature (either controlled or just measured). -DEBUG - documentation (NXsample.nxdl.xml:/temperature): +DEBUG - documentation (NXenvironment.nxdl.xml:): +DEBUG - + Parameters for controlling external conditions + +DEBUG - ===== ATTRS (//entry/sample/temperature@NX_class) +DEBUG - value: NXenvironment +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature +NXenvironment.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== GROUP (//entry/sample/temperature/temperature_sensor [NXmpes::/NXentry/NXsample/NXenvironment/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature/temperature_sensor +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature/temperature_sensor): +DEBUG - + Temperature sensor measuring the sample temperature. + This should be a link to /entry/instrument/manipulator/temperature_sensor. + +DEBUG - documentation (NXenvironment.nxdl.xml:/SENSOR): +DEBUG - + Any sensor used to monitor the environment. This can be linked to a sensor + defined in an NXinstrument instance. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/sample/temperature/temperature_sensor@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature/temperature_sensor +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/sample/temperature/temperature_sensor/measurement): +DEBUG - value: b'temperature' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/sample/temperature/temperature_sensor/name): +DEBUG - value: b'sample_temperature' +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/sample/temperature/temperature_sensor/value): +DEBUG - value: 23.050763803680983 +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/value): DEBUG - - Sample temperature. This could be a scanned variable + nominal setpoint or average value + - need [n] as may be a vector -DEBUG - ===== ATTRS (//entry/sample/temperature@units) +DEBUG - ===== ATTRS (//entry/sample/temperature/temperature_sensor/value@units) DEBUG - value: K -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_FLOAT'] +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature -NXsample.nxdl.xml:/temperature -DEBUG - NXmpes.nxdl.xml:/ENTRY/SAMPLE/temperature@units [NX_TEMPERATURE] -DEBUG - NXsample.nxdl.xml:/temperature@units [NX_TEMPERATURE] +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/sample/transformations [NXmpes::/NXentry/NXsample/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations'] DEBUG - classes: @@ -4524,23 +5805,42 @@ DEBUG - * ``NX_UNITLESS`` for axes for which no transformation type is specified This class will usually contain all axes of a sample stage or goniometer or - a detector. The NeXus default McSTAS coordinate frame is assumed, but additional - useful coordinate axes may be defined by using axes for which no transformation - type has been specified. + a detector. The NeXus default :ref:`McSTAS coordinate frame` + is assumed, but additional useful coordinate axes may be defined by using axes for which + no transformation type has been specified. + + **Transformation chain** - The entry point (``depends_on``) will be outside of this class and point to a - field in here. Following the chain may also require following ``depends_on`` - links to transformations outside, for example to a common base table. If - a relative path is given, it is relative to the group enclosing the ``depends_on`` - specification. + The entry point of a chain of transformations is a field called ``depends_on`` + will be outside of this class and points to a field in here. Following the chain may + also require following ``depends_on`` links to transformations outside, for example + to a common base table. If a relative path is given, it is relative to the group + enclosing the ``depends_on`` specification. For a chain of three transformations, where :math:`T_1` depends on :math:`T_2` - and that in turn depends on :math:`T_3`, the final transformation :math:`T_f` is + which in turn depends on :math:`T_3`, the final *active* transformation + matrix :math:`T_f` is + + .. math:: T_f = T_3 . T_2 . T_1 + + For example when positioning a flat detector, its pixel positions in the laboratory + reference frame (:ref:`McSTAS coordinate frame` by default) + can be calculated by + + .. math:: X_\text{lab} = T_f . X_\text{pixel} = T_3 . T_2 . T_1 . X_\text{pixel} + + Note that :math:`T_1` comes first in the *depends-on* chain and is also applied first + to the pixel coordinates. + + When we say transformation :math:`A` *depends on* transformation :math:`B` we mean that + the physical motor that realizes :math:`A` is *stacked on top of* the motor that realizes :math:`B`. + So the activate coordinate transformation :math:`A` needs to be applied to a coordinate + before applying :math:`B`. In other words :math:`X' = B . A . X`. - .. math:: T_f = T_3 T_2 T_1 + **Transformation matrix** - In explicit terms, the transformations are a subset of affine transformations - expressed as 4x4 matrices that act on homogeneous coordinates, :math:`w=(x,y,z,1)^T`. + In explicit terms, the transformations are a subset of affine transformations expressed as + 4x4 active transformation matrices that act on homogeneous coordinates, :math:`X=[x,y,z,1]^T`. For rotation and translation, @@ -4554,8 +5854,8 @@ DEBUG - attribute multiplied by the field value, and :math:`R` is defined as a rotation about an axis in the direction of ``vector``, of angle of the field value. - NOTE - + **Usage** + One possible use of ``NXtransformations`` is to define the motors and transformations for a diffractometer (goniometer). Such use is mentioned in the ``NXinstrument`` base class. Use one ``NXtransformations`` group @@ -4563,8 +5863,7 @@ DEBUG - Collecting the motors of a sample table or xyz-stage in an NXtransformations group is equally possible. - - Following the section on the general dscription of axis in NXtransformations is a section which + Following the section on the general description of axis in NXtransformations is a section which documents the fields commonly used within NeXus for positioning purposes and their meaning. Whenever there is a need for positioning a beam line component please use the existing names. Use as many fields as needed in order to position the component. Feel free to add more axis if required. In the description @@ -4577,6 +5876,143 @@ DEBUG - * depends_on as needed. + + **Example 1: goniometer** + + Position a sample mounted on a goniometer in the :ref:`McSTAS coordinate frame`. + + The sample is oriented as follows + + .. math:: X_\text{lab} = R(\vec{v}_\omega, \omega) . + T(\vec{v}_z, \text{sam}_z) . + T(\vec{v}_y, \text{sam}_y) . + T(\vec{v}_x, \text{sam}_x) . + R(\vec{v}_\chi, \chi) . + R(\vec{v}_\varphi, \varphi) . X_s + + where + + * :math:`R(\vec{v},a)` is a rotation around vector :math:`\vec{v}` with angle :math:`a` + * :math:`T(\vec{u},t)` is a translation along vector :math:`\vec{u}` over a distance :math:`t` + * :math:`X_s` a coordinate in the sample reference frame. + + .. code-block:: + + entry:NXentry + sample:NXsample + depends_on=transformations/phi + transformations:NXtransformations + phi=0 + @depends_on=chi + @transformation_type=rotation + @vector=[-1 -0.0037 -0.002] + @units=degrees + chi=0 + @depends_on=sam_x + @transformation_type=rotation + @vector=[0.0046 0.0372 0.9993] + @units=degrees + sam_x=0 + @depends_on=sam_y + @transformation_type=translation + @vector=[1 0 0] + @units=mm + sam_y=0 + @depends_on=sam_z + @transformation_type=translation + @vector=[0 1 0] + @units=mm + sam_z=0 + @depends_on=omega + @transformation_type=translation + @vector=[0 0 1] + @units=mm + omega=174 + @depends_on=. + @transformation_type=rotation + @vector=[-1 0 0] + @units=degrees + + **Example 2: different coordinate system** + + Define a laboratory reference frame with the X-axis along the beam and the Z-axis opposite to the direction of gravity. + Three point detectors are positioned in this reference: + + * *transmission*: + * point detector in the beam + * 20 cm downstream from the sample (the origin of the reference frame) + * *vertical*: + * point detector 10 cm downstream from the sample + * making an angle of 5 degrees with the beam w.r.t. the sample + * positioned in the XZ-plane above the XY-plane + * *horizontal*: + * point detector 11 cm downstream from the sample + * making an angle of 6 degrees with the beam w.r.t. the sample + * positioned in the XY-plane above the XZ-plane + + The coordinates of the point detectors in the laboratory reference frame are + + * *transmission*: :math:`X_\text{lab} = T_x(20) . X_d` + * *vertical*: :math:`X_\text{lab} = R_y(-5) . T_x(10) . X_d` + * *horizontal*: :math:`X_\text{lab} = R_x(-90) . R_y(-6) . T_x(11) . X_d` + + where + + * :math:`T_x`, :math:`T_y`, :math:`T_z`: active transformation matrices for translation along the X, Y and Z axes + * :math:`R_x`, :math:`R_y`, :math:`R_z`: active transformation matrices for rotation around the X, Y and Z axes + * :math:`X_d` is a coordinate in the detector reference frame. + + Note that as these are point detectors, we only have one coordinate :math:`X_d=[0,0,0,1]^T`. + + .. code-block:: + + entry:NXentry + instrument:NXinstrument + vertical:NXdetector + depends_on=position/distance + position:NXtransformations + distance=10 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=5 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=0 # stay in the vertical plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + horizontal:NXdetector + depends_on=position/distance + position:NXtransformations + distance=11 # move downstream from the sample + @depends_on=polar + @units=cm + @vector=[1 0 0] + polar=6 # title above the horizontal plane + @depends_on=azimuth + @units=degrees + @vector=[0 -1 0] + azimuth=90 # rotate to the horizontal plane + @depends_on=/entry/coordinate_system/beam + @units=degrees + @vector=[-1 0 0] + transmission:NXdetector + depends_on=position/distance + position:NXtransformations + distance=20 # move downstream from the sample + @depends_on=/entry/coordinate_system/beam + @units=cm + @vector=[1 0 0] + coordinate_system:NXtransformations + beam=NaN # value is never used + @depends_on=gravity + @vector=[1 0 0] # X-axis points in the beam direction + gravity=NaN # value is never used + @depends_on=. # end of the chain + @vector=[0 0 -1] # Z-axis points up + DEBUG - ===== ATTRS (//entry/sample/transformations@NX_class) DEBUG - value: NXtransformations @@ -4614,7 +6050,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/corrected_phi@transformation_type) DEBUG - value: rotation @@ -4688,7 +6124,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/rot_omg@transformation_type) DEBUG - value: rotation @@ -4762,7 +6198,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/rot_phi@transformation_type) DEBUG - value: rotation @@ -4836,7 +6272,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/rot_tht@transformation_type) DEBUG - value: rotation @@ -4910,7 +6346,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/trans_x@transformation_type) DEBUG - value: translation @@ -4984,7 +6420,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/trans_y@transformation_type) DEBUG - value: translation @@ -5058,7 +6494,7 @@ DEBUG - <> DEBUG - documentation (NXtransformations.nxdl.xml:/AXISNAME/depends_on): DEBUG - Points to the path to a field defining the axis on which this - depends or the string ".". + depends or the string "." when at the end of the chain. DEBUG - ===== ATTRS (//entry/sample/transformations/trans_z@transformation_type) DEBUG - value: translation @@ -5114,6 +6550,8 @@ DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/start_time): DEBUG - Datetime of the start of the measurement. + Should be a ISO8601 date/time stamp. It is recommended to add an explicit time zone, + otherwise the local time zone is assumed per ISO8601. DEBUG - documentation (NXentry.nxdl.xml:/start_time): DEBUG - @@ -5138,7 +6576,7 @@ DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/USER NXentry.nxdl.xml:/USER NXuser.nxdl.xml: -DEBUG - <> +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER): DEBUG - Contact information of at least the user of the instrument or the investigator @@ -5168,14 +6606,8 @@ DEBUG - ===== FIELD (//entry/user/address): > -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER/address): -DEBUG - - Full address (street, street number, ZIP, city, country) of the user's - affiliation. - +DEBUG - <> DEBUG - documentation (NXuser.nxdl.xml:/address): DEBUG - Address of user DEBUG - ===== FIELD (//entry/user/affiliation): @@ -5184,10 +6616,10 @@ DEBUG - classpath: ['NXentry', 'NXuser', 'NX_CHAR'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/USER/affiliation NXuser.nxdl.xml:/affiliation -DEBUG - <> +DEBUG - <> DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER/affiliation): DEBUG - - Name of the affiliation of the user at the point in time when the experiment was + Name of the affiliation of the user at the time when the experiment was performed. DEBUG - documentation (NXuser.nxdl.xml:/affiliation): @@ -5196,13 +6628,8 @@ DEBUG - ===== FIELD (//entry/user/email): > -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/USER/email): -DEBUG - - Email address of the user. - +DEBUG - <> DEBUG - documentation (NXuser.nxdl.xml:/email): DEBUG - Email of user DEBUG - ===== FIELD (//entry/user/name): From adb6926d851c6de789ba38e6608af7cee6aa8094 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 14:38:57 +0100 Subject: [PATCH 33/88] Updates reference nexus log --- tests/data/nexus/Ref_nexus_test.log | 432 ++++++++++++++-------------- tests/nexus/test_nexus.py | 10 +- 2 files changed, 216 insertions(+), 226 deletions(-) diff --git a/tests/data/nexus/Ref_nexus_test.log b/tests/data/nexus/Ref_nexus_test.log index ec7214cc4..d5da77390 100644 --- a/tests/data/nexus/Ref_nexus_test.log +++ b/tests/data/nexus/Ref_nexus_test.log @@ -80,116 +80,116 @@ DEBUG - DEBUG - documentation (NXdata.nxdl.xml:): DEBUG - - :ref:`NXdata` describes the plottable data and related dimension scales. - - .. index:: plotting - - It is strongly recommended that there is at least one :ref:`NXdata` - group in each :ref:`NXentry` group. - Note that the fields named ``AXISNAME`` and ``DATA`` - can be defined with different names. - (Upper case is used to indicate that the actual name is left to the user.) - The ``signal`` and ``axes`` attributes of the - ``data`` group define which items - are plottable data and which are *dimension scales*, respectively. - - :ref:`NXdata` is used to implement one of the basic motivations in NeXus, - to provide a default plot for the data of this :ref:`NXentry`. The actual data - might be stored in another group and (hard) linked to the :ref:`NXdata` group. - - * Each :ref:`NXdata` group will define one field as the default - plottable data. The value of the ``signal`` attribute names this field. - Additional fields may be used to describe the dimension scales and - uncertainities. - The ``auxiliary_signals`` attribute is a list of the other fields - to be plotted with the ``signal`` data. - * The plottable data may be of arbitrary rank up to a maximum - of ``NX_MAXRANK=32`` (for compatibility with backend file formats). - * The plottable data will be named as the value of - the group ``signal`` attribute, such as:: - - data:NXdata - @signal = "counts" - @axes = "mr" - @mr_indices = 0 - counts: float[100] --> the default dependent data - mr: float[100] --> the default independent data - - The field named in the ``signal`` attribute **must** exist, either - directly as a NeXus field or defined through a link. - - * The group ``axes`` attribute will name the - *dimension scale* associated with the plottable data. - - If available, the standard deviations of the data are to be - stored in a data set of the same rank and dimensions, with the name ``errors``. - - * For each data dimension, there should be a one-dimensional array - of the same length. - * These one-dimensional arrays are the *dimension scales* of the - data, *i.e*. the values of the independent variables at which the data - is measured, such as scattering angle or energy transfer. - - .. index:: link - .. index:: axes (attribute) - - The preferred method to associate each data dimension with - its respective dimension scale is to specify the field name - of each dimension scale in the group ``axes`` attribute as a string list. - Here is an example for a 2-D data set *data* plotted - against *time*, and *pressure*. (An additional *temperature* data set - is provided and could be selected as an alternate for the *pressure* axis.):: - - data_2d:NXdata - @signal="data" - @axes=["time", "pressure"] - @pressure_indices=1 - @temperature_indices=1 - @time_indices=0 - data: float[1000,20] - pressure: float[20] - temperature: float[20] - time: float[1000] - - .. rubric:: Old methods to identify the plottable data - - There are two older methods of associating - each data dimension to its respective dimension scale. - Both are now out of date and - should not be used when writing new data files. - However, client software should expect to see data files - written with any of these methods. - - * One method uses the ``axes`` - attribute to specify the names of each *dimension scale*. - - * The oldest method uses the ``axis`` attribute on each - *dimension scale* to identify - with an integer the axis whose value is the number of the dimension. - - .. index: !plot; axis label - plot, axis units - units - dimension scale - - Each axis of the plot may be labeled with information from the - dimension scale for that axis. The optional ``@long_name`` attribute - is provided as the axis label default. If ``@long_name`` is not - defined, then use the name of the dimension scale. A ``@units`` attribute, - if available, may be added to the axis label for further description. - See the section :ref:`Design-Units` for more information. - - .. index: !plot; axis title - - The optional ``title`` field, if available, provides a suggested - title for the plot. If no ``title`` field is found in the :ref:`NXdata` - group, look for a ``title`` field in the parent :ref:`NXentry` group, - with a fallback to displaying the path to the :ref:`NXdata` group. - - NeXus is about how to find and annotate the data to be plotted - but not to describe how the data is to be plotted. - (https://www.nexusformat.org/NIAC2018Minutes.html#nxdata-plottype--attribute) - + :ref:`NXdata` describes the plottable data and related dimension scales. + + .. index:: plotting + + It is strongly recommended that there is at least one :ref:`NXdata` + group in each :ref:`NXentry` group. + Note that the fields named ``AXISNAME`` and ``DATA`` + can be defined with different names. + (Upper case is used to indicate that the actual name is left to the user.) + The ``signal`` and ``axes`` attributes of the + ``data`` group define which items + are plottable data and which are *dimension scales*, respectively. + + :ref:`NXdata` is used to implement one of the basic motivations in NeXus, + to provide a default plot for the data of this :ref:`NXentry`. The actual data + might be stored in another group and (hard) linked to the :ref:`NXdata` group. + + * Each :ref:`NXdata` group will define one field as the default + plottable data. The value of the ``signal`` attribute names this field. + Additional fields may be used to describe the dimension scales and + uncertainities. + The ``auxiliary_signals`` attribute is a list of the other fields + to be plotted with the ``signal`` data. + * The plottable data may be of arbitrary rank up to a maximum + of ``NX_MAXRANK=32`` (for compatibility with backend file formats). + * The plottable data will be named as the value of + the group ``signal`` attribute, such as:: + + data:NXdata + @signal = "counts" + @axes = "mr" + @mr_indices = 0 + counts: float[100] --> the default dependent data + mr: float[100] --> the default independent data + + The field named in the ``signal`` attribute **must** exist, either + directly as a NeXus field or defined through a link. + + * The group ``axes`` attribute will name the + *dimension scale* associated with the plottable data. + + If available, the standard deviations of the data are to be + stored in a data set of the same rank and dimensions, with the name ``errors``. + + * For each data dimension, there should be a one-dimensional array + of the same length. + * These one-dimensional arrays are the *dimension scales* of the + data, *i.e*. the values of the independent variables at which the data + is measured, such as scattering angle or energy transfer. + + .. index:: link + .. index:: axes (attribute) + + The preferred method to associate each data dimension with + its respective dimension scale is to specify the field name + of each dimension scale in the group ``axes`` attribute as a string list. + Here is an example for a 2-D data set *data* plotted + against *time*, and *pressure*. (An additional *temperature* data set + is provided and could be selected as an alternate for the *pressure* axis.):: + + data_2d:NXdata + @signal="data" + @axes=["time", "pressure"] + @pressure_indices=1 + @temperature_indices=1 + @time_indices=0 + data: float[1000,20] + pressure: float[20] + temperature: float[20] + time: float[1000] + + .. rubric:: Old methods to identify the plottable data + + There are two older methods of associating + each data dimension to its respective dimension scale. + Both are now out of date and + should not be used when writing new data files. + However, client software should expect to see data files + written with any of these methods. + + * One method uses the ``axes`` + attribute to specify the names of each *dimension scale*. + + * The oldest method uses the ``axis`` attribute on each + *dimension scale* to identify + with an integer the axis whose value is the number of the dimension. + + .. index: !plot; axis label + plot, axis units + units + dimension scale + + Each axis of the plot may be labeled with information from the + dimension scale for that axis. The optional ``@long_name`` attribute + is provided as the axis label default. If ``@long_name`` is not + defined, then use the name of the dimension scale. A ``@units`` attribute, + if available, may be added to the axis label for further description. + See the section :ref:`Design-Units` for more information. + + .. index: !plot; axis title + + The optional ``title`` field, if available, provides a suggested + title for the plot. If no ``title`` field is found in the :ref:`NXdata` + group, look for a ``title`` field in the parent :ref:`NXentry` group, + with a fallback to displaying the path to the :ref:`NXdata` group. + + NeXus is about how to find and annotate the data to be plotted + but not to describe how the data is to be plotted. + (https://www.nexusformat.org/NIAC2018Minutes.html#nxdata-plottype--attribute) + DEBUG - ===== ATTRS (//entry/data@NX_class) DEBUG - value: NXdata DEBUG - classpath: ['NXentry', 'NXdata'] @@ -210,39 +210,39 @@ DEBUG - NXdata.nxdl.xml:@axes - [NX_CHAR] DEBUG - <> DEBUG - documentation (NXdata.nxdl.xml:/axes): DEBUG - - .. index:: plotting - - Array of strings holding the :ref:`names ` of - the independent data fields used in the default plot for all of - the dimensions of the :ref:`signal ` - as well as any :ref:`auxiliary signals `. - - One name is provided for every dimension in the *signal* or *auxiliary signal* fields. - - The *axes* values are the names of fields or links that *must* exist and be direct - children of this NXdata group. - - An axis slice is specified using a field named ``AXISNAME_indices`` - as described below (where the text shown here as ``AXISNAME`` is to be - replaced by the actual field name). - - When no default axis is available for a particular dimension - of the plottable data, use a "." in that position. - Such as:: - - @axes=["time", ".", "."] - - Since there are three items in the list, the *signal* field - must be a three-dimensional array (rank=3). The first dimension - is described by the values of a one-dimensional array named ``time`` - while the other two dimensions have no fields to be used as dimension scales. - - See examples provided on the NeXus wiki: - https://www.nexusformat.org/2014_axes_and_uncertainties.html - - If there are no axes at all (such as with a stack of images), - the axes attribute can be omitted. - + .. index:: plotting + + Array of strings holding the :ref:`names ` of + the independent data fields used in the default plot for all of + the dimensions of the :ref:`signal ` + as well as any :ref:`auxiliary signals `. + + One name is provided for every dimension in the *signal* or *auxiliary signal* fields. + + The *axes* values are the names of fields or links that *must* exist and be direct + children of this NXdata group. + + An axis slice is specified using a field named ``AXISNAME_indices`` + as described below (where the text shown here as ``AXISNAME`` is to be + replaced by the actual field name). + + When no default axis is available for a particular dimension + of the plottable data, use a "." in that position. + Such as:: + + @axes=["time", ".", "."] + + Since there are three items in the list, the *signal* field + must be a three-dimensional array (rank=3). The first dimension + is described by the values of a one-dimensional array named ``time`` + while the other two dimensions have no fields to be used as dimension scales. + + See examples provided on the NeXus wiki: + https://www.nexusformat.org/2014_axes_and_uncertainties.html + + If there are no axes at all (such as with a stack of images), + the axes attribute can be omitted. + DEBUG - ===== ATTRS (//entry/data@signal) DEBUG - value: data DEBUG - classpath: ['NXentry', 'NXdata'] @@ -254,19 +254,19 @@ DEBUG - NXdata.nxdl.xml:@signal - [NX_CHAR] DEBUG - <> DEBUG - documentation (NXdata.nxdl.xml:/signal): DEBUG - - .. index:: find the default plottable data - .. index:: plotting - .. index:: signal attribute value - - Declares which NeXus field is the default. - The value is the :ref:`name ` of the data field to be plotted. - This field or link *must* exist and be a direct child of this NXdata group. - - It is recommended (as of NIAC2014) to use this attribute - rather than adding a signal attribute to the field. - See https://www.nexusformat.org/2014_How_to_find_default_data.html - for a summary of the discussion. - + .. index:: find the default plottable data + .. index:: plotting + .. index:: signal attribute value + + Declares which NeXus field is the default. + The value is the :ref:`name ` of the data field to be plotted. + This field or link *must* exist and be a direct child of this NXdata group. + + It is recommended (as of NIAC2014) to use this attribute + rather than adding a signal attribute to the field. + See https://www.nexusformat.org/2014_How_to_find_default_data.html + for a summary of the discussion. + DEBUG - ===== FIELD (//entry/data/angles): DEBUG - value: [-1.96735314 -1.91500657 -1.86266001 -1.81031344 -1.75796688 -1.70562031 ... DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -276,12 +276,12 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #0 DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/angles@target) DEBUG - value: /entry/instrument/analyser/angles DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -296,7 +296,7 @@ DEBUG - classes: NXdata.nxdl.xml:/AXISNAME DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category DEBUG - ===== FIELD (//entry/data/data): -DEBUG - value: [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... +DEBUG - value: [[0. 0. 0. ... 0. 0. 0.] ... DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] DEBUG - classes: NXdata.nxdl.xml:/DATA @@ -304,15 +304,15 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata SIGNAL DEBUG - documentation (NXdata.nxdl.xml:/DATA): DEBUG - - .. index:: plotting - - This field contains the data values to be used as the - NeXus *plottable data*. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + .. index:: plotting + + This field contains the data values to be used as the + NeXus *plottable data*. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/data@target) DEBUG - value: /entry/instrument/analyser/data DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -335,12 +335,12 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #2 DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/delays@target) DEBUG - value: /entry/instrument/analyser/delays DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -363,12 +363,12 @@ DEBUG - <> DEBUG - Dataset referenced as NXdata AXIS #1 DEBUG - documentation (NXdata.nxdl.xml:/AXISNAME): DEBUG - - Dimension scale defining an axis of the data. - Client is responsible for defining the dimensions of the data. - The name of this field may be changed to fit the circumstances. - Standard NeXus client tools will use the attributes to determine - how to use this field. - + Dimension scale defining an axis of the data. + Client is responsible for defining the dimensions of the data. + The name of this field may be changed to fit the circumstances. + Standard NeXus client tools will use the attributes to determine + how to use this field. + DEBUG - ===== ATTRS (//entry/data/energies@target) DEBUG - value: /entry/instrument/analyser/energies DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] @@ -577,7 +577,7 @@ DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXdetector'] DEBUG - NOT IN SCHEMA DEBUG - DEBUG - ===== FIELD (//entry/instrument/analyser/data): -DEBUG - value: [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... +DEBUG - value: [[0. 0. 0. ... 0. 0. 0.] ... DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXdetector', 'NX_NUMBER'] DEBUG - classes: NXarpes.nxdl.xml:/ENTRY/INSTRUMENT/analyser/data @@ -1116,20 +1116,14 @@ DEBUG - NOT IN SCHEMA DEBUG - DEBUG - ===== FIELD (//entry/instrument/energy_resolution): DEBUG - value: 100 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] -DEBUG - classes: -NXinstrument.nxdl.xml:/energy_resolution -DEBUG - <> -DEBUG - documentation (NXinstrument.nxdl.xml:/energy_resolution): +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - NOT IN SCHEMA DEBUG - - Energy resolution of the experiment (FWHM or gaussian broadening) - DEBUG - ===== ATTRS (//entry/instrument/energy_resolution@units) DEBUG - value: meV -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] -DEBUG - classes: -NXinstrument.nxdl.xml:/energy_resolution -DEBUG - NXinstrument.nxdl.xml:/energy_resolution@units [NX_ENERGY] +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== GROUP (//entry/instrument/manipulator [NXarpes::/NXentry/NXinstrument/NXpositioner]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXpositioner'] DEBUG - classes: @@ -1351,7 +1345,10 @@ DEBUG - documentation (NXinstrument.nxdl.xml:/SOURCE): DEBUG - DEBUG - documentation (NXsource.nxdl.xml:): DEBUG - - The neutron or x-ray storage ring/facility. + Radiation source emitting a beam. + + Examples include particle sources (electrons, neutrons, protons) or sources for electromagnetic radiation (photons). + This base class can also be used to describe neutron or x-ray storage ring/facilities. DEBUG - ===== ATTRS (//entry/instrument/source@NX_class) DEBUG - value: NXsource @@ -1526,6 +1523,7 @@ DEBUG - enumeration (NXarpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe): DEBUG - -> x-ray DEBUG - enumeration (NXsource.nxdl.xml:/probe): DEBUG - -> neutron +DEBUG - -> photon DEBUG - -> x-ray DEBUG - -> muon DEBUG - -> electron @@ -1589,7 +1587,10 @@ DEBUG - documentation (NXinstrument.nxdl.xml:/SOURCE): DEBUG - DEBUG - documentation (NXsource.nxdl.xml:): DEBUG - - The neutron or x-ray storage ring/facility. + Radiation source emitting a beam. + + Examples include particle sources (electrons, neutrons, protons) or sources for electromagnetic radiation (photons). + This base class can also be used to describe neutron or x-ray storage ring/facilities. DEBUG - ===== ATTRS (//entry/instrument/source_pump@NX_class) DEBUG - value: NXsource @@ -1720,6 +1721,7 @@ DEBUG - enumeration (NXarpes.nxdl.xml:/ENTRY/INSTRUMENT/SOURCE/probe): DEBUG - -> x-ray DEBUG - enumeration (NXsource.nxdl.xml:/probe): DEBUG - -> neutron +DEBUG - -> photon DEBUG - -> x-ray DEBUG - -> muon DEBUG - -> electron @@ -1772,36 +1774,24 @@ DEBUG - DEBUG - ===== FIELD (//entry/instrument/spatial_resolution): DEBUG - value: 500 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] -DEBUG - classes: -NXinstrument.nxdl.xml:/spatial_resolution -DEBUG - <> -DEBUG - documentation (NXinstrument.nxdl.xml:/spatial_resolution): +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - NOT IN SCHEMA DEBUG - - Spatial resolution of the experiment (Airy disk radius) - DEBUG - ===== ATTRS (//entry/instrument/spatial_resolution@units) DEBUG - value: um -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] -DEBUG - classes: -NXinstrument.nxdl.xml:/spatial_resolution -DEBUG - NXinstrument.nxdl.xml:/spatial_resolution@units [NX_LENGTH] +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== FIELD (//entry/instrument/temporal_resolution): DEBUG - value: 100 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] -DEBUG - classes: -NXinstrument.nxdl.xml:/temporal_resolution -DEBUG - <> -DEBUG - documentation (NXinstrument.nxdl.xml:/temporal_resolution): +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - NOT IN SCHEMA DEBUG - - Temporal resolution of the experiment (FWHM) - DEBUG - ===== ATTRS (//entry/instrument/temporal_resolution@units) DEBUG - value: fs -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NX_FLOAT'] -DEBUG - classes: -NXinstrument.nxdl.xml:/temporal_resolution -DEBUG - NXinstrument.nxdl.xml:/temporal_resolution@units [NX_TIME] +DEBUG - classpath: ['NXentry', 'NXinstrument'] +DEBUG - NOT IN SCHEMA +DEBUG - DEBUG - ===== FIELD (//entry/run_cycle): DEBUG - value: b'2018 User Run Block 2' DEBUG - classpath: ['NXentry', 'NX_CHAR'] @@ -2009,7 +1999,7 @@ DEBUG - value: data DEBUG - DEBUG - Signal has been identified: /entry/data/data DEBUG - ===== FIELD (//entry/data/data): -DEBUG - value: [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... +DEBUG - value: [[0. 0. 0. ... 0. 0. 0.] ... DEBUG - Dataset referenced as NXdata SIGNAL DEBUG - ===== ATTRS (//entry/data/data@target) DEBUG - value: /entry/instrument/analyser/data diff --git a/tests/nexus/test_nexus.py b/tests/nexus/test_nexus.py index efdb3dfa6..e5246027b 100644 --- a/tests/nexus/test_nexus.py +++ b/tests/nexus/test_nexus.py @@ -19,8 +19,8 @@ # limitations under the License. # -import os import logging +import os import xml.etree.ElementTree as ET from pynxtools.nexus import nexus @@ -51,13 +51,13 @@ def test_nexus(tmp_path): """ The nexus test function """ - local_dir = os.path.abspath(os.path.dirname(__file__)) - example_data = os.path.join(local_dir, "../data/nexus/201805_WSe2_arpes.nxs") + dirpath = os.path.join(os.path.dirname(__file__), "../data/nexus") + example_data = os.path.join(dirpath, "201805_WSe2_arpes.nxs") logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) handler = logging.FileHandler(os.path.join(tmp_path, "nexus_test.log"), "w") - handler.setLevel(logging.DEBUG) formatter = logging.Formatter("%(levelname)s - %(message)s") + handler.setLevel(logging.DEBUG) handler.setFormatter(formatter) logger.addHandler(handler) nexus_helper = nexus.HandleNexus(logger, example_data, None, None) @@ -68,7 +68,7 @@ def test_nexus(tmp_path): ) as logfile: log = logfile.readlines() with open( - os.path.join(local_dir, "../data/nexus/Ref_nexus_test.log"), + os.path.join(dirpath, "Ref_nexus_test.log"), "r", encoding="utf-8", ) as reffile: From 1b939a230daa671640d0cd776e2ce2b01731d0ef Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Thu, 18 Jan 2024 14:53:44 +0100 Subject: [PATCH 34/88] typo fixes in XPS file parser --- pynxtools/dataconverter/readers/xps/file_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/file_parser.py b/pynxtools/dataconverter/readers/xps/file_parser.py index cc40323a2..0b302e113 100644 --- a/pynxtools/dataconverter/readers/xps/file_parser.py +++ b/pynxtools/dataconverter/readers/xps/file_parser.py @@ -57,11 +57,11 @@ class XpsDataFileParser: } __file_err_msg__ = ( - "Need a xps data file with the following extension: " f"{__prmt_file_ext__}" + "Need an XPS data file with the following extension: " f"{__prmt_file_ext__}" ) __vndr_err_msg__ = ( - "Need a xps data file from the following vendors: " f"{__vendors__}" + "Need an XPSdata file from the following vendors: " f"{__vendors__}" ) def __init__(self, file_paths: List) -> None: From f890df09ba05b8acfe8717b30051bb47e64a038b Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 15:07:47 +0100 Subject: [PATCH 35/88] Fix nexus regression file --- tests/data/nexus/Ref_nexus_test.log | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/data/nexus/Ref_nexus_test.log b/tests/data/nexus/Ref_nexus_test.log index d5da77390..478888afb 100644 --- a/tests/data/nexus/Ref_nexus_test.log +++ b/tests/data/nexus/Ref_nexus_test.log @@ -296,7 +296,7 @@ DEBUG - classes: NXdata.nxdl.xml:/AXISNAME DEBUG - NXdata.nxdl.xml:/AXISNAME@units - REQUIRED, but undefined unit category DEBUG - ===== FIELD (//entry/data/data): -DEBUG - value: [[0. 0. 0. ... 0. 0. 0.] ... +DEBUG - value: [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... DEBUG - classpath: ['NXentry', 'NXdata', 'NX_NUMBER'] DEBUG - classes: NXdata.nxdl.xml:/DATA @@ -577,7 +577,7 @@ DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXdetector'] DEBUG - NOT IN SCHEMA DEBUG - DEBUG - ===== FIELD (//entry/instrument/analyser/data): -DEBUG - value: [[0. 0. 0. ... 0. 0. 0.] ... +DEBUG - value: [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXdetector', 'NX_NUMBER'] DEBUG - classes: NXarpes.nxdl.xml:/ENTRY/INSTRUMENT/analyser/data @@ -1999,7 +1999,7 @@ DEBUG - value: data DEBUG - DEBUG - Signal has been identified: /entry/data/data DEBUG - ===== FIELD (//entry/data/data): -DEBUG - value: [[0. 0. 0. ... 0. 0. 0.] ... +DEBUG - value: [[0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 ... DEBUG - Dataset referenced as NXdata SIGNAL DEBUG - ===== ATTRS (//entry/data/data@target) DEBUG - value: /entry/instrument/analyser/data From d8a8b362f5d4496598991054de1cf3460720971d Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 15:14:24 +0100 Subject: [PATCH 36/88] Don't use removeprefix to support py3.8 --- pynxtools/dataconverter/readers/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/utils.py b/pynxtools/dataconverter/readers/utils.py index 2c4c09ba1..2ccd8accc 100644 --- a/pynxtools/dataconverter/readers/utils.py +++ b/pynxtools/dataconverter/readers/utils.py @@ -247,7 +247,7 @@ def update_config(key, value, rkey): ) ) elif isinstance(value, str) and value.startswith("@link:"): - flattened_config[key] = {"link": value.removeprefix("@link:")} + flattened_config[key] = {"link": value[6:]} else: flattened_config[key] = value From 96e40a150f6ab182b4070c72fc623b8b9a09cf2d Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 16:21:48 +0100 Subject: [PATCH 37/88] Move pressure_gauge to correct location --- .../dataconverter/readers/mpes/config_file.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 389509f3e..7b31518ad 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -41,6 +41,12 @@ "resolution/@units": "1/angstrom", "physical_quantity": "momentum", "type": "estimated" + }, + "pressure_gauge": { + "name": "sample_chamber_pressure", + "measurement": "pressure", + "value": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", + "value/@units": "mbar" } }, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]": { @@ -227,12 +233,7 @@ "value": "@attrs:metadata/file/KTOF:Lens:Sample:V", "value/@units": "V" }, - "pressure_gauge": { - "name": "sample_chamber_pressure", - "measurement": "pressure", - "value": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", - "value/@units": "mbar" - }, + "depends_on": "/entry/instrument/manipulator/transformations/trans_z", "TRANSFORMATIONS[transformations]": { "AXISNAME[trans_z]": -0.32, From efb56e88b7b20e184274b0fd9c0c7dac046a8a02 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 16:44:20 +0100 Subject: [PATCH 38/88] Corrects link to pressure_gauge --- tests/data/dataconverter/readers/mpes/config_file.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 7b31518ad..d8ac8fab3 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -278,7 +278,7 @@ "temperature_sensor": "@link:/entry/instrument/manipulator/temperature_sensor" }, "gas_pressure": { - "pressure_gauge": "@link:/entry/instrument/manipulator/pressure_gauge" + "pressure_gauge": "@link:/entry/instrument/pressure_gauge" }, "bias": { "voltmeter": "@link:/entry/instrument/manipulator/sample_bias_voltmeter" From 5b457802ac3fc2f40db128149199825ee5e6a04c Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 16:44:42 +0100 Subject: [PATCH 39/88] Updates reference mpes test log --- .../readers/mpes/Ref_nexus_mpes.log | 209 ++++++++++++++---- 1 file changed, 171 insertions(+), 38 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 9d8cb25de..4a9409461 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -629,7 +629,7 @@ DEBUG - documentation (NXentry.nxdl.xml:/experiment_laboratory): DEBUG - Name of the laboratory or beamline -DEBUG - ===== GROUP (//entry/instrument [NXmpes::/NXentry/NXinstrument]): +DEBUG - ===== GROUP (//entry/instrument [NXmpes::/NXentry/NXinstrument]): DEBUG - classpath: ['NXentry', 'NXinstrument'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT @@ -3250,7 +3250,7 @@ DEBUG - documentation (NXresolution.nxdl.xml:/type): DEBUG - The process by which the resolution was determined. -DEBUG - ===== GROUP (//entry/instrument/manipulator [NXmpes::/NXentry/NXinstrument/NXmanipulator]): +DEBUG - ===== GROUP (//entry/instrument/manipulator [NXmpes::/NXentry/NXinstrument/NXmanipulator]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR @@ -3284,30 +3284,6 @@ DEBUG - Refers to the last transformation specifying the positon of the manipulator in the NXtransformations chain. -DEBUG - ===== GROUP (//entry/instrument/manipulator/pressure_gauge [NXmpes::/NXentry/NXinstrument/NXmanipulator/pressure_gauge]): -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] -DEBUG - NOT IN SCHEMA -DEBUG - -DEBUG - ===== FIELD (//entry/instrument/manipulator/pressure_gauge/measurement): -DEBUG - value: b'pressure' -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] -DEBUG - NOT IN SCHEMA -DEBUG - -DEBUG - ===== FIELD (//entry/instrument/manipulator/pressure_gauge/name): -DEBUG - value: b'sample_chamber_pressure' -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] -DEBUG - NOT IN SCHEMA -DEBUG - -DEBUG - ===== FIELD (//entry/instrument/manipulator/pressure_gauge/value): -DEBUG - value: 4.5599999999999996e-11 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] -DEBUG - NOT IN SCHEMA -DEBUG - -DEBUG - ===== ATTRS (//entry/instrument/manipulator/pressure_gauge/value@units) -DEBUG - value: mbar -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator'] -DEBUG - NOT IN SCHEMA -DEBUG - DEBUG - ===== GROUP (//entry/instrument/manipulator/sample_bias_voltmeter [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] DEBUG - classes: @@ -4101,6 +4077,102 @@ DEBUG - documentation (NXinstrument.nxdl.xml:/name/short_name): DEBUG - short name for instrument, perhaps the acronym +DEBUG - ===== GROUP (//entry/instrument/pressure_gauge [NXmpes::/NXentry/NXinstrument/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge +NXinstrument.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge): +DEBUG - + Device to measure the gas pressure around the sample. + +DEBUG - documentation (NXinstrument.nxdl.xml:/SENSOR): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/instrument/pressure_gauge@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge +NXinstrument.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] +DEBUG - +DEBUG - ===== FIELD (//entry/instrument/pressure_gauge/measurement): +DEBUG - value: b'pressure' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/measurement +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/measurement): +DEBUG - -> pressure +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/measurement): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): +DEBUG - + name for measured signal + +DEBUG - ===== FIELD (//entry/instrument/pressure_gauge/name): +DEBUG - value: b'sample_chamber_pressure' +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/name +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/name): +DEBUG - +DEBUG - documentation (NXsensor.nxdl.xml:/name): +DEBUG - + Name for the sensor + +DEBUG - ===== FIELD (//entry/instrument/pressure_gauge/value): +DEBUG - value: 4.5599999999999996e-11 +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value): +DEBUG - + In case of a single or averaged gas pressure measurement, this is the scalar gas pressure around + the sample. It can also be an 1D array of measured pressures (without time stamps). + +DEBUG - documentation (NXsensor.nxdl.xml:/value): +DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + +DEBUG - ===== ATTRS (//entry/instrument/pressure_gauge/value@units) +DEBUG - value: mbar +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value@units [NX_PRESSURE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/instrument/source_probe [NXmpes::/NXentry/NXinstrument/NXsource]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: @@ -5528,30 +5600,91 @@ NXsample.nxdl.xml:/ENVIRONMENT NXenvironment.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== GROUP (//entry/sample/gas_pressure/pressure_gauge [NXmpes::/NXentry/NXsample/NXenvironment/pressure_gauge]): -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] -DEBUG - NOT IN SCHEMA +DEBUG - ===== GROUP (//entry/sample/gas_pressure/pressure_gauge [NXmpes::/NXentry/NXsample/NXenvironment/NXsensor]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure/pressure_gauge +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure/pressure_gauge): +DEBUG - + Gauge measuring the gas pressure. + + This should be a link to /entry/instrument/pressure_gauge. + +DEBUG - documentation (NXenvironment.nxdl.xml:/SENSOR): +DEBUG - + Any sensor used to monitor the environment. This can be linked to a sensor + defined in an NXinstrument instance. + +DEBUG - documentation (NXsensor.nxdl.xml:): +DEBUG - + A sensor used to monitor an external condition + + The condition itself is described in :ref:`NXenvironment`. + +DEBUG - ===== ATTRS (//entry/sample/gas_pressure/pressure_gauge@NX_class) +DEBUG - value: NXsensor +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/gas_pressure/pressure_gauge +NXenvironment.nxdl.xml:/SENSOR +NXsensor.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] DEBUG - DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/measurement): DEBUG - value: b'pressure' -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] -DEBUG - NOT IN SCHEMA +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/measurement +DEBUG - <> +DEBUG - enumeration (NXsensor.nxdl.xml:/measurement): +DEBUG - -> temperature +DEBUG - -> pH +DEBUG - -> magnetic_field +DEBUG - -> electric_field +DEBUG - -> current +DEBUG - -> conductivity +DEBUG - -> resistance +DEBUG - -> voltage +DEBUG - -> pressure +DEBUG - -> flow +DEBUG - -> stress +DEBUG - -> strain +DEBUG - -> shear +DEBUG - -> surface_pressure +DEBUG - documentation (NXsensor.nxdl.xml:/measurement): DEBUG - + name for measured signal + DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/name): DEBUG - value: b'sample_chamber_pressure' -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] -DEBUG - NOT IN SCHEMA +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_CHAR'] +DEBUG - classes: +NXsensor.nxdl.xml:/name +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/name): DEBUG - + Name for the sensor + DEBUG - ===== FIELD (//entry/sample/gas_pressure/pressure_gauge/value): DEBUG - value: 4.5599999999999996e-11 -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] -DEBUG - NOT IN SCHEMA +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - <> +DEBUG - documentation (NXsensor.nxdl.xml:/value): DEBUG - + nominal setpoint or average value + - need [n] as may be a vector + DEBUG - ===== ATTRS (//entry/sample/gas_pressure/pressure_gauge/value@units) DEBUG - value: mbar -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] -DEBUG - NOT IN SCHEMA -DEBUG - +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== FIELD (//entry/sample/name): DEBUG - value: b'MoTe2' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] From fa1db7de4e651114b72114f2642db47978e47f6e Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 16:44:55 +0100 Subject: [PATCH 40/88] Updates path for eln mapping --- pynxtools/dataconverter/readers/mpes/reader.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index 27ab2cefa..60ea2fe37 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -170,11 +170,11 @@ def iterate_dictionary(dic, key_string): } REPLACE_NESTED = { - "SOURCE[source]/Probe": "SOURCE[source]", + "SOURCE[source]/Probe": "SOURCE[source_probe]", "SOURCE[source]/Pump": "SOURCE[source_pump]", - "BEAM[beam]/Probe": "BEAM[beam]", + "BEAM[beam]/Probe": "BEAM[beam_probe]", "BEAM[beam]/Pump": "BEAM[beam_pump]", - "sample_history": "sample_history/description", + "sample_history": "sample_history/notes", } From 27fe1b8eb8e60bc843b8c4eab4f58f94b7d968b4 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 17:04:00 +0100 Subject: [PATCH 41/88] Fixes eln mapping --- pynxtools/dataconverter/readers/mpes/reader.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index 60ea2fe37..beff52d3c 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -162,18 +162,22 @@ def iterate_dictionary(dic, key_string): "Instrument": "INSTRUMENT[instrument]", "Analyzer": "ELECTRONANALYSER[electronanalyser]", "Manipulator": "MANIPULATOR[manipulator]", - "Beam": "BEAM[beam]", + "Beam": "beam_TYPE[beam]", "unit": "@units", "Sample": "SAMPLE[sample]", - "Source": "SOURCE[source]", + "Source": "source_TYPE[source]", "User": "USER[user]", + "energy_resolution": "energy_resolution/resolution", + "momentum_resolution": "RESOLUTION[momentum_resolution]/resolution", + "temporal_resolution": "RESOLUTION[temporal_resolution]/resolution", + "spatial_resolution": "RESOLUTION[spatial_resolution]/resolution", } REPLACE_NESTED = { - "SOURCE[source]/Probe": "SOURCE[source_probe]", - "SOURCE[source]/Pump": "SOURCE[source_pump]", - "BEAM[beam]/Probe": "BEAM[beam_probe]", - "BEAM[beam]/Pump": "BEAM[beam_pump]", + "source_TYPE[source]/Probe": "source_TYPE[source_probe]", + "source_TYPE[source]/Pump": "source_TYPE[source_pump]", + "beam_TYPE[beam]/Probe": "beam_TYPE[beam_probe]", + "beam_TYPE[beam]/Pump": "beam_TYPE[beam_pump]", "sample_history": "sample_history/notes", } From 343cd54c903d26b8fbcc67698c210fcf0297399c Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 17:05:24 +0100 Subject: [PATCH 42/88] Skip test for xps reader --- tests/dataconverter/test_readers.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/dataconverter/test_readers.py b/tests/dataconverter/test_readers.py index 00cdcf603..a777e5182 100644 --- a/tests/dataconverter/test_readers.py +++ b/tests/dataconverter/test_readers.py @@ -19,18 +19,18 @@ import glob import os -from typing import List import xml.etree.ElementTree as ET +from typing import List import pytest from _pytest.mark.structures import ParameterSet -from pynxtools.dataconverter.readers.base.reader import BaseReader from pynxtools.dataconverter.convert import get_names_of_all_readers, get_reader from pynxtools.dataconverter.helpers import ( - validate_data_dict, generate_template_from_nxdl, + validate_data_dict, ) +from pynxtools.dataconverter.readers.base.reader import BaseReader from pynxtools.dataconverter.template import Template @@ -59,6 +59,7 @@ def get_all_readers() -> List[ParameterSet]: "EmOmReader", "EmSpctrscpyReader", "EmNionReader", + "XPSReader", ): readers.append( pytest.param( From 79d845bcca29323bbdba96739530b230ba5f5529 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 17:16:28 +0100 Subject: [PATCH 43/88] Fix typos --- pynxtools/dataconverter/readers/mpes/reader.py | 1 + tests/data/dataconverter/readers/mpes/config_file.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index beff52d3c..34e4d8620 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -171,6 +171,7 @@ def iterate_dictionary(dic, key_string): "momentum_resolution": "RESOLUTION[momentum_resolution]/resolution", "temporal_resolution": "RESOLUTION[temporal_resolution]/resolution", "spatial_resolution": "RESOLUTION[spatial_resolution]/resolution", + "sample_temperature": "temperature_sensor/value", } REPLACE_NESTED = { diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index d8ac8fab3..576ca3158 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -272,7 +272,7 @@ "description": "@attrs:metadata/sample/chemical_formula", "name": "@attrs:metadata/sample/chemical_formula", "situation": "vacuum", - "SUSBTANCE[substance]/molecular_formula_hill": "@link:/entry/sample/chemical_formula", + "SUBSTANCE[substance]/molecular_formula_hill": "@link:/entry/sample/chemical_formula", "physical_form": "thin film", "temperature": { "temperature_sensor": "@link:/entry/instrument/manipulator/temperature_sensor" From 9200ef3cb245c66bdb49234691c12c21f7bd865a Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 17:23:10 +0100 Subject: [PATCH 44/88] Updates generated eln files --- tests/data/eln_mapper/eln.yaml | 207 +++- .../data/eln_mapper/mpes.scheme.archive.yaml | 1047 ++++++++++++++--- 2 files changed, 1058 insertions(+), 196 deletions(-) diff --git a/tests/data/eln_mapper/eln.yaml b/tests/data/eln_mapper/eln.yaml index 6a6884017..ec01ea424 100644 --- a/tests/data/eln_mapper/eln.yaml +++ b/tests/data/eln_mapper/eln.yaml @@ -1,36 +1,33 @@ -Data: - '@signal': null - data: - value: null - unit: null Instrument: - Beam: - distance: - value: null - unit: null - incident_energy: - value: null - unit: null - incident_energy_spread: - value: null - unit: null - incident_polarization: - value: null - unit: null Electronanalyser: Collectioncolumn: + angular_acceptance: null contrast_aperture: null + device_information: + identifier: null + model: null + vendor: null field_aperture: null + iris: null mode: null projection: null scheme: null + spatial_acceptance: null Detector: - Data: - '@signal': null - raw: null amplifier_type: null detector_type: null + device_information: + identifier: null + model: null + vendor: null + raw_data: + '@signal': null + raw: null Energydispersion: + device_information: + identifier: null + model: null + vendor: null energy_scan_mode: null entrance_slit: null exit_slit: null @@ -39,65 +36,181 @@ Instrument: unit: null scheme: null description: null + device_information: + identifier: null + model: null + vendor: null energy_resolution: - value: null - unit: null + physical_quantity: null + resolution: null + type: null fast_axes: null slow_axes: null + transmission_function: null + work_function: + value: null + unit: null Manipulator: - drain_current: + cryostat: + Pid: + setpoint: null + name: null + physical_quantity: null + type: null + device_information: + identifier: null + model: null + vendor: null + drain_current_amperemeter: + measurement: null + name: null + type: null + value: null + sample_bias_potentiostat: + Pid: + setpoint: null + name: null + physical_quantity: null + type: null + sample_bias_voltmeter: + measurement: null + name: null + type: null + value: null + sample_heater: + Pid: + setpoint: null + heater_power: null + name: null + physical_quantity: null + type: null + temperature_sensor: + measurement: null + name: null + type: null + value: null + beam_TYPE: + associated_source: null + distance: + value: null + unit: null + extent: null + incident_energy: value: null unit: null - sample_bias: + incident_energy_spread: value: null unit: null - sample_temperature: + incident_polarization: value: null unit: null - Source: + device_information: + identifier: null + model: null + vendor: null + energy_resolution: + physical_quantity: null + resolution: + value: null + unit: null + type: null + flood_gun: + current: + value: null + unit: null + current_log: + value: + value: null + unit: null + name: null + physical_quantity: null + type: null + pressure_gauge: + measurement: null + name: null + type: null + value: + value: null + unit: null + value_log: + value: + value: null + unit: null + source_TYPE: + associated_beam: null + device_information: + identifier: null + model: null + vendor: null name: null probe: null type: null - energy_resolution: - value: null - unit: null + type_other: null Process: angular_calibration: - applied: null calibrated_axis: null energy_calibration: - applied: null calibrated_axis: null + energy_referencing: + binding_energy: null + calibrated_axis: null + level: null + offset: null + reference_peak: null momentum_calibration: - applied: null calibrated_axis: null spatial_calibration: - applied: null calibrated_axis: null + transmission_correction: + transmission_function: + '@axes': null + '@signal': null + kinetic_energy: + value: null + unit: null + relative_intensity: null Sample: + Substance: + molecular_formula_hill: null atom_types: null bias: - value: null - unit: null - chemical_formula: null + potentiostat: null + voltmeter: null + drain_current: + amperemeter: null + flood_gun_current: + flood_gun: null gas_pressure: - value: null - unit: null + pressure_gauge: null name: null - preparation_date: null - preparation_description: null - sample_history: null + physical_form: null + sample_history: + sample_preparation: + end_time: null + method: null + start_time: null situation: null temperature: - value: null - unit: null + cryostat: null + sample_heater: null + temperature_sensor: null User: - address: null affiliation: null - email: null name: null - orcid: null +data: + '@energy_depends': null + '@energy_indices': null + '@signal': null + data: + value: null + unit: null + energy: + '@type': null + value: null + unit: null definition: '@version': null +end_time: null +method: null start_time: null title: null diff --git a/tests/data/eln_mapper/mpes.scheme.archive.yaml b/tests/data/eln_mapper/mpes.scheme.archive.yaml index 0f704ced9..7c7f12d7a 100644 --- a/tests/data/eln_mapper/mpes.scheme.archive.yaml +++ b/tests/data/eln_mapper/mpes.scheme.archive.yaml @@ -12,6 +12,13 @@ definitions: eln: hide: [] quantities: + definition: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' title: type: str m_annotations: @@ -25,14 +32,36 @@ definitions: eln: component: DateTimeEditQuantity defaultDisplayUnit: - description: ' Datetime of the start of the measurement. ' - definition: + description: ' Datetime of the start of the measurement. Should be a ISO8601 + date/time stamp. It is recommended to add an explicit time zone, otherwise + the local time zone is assumed per ISO8601. ' + end_time: + type: Datetime + m_annotations: + eln: + component: DateTimeEditQuantity + defaultDisplayUnit: + description: ' Datetime of the end of the measurement. Should be a ISO8601 + date/time stamp. It is recommended to add an explicit time zone, otherwise + the local time zone is assumed per ISO8601. ' + method: type: str m_annotations: eln: component: StringEditQuantity defaultDisplayUnit: - description: '' + description: ' Name of the experimental method. If applicable, this name + should match the terms given by `Clause 11`_ of the `ISO 18115-1:2023`_ + specification. Examples include: * X-ray photoelectron spectroscopy (XPS) + * angle-resolved X-ray photoelectron spectroscopy (ARXPS) * ultraviolet + photoelectron spectroscopy (UPS) * angle-resolved photoelectron spectroscopy + (ARPES) * hard X-ray photoemission spectroscopy (HAXPES) * near ambient + pressure X-ray photoelectron spectroscopy (NAPXPS) * photoelectron emission + microscopy (PEEM) * electron spectroscopy for chemical analysis (ESCA) + * time-resolved angle-resolved X-ray photoelectron spectroscopy (trARPES) + * spin-resolved angle-resolved X-ray photoelectron spectroscopy (spin-ARPES) + * momentum microscopy .. _ISO 18115-1:2023: https://www.iso.org/standard/74811.html + .. _Clause 11: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:sec:11 ' sub_sections: User: section: @@ -53,47 +82,71 @@ definitions: eln: component: StringEditQuantity defaultDisplayUnit: - description: ' Name of the affiliation of the user at the point in - time when the experiment was performed. ' - address: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: - description: ' Full address (street, street number, ZIP, city, country) - of the user''s affiliation. ' - email: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: - description: ' Email address of the user. ' - orcid: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: - description: ' Author ID defined by https://orcid.org/. ' + description: ' Name of the affiliation of the user at the time when + the experiment was performed. ' Instrument: section: m_annotations: eln: overview: true - quantities: - energy_resolution: - type: np.float64 - unit: '' - value: - m_annotations: - eln: - component: NumberEditQuantity - defaultDisplayUnit: - description: '' sub_sections: - Source: + Energy_resolution: + section: + m_annotations: + eln: + overview: true + quantities: + physical_quantity: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + resolution: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Device_information: + section: + m_annotations: + eln: + overview: true + quantities: + vendor: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + Source_type: section: m_annotations: eln: @@ -106,6 +159,13 @@ definitions: component: StringEditQuantity defaultDisplayUnit: description: '' + type_other: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: ' Specification of type, may also go to name. ' name: type: str m_annotations: @@ -119,9 +179,41 @@ definitions: eln: component: StringEditQuantity defaultDisplayUnit: - description: ' Type of probe. In photoemission it''s always - photons, so the full NIAC list is restricted. ' - Beam: + description: '' + sub_sections: + Device_information: + section: + m_annotations: + eln: + overview: true + quantities: + vendor: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + Associated_beam: + section: + m_annotations: + eln: + overview: true + Beam_type: section: m_annotations: eln: @@ -135,8 +227,11 @@ definitions: eln: component: NumberEditQuantity defaultDisplayUnit: - description: ' Distance of the point of evaluation of the beam - from the sample surface. ' + description: ' Distance between the point where the current + NXbeam instance is evaluating the beam properties and the + point where the beam interacts with the sample. For photoemission, + the latter is the point where the the centre of the beam touches + the sample surface. ' incident_energy: type: np.float64 unit: '' @@ -164,44 +259,84 @@ definitions: component: NumberEditQuantity defaultDisplayUnit: description: '' - Electronanalyser: - section: - m_annotations: - eln: - overview: true - quantities: - description: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: - description: '' - energy_resolution: + extent: type: np.float64 - unit: '' - value: m_annotations: eln: component: NumberEditQuantity defaultDisplayUnit: - description: ' Energy resolution of the analyser with the current - setting. May be linked from a NXcalibration. ' - fast_axes: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: - description: '' - slow_axes: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: description: '' sub_sections: + Associated_source: + section: + m_annotations: + eln: + overview: true + Electronanalyser: + section: + m_annotations: + eln: + overview: true + sub_sections: + Device_information: + section: + m_annotations: + eln: + overview: true + quantities: + vendor: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + Energy_resolution: + section: + m_annotations: + eln: + overview: true + quantities: + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + physical_quantity: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + resolution: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Transmission_function: + section: + m_annotations: + eln: + overview: true Collectioncolumn: section: m_annotations: @@ -229,6 +364,20 @@ definitions: component: StringEditQuantity defaultDisplayUnit: description: '' + angular_acceptance: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + spatial_acceptance: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' sub_sections: Field_aperture: section: @@ -240,6 +389,38 @@ definitions: m_annotations: eln: overview: true + Iris: + section: + m_annotations: + eln: + overview: true + Device_information: + section: + m_annotations: + eln: + overview: true + quantities: + vendor: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' Energydispersion: section: m_annotations: @@ -280,6 +461,33 @@ definitions: m_annotations: eln: overview: true + Device_information: + section: + m_annotations: + eln: + overview: true + quantities: + vendor: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' Detector: section: m_annotations: @@ -302,44 +510,427 @@ definitions: defaultDisplayUnit: description: ' Description of the detector type. ' sub_sections: - Data: + Device_information: section: m_annotations: eln: overview: true quantities: - raw: - type: np.float64 + vendor: + type: str m_annotations: eln: - component: NumberEditQuantity + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + Raw_data: + section: + m_annotations: + eln: + overview: true + quantities: + raw: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity defaultDisplayUnit: description: ' Raw data before calibration. ' + quantities: + description: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + work_function: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + fast_axes: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + slow_axes: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' Manipulator: + section: + m_annotations: + eln: + overview: true + sub_sections: + Temperature_sensor: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + measurement: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + value: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Sample_heater: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + physical_quantity: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + heater_power: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + sub_sections: + Pid: + section: + m_annotations: + eln: + overview: true + quantities: + setpoint: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Cryostat: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + physical_quantity: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + sub_sections: + Pid: + section: + m_annotations: + eln: + overview: true + quantities: + setpoint: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Drain_current_amperemeter: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + measurement: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + value: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Sample_bias_voltmeter: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + measurement: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + value: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Sample_bias_potentiostat: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + physical_quantity: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + sub_sections: + Pid: + section: + m_annotations: + eln: + overview: true + quantities: + setpoint: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: '' + Device_information: + section: + m_annotations: + eln: + overview: true + quantities: + vendor: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + model: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + identifier: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + Pressure_gauge: section: m_annotations: eln: overview: true quantities: - sample_temperature: - type: np.float64 - unit: '' - value: + name: + type: str m_annotations: eln: - component: NumberEditQuantity + component: StringEditQuantity + defaultDisplayUnit: + description: '' + measurement: + type: str + m_annotations: + eln: + component: StringEditQuantity defaultDisplayUnit: description: '' - drain_current: + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + value: type: np.float64 - unit: '' + unit: '' value: m_annotations: eln: component: NumberEditQuantity defaultDisplayUnit: + description: ' In case of a single or averaged gas pressure + measurement, this is the scalar gas pressure around the sample. + It can also be an 1D array of measured pressures (without + time stamps). ' + sub_sections: + Value_log: + section: + m_annotations: + eln: + overview: true + quantities: + value: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' In the case of an experiment in which the + gas pressure changes and is recorded, this is an array + of length m of gas pressures. ' + Flood_gun: + section: + m_annotations: + eln: + overview: true + quantities: + name: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + physical_quantity: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: '' + type: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: description: '' - sample_bias: + current: type: np.float64 unit: '' value: @@ -347,7 +938,27 @@ definitions: eln: component: NumberEditQuantity defaultDisplayUnit: - description: '' + description: ' In case of a fixed or averaged electron current, + this is the scalar current. It can also be an 1D array of + output current (without time stamps). ' + sub_sections: + Current_log: + section: + m_annotations: + eln: + overview: true + quantities: + value: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' In the case of an experiment in which the + electron current is changed and recorded with time stamps, + this is an array of length m of current setpoints. ' Process: section: m_annotations: @@ -360,13 +971,6 @@ definitions: eln: overview: true quantities: - applied: - type: bool - m_annotations: - eln: - component: BoolEditQuantity - defaultDisplayUnit: - description: ' Has an energy calibration been applied? ' calibrated_axis: type: np.float64 m_annotations: @@ -381,13 +985,6 @@ definitions: eln: overview: true quantities: - applied: - type: bool - m_annotations: - eln: - component: BoolEditQuantity - defaultDisplayUnit: - description: ' Has an angular calibration been applied? ' calibrated_axis: type: np.float64 m_annotations: @@ -402,13 +999,6 @@ definitions: eln: overview: true quantities: - applied: - type: bool - m_annotations: - eln: - component: BoolEditQuantity - defaultDisplayUnit: - description: ' Has an spatial calibration been applied? ' calibrated_axis: type: np.float64 m_annotations: @@ -423,21 +1013,92 @@ definitions: eln: overview: true quantities: - applied: - type: bool + calibrated_axis: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' This is the momentum axis to be used for data + plotting. ' + Energy_referencing: + section: + m_annotations: + eln: + overview: true + sub_sections: + Level: + section: + m_annotations: + eln: + overview: true + quantities: + reference_peak: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: ' Reference peak that was used for the calibration. For + example: adventitious carbon | C-C | metallic Au | elemental + Si | Fermi edge | vacuum level ' + binding_energy: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' The binding energy (in units of eV) that the + specified emission line appeared at, after adjusting the binding + energy scale. This concept is related to term `12.16_ ff.`_ + of the ISO 18115-1:2023 standard. .. _12.16_ ff.: https://www.iso.org/obp/ui/en/#iso:std:iso:18115:-1:ed-3:v1:en:term:12.16 ' + offset: + type: np.float64 m_annotations: eln: - component: BoolEditQuantity + component: NumberEditQuantity defaultDisplayUnit: - description: ' Has an momentum calibration been applied? ' + description: ' Offset between measured binding energy and calibrated + binding energy of the emission line. ' calibrated_axis: type: np.float64 m_annotations: eln: component: NumberEditQuantity defaultDisplayUnit: - description: ' This is the momentum axis to be used for data - plotting. ' + description: ' This is the calibrated energy axis to be used + for data plotting. This should link to /entry/data/energy. ' + Transmission_correction: + section: + m_annotations: + eln: + overview: true + sub_sections: + Transmission_function: + section: + m_annotations: + eln: + overview: true + quantities: + kinetic_energy: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' Kinetic energy values ' + relative_intensity: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' Relative transmission efficiency for the + given kinetic energies ' Sample: section: m_annotations: @@ -451,14 +1112,6 @@ definitions: component: StringEditQuantity defaultDisplayUnit: description: '' - chemical_formula: - type: str - m_annotations: - eln: - component: StringEditQuantity - defaultDisplayUnit: - description: ' The chemical formula of the sample. For mixtures use - the NXsample_component group in NXsample instead. ' atom_types: type: str m_annotations: @@ -469,53 +1122,139 @@ definitions: table that are contained in the sample. If the sample substance has multiple components, all elements from each component must be included in `atom_types`. ' - preparation_date: - type: Datetime - m_annotations: - eln: - component: DateTimeEditQuantity - defaultDisplayUnit: - description: ' Date of preparation of the sample for the XPS experiment - (i.e. cleaving, last annealing). ' - temperature: - type: np.float64 - unit: '' - value: - m_annotations: - eln: - component: NumberEditQuantity - defaultDisplayUnit: - description: ' In the case of a fixed temperature measurement this - is the scalar temperature of the sample. In the case of an experiment - in which the temperature is changed and recoded, this is an array - of length m of temperatures. This should be a link to /entry/instrument/manipulator/sample_temperature. ' - situation: + physical_form: type: str m_annotations: eln: component: StringEditQuantity defaultDisplayUnit: description: '' - gas_pressure: - type: np.float64 - unit: '' - value: + situation: + type: str m_annotations: eln: - component: NumberEditQuantity + component: StringEditQuantity defaultDisplayUnit: description: '' sub_sections: + Substance: + section: + m_annotations: + eln: + overview: true + quantities: + molecular_formula_hill: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: ' The chemical formula of the sample (using CIF + conventions). ' Sample_history: section: m_annotations: eln: overview: true - Preparation_description: + sub_sections: + Sample_preparation: + section: + m_annotations: + eln: + overview: true + quantities: + start_time: + type: Datetime + m_annotations: + eln: + component: DateTimeEditQuantity + defaultDisplayUnit: + description: '' + end_time: + type: Datetime + m_annotations: + eln: + component: DateTimeEditQuantity + defaultDisplayUnit: + description: '' + method: + type: str + m_annotations: + eln: + component: StringEditQuantity + defaultDisplayUnit: + description: ' Details about the method of sample preparation + before the MPES experiment. ' + Temperature: + section: + m_annotations: + eln: + overview: true + sub_sections: + Temperature_sensor: + section: + m_annotations: + eln: + overview: true + Sample_heater: + section: + m_annotations: + eln: + overview: true + Cryostat: + section: + m_annotations: + eln: + overview: true + Gas_pressure: + section: + m_annotations: + eln: + overview: true + sub_sections: + Pressure_gauge: + section: + m_annotations: + eln: + overview: true + Bias: + section: + m_annotations: + eln: + overview: true + sub_sections: + Voltmeter: + section: + m_annotations: + eln: + overview: true + Potentiostat: + section: + m_annotations: + eln: + overview: true + Drain_current: + section: + m_annotations: + eln: + overview: true + sub_sections: + Amperemeter: + section: + m_annotations: + eln: + overview: true + Flood_gun_current: section: m_annotations: eln: overview: true + sub_sections: + Flood_gun: + section: + m_annotations: + eln: + overview: true Data: section: m_annotations: @@ -535,3 +1274,13 @@ definitions: spatial coordinate, pump-probe delay, spin index, temperature, etc. The axes traces should be linked to the actual encoder position in NXinstrument or calibrated axes in NXprocess. ' + energy: + type: np.float64 + unit: '' + value: + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: + description: ' Calibrated energy axis. This could be a link to either + /entry/process/energy_calibration/calibrated_axis or /entry/process/energy_correction/calibrated_axis. ' From 5f25fb293ce7826ec7033a501a66d30fba845512 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 17:59:52 +0100 Subject: [PATCH 45/88] Fix undocumented @units if key is documented --- pynxtools/dataconverter/helpers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/helpers.py b/pynxtools/dataconverter/helpers.py index 32551e27c..4cfe492b9 100644 --- a/pynxtools/dataconverter/helpers.py +++ b/pynxtools/dataconverter/helpers.py @@ -18,8 +18,8 @@ """Helper functions commonly used by the convert routine.""" import json -import re import logging +import re import xml.etree.ElementTree as ET from datetime import datetime, timezone from typing import Any, Callable, List, Optional, Tuple, Union @@ -545,6 +545,11 @@ def try_undocumented(data, nxdl_root: ET.Element): nxdl_path = convert_data_converter_dict_to_nxdl_path(path) if entry_name == "@units": + if ( + path.rsplit("/", 1)[0] in data.get_documented() + and path in data.undocumented + ): + del data.undocumented[path] continue if entry_name[0] == "@" and "@" in nxdl_path: From eda526235e44e84d3418a1209bdc9639f21b9c5a Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 18 Jan 2024 18:06:18 +0100 Subject: [PATCH 46/88] Updates mpes reference file --- .../readers/mpes/Ref_nexus_mpes.log | 106 ++++++++++-------- 1 file changed, 59 insertions(+), 47 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 4a9409461..02437d5cb 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -2438,16 +2438,6 @@ DEBUG - documentation (NXresolution.nxdl.xml:/resolution): DEBUG - The resolution of the physical quantity. -DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution/resolution@units) -DEBUG - value: meV -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution -NXelectronanalyser.nxdl.xml:/energy_resolution/resolution -NXresolution.nxdl.xml:/resolution -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution@units - REQUIRED, but undefined unit category -DEBUG - NXelectronanalyser.nxdl.xml:/energy_resolution/resolution@units [NX_ENERGY] -DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/type): DEBUG - value: b'estimated' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] @@ -3380,16 +3370,6 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector -DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias_voltmeter/value@units) -DEBUG - value: V -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value -NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value -NXsensor.nxdl.xml:/value -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value@units - REQUIRED, but undefined unit category -DEBUG - NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value@units [NX_VOLTAGE] -DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/instrument/manipulator/temperature_sensor [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] DEBUG - classes: @@ -3487,16 +3467,6 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector -DEBUG - ===== ATTRS (//entry/instrument/manipulator/temperature_sensor/value@units) -DEBUG - value: K -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value -NXmanipulator.nxdl.xml:/temperature_sensor/value -NXsensor.nxdl.xml:/value -DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value@units - REQUIRED, but undefined unit category -DEBUG - NXmanipulator.nxdl.xml:/temperature_sensor/value@units [NX_TEMPERATURE] -DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/instrument/manipulator/transformations [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations'] DEBUG - classes: @@ -5511,12 +5481,6 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector -DEBUG - ===== ATTRS (//entry/sample/bias/voltmeter/value@units) -DEBUG - value: V -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] -DEBUG - classes: -NXsensor.nxdl.xml:/value -DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== FIELD (//entry/sample/chemical_formula): DEBUG - value: b'MoTe2' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] @@ -5787,15 +5751,69 @@ DEBUG - its details will be stored; the relevant components will be indicated by the entry in the sample_component member. -DEBUG - ===== GROUP (//entry/sample/substance [NXmpes::/NXentry/NXsample/substance]): -DEBUG - classpath: ['NXentry', 'NXsample'] -DEBUG - NOT IN SCHEMA +DEBUG - ===== GROUP (//entry/sample/substance [NXmpes::/NXentry/NXsample/NXsubstance]): +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsubstance'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE +NXsample.nxdl.xml:/SUBSTANCE +NXsubstance.nxdl.xml: +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE): +DEBUG - + For samples containing a single pure substance. For mixtures use the + NXsample_component_set and NXsample_component group in NXsample instead. + +DEBUG - documentation (NXsample.nxdl.xml:/SUBSTANCE): +DEBUG - + If the sample is made from a pure substance and cannot be further divided using + NXsample_component. + +DEBUG - documentation (NXsubstance.nxdl.xml:): +DEBUG - + A form of matter with a constant, definite chemical composition. + + Examples can be single chemical elements, chemical compunds, or alloys. + For further information, see https://en.wikipedia.org/wiki/Chemical_substance. + +DEBUG - ===== ATTRS (//entry/sample/substance@NX_class) +DEBUG - value: NXsubstance +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsubstance'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE +NXsample.nxdl.xml:/SUBSTANCE +NXsubstance.nxdl.xml: +DEBUG - @NX_class [NX_CHAR] DEBUG - DEBUG - ===== FIELD (//entry/sample/substance/molecular_formula_hill): DEBUG - value: b'MoTe2' -DEBUG - classpath: ['NXentry', 'NXsample'] -DEBUG - NOT IN SCHEMA +DEBUG - classpath: ['NXentry', 'NXsample', 'NXsubstance', 'NX_CHAR'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE/molecular_formula_hill +NXsubstance.nxdl.xml:/molecular_formula_hill +DEBUG - <> +DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/SUBSTANCE/molecular_formula_hill): +DEBUG - + The chemical formula of the sample (using CIF conventions). + +DEBUG - documentation (NXsubstance.nxdl.xml:/molecular_formula_hill): DEBUG - + The chemical formula specified using CIF conventions. + Abbreviated version of CIF standard:107 + This is the *Hill* system used by Chemical Abstracts. + + * Only recognized element symbols may be used. + * Each element symbol is followed by a 'count' number. A count of '1' may be omitted. + * A space or parenthesis must separate each cluster of (element symbol + count). + * Where a group of elements is enclosed in parentheses, the multiplier for the + group must follow the closing parentheses. That is, all element and group + multipliers are assumed to be printed as subscripted numbers. + * Unless the elements are ordered in a manner that corresponds to their chemical + structure, the order of the elements within any group or moiety depends on + whether or not carbon is present. + * If carbon is present, the order should be: + - C, then H, then the other elements in alphabetical order of their symbol. + - If carbon is not present, the elements are listed purely in alphabetic order of their symbol. + DEBUG - ===== GROUP (//entry/sample/temperature [NXmpes::/NXentry/NXsample/NXenvironment]): DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment'] DEBUG - classes: @@ -5896,12 +5914,6 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector -DEBUG - ===== ATTRS (//entry/sample/temperature/temperature_sensor/value@units) -DEBUG - value: K -DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] -DEBUG - classes: -NXsensor.nxdl.xml:/value -DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/sample/transformations [NXmpes::/NXentry/NXsample/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations'] DEBUG - classes: From 9140ff352dee5689ef3aee55d2f43a8536c746fa Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 09:32:19 +0100 Subject: [PATCH 47/88] Removed applied fields in calibrations --- tests/data/dataconverter/readers/mpes/config_file.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 576ca3158..efb086b29 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -351,7 +351,6 @@ } }, "/ENTRY[entry]/PROCESS[process]/DISTORTION[distortion]": { - "applied": true, "symmetry": "@attrs:metadata/momentum_correction/rotsym", "original_centre": "@attrs:metadata/momentum_correction/pcent", "original_points": "@attrs:metadata/momentum_correction/pouter", @@ -359,7 +358,6 @@ "rdeform_field": "@attrs:metadata/momentum_correction/rdeform_field" }, "/ENTRY[entry]/PROCESS[process]/REGISTRATION[registration]": { - "applied": true, "depends_on": "/entry/process/registration/tranformations/rot_z", "TRANSFORMATIONS[tranformations]": { "AXISNAME[trans_x]": "@attrs:metadata/momentum_correction/adjust_params/xtrans", @@ -381,20 +379,17 @@ } }, "/ENTRY[entry]/PROCESS[process]/energy_calibration":{ - "applied": true, "coefficients": "@attrs:metadata/energy_correction/calibration/coeffs", "fit_function": "@attrs:metadata/energy_correction/calibration/fit_function", "original_axis": "@attrs:metadata/energy_correction/tof", "calibrated_axis": "@attrs:metadata/energy_correction/calibration/axis" }, "/ENTRY[entry]/PROCESS[process]/CALIBRATION[kx_calibration]": { - "applied": true, "scaling": "@attrs:metadata/momentum_correction/calibration/scale_kx", "offset": "@attrs:metadata/momentum_correction/offset_kx", "calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_kx" }, "/ENTRY[entry]/PROCESS[process]/CALIBRATION[ky_calibration]": { - "applied": true, "scaling": "@attrs:metadata/momentum_correction/calibration/scale_ky", "offset": "@attrs:metadata/momentum_correction/offset_ky", "calibrated_axis": "@attrs:metadata/momentum_correction/calibration/axis_ky" From 5ba4f666a5302b350c58587c9c9809a14f467e8f Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 09:33:25 +0100 Subject: [PATCH 48/88] Removed photon_energies from source --- tests/data/dataconverter/readers/mpes/config_file.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index efb086b29..45d9cf811 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -167,8 +167,6 @@ "mode": "Single Bunch", "frequency": "@attrs:metadata/instrument/beam/probe/frequency", "frequency/@units": "kHz", - "photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "photon_energy/@units": "eV", "associated_beam": "/entry/instrument/beam_probe" }, "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE[beam_probe]": { @@ -193,8 +191,6 @@ "mode": "Single Bunch", "frequency": "@attrs:metadata/instrument/beam/pump/frequency", "frequency/@units": "kHz", - "photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "photon_energy/@units": "eV", "associated_beam": "/entry/instrument/beam_pump" }, "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE[beam_pump]": { From 3a3f86fca66beb88aa8e8ac0269d5dc1e19fe971 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 09:37:54 +0100 Subject: [PATCH 49/88] Nest electronanalyser under instrument --- .../readers/mpes/config_file.json | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 45d9cf811..0abd29834 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -47,58 +47,58 @@ "measurement": "pressure", "value": "@attrs:metadata/file/trARPES:XGS600:PressureAC:P_RD", "value/@units": "mbar" - } - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]": { - "description": "SPECS Metis 1000 Momentum Microscope", - "device_information": { - "vendor": "SPECS GmbH", - "model": "Metis 1000 Momentum Microscope" - }, - "fast_axes": [ - "kx", - "ky", - "E" - ], - "slow_axes": "@attrs:metadata/instrument/analyzer/slow_axes", - "energy_resolution": { - "resolution": 110.0, - "resolution/@units": "meV", - "physical_quantity": "energy", - "type": "estimated" }, - "RESOLUTION[momentum_resolution]": { - "resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", - "resolution/@units": "1/angstrom", - "physical_quantity": "momentum", - "type": "estimated" - }, - "RESOLUTION[spatial_resolution]": { - "resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", - "resolution/@units": "µm", - "physical_quantity": "length", - "type": "estimated" - }, - "depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", - "TRANSFORMATIONS[transformations]": { - "AXISNAME[trans_z]": 4.0, - "AXISNAME[trans_z]/@depends_on": "rot_y", - "AXISNAME[trans_z]/@transformation_type": "translation", - "AXISNAME[trans_z]/@units": "mm", - "AXISNAME[trans_z]/@vector": [ - 0, - 0, - 1 + "ELECTRONANALYSER[electronanalyser]": { + "description": "SPECS Metis 1000 Momentum Microscope", + "device_information": { + "vendor": "SPECS GmbH", + "model": "Metis 1000 Momentum Microscope" + }, + "fast_axes": [ + "kx", + "ky", + "E" ], - "AXISNAME[rot_y]": -115.0, - "AXISNAME[rot_y]/@depends_on": ".", - "AXISNAME[rot_y]/@transformation_type": "rotation", - "AXISNAME[rot_y]/@units": "degrees", - "AXISNAME[rot_y]/@vector": [ - 0, - 1, - 0 - ] + "slow_axes": "@attrs:metadata/instrument/analyzer/slow_axes", + "energy_resolution": { + "resolution": 110.0, + "resolution/@units": "meV", + "physical_quantity": "energy", + "type": "estimated" + }, + "RESOLUTION[momentum_resolution]": { + "resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", + "resolution/@units": "1/angstrom", + "physical_quantity": "momentum", + "type": "estimated" + }, + "RESOLUTION[spatial_resolution]": { + "resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", + "resolution/@units": "µm", + "physical_quantity": "length", + "type": "estimated" + }, + "depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", + "TRANSFORMATIONS[transformations]": { + "AXISNAME[trans_z]": 4.0, + "AXISNAME[trans_z]/@depends_on": "rot_y", + "AXISNAME[trans_z]/@transformation_type": "translation", + "AXISNAME[trans_z]/@units": "mm", + "AXISNAME[trans_z]/@vector": [ + 0, + 0, + 1 + ], + "AXISNAME[rot_y]": -115.0, + "AXISNAME[rot_y]/@depends_on": ".", + "AXISNAME[rot_y]/@transformation_type": "rotation", + "AXISNAME[rot_y]/@units": "degrees", + "AXISNAME[rot_y]/@vector": [ + 0, + 1, + 0 + ] + } } }, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]": { From 31f71fe9c06308a78c9c4d7932f4c8103c377ca7 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 09:47:14 +0100 Subject: [PATCH 50/88] Use momentum_resolution and spatial_resolution as named concepts --- tests/data/dataconverter/readers/mpes/config_file.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 0abd29834..6833e4eb3 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -66,13 +66,13 @@ "physical_quantity": "energy", "type": "estimated" }, - "RESOLUTION[momentum_resolution]": { + "momentum_resolution": { "resolution": "@attrs:metadata/instrument/analyzer/momentum_resolution", "resolution/@units": "1/angstrom", "physical_quantity": "momentum", "type": "estimated" }, - "RESOLUTION[spatial_resolution]": { + "spatial_resolution": { "resolution": "@attrs:metadata/instrument/analyzer/spatial_resolution", "resolution/@units": "µm", "physical_quantity": "length", From e780737ae918d8328992b13dfbe49677ed44a250 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 09:52:18 +0100 Subject: [PATCH 51/88] Fix eln mapping for spatial and momentum resolution in electronanalyser --- pynxtools/dataconverter/readers/mpes/reader.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index 34e4d8620..fa00cad5d 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -180,6 +180,12 @@ def iterate_dictionary(dic, key_string): "beam_TYPE[beam]/Probe": "beam_TYPE[beam_probe]", "beam_TYPE[beam]/Pump": "beam_TYPE[beam_pump]", "sample_history": "sample_history/notes", + "ELECTRONANALYSER[electronanalyser]/RESOLUTION[momentum_resolution]": ( + "ELECTRONANALYSER[electronanalyser]/momentum_resolution" + ), + "ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]": ( + "ELECTRONANALYSER[electronanalyser]/spatial_resolution" + ), } From 44d94e72562a2326fae11a32bb163249723dba4e Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 09:53:43 +0100 Subject: [PATCH 52/88] Updates mpes reference file --- .../readers/mpes/Ref_nexus_mpes.log | 98 ++----------------- 1 file changed, 7 insertions(+), 91 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 02437d5cb..3412b89ed 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -4143,7 +4143,7 @@ NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value NXsensor.nxdl.xml:/value DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/pressure_gauge/value@units [NX_PRESSURE] DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] -DEBUG - ===== GROUP (//entry/instrument/source_probe [NXmpes::/NXentry/NXinstrument/NXsource]): +DEBUG - ===== GROUP (//entry/instrument/source_probe [NXmpes::/NXentry/NXinstrument/NXsource]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: NXinstrument.nxdl.xml:/SOURCE @@ -4210,23 +4210,6 @@ DEBUG - documentation (NXsource.nxdl.xml:/name): DEBUG - Name of source -DEBUG - ===== FIELD (//entry/instrument/source_probe/photon_energy): -DEBUG - value: 21.7 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] -DEBUG - classes: -NXsource.nxdl.xml:/photon_energy -DEBUG - <> -DEBUG - documentation (NXsource.nxdl.xml:/photon_energy): -DEBUG - - The center photon energy of the source, before it is - monochromatized or converted - -DEBUG - ===== ATTRS (//entry/instrument/source_probe/photon_energy@units) -DEBUG - value: eV -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] -DEBUG - classes: -NXsource.nxdl.xml:/photon_energy -DEBUG - NXsource.nxdl.xml:/photon_energy@units [NX_ENERGY] DEBUG - ===== FIELD (//entry/instrument/source_probe/probe): DEBUG - value: b'photon' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] @@ -4271,7 +4254,7 @@ DEBUG - documentation (NXsource.nxdl.xml:/type): DEBUG - type of radiation source (pick one from the enumerated list and spell exactly) -DEBUG - ===== GROUP (//entry/instrument/source_pump [NXmpes::/NXentry/NXinstrument/NXsource]): +DEBUG - ===== GROUP (//entry/instrument/source_pump [NXmpes::/NXentry/NXinstrument/NXsource]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource'] DEBUG - classes: NXinstrument.nxdl.xml:/SOURCE @@ -4338,23 +4321,6 @@ DEBUG - documentation (NXsource.nxdl.xml:/name): DEBUG - Name of source -DEBUG - ===== FIELD (//entry/instrument/source_pump/photon_energy): -DEBUG - value: 1.2 -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] -DEBUG - classes: -NXsource.nxdl.xml:/photon_energy -DEBUG - <> -DEBUG - documentation (NXsource.nxdl.xml:/photon_energy): -DEBUG - - The center photon energy of the source, before it is - monochromatized or converted - -DEBUG - ===== ATTRS (//entry/instrument/source_pump/photon_energy@units) -DEBUG - value: eV -DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_FLOAT'] -DEBUG - classes: -NXsource.nxdl.xml:/photon_energy -DEBUG - NXsource.nxdl.xml:/photon_energy@units [NX_ENERGY] DEBUG - ===== FIELD (//entry/instrument/source_pump/probe): DEBUG - value: b'visible light' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXsource', 'NX_CHAR'] @@ -4489,7 +4455,7 @@ NXentry.nxdl.xml:/PROCESS NXprocess.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== GROUP (//entry/process/distortion [NXmpes::/NXentry/NXprocess/NXdistortion]): +DEBUG - ===== GROUP (//entry/process/distortion [NXmpes::/NXentry/NXprocess/NXdistortion]): DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion'] DEBUG - classes: NXprocess.nxdl.xml:/DISTORTION @@ -4511,16 +4477,6 @@ NXprocess.nxdl.xml:/DISTORTION NXdistortion.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/process/distortion/applied): -DEBUG - value: True -DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_BOOLEAN'] -DEBUG - classes: -NXdistortion.nxdl.xml:/applied -DEBUG - <> -DEBUG - documentation (NXdistortion.nxdl.xml:/applied): -DEBUG - - Has the distortion correction been applied? - DEBUG - ===== FIELD (//entry/process/distortion/cdeform_field): DEBUG - value: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ... DEBUG - classpath: ['NXentry', 'NXprocess', 'NXdistortion', 'NX_FLOAT'] @@ -4579,7 +4535,7 @@ DEBUG - .. _symmetry-guided distortion correction: https://www.sciencedirect.com/science/article/abs/pii/S0304399118303474?via%3Dihub -DEBUG - ===== GROUP (//entry/process/energy_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - ===== GROUP (//entry/process/energy_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/PROCESS/energy_calibration @@ -4612,16 +4568,6 @@ NXprocess.nxdl.xml:/CALIBRATION NXcalibration.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/process/energy_calibration/applied): -DEBUG - value: True -DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_BOOLEAN'] -DEBUG - classes: -NXcalibration.nxdl.xml:/applied -DEBUG - <> -DEBUG - documentation (NXcalibration.nxdl.xml:/applied): -DEBUG - - Has the calibration been applied? - DEBUG - ===== FIELD (//entry/process/energy_calibration/calibrated_axis): DEBUG - value: [ 5.22069940e+01 5.10746894e+01 4.99673811e+01 4.88843387e+01 ... DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] @@ -4682,7 +4628,7 @@ DEBUG - documentation (NXcalibration.nxdl.xml:/original_axis): DEBUG - Vector containing the data coordinates in the original uncalibrated axis -DEBUG - ===== GROUP (//entry/process/kx_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - ===== GROUP (//entry/process/kx_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] DEBUG - classes: NXprocess.nxdl.xml:/CALIBRATION @@ -4704,16 +4650,6 @@ NXprocess.nxdl.xml:/CALIBRATION NXcalibration.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/process/kx_calibration/applied): -DEBUG - value: True -DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_BOOLEAN'] -DEBUG - classes: -NXcalibration.nxdl.xml:/applied -DEBUG - <> -DEBUG - documentation (NXcalibration.nxdl.xml:/applied): -DEBUG - - Has the calibration been applied? - DEBUG - ===== FIELD (//entry/process/kx_calibration/calibrated_axis): DEBUG - value: [-2.68021375 -2.66974416 -2.65927458 -2.64880499 -2.63833541 -2.62786582 ... DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] @@ -4746,7 +4682,7 @@ DEBUG - For linear calibration. Scaling parameter. This should yield the relation `calibrated_axis` = `scaling` * `original_axis` + `offset`. -DEBUG - ===== GROUP (//entry/process/ky_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): +DEBUG - ===== GROUP (//entry/process/ky_calibration [NXmpes::/NXentry/NXprocess/NXcalibration]): DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration'] DEBUG - classes: NXprocess.nxdl.xml:/CALIBRATION @@ -4768,16 +4704,6 @@ NXprocess.nxdl.xml:/CALIBRATION NXcalibration.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/process/ky_calibration/applied): -DEBUG - value: True -DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_BOOLEAN'] -DEBUG - classes: -NXcalibration.nxdl.xml:/applied -DEBUG - <> -DEBUG - documentation (NXcalibration.nxdl.xml:/applied): -DEBUG - - Has the calibration been applied? - DEBUG - ===== FIELD (//entry/process/ky_calibration/calibrated_axis): DEBUG - value: [-2.68021375 -2.66974416 -2.65927458 -2.64880499 -2.63833541 -2.62786582 ... DEBUG - classpath: ['NXentry', 'NXprocess', 'NXcalibration', 'NX_FLOAT'] @@ -4810,7 +4736,7 @@ DEBUG - For linear calibration. Scaling parameter. This should yield the relation `calibrated_axis` = `scaling` * `original_axis` + `offset`. -DEBUG - ===== GROUP (//entry/process/registration [NXmpes::/NXentry/NXprocess/NXregistration]): +DEBUG - ===== GROUP (//entry/process/registration [NXmpes::/NXentry/NXprocess/NXregistration]): DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration'] DEBUG - classes: NXprocess.nxdl.xml:/REGISTRATION @@ -4832,16 +4758,6 @@ NXprocess.nxdl.xml:/REGISTRATION NXregistration.nxdl.xml: DEBUG - @NX_class [NX_CHAR] DEBUG - -DEBUG - ===== FIELD (//entry/process/registration/applied): -DEBUG - value: True -DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NX_BOOLEAN'] -DEBUG - classes: -NXregistration.nxdl.xml:/applied -DEBUG - <> -DEBUG - documentation (NXregistration.nxdl.xml:/applied): -DEBUG - - Has the registration been applied? - DEBUG - ===== FIELD (//entry/process/registration/depends_on): DEBUG - value: b'/entry/process/registration/tranformations/rot_z' DEBUG - classpath: ['NXentry', 'NXprocess', 'NXregistration', 'NX_CHAR'] From 689a0ee2a5b6a51c955df3bd10888dd8eb5a87d6 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 10:01:06 +0100 Subject: [PATCH 53/88] Renamings --- pynxtools/definitions | 2 +- .../dataconverter/readers/mpes/Ref_nexus_mpes.log | 14 ++++++-------- .../dataconverter/readers/mpes/config_file.json | 4 ++-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/pynxtools/definitions b/pynxtools/definitions index ff3c3317c..9e5722e35 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit ff3c3317c2cc590f2d0f98f34c189b7a04f4690b +Subproject commit 9e5722e3524571fe659e1a82d3ff7b5ac73c9061 diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 3412b89ed..4d6b4f6d7 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -2107,16 +2107,13 @@ DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollecti DEBUG - classes: NXlens_em.nxdl.xml:/voltage DEBUG - NXlens_em.nxdl.xml:/voltage@units [NX_VOLTAGE] -DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/mode): +DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/lens_mode): DEBUG - value: b'6kV_kmodem2.0_30VTOF_MoTe2_2340VMCP.sav' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_CHAR'] DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/mode -NXcollectioncolumn.nxdl.xml:/mode -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/mode): -DEBUG - -DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/mode): +NXcollectioncolumn.nxdl.xml:/lens_mode +DEBUG - <> +DEBUG - documentation (NXcollectioncolumn.nxdl.xml:/lens_mode): DEBUG - Labelling of the lens setting in use. @@ -2137,7 +2134,7 @@ DEBUG - The space projected in the angularly dispersive directions, real or reciprocal DEBUG - ===== FIELD (//entry/instrument/electronanalyser/collectioncolumn/scheme): -DEBUG - value: b'angular dispersive' +DEBUG - value: b'momentum dispersive' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXcollectioncolumn', 'NX_CHAR'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme @@ -2146,6 +2143,7 @@ DEBUG - <> DEBUG - enumeration (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme): DEBUG - -> angular dispersive DEBUG - -> spatial dispersive +DEBUG - -> momentum dispersive DEBUG - -> non-dispersive DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/COLLECTIONCOLUMN/scheme): DEBUG - diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index 6833e4eb3..e4310363e 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -103,8 +103,8 @@ }, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]": { "projection": "@attrs:metadata/instrument/analyzer/projection", - "scheme": "angular dispersive", - "mode": "@attrs:metadata/instrument/analyzer/lens_mode", + "scheme": "momentum dispersive", + "lens_mode": "@attrs:metadata/instrument/analyzer/lens_mode", "extractor_voltage": "@attrs:metadata/file/KTOF:Lens:Extr:V", "extractor_voltage/@units": "V", "extractor_current": "@attrs:metadata/file/KTOF:Lens:Extr:I", From 116f0997d0643eba2f89f0d0c2f7e53f5430b854 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 10:11:53 +0100 Subject: [PATCH 54/88] Renamings in NXsample --- .../readers/mpes/Ref_nexus_mpes.log | 43 +------------------ .../readers/mpes/config_file.json | 4 +- 2 files changed, 2 insertions(+), 45 deletions(-) diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 4d6b4f6d7..0335700f5 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -5253,7 +5253,7 @@ DEBUG - increasing displacement. For general axes, an appropriate direction should be chosen. -DEBUG - ===== GROUP (//entry/sample [NXmpes::/NXentry/NXsample]): +DEBUG - ===== GROUP (//entry/sample [NXmpes::/NXentry/NXsample]): DEBUG - classpath: ['NXentry', 'NXsample'] DEBUG - classes: NXmpes.nxdl.xml:/ENTRY/SAMPLE @@ -5395,33 +5395,6 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector -DEBUG - ===== FIELD (//entry/sample/chemical_formula): -DEBUG - value: b'MoTe2' -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] -DEBUG - classes: -NXsample.nxdl.xml:/chemical_formula -DEBUG - <> -DEBUG - documentation (NXsample.nxdl.xml:/chemical_formula): -DEBUG - - The chemical formula specified using CIF conventions. - Abbreviated version of CIF standard: - - * Only recognized element symbols may be used. - * Each element symbol is followed by a 'count' number. A count of '1' may be omitted. - * A space or parenthesis must separate each cluster of (element symbol + count). - * Where a group of elements is enclosed in parentheses, the multiplier for the - group must follow the closing parentheses. That is, all element and group - multipliers are assumed to be printed as subscripted numbers. - * Unless the elements are ordered in a manner that corresponds to their chemical - structure, the order of the elements within any group or moiety depends on - whether or not carbon is present. - * If carbon is present, the order should be: - - - C, then H, then the other elements in alphabetical order of their symbol. - - If carbon is not present, the elements are listed purely in alphabetic order of their symbol. - - * This is the *Hill* system used by Chemical Abstracts. - DEBUG - ===== FIELD (//entry/sample/depends_on): DEBUG - value: b'/entry/sample/transformations/corrected_phi' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] @@ -5576,20 +5549,6 @@ DEBUG - documentation (NXsample.nxdl.xml:/name): DEBUG - Descriptive name of sample -DEBUG - ===== FIELD (//entry/sample/physical_form): -DEBUG - value: b'thin film' -DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] -DEBUG - classes: -NXmpes.nxdl.xml:/ENTRY/SAMPLE/physical_form -NXsample.nxdl.xml:/physical_form -DEBUG - <> -DEBUG - documentation (NXmpes.nxdl.xml:/ENTRY/SAMPLE/physical_form): -DEBUG - -DEBUG - documentation (NXsample.nxdl.xml:/physical_form): -DEBUG - - Physical form of the sample material. - Examples include single crystal, foil, pellet, powder, thin film, disc, foam, gas, liquid, amorphous. - DEBUG - ===== FIELD (//entry/sample/preparation_date): DEBUG - value: b'2019-05-22T14:00:00+00:00' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_DATE_TIME'] diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index e4310363e..ba800ccf0 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -264,12 +264,10 @@ "/ENTRY[entry]/SAMPLE[sample]": { "preparation_date": "@attrs:metadata/sample/preparation_date", "sample_history/notes": "@attrs:metadata/sample/sample_history", - "chemical_formula": "@attrs:metadata/sample/chemical_formula", "description": "@attrs:metadata/sample/chemical_formula", "name": "@attrs:metadata/sample/chemical_formula", "situation": "vacuum", - "SUBSTANCE[substance]/molecular_formula_hill": "@link:/entry/sample/chemical_formula", - "physical_form": "thin film", + "SUBSTANCE[substance]/molecular_formula_hill": "@attrs:metadata/sample/chemical_formula", "temperature": { "temperature_sensor": "@link:/entry/instrument/manipulator/temperature_sensor" }, From 279ba0eaaf876ab4ba096412470c0b586d601aae Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 13:04:38 +0100 Subject: [PATCH 55/88] Properly deal with undocumented @units as discussed w/ @sherjeelshabih --- pynxtools/dataconverter/helpers.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pynxtools/dataconverter/helpers.py b/pynxtools/dataconverter/helpers.py index 4cfe492b9..c7889e427 100644 --- a/pynxtools/dataconverter/helpers.py +++ b/pynxtools/dataconverter/helpers.py @@ -545,10 +545,15 @@ def try_undocumented(data, nxdl_root: ET.Element): nxdl_path = convert_data_converter_dict_to_nxdl_path(path) if entry_name == "@units": - if ( - path.rsplit("/", 1)[0] in data.get_documented() - and path in data.undocumented - ): + field_path = path.rsplit("/", 1)[0] + if field_path in data.get_documented() and path in data.undocumented: + field_requiredness = get_required_string( + nexus.get_node_at_nxdl_path( + nxdl_path=convert_data_converter_dict_to_nxdl_path(field_path), + elem=nxdl_root, + ) + ) + data[field_requiredness][path] = data.undocumented[path] del data.undocumented[path] continue From 3afb4593518dd5f6409b5c7c94fd0f183cc8a835 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 13:21:43 +0100 Subject: [PATCH 56/88] Updates mpes reference file --- .../readers/mpes/Ref_nexus_mpes.log | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log index 0335700f5..8bfb6e7fd 100644 --- a/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log +++ b/tests/data/dataconverter/readers/mpes/Ref_nexus_mpes.log @@ -2436,6 +2436,16 @@ DEBUG - documentation (NXresolution.nxdl.xml:/resolution): DEBUG - The resolution of the physical quantity. +DEBUG - ===== ATTRS (//entry/instrument/electronanalyser/energy_resolution/resolution@units) +DEBUG - value: meV +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution +NXelectronanalyser.nxdl.xml:/energy_resolution/resolution +NXresolution.nxdl.xml:/resolution +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/ELECTRONANALYSER/energy_resolution/resolution@units - REQUIRED, but undefined unit category +DEBUG - NXelectronanalyser.nxdl.xml:/energy_resolution/resolution@units [NX_ENERGY] +DEBUG - NXresolution.nxdl.xml:/resolution@units [NX_ANY] DEBUG - ===== FIELD (//entry/instrument/electronanalyser/energy_resolution/type): DEBUG - value: b'estimated' DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXelectronanalyser', 'NXresolution', 'NX_CHAR'] @@ -3368,6 +3378,16 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector +DEBUG - ===== ATTRS (//entry/instrument/manipulator/sample_bias_voltmeter/value@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value +NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/sample_bias_voltmeter/value@units - REQUIRED, but undefined unit category +DEBUG - NXmanipulator.nxdl.xml:/sample_bias_voltmeter/value@units [NX_VOLTAGE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/instrument/manipulator/temperature_sensor [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXsensor]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor'] DEBUG - classes: @@ -3465,6 +3485,16 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector +DEBUG - ===== ATTRS (//entry/instrument/manipulator/temperature_sensor/value@units) +DEBUG - value: K +DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value +NXmanipulator.nxdl.xml:/temperature_sensor/value +NXsensor.nxdl.xml:/value +DEBUG - NXmpes.nxdl.xml:/ENTRY/INSTRUMENT/MANIPULATOR/temperature_sensor/value@units - REQUIRED, but undefined unit category +DEBUG - NXmanipulator.nxdl.xml:/temperature_sensor/value@units [NX_TEMPERATURE] +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/instrument/manipulator/transformations [NXmpes::/NXentry/NXinstrument/NXmanipulator/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXinstrument', 'NXmanipulator', 'NXtransformations'] DEBUG - classes: @@ -5395,6 +5425,12 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector +DEBUG - ===== ATTRS (//entry/sample/bias/voltmeter/value@units) +DEBUG - value: V +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== FIELD (//entry/sample/depends_on): DEBUG - value: b'/entry/sample/transformations/corrected_phi' DEBUG - classpath: ['NXentry', 'NXsample', 'NX_CHAR'] @@ -5787,6 +5823,12 @@ DEBUG - nominal setpoint or average value - need [n] as may be a vector +DEBUG - ===== ATTRS (//entry/sample/temperature/temperature_sensor/value@units) +DEBUG - value: K +DEBUG - classpath: ['NXentry', 'NXsample', 'NXenvironment', 'NXsensor', 'NX_FLOAT'] +DEBUG - classes: +NXsensor.nxdl.xml:/value +DEBUG - NXsensor.nxdl.xml:/value@units [NX_ANY] DEBUG - ===== GROUP (//entry/sample/transformations [NXmpes::/NXentry/NXsample/NXtransformations]): DEBUG - classpath: ['NXentry', 'NXsample', 'NXtransformations'] DEBUG - classes: From 3b04d231dec10ca30b414fb293fbdcc944146054 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 14:13:52 +0100 Subject: [PATCH 57/88] Correctly map chemical formula --- pynxtools/dataconverter/readers/mpes/reader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index fa00cad5d..843bd15a8 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -175,6 +175,7 @@ def iterate_dictionary(dic, key_string): } REPLACE_NESTED = { + "SAMPLE[sample]/chemical_formula": "SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill", "source_TYPE[source]/Probe": "source_TYPE[source_probe]", "source_TYPE[source]/Pump": "source_TYPE[source_pump]", "beam_TYPE[beam]/Probe": "beam_TYPE[beam_probe]", From 591e87f09c100b6dfaa989250ddc8e719c014d2a Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:44:50 +0100 Subject: [PATCH 58/88] restructure xps sle config file --- .../readers/xps/config/config_sle_specs.json | 272 +++++++++--------- 1 file changed, 137 insertions(+), 135 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 3f372f7e7..1473f5ef9 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -1,40 +1,40 @@ { - "/@default": "entry", - "/ENTRY[entry]": { - "@default": "data", - "/definition":"@eln", + "/@default":"entry", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"@eln", "definition/@version":"@eln", - "title": "@eln", - "start_time": "@eln", - "end_time": "@attrs:metadata/timing/acquisition_stop", - "experiment_institution": "@eln", - "experiment_facility": "@eln", - "experiment_laboratory": "@eln", - "entry_identifier": "@eln", - ####"duration": "@attrs:metadata/timing/acquisition_duration", - ####"duration/@units": "s", - "method": "@xps_token:region/analysis_method" - }, - "/ENTRY[entry]/USER[user]": { - "name": "@eln", - "affiliation": "@eln", - "address": "@eln", - "orcid": "@eln", - "email": "@eln" + "title":"@eln", + "start_time":"@eln", + "end_time":"@eln", + "experiment_institution":"@eln", + "experiment_facility":"@eln", + "experiment_laboratory":"@eln", + "entry_identifier":"@eln", + "duration":"None", + "duration/@units":"s", + "method":"@xps_token:region/analysis_method" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" }, - "/ENTRY[entry]/INSTRUMENT[instrument]": { - "device_information": { - "vendor": "@eln", - "identifier": "@eln", - "model": "@eln" + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" }, - "energy_resolution": { - "physical_quantity": "energy", - "type": "@eln", - "resolution": "@eln", - "resolution/@units": "@eln" + "energy_resolution":{ + "physical_quantity":"energy", + "type":"@eln", + "resolution":"@eln", + "resolution/@units":"@eln" }, - "SOURCE[source_probe]": { + "SOURCE[source_probe]":{ "type":"@eln", "name":"@xps_token:source/name", "probe":"@eln", @@ -42,14 +42,14 @@ "current/@units":"@xps_token:source/emission_current/@units", "voltage":"@xps_token:source/source_voltage", "voltage/@units":"@xps_token:source/source_voltage/@units", - "device_information": { - "vendor": "@eln", - "identifier": "@eln", - "model": "@eln" + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" }, - "associated_beam":{"@link":"/entry/instrument/beam_probe"} + "associated_beam":"@link:/entry/instrument/beam_probe" }, - "BEAM[beam_probe]": { + "BEAM[beam_probe]":{ "distance":"@eln", "distance/@units":"@eln", "incident_energy":"@xps_token:beam/excitation_energy", @@ -59,173 +59,174 @@ "incident_polarization":"None", "incident_polarization/@units":"None", "extent":"None", - "associated_source":{"@link":"/entry/instrument/source_probe"} + "associated_source":"@link:/entry/instrument/source_probe" }, - "ELECTRONANALYSER[electronanalyser]": { + "ELECTRONANALYSER[electronanalyser]":{ "name":"@xps_token:analyser/name", "description":"@eln", "work_function":"@xps_token:analyser/work_function", "work_function/@units":"@xps_token:analyser/work_function/@units", "fast_axes":"None", "slow_axes":"energy", - "device_information": { - "vendor": "@eln", - "model": "@eln", - "identifier": "@eln" + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" }, - "energy_resolution": { - "physical_quantity": "energy", - "type": "estimated", - "resolution": "@xps_token:data/step_size", - "resolution/@units": "@xps_token:data/step_size/@units" + "energy_resolution":{ + "physical_quantity":"energy", + "type":"estimated", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"@xps_token:data/step_size/@units" }, - "transmission_function": { - "@default": "relative_intensity", - "@signal": "", - "@axes":["kinetic_energy", "relative_intensity"], - "kinetic_energy":"None", + "transmission_function":{ + "@default":"relative_intensity", + "@signal":"relative_intensity", + "@axes":["kinetic_energy"], + "kinetic_energy":"@xps_token:transmission_function/kinetic_energy", "kinetic_energy/@units":"@xps_token:transmission_function/kinetic_energy/@units", - "relative_intensity":"@xps_token:collectioncolumn/transmission_function/data" + "relative_intensity":"@xps_token:collectioncolumn/transmission_function/relative_intensity" }, - "COLLECTIONCOLUMN[collectioncolumn]": { + "COLLECTIONCOLUMN[collectioncolumn]":{ "scheme":"@eln", - "mode":"@xps_token:collectioncolumn/lens_mode", + "lens_mode":"@xps_token:collectioncolumn/lens_mode", "projection":"None", "angular_acceptance":"None", "spatial_acceptance":"None", "field_aperture":"None", "contrast_aperture":"None", - "iris": { + "iris":{ "size":"@xps_token:collectioncolumn/iris_diameter", "size/@units":"@xps_token:collectioncolumn/iris_diameter/@units" }, - "device_information": { - "vendor": "@eln", - "model": "@eln", - "identifier": "@eln" + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" }, - "LENS_EM[L1]": { + "LENS_EM[L1]":{ "name":"Lens 1", "voltage":"@xps_token:collectioncolumn/lens1_voltage", "voltage/@units":"@xps_token:collectioncolumn/lens1_voltage/@units" }, - "LENS_EM[L2]": { + "LENS_EM[L2]":{ "name":"Lens 2", "voltage":"@xps_token:collectioncolumn/lens2_voltage", "voltage/@units":"@xps_token:collectioncolumn/lens2_voltage/@units" }, - "LENS_EM[coil]": { + "LENS_EM[coil]":{ "name":"Coil", "current":"@xps_token:collectioncolumn/coil_current", "current/@units":"@xps_token:collectioncolumn/coil_current/@units" }, - "LENS_EM[Pre Defl X]": { + "LENS_EM[Pre Defl X]":{ "name":"Pre-Deflector X", "current":"@xps_token:collectioncolumn/pre_deflector_x_current", "current/@units":"@xps_token:collectioncolumn/pre_deflector_x_current/@units" }, - "LENS_EM[Pre Defl Y]": { + "LENS_EM[Pre Defl Y]":{ "name":"Pre-Deflector Y", "current":"@xps_token:collectioncolumn/pre_deflector_y_current", "current/@units":"@xps_token:collectioncolumn/pre_deflector_y_current/@units" }, - "LENS_EM[Focus Displacement]": { - "name":"Focus Displacement", - "current":"@xps_token:collectioncolumn/focus_displacement_current", - "current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units" - } + "LENS_EM[Focus Displacement]":{ + "name":"Focus Displacement", + "current":"@xps_token:collectioncolumn/focus_displacement_current", + "current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units" + } }, - "ENERGYDISPERSION[energydispersion]": { + "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/scan_mode", "entrance_slit/description":"@xps_token:energydispersion/entrance_slit", "exit_slit/description":"@xps_token:energydispersion/exit_slit", - "device_information": { - "vendor": "@eln", - "model": "@eln", - "identifier": "@eln" + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" }, "diameter":"@eln", "diameter/@units":"@eln" }, - "DETECTOR[detector]": { + "DETECTOR[detector]":{ + "@default":"raw_data", "amplifier_type":"@eln", "detector_type":"@eln", "detector_voltage":"@xps_token:detector/detector_voltage", "detector_voltage/@units":"@xps_token:detector/detector_voltage/@units", - "amplifier_bias":"@xps_token:detector/bias_voltage_electrons/", + "amplifier_bias":"@xps_token:detector/bias_voltage_electrons", "amplifier_bias/@units":"@xps_token:detector/bias_voltage_electrons/@units", "count_time":"@xps_token:detector/dwell_time", "count_time/@units":"@xps_token:detector/dwell_time/@units", - "device_information": { - "vendor": "@eln", - "model": "@eln", - "identifier": "@eln" + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" }, - "raw_data": { + "raw_data":{ "@signal":"raw", "@default":"raw", "raw":"@detector_data:cycles/Cycle_", "raw/@units":"@xps_token:detector/raw_data/raw/@units" } - }, + } }, - "MANIPULATOR[manipulator]": { - "device_information": { - "vendor": "@eln", - "model": "@eln", - "identifier": "@eln" + "MANIPULATOR[manipulator]":{ + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" }, - "temperature_sensor": { + "temperature_sensor":{ "name":"@eln", "measurement":"@eln", "type":"@eln", "attached_to":"@eln", "value":"@eln" }, - "sample_heater": { + "sample_heater":{ "name":"@eln", "physical_quantity":"@eln", "type":"@eln", "heater_power":"@eln", "PID[pid]/setpoint":"@eln" }, - "cryostat": { + "cryostat":{ "name":"None", "physical_quantity":"None", "type":"None", "heater_power":"None", "PID[pid]/setpoint":"None" }, - "drain_current_amperemeter": { + "drain_current_amperemeter":{ "name":"@eln", "measurement":"@eln", "type":"@eln", "value":"@eln" }, - "sample_bias_voltmeter": { + "sample_bias_voltmeter":{ "name":"@eln", "measurement":"@eln", "type":"@eln", "value":"@eln" }, - "sample_bias_potentiostat": { + "sample_bias_potentiostat":{ "name":"@eln", "physical_quantity":"None", "type":"@eln", "PID[pid]/setpoint":"@eln" } }, - "pressure_gauge": { + "pressure_gauge":{ "name":"@eln", "measurement":"@eln", "type":"@eln", "value":"@eln", "value_log/value":"@eln" }, - "flood_gun": { + "flood_gun":{ "name":"@eln", "physical_quantity":"@eln", "type":"@eln", @@ -233,81 +234,82 @@ "current_log/value":"@eln" } }, - "PROCESS[process]": { - "energy_calibration": { - "calibrated_axis":"@data:energy", - "calibrated_axis/@units":"@xps_token:data/energy/type", - "calibration_object": { + "/ENTRY[entry]/PROCESS[process]":{ + "energy_calibration":{ + "calibrated_axis":"@xps_token:process/energy_calibration/energy", + "calibrated_axis/@units":"@xps_token:process/energy_calibration/energy/@units", + "calibration_object":{ "type":"file", - "path":"@xps_token:detector/calibration_file" + "path":"@xps_token:process/energy_calibration/calibration_file/path" } }, - "energy_referencing": { - "level":"None", - "reference_peak":"None", - "binding_energy":"None", - "offset":"None", - "calibrated_axis":"None" + "energy_referencing":{ + "level":"None", + "reference_peak":"None", + "binding_energy":"None", + "offset":"None", + "calibrated_axis":"None" }, - "transmission_correction": { - "transmission_function":{"@link":"/entry/instrument/electronanalyser/transmission_function"}, - "calibration_object": { + "transmission_correction":{ + "transmission_function":"@link:/entry/instrument/electronanalyser/transmission_function", + "calibration_object":{ "type":"file", - "path":"@xps_token:collectioncolumn/transmission_function/file" + "path":"@xps_token:process/transmission_correction/transmission_function/file" } } }, - "SAMPLE[sample]": { + "/ENTRY[entry]/SAMPLE[sample]":{ "name":"@eln", + "sample_id":"@eln", "atom_types":"@eln", "physical_form":"@eln", "situation":"@eln", - "SUBSTANCE[substance]": { + "SUBSTANCE[substance]":{ "name":"@eln", "molecular_mass":"@eln", "cas_number":"@eln", "molecular_formula_hill":"@eln" }, - "sample_history": { - "sample_preparation": { + "sample_history":{ + "sample_preparation":{ "start_time":"@eln", "end_time":"@eln", "description":"@eln", "method":"@eln" }, - "PHYSICAL_PROCESS[sample_loading]": { + "PHYSICAL_PROCESS[sample_loading]":{ "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":{"@link":"/entry/instrument/manipulator/cryostat"} + "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"} + "gas_pressure":{ + "pressure_gauge":"@link:/entry/instrument/detector/pressure_gauge" }, - "bias": { - "potentiostat":{"@link":"/entry/instrument/manipulator/sample_bias_potentiostat"}, - "voltmeter":{"@link":"/entry/instrument/manipulator/sample_bias_voltmeter"} + "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"} + "drain_current":{ + "amperemeter":"@link:/entry/instrument/manipulator/drain_current_amperemeter" }, - "flood_gun_current": { - "amperemeter":{"@link":"/entry/instrument/manipulator/flood_gun"} + "flood_gun_current":{ + "flood_gun":"@link:/entry/instrument/detector0/flood_gun" } }, - "data": { - "@signal":"", + "/ENTRY[entry]/data":{ + "@signal":"data", "@default":"data", "data":"@data:cycle", "data/@units":"@xps_token:data/intensity/@units", "energy":"@data:energy", - "energy/@type":"@xps_token:data/energy_type", + "energy/@type":"@xps_token:data/energy/@type", "energy/@units":"@xps_token:data/energy/@units", "/@energy_indices":"None", "@energy_depends":"None" From 467b1632f7acb01abde2e18e1d8fe308a90cff9b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:48:14 +0100 Subject: [PATCH 59/88] proper parsing of calibration data and transmission function --- .../readers/xps/sle/sle_specs.py | 79 ++++++++++++++----- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index cb8e1d04e..2fb99e016 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -70,8 +70,11 @@ def __init__(self): "data/step_size": "eV", "detector/detector_voltage": "V", "detector/dwell_time": "s", - "detector/raw_data/raw": "counts", ################# + "detector/raw_data/raw": "counts_per_second ", + "instrument/polar_angle": "degree ", + "instrument/azimuth_angle": "degree", "energydispersion/pass_energy": "eV", + "region/start_energy": "eV", "source/emission_current": "A", "source/source_voltage": "V", "transmission_function/kinetic_energy": "eV", @@ -142,7 +145,7 @@ def construct_data(self): "focus_displacement_current [nU]", "iris_diameter", "lens_mode", - "transmission_function/data", + "transmission_function/relative_intensity", "transmission_function/file", "voltage_range", ], @@ -155,25 +158,26 @@ def construct_data(self): "detector": [ "bias_voltage_electrons [V]", "bias_voltage_ions [V]", - "calibration_file/dir", - "calibration_file", "detector_voltage [V]", "dwell_time", ], "manipulator": [], - "calibration": [ - "transmission_function/data", - "transmission_function/file", + "process/energy_calibration": [ "calibration_file/dir", - "calibration_file", + "calibration_file/path", + "energy/@units", + ], + "process/transmission_correction": [ + "transmission_function/kinetic_energy", + "transmission_function/relative_intensity", + "transmission_function/file", ], "data": [ - "energy_type", + "energy/@type", "energy/@units", "intensity/@units", "n_values", "step_size", - "dwell_time", ], "region": [ "analysis_method", @@ -208,7 +212,8 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): "energydispersion": f"{analyser_parent}/energydispersion", "detector": f"{analyser_parent}/detector", "manipulator": f"{instrument_parent}/manipulator", - "calibration": f"{instrument_parent}/calibration", + "process/energy_calibration": f"{instrument_parent}/process/energy_calibration", + "process/transmission_correction": f"{instrument_parent}/process/transmission_correction", "sample": f"{region_parent}/sample", "data": f"{region_parent}/data", "region": f"{region_parent}/region", @@ -221,7 +226,6 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): self._xps_dict[f"{root}/{mpes_key}"] = spectrum[spectrum_key] unit_key = f"{grouping}/{spectrum_key}" - units = self._get_units_for_key(unit_key) if units: self._xps_dict[f"{root}/{mpes_key}/@units"] = units @@ -235,6 +239,9 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): detector_data_key_child = construct_detector_data_key(spectrum) energy = np.array(spectrum["data"]["x"]) + # Add energy axis to energy_calibration + calib_energy_key = f'{path_map["process/energy_calibration"]}/energy' + self._xps_dict[calib_energy_key] = energy # If multiple spectra exist to entry, only create a new # xr.Dataset if the entry occurs for the first time. @@ -284,6 +291,12 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): data=cps, coords={"energy": energy} ) + # Add unit for detector data + detector_data_unit_key = f"{path_map['detector']}/raw_data/raw/@units" + self._xps_dict[detector_data_unit_key] = self._get_units_for_key( + "detector/raw_data/raw" + ) + def _get_units_for_key(self, unit_key): """ Get correct units for a given key. @@ -327,7 +340,7 @@ def __init__(self): "ElectronEnergy": "start_energy", "SpectrumID": "spectrum_id", "EpassOrRR": "pass_energy", - "EnergyType": "energy_type", + "EnergyType": "energy/@type", "Samples": "n_values", "Wf": "work_function", "Step": "step", @@ -367,7 +380,7 @@ def __init__(self): } self.sql_metadata_map = { - "EnergyType": "energy_type", + "EnergyType": "energy/@type", "EpassOrRR": "pass_energy", "Wf": "work_function", "Timestamp": "time_stamp", @@ -384,7 +397,8 @@ def __init__(self): ] self.value_map = { - "energy_type": self._change_energy_type, + "energy/@type": self._change_energy_type, + "excitation_energy": self._convert_excitation_energy, "time_stamp": self._convert_date_time, # "measurement_type": self._convert_date_measurement_type, "energy_scan_mode": self._convert_energy_scan_mode, @@ -526,7 +540,9 @@ def _append_scan_data(self): scan["cps_calib"] = copy.copy(scan["cps_ch_0"]) # Add transmission function - scan["transmission_function/data"] = np.array(transmission_data) + scan["transmission_function/relative_intensity"] = np.array( + transmission_data + ) # add metadata including scan, loop no and datetime scan_metadata = self._get_scan_metadata(raw_ids[scan_no]) @@ -1213,12 +1229,12 @@ def _get_energy_data(self, spectrum): List of uniformly separated energy values. """ - if spectrum["energy_type"] == "binding": + if spectrum["energy/@type"] == "binding": start = spectrum["start_energy"] step = spectrum["step_size"] points = spectrum["n_values"] energy = [start - i * step for i in range(points)] - elif spectrum["energy_type"] == "kinetic": + elif spectrum["energy/@type"] == "kinetic": start = spectrum["start_energy"] step = spectrum["step_size"] points = spectrum["n_values"] @@ -1314,6 +1330,13 @@ def _change_energy_type(self, energy_type): return "kinetic" return None + def _convert_excitation_energy(self, excitation_energy): + """ + Convert the excitation_energy to a float. + + """ + return float(excitation_energy) + def _convert_date_time(self, timestamp): """ Convert the native time format to the one we decide to use. @@ -1464,7 +1487,17 @@ def _convert_to_common_format(self): spec.pop(channel_key) spec["energy/@units"] = "eV" - spec["intensity/@units"] = "Counts per Second" + spec["intensity/@units"] = "counts_per_second" + + # Add energy axis for TF data. + if spec["energy/@type"] == "binding": + tf_energy = np.array( + [spec["excitation_energy"] - x for x in spec["data"]["x"]] + ) + elif spec["energy/@type"] == "kinetic": + tf_energy = spec["data"]["x"] + + spec["transmission_function/kinetic_energy"] = tf_energy def _remove_fixed_energies(self): """ @@ -1614,7 +1647,9 @@ def _extract_comm_settings(self, comm_settings): common_spectrum_settings.update(setting.attrib) elif setting.tag == "EnergyChannelCalibration": common_spectrum_settings["calibration_file/dir"] = setting.attrib["Dir"] - common_spectrum_settings["calibration_file"] = setting.attrib["File"] + common_spectrum_settings["calibration_file/path"] = setting.attrib[ + "File" + ] elif setting.tag == "Transmission": common_spectrum_settings["transmission_function/file"] = setting.attrib[ "File" @@ -1788,7 +1823,9 @@ def _extract_comm_settings(self, comm_settings): common_spectrum_settings.update(setting.attrib) elif setting.tag == "EnergyChannelCalibration": common_spectrum_settings["calibration_file/dir"] = setting.attrib["Dir"] - common_spectrum_settings["calibration_file"] = setting.attrib["File"] + common_spectrum_settings["calibration_file/path"] = setting.attrib[ + "File" + ] elif setting.tag == "Transmission": common_spectrum_settings["transmission_function/file"] = setting.attrib[ "File" From e1f13c58b22ad81007f3ee4871dfd0fd739d430b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 15:07:42 +0100 Subject: [PATCH 60/88] add @default to electronanalyser --- pynxtools/dataconverter/readers/xps/config/config_sle_specs.json | 1 + 1 file changed, 1 insertion(+) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 1473f5ef9..4c8668001 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -62,6 +62,7 @@ "associated_source":"@link:/entry/instrument/source_probe" }, "ELECTRONANALYSER[electronanalyser]":{ + "@default": "detector0", "name":"@xps_token:analyser/name", "description":"@eln", "work_function":"@xps_token:analyser/work_function", From 73728f759779aa483ce21af8ca7df8af88c0d3d8 Mon Sep 17 00:00:00 2001 From: domna Date: Fri, 19 Jan 2024 15:44:23 +0100 Subject: [PATCH 61/88] Adds additional mappings --- pynxtools/dataconverter/readers/mpes/reader.py | 4 ++++ tests/data/dataconverter/readers/mpes/config_file.json | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/mpes/reader.py b/pynxtools/dataconverter/readers/mpes/reader.py index 843bd15a8..4bec171d9 100644 --- a/pynxtools/dataconverter/readers/mpes/reader.py +++ b/pynxtools/dataconverter/readers/mpes/reader.py @@ -187,6 +187,10 @@ def iterate_dictionary(dic, key_string): "ELECTRONANALYSER[electronanalyser]/RESOLUTION[spatial_resolution]": ( "ELECTRONANALYSER[electronanalyser]/spatial_resolution" ), + "SAMPLE[sample]/gas_pressure": "INSTRUMENT[instrument]/pressure_gauge/value", + "SAMPLE[sample]/temperature": ( + "INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value" + ), } diff --git a/tests/data/dataconverter/readers/mpes/config_file.json b/tests/data/dataconverter/readers/mpes/config_file.json index ba800ccf0..a43d282fa 100644 --- a/tests/data/dataconverter/readers/mpes/config_file.json +++ b/tests/data/dataconverter/readers/mpes/config_file.json @@ -229,7 +229,6 @@ "value": "@attrs:metadata/file/KTOF:Lens:Sample:V", "value/@units": "V" }, - "depends_on": "/entry/instrument/manipulator/transformations/trans_z", "TRANSFORMATIONS[transformations]": { "AXISNAME[trans_z]": -0.32, From e2cc8679977c004808714ecb8046abc465fbf226 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:07:00 +0100 Subject: [PATCH 62/88] remove detector test links from XPS config file --- .../readers/xps/config/config_sle_specs.json | 7 ++- .../xps/config/config_sle_specs_old.json | 45 ------------------- 2 files changed, 3 insertions(+), 49 deletions(-) delete mode 100644 pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 4c8668001..d6cb0092b 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -198,7 +198,6 @@ "name":"None", "physical_quantity":"None", "type":"None", - "heater_power":"None", "PID[pid]/setpoint":"None" }, "drain_current_amperemeter":{ @@ -215,7 +214,7 @@ }, "sample_bias_potentiostat":{ "name":"@eln", - "physical_quantity":"None", + "physical_quantity":"@eln", "type":"@eln", "PID[pid]/setpoint":"@eln" } @@ -291,7 +290,7 @@ "cryostat":"None" }, "gas_pressure":{ - "pressure_gauge":"@link:/entry/instrument/detector/pressure_gauge" + "pressure_gauge":"@link:/entry/instrument/pressure_gauge" }, "bias":{ "potentiostat":"@link:/entry/instrument/manipulator/sample_bias_potentiostat", @@ -301,7 +300,7 @@ "amperemeter":"@link:/entry/instrument/manipulator/drain_current_amperemeter" }, "flood_gun_current":{ - "flood_gun":"@link:/entry/instrument/detector0/flood_gun" + "flood_gun":"@link:/entry/instrument/flood_gun" } }, "/ENTRY[entry]/data":{ diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json deleted file mode 100644 index 0897a4f23..000000000 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_old.json +++ /dev/null @@ -1,45 +0,0 @@ -{ -# "/ENTRY[entry]/DATA[data]/@signal": "", -# "/ENTRY[entry]/DATA[data]/data": "@data:cycle", -# "/ENTRY[entry]/DATA[data]/data/@units": "CPS", -# "/ENTRY[entry]/DATA[data]/energy": "@data:energy", -# "/ENTRY[entry]/DATA[data]/energy/@type": "binding energy", -# "/ENTRY[entry]/DATA[data]/energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - - - - - - - - "/ENTRY[entry]/SAMPLE[sample]/bias": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "None", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "None", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/orcid": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/end_time": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/title": "@eln" -} From bc521f8c0dd49f4ca0e1aa974277df0330a450fd Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:15:56 +0100 Subject: [PATCH 63/88] major update to metadata parsing in basic XPS reader --- pynxtools/dataconverter/readers/xps/reader.py | 384 +++++++++++------- pynxtools/definitions | 2 +- 2 files changed, 231 insertions(+), 155 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index 154926f59..3e8d96ec9 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -19,8 +19,7 @@ # limitations under the License. # from pathlib import Path -from typing import Any, Dict, Set, List -from typing import Tuple +from typing import Any, Dict, Set, List, Tuple import sys import json import datetime @@ -29,17 +28,26 @@ import numpy as np from pynxtools.dataconverter.readers.base.reader import BaseReader -from pynxtools.dataconverter.readers.xps.file_parser import XpsDataFileParser -from pynxtools.dataconverter.readers.utils import flatten_and_replace, FlattenSettings +from pynxtools.dataconverter.readers.utils import ( + FlattenSettings, + flatten_and_replace, + parse_flatten_json, +) from pynxtools.dataconverter.template import Template from pynxtools.dataconverter.helpers import extract_atom_types +from pynxtools.dataconverter.readers.xps.file_parser import XpsDataFileParser +from pynxtools.dataconverter.readers.xps.reader_utils import construct_entry_name + np.set_printoptions(threshold=sys.maxsize) XPS_TOKEN = "@xps_token:" XPS_DATA_TOKEN = "@data:" XPS_DETECTOR_TOKEN = "@detector_data:" ELN_TOKEN = "@eln" +LINK_TOKEN = "link" +TOKEN_SET = {XPS_TOKEN, XPS_DATA_TOKEN, XPS_DETECTOR_TOKEN, ELN_TOKEN} + # Track entries for using for eln data ENTRY_SET: Set[str] = set() DETECTOR_SET: Set[str] = set() @@ -49,43 +57,25 @@ CONVERT_DICT = { "unit": "@units", "version": "@version", - "User": "USER[user]", - "Instrument": "INSTRUMENT[instrument]", - "Source": "SOURCE[source_probe]", - "Beam": "BEAM[beam_probe]", - "Analyser": "ELECTRONANALYSER[electronanalyser]", - "Collectioncolumn": "COLLECTIONCOLUMN[collectioncolumn]", - "Energydispersion": "ENERGYDISPERSION[energydispersion]", - "Detector": "DETECTOR[detector]", - "Manipulator": "MANIPULATOR[manipulator]", - "PID": "PID[pid]", - "Process": "PROCESS[process]", - "Sample": "SAMPLE[sample]", - "Substance": "SUBSTANCE[substance]", + "user": "USER[user]", + "instrument": "INSTRUMENT[instrument]", + "source_probe": "SOURCE[source_probe]", + "beam_probe": "BEAM[beam_probe]", + "analyser": "ELECTRONANALYSER[electronanalyser]", + "collectioncolumn": "COLLECTIONCOLUMN[collectioncolumn]", + "energydispersion": "ENERGYDISPERSION[energydispersion]", + "detector": "DETECTOR[detector]", + "manipulator": "MANIPULATOR[manipulator]", + "pid": "PID[pid]", + "process": "PROCESS[process]", + "sample": "SAMPLE[sample]", + "substance": "SUBSTANCE[substance]", # "Data": "DATA[data]", } REPLACE_NESTED: Dict[str, str] = {} -def construct_entry_name(key): - """Construct entry name from vendor, sample_name and region name""" - - components = key.split("/") - try: - # entry: vendor__sample__name_of_scan_rerion - entry_name = ( - f"{components[2]}" - f"__" - f'{components[3].split("_", 1)[1]}' - f"__" - f'{components[5].split("_", 1)[1]}' - ) - except IndexError: - entry_name = "" - return entry_name - - def find_entry_and_value(xps_data_dict, key_part, dt_typ): """Construct the entry name and pick up the corresponding data for that for that entry. @@ -94,7 +84,7 @@ def find_entry_and_value(xps_data_dict, key_part, dt_typ): entries_values = {} if dt_typ == XPS_TOKEN: for key, val in xps_data_dict.items(): - if key_part in key: + if key.endswith(key_part): entry = construct_entry_name(key) entries_values[entry] = val @@ -105,23 +95,47 @@ def find_entry_and_value(xps_data_dict, key_part, dt_typ): return entries_values +def get_entries_and_detectors(config_dict, xps_data_dict): + """Get all entries in the xps_data_dict""" + for key, value in config_dict.items(): + for token in [XPS_DATA_TOKEN, XPS_DETECTOR_TOKEN, XPS_TOKEN]: + try: + key_part = value.split(token)[-1] + entries_values = find_entry_and_value( + xps_data_dict, key_part, dt_typ=token + ) + + for entry, data in entries_values.items(): + if entry: + ENTRY_SET.add(entry) + if token == XPS_DETECTOR_TOKEN: + chan_count = "_chan" + # Iteration over scan + for data_var in data.data_vars: + if chan_count in data_var: + detector_num = data_var.split("_chan_")[-1] + detector_nm = f"detector{detector_num}" + DETECTOR_SET.add(detector_nm) + except AttributeError: + continue + + # pylint: disable=too-many-locals # pylint: disable=too-many-statements -def fill_data_group(key, entries_values, config_dict, template, entry_set): - """Fill out fileds and attributes for NXdata""" +def fill_data_group(key, entries_values, config_dict, template): + """Fill out fields and attributes for NXdata""" survey_count_ = 0 count = 0 for entry, xr_data in entries_values.items(): - entry_set.add(entry) modified_key = key.replace("entry", entry) modified_key = modified_key.replace("[data]/data", "[data]") root = key[0] - modifid_entry = key[0:13] - modifid_entry = modifid_entry.replace("entry", entry) + modified_entry = key[0:13] + modified_entry = modified_entry.replace("entry", entry) - template[f"{modifid_entry}/@default"] = "data" + template[f"{modified_entry}/@default"] = "data" # Set first Survey as default for .nxs file if "Survey" in entry and survey_count_ == 0: @@ -149,28 +163,20 @@ def fill_data_group(key, entries_values, config_dict, template, entry_set): template[key_indv_scn_dt] = xr_data[data_var].data template[key_indv_scn_dt_unit] = config_dict[f"{key}/@units"] - key_data = f"{modified_key}/data" - key_data_unit = f"{key_data}/@units" - - key_signal = f"{modified_key}/@signal" - - be_nm = "BE" - be_index = 0 - key_be = f"{modified_key}/{be_nm}" - key_be_unit = f"{key_be}/@units" - key_be_axes = f"{modified_key}/@axes" - key_be_ind = f"{modified_key}/@{be_nm}_indices" + data_key = f"{modified_key}/data" + data_unit_key = f"{data_key}/@units" + data_default_key = f"{modified_key}/@default" + data_signal_key = f"{modified_key}/@signal" + data_axis_key = f"{modified_key}/@axes" - # setting up AXISNAME - axisname = "AXISNAME[axisname]" - long_name = "Binding Energy" - key_ax_mn = f"{modified_key}/{axisname}" - key_ax_ln_nm = f"{modified_key}/{axisname}/@long_name" + energy_key = f"{modified_key}/energy" + energy_unit_key = f"{energy_key}/@units" + energy_indices_key = f"{modified_key}/@energy_indices" + energy_indices_key = f"{modified_key}/@energy_depends" - key_nxclass = f"{modified_key}/@NX_class" + template[data_signal_key] = "data" - template[key_signal] = "data" - template[key_data] = np.mean( + template[data_key] = np.mean( [ xr_data[x_arr].data for x_arr in xr_data.data_vars @@ -179,7 +185,7 @@ def fill_data_group(key, entries_values, config_dict, template, entry_set): axis=0, ) - template[f"{key_data}_errors"] = np.std( + template[f"{data_key}_errors"] = np.std( [ xr_data[x_arr].data for x_arr in xr_data.data_vars @@ -188,124 +194,191 @@ def fill_data_group(key, entries_values, config_dict, template, entry_set): axis=0, ) - template[key_data_unit] = config_dict[f"{key}/@units"] + template[data_unit_key] = config_dict[f"{key}/@units"] template[key_be_unit] = "eV" template[key_be] = binding_energy_coord - template[key_be_axes] = be_nm - template[key_be_ind] = be_index + template[key_be_axes] = energy_name + template[key_be_ind] = energy_index template[key_nxclass] = "NXdata" template[key_ax_ln_nm] = long_name - template[key_ax_mn] = be_index + template[key_ax_mn] = energy_index + + # ============================================================================= + # "data":{ + # "@signal":"", + # "@default":"data", + # "data":"@data:cycle", + # "data/@units":"@xps_token:data/intensity/@units", + # "energy":"@data:energy", + # "energy/@type":"@xps_token:data/energy_type", + # "energy/@units":"@xps_token:data/energy/@units", + # "/@energy_indices":"None", + # "@energy_depends":"None" + # + # + # + # + # + # "data":{ + # "@signal":"", + # "@":"data", + # "data":"@data:cycle", + # "data/@units":"@xps_token:data/intensity/@units", + # "energy":"@data:energy", + # "energy/@type":"@xps_token:data/energy_type", + # "energy/@units":"@xps_token:data/energy/@units", + # "/@":"None", + # "@energy_depends":"None" + # + # + # ============================================================================= + energy_name = "energy" + energy_index = 0 + key_be = f"{modified_key}/{energy_name}" + key_be_unit = f"{key_be}/@units" + key_be_axes = f"{modified_key}/@axes" + key_be_ind = f"{modified_key}/@{energy_name}_indices" + + # setting up AXISNAME + axisname = "AXISNAME[axisname]" + long_name = "Binding Energy" + key_ax_mn = f"{modified_key}/{axisname}" + key_ax_ln_nm = f"{modified_key}/{axisname}/@long_name" + + key_nxclass = f"{modified_key}/@NX_class" -def fill_detector_group(key, entries_values, config_dict, template, entry_set): +def fill_detector_group(key, entries_values, config_dict, template): """Fill out fileds and attributes for NXdetector/NXdata""" for entry, xr_data in entries_values.items(): - entry_set.add(entry) - + cycle_count = "cycle" + scan_count = "_scan" chan_count = "_chan" # Iteration over scan for data_var in xr_data.data_vars: if chan_count in data_var: - detector_num = data_var.split("_chan")[-1] + detector_num = data_var.split("_chan_")[-1] detector_nm = f"detector{detector_num}" - DETECTOR_SET.add(detector_nm) - scan_num = data_var.split("_scan")[-1].split("_chan")[0] + cycle_scan_num = data_var.split(chan_count)[0] + print(cycle_scan_num) + scan_num = 0 + # (scan_count)[-1].split(chan_count)[0] scan_nm = f"scan_{scan_num}" modified_key = key.replace("entry", entry) modified_key = modified_key.replace("[detector]", f"[{detector_nm}]") - modified_key = modified_key.replace("[data]", f"[{scan_nm}]") modified_key_unit = modified_key + "/@units" + scan_key = modified_key.replace("raw_data/raw", f"raw_data/{scan_nm}") + + template[scan_key] = xr_data[data_var].data + + +def fill_template_with_value(key, value, template): + """ + Fill NeXus template with a key-value pair. + + Parameters + ---------- + key : str + DESCRIPTION. + value : + Any value coming from the XPS, config, or ELN file. + template : Template + A NeXus template. + + """ + if value is None or str(value) == "None": + return + + # Do for all entry names + for entry in ENTRY_SET: + atom_types: List = [] + if "chemical_formula" in key: + atom_types = list(extract_atom_types(value)) + + if isinstance(value, datetime.datetime): + value = value.isoformat() + + elif isinstance(value, dict) and LINK_TOKEN in value: + link_text = value[LINK_TOKEN] + link_text = link_text.replace("entry", f"{entry}") + value = {LINK_TOKEN: link_text} + + modified_key = key.replace("[entry]", f"[{entry}]") - template[modified_key] = xr_data[data_var].data - key_indv_chan_sginal = modified_key.replace("/raw", "/@signal") - template[key_indv_chan_sginal] = "raw" - template[modified_key_unit] = config_dict[f"{key}/@units"] + # Do for all detectors + if "[detector]" in key: + for detector in DETECTOR_SET: + detr_key = modified_key.replace("[detector]", f"[{detector}]") + template[detr_key] = value + if isinstance(value, dict) and LINK_TOKEN in value: + link_text = value[LINK_TOKEN] + if "/detector/" in link_text: + # Only replace if generic detector is given in + # link. + link_text = link_text.replace("detector", f"{detector}") + value = {LINK_TOKEN: link_text} -def fill_template_with_xps_data(config_dict, xps_data_dict, template, entry_set): + template[detr_key] = value + else: + template[modified_key] = value + + if atom_types: + modified_key = modified_key.replace("chemical_formula", "atom_types") + template[modified_key] = ", ".join(atom_types) + + +def fill_template_with_xps_data(config_dict, xps_data_dict, template): """Collect the xps data from xps_data_dict and store them into template. We use searching_keys for separating the data from xps_data_dict. """ - for key, value in config_dict.items(): - if XPS_DATA_TOKEN in str(value): - key_part = value.split(XPS_DATA_TOKEN)[-1] - entries_values = find_entry_and_value( - xps_data_dict, key_part, dt_typ=XPS_DATA_TOKEN - ) + for key, config_value in config_dict.items(): + if isinstance(config_value, str) and any( + token in config_value for token in TOKEN_SET + ): + # =========================================================================== + # if XPS_DATA_TOKEN in str(config_value): + # 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 + # ) + # + # fill_data_group(key, entries_values, config_dict, template) + # =========================================================================== + + if XPS_DETECTOR_TOKEN in str(config_value): + 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 + ) + + fill_detector_group(key, entries_values, config_dict, template) + + elif XPS_TOKEN in str(config_value): + token = config_value.split(XPS_TOKEN)[-1] + entries_values = find_entry_and_value( + xps_data_dict, token, dt_typ=XPS_TOKEN + ) + for entry, ent_value in entries_values.items(): + fill_template_with_value(key, ent_value, template) # - fill_data_group(key, entries_values, config_dict, template, entry_set) - - if XPS_DETECTOR_TOKEN in str(value): - key_part = value.split(XPS_DATA_TOKEN)[-1] - entries_values = find_entry_and_value( - xps_data_dict, key_part, dt_typ=XPS_DETECTOR_TOKEN - ) + else: + # Fill with config value. + fill_template_with_value(key, config_value, template) - fill_detector_group(key, entries_values, config_dict, template, entry_set) - elif XPS_TOKEN in str(value): - token = value.split(XPS_TOKEN)[-1] - entries_values = find_entry_and_value( - xps_data_dict, token, dt_typ=XPS_TOKEN - ) - for entry, ent_value in entries_values.items(): - entry_set.add(entry) - modified_key = key.replace("[entry]", f"[{entry}]") - template[modified_key] = ent_value - try: - template[f"{modified_key}/@units"] = config_dict[f"{key}/@units"] - except KeyError: - pass - - -# pylint: disable=too-many-branches -def fill_template_with_eln_data(eln_data_dict, config_dict, template, entry_set): +def fill_template_with_eln_data(eln_data_dict, config_dict, template): """Fill the template from provided eln data""" - - def fill_atom_types(key): - atom_types: List = [] - field_value = eln_data_dict[key] - - if "chemical_formula" in key: - atom_types = list(extract_atom_types(field_value)) - - if field_value is None: - return - - for entry in entry_set: - modified_key = key.replace("[entry]", f"[{entry}]") - if isinstance(field_value, datetime.datetime): - field_value = field_value.isoformat() - template[modified_key] = field_value - - if atom_types: - modified_key = modified_key.replace("chemical_formula", "atom_types") - template[modified_key] = ", ".join(atom_types) - - def fill_from_value(key): - field_value = eln_data_dict[key] - if not field_value: - return - # Do for all entry name - for entry in entry_set: - modified_key = key.replace("[entry]", f"[{entry}]") - # Do for all detector - if "[detector]" in key: - for detector in DETECTOR_SET: - detr_key = modified_key.replace("[detector]", f"[{detector}]") - template[detr_key] = field_value - else: - template[modified_key] = field_value - - for key, val in config_dict.items(): - if ELN_TOKEN in str(val): - fill_atom_types(key) - elif key in list(eln_data_dict.keys()): - fill_from_value(key) + for key, config_value in config_dict.items(): + if ELN_TOKEN in str(config_value): + field_value = eln_data_dict[key] + fill_template_with_value(key, field_value, template) + elif key in eln_data_dict: + field_value = eln_data_dict[key] + fill_template_with_value(key, field_value, template) def concatenate_values(value1, value2): @@ -388,12 +461,15 @@ def read( if "config" in file: config_file = Path(file) - with open(config_file, encoding="utf-8", mode="r") as cfile: - config_dict = parse_flatten_json(cfile) + config_dict = parse_flatten_json(config_file) + + get_entries_and_detectors(config_dict, xps_data_dict) + fill_template_with_xps_data(config_dict, xps_data_dict, template) - fill_template_with_xps_data(config_dict, xps_data_dict, template, ENTRY_SET) if eln_data_dict: - fill_template_with_eln_data(eln_data_dict, config_dict, template, ENTRY_SET) + # Filling in ELN metadata and overwriting the common + # paths by giving preference to the ELN metadata + fill_template_with_eln_data(eln_data_dict, config_dict, template) else: raise ValueError( "Eln file must be submited with some required fields and attributes." diff --git a/pynxtools/definitions b/pynxtools/definitions index ff3c3317c..9e5722e35 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit ff3c3317c2cc590f2d0f98f34c189b7a04f4690b +Subproject commit 9e5722e3524571fe659e1a82d3ff7b5ac73c9061 From b630d2e60c32aa368470d505f31f7b2e6dea1463 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:21:35 +0100 Subject: [PATCH 64/88] mypy fixes --- pynxtools/dataconverter/readers/xps/reader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index 3e8d96ec9..b55073f13 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -459,7 +459,7 @@ def read( # This code is not very robust. elif file_ext == "json": if "config" in file: - config_file = Path(file) + config_file = file config_dict = parse_flatten_json(config_file) From 9eee7a305b2bf4505a61f236790ceb47cecd26b0 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 16:58:05 +0100 Subject: [PATCH 65/88] correct parsing of XPS detector data --- pynxtools/dataconverter/readers/xps/reader.py | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index b55073f13..15c76110e 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -248,7 +248,7 @@ def fill_data_group(key, entries_values, config_dict, template): key_nxclass = f"{modified_key}/@NX_class" -def fill_detector_group(key, entries_values, config_dict, template): +def fill_detector_group(key, entries_values, config_dict, xps_data_dict, template): """Fill out fileds and attributes for NXdetector/NXdata""" for entry, xr_data in entries_values.items(): @@ -256,22 +256,37 @@ def fill_detector_group(key, entries_values, config_dict, template): scan_count = "_scan" chan_count = "_chan" + # 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 - for data_var in xr_data.data_vars: + 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} + + for data_var in data_vars: if chan_count in data_var: detector_num = data_var.split("_chan_")[-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] - print(cycle_scan_num) - scan_num = 0 - # (scan_count)[-1].split(chan_count)[0] - scan_nm = f"scan_{scan_num}" modified_key = key.replace("entry", entry) modified_key = modified_key.replace("[detector]", f"[{detector_nm}]") - modified_key_unit = modified_key + "/@units" - scan_key = modified_key.replace("raw_data/raw", f"raw_data/{scan_nm}") + cycle_scan_key = modified_key.replace( + "raw_data/raw", f"raw_data/{cycle_scan_num}" + ) + cycle_scan_key_unit = modified_key + "/@units" + template[cycle_scan_key] = xr_data[data_var].data + template[f"{cycle_scan_key}/@units"] = units - template[scan_key] = xr_data[data_var].data + # 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) def fill_template_with_value(key, value, template): @@ -355,7 +370,9 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): xps_data_dict, key_part, dt_typ=XPS_DETECTOR_TOKEN ) - fill_detector_group(key, entries_values, config_dict, template) + fill_detector_group( + key, entries_values, config_dict, xps_data_dict, template + ) elif XPS_TOKEN in str(config_value): token = config_value.split(XPS_TOKEN)[-1] From 1c00dd504ca05ddddfe6158acaf0097fde22e9b0 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:50:46 +0100 Subject: [PATCH 66/88] link energy data from calibration data --- .../dataconverter/readers/xps/config/config_sle_specs.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index d6cb0092b..4866137f0 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -306,12 +306,13 @@ "/ENTRY[entry]/data":{ "@signal":"data", "@default":"data", + "@axes":["energy"], "data":"@data:cycle", "data/@units":"@xps_token:data/intensity/@units", - "energy":"@data:energy", + "energy":"@link:/entry/process/energy_calibration/calibrated_axis", "energy/@type":"@xps_token:data/energy/@type", "energy/@units":"@xps_token:data/energy/@units", - "/@energy_indices":"None", + "@energy_indices":"None", "@energy_depends":"None" } } \ No newline at end of file From 52fdde45e566e4ac0c9d4bddd2ebe1336942611d Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:54:10 +0100 Subject: [PATCH 67/88] proper writing of NXdata field in XPS reader --- pynxtools/dataconverter/readers/xps/reader.py | 129 +++++------------- 1 file changed, 32 insertions(+), 97 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index 15c76110e..d2e8c9fff 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -129,123 +129,60 @@ def fill_data_group(key, entries_values, config_dict, template): count = 0 for entry, xr_data in entries_values.items(): - modified_key = key.replace("entry", entry) - modified_key = modified_key.replace("[data]/data", "[data]") + # print(entry) root = key[0] - modified_entry = key[0:13] - modified_entry = modified_entry.replace("entry", entry) - - template[f"{modified_entry}/@default"] = "data" # Set first Survey as default for .nxs file if "Survey" in entry and survey_count_ == 0: - survey_count_ = survey_count_ + 1 + survey_count_ += 1 template[f"{root}@default"] = entry # If no Survey set any scan for default if survey_count_ == 0 and count == 0: - count = count + 1 + count += 1 template[f"{root}@default"] = entry - binding_energy_coord = None + data_field_key = key.replace("entry", entry) + data_group_key = data_field_key.rsplit("/data", 1)[0] + + # Define energy axis and energy_indices + # energy_key = + template[f"{data_group_key}/energy/@long_name"] = "energy" + template[f"{data_group_key}/@energy_indices"] = 0 + + units = "counts_per_second" + chan_count = "_chan" + scan_count = "_scan" for data_var in xr_data.data_vars: - scan = data_var + cycle_scan = data_var # Collecting only accumulated counts # indivisual channeltron counts goes to detector data section - if chan_count not in scan: - key_indv_scn_dt = f"{modified_key}/{scan}" - - key_indv_scn_dt_unit = f"{key_indv_scn_dt}/@units" - - coord_nm = list(xr_data[data_var].coords)[0] - binding_energy_coord = np.array(xr_data[data_var][coord_nm]) - template[key_indv_scn_dt] = xr_data[data_var].data - template[key_indv_scn_dt_unit] = config_dict[f"{key}/@units"] + 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 + template[indv_scan_key_unit] = units - data_key = f"{modified_key}/data" - data_unit_key = f"{data_key}/@units" - data_default_key = f"{modified_key}/@default" - data_signal_key = f"{modified_key}/@signal" - data_axis_key = f"{modified_key}/@axes" - - energy_key = f"{modified_key}/energy" - energy_unit_key = f"{energy_key}/@units" - energy_indices_key = f"{modified_key}/@energy_indices" - energy_indices_key = f"{modified_key}/@energy_depends" - - template[data_signal_key] = "data" - - template[data_key] = np.mean( + template[data_field_key] = np.mean( [ xr_data[x_arr].data for x_arr in xr_data.data_vars - if "_chan" not in x_arr + if (chan_count not in x_arr and scan_count in x_arr) ], axis=0, ) - template[f"{data_key}_errors"] = np.std( + template[f"{data_field_key}_errors"] = np.std( [ xr_data[x_arr].data for x_arr in xr_data.data_vars - if "_chan" not in x_arr + if (chan_count not in x_arr and scan_count in x_arr) ], axis=0, ) - template[data_unit_key] = config_dict[f"{key}/@units"] - template[key_be_unit] = "eV" - template[key_be] = binding_energy_coord - template[key_be_axes] = energy_name - template[key_be_ind] = energy_index - template[key_nxclass] = "NXdata" - template[key_ax_ln_nm] = long_name - template[key_ax_mn] = energy_index - - # ============================================================================= - # "data":{ - # "@signal":"", - # "@default":"data", - # "data":"@data:cycle", - # "data/@units":"@xps_token:data/intensity/@units", - # "energy":"@data:energy", - # "energy/@type":"@xps_token:data/energy_type", - # "energy/@units":"@xps_token:data/energy/@units", - # "/@energy_indices":"None", - # "@energy_depends":"None" - # - # - # - # - # - # "data":{ - # "@signal":"", - # "@":"data", - # "data":"@data:cycle", - # "data/@units":"@xps_token:data/intensity/@units", - # "energy":"@data:energy", - # "energy/@type":"@xps_token:data/energy_type", - # "energy/@units":"@xps_token:data/energy/@units", - # "/@":"None", - # "@energy_depends":"None" - # - # - # ============================================================================= - energy_name = "energy" - energy_index = 0 - key_be = f"{modified_key}/{energy_name}" - key_be_unit = f"{key_be}/@units" - key_be_axes = f"{modified_key}/@axes" - key_be_ind = f"{modified_key}/@{energy_name}_indices" - - # setting up AXISNAME - axisname = "AXISNAME[axisname]" - long_name = "Binding Energy" - key_ax_mn = f"{modified_key}/{axisname}" - key_ax_ln_nm = f"{modified_key}/{axisname}/@long_name" - - key_nxclass = f"{modified_key}/@NX_class" + template[f"{data_field_key}/@long_name"] = "XPS intensity" def fill_detector_group(key, entries_values, config_dict, xps_data_dict, template): @@ -354,15 +291,13 @@ 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): - # 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 - # ) - # - # fill_data_group(key, entries_values, config_dict, template) - # =========================================================================== + if XPS_DATA_TOKEN in str(config_value): + 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 + ) + + fill_data_group(key, entries_values, config_dict, template) if XPS_DETECTOR_TOKEN in str(config_value): key_part = config_value.split(XPS_DATA_TOKEN)[-1] From 821fc076c7f16a2c34527d7b1646fe50f38dc66f Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:59:34 +0100 Subject: [PATCH 68/88] remove unneeded config file --- .../config_sle_specs_with_comments.json | 224 ------------------ .../readers/xps/sle/sle_specs.py | 1 - 2 files changed, 225 deletions(-) delete mode 100644 pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json deleted file mode 100644 index d9cfacdbd..000000000 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs_with_comments.json +++ /dev/null @@ -1,224 +0,0 @@ - -{ - "/ENTRY[entry]/definition":"@eln", - "/ENTRY[entry]/definition/@version":"@eln", - "/ENTRY[entry]/title":"@eln", - "/ENTRY[entry]/start_time":"@eln", - "/ENTRY[entry]/end_time":"@eln", - "/ENTRY[entry]/method":"X-ray photoelectron spectroscopy (XPS)", - "/ENTRY[entry]/USER[user]/name":"@eln", - "/ENTRY[entry]/USER[user]/affiliation":"@eln", - "/ENTRY[entry]/USER[user]/address":"@eln", - "/ENTRY[entry]/USER[user]/orcid":"@eln", - "/ENTRY[entry]/USER[user]/email":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity":"energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units":"eV", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier":"None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model":"None", - ####"/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor":"SPECS GmbH", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name":"@xps_token:source/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/probe":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/associated_beam":{ - "link":"/entry/instrument/beam_probe" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy":"@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/associated_source":{ - "link":"/entry/instrument/source_probe" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name":"@xps_token:analyser/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function":"@xps_token:analyser/work_function", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes":"energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type":"estimated", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity":"energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution":"@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@signal":"", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/@axes":[ - "kinetic_energy", - "relative_intensity" - ], - #### "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy":"None", # available in file - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function/kinetic_energy/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/relative_intensity/transmission_function":"@xps_token:collectioncolumn/transmission_function/data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode":"@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection":"None", - #####"/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", # available in file? - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris":"@xps_token:collectioncolumn/iris_diameter", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/name":"Lens 1", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage":"@xps_token:collectioncolumn/lens1_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L1]/voltage/@units":"@xps_token:collectioncolumn/lens1_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/name":"Lens 2", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage":"@xps_token:collectioncolumn/lens2_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[L2]/voltage/@units":"@xps_token:collectioncolumn/lens2_voltage/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/name":"Coil", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current":"@xps_token:collectioncolumn/coil_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[coil]/current/@units":"@xps_token:collectioncolumn/coil_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/name":"Pre-Deflector X", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current":"@xps_token:collectioncolumn/pre_deflector_x_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl X]/current/@units":"@xps_token:collectioncolumn/pre_deflector_x_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/name":"Pre-Deflector Y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current":"@xps_token:collectioncolumn/pre_deflector_y_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Pre Defl Y]/current/@units":"@xps_token:collectioncolumn/pre_deflector_y_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/name":"Focus Displacement", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current":"@xps_token:collectioncolumn/focus_displacement_current", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/LENS_EM[Focus Displacement 1]/current/@units":"@xps_token:collectioncolumn/focus_displacement_current/@units", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy":"@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units":"eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode":"@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit/description":"@xps_token:energydispersion/entrance_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit/description":"@xps_token:energydispersion/exit_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal":"raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw":"@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw/@units":"counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/attached_to":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value/@units":"None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type":"potentiostat", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement":"pressure", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity":"current", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value":"@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units":"@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis":"@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units":"eV", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/type":"file", - ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/path": "@xps_token:detector/calibration_file", ## file path vs. actual file - ####"/ENTRY[entry]/PROCESS[process]/energy_calibration/calibration_object/file": "@xps_token:detector/calibration_file", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/level":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset":"None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis":"None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function":{ - "link":"/entry/instrument/electronanalyser/transmission_function" - }, - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/type":"file", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/calibration_object/path":"@xps_token:collectioncolumn/transmission_function/file", - - "/ENTRY[entry]/SAMPLE[sample]/name":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/name":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_mass":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/cas_number":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/start_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/end_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/description":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/sample_preparation/method":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/start_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/end_time":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/description":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history/PHYSICAL_PROCESS[sample_loading]/method":"@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor":{ - "link":"/entry/instrument/manipulator/temperature_sensor" - }, - "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater":{ - "link":"/entry/instrument/manipulator/sample_heater" - }, - "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat":{ - "link":"/entry/instrument/manipulator/sample_heater" - }, - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge":{ - "link":"/entry/instrument/pressure_gauge" - }, - "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat":{ - "link":"/entry/instrument/manipulator/sample_bias_potentiostat" - }, - "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter":{ - "link":"/entry/instrument/manipulator/sample_bias_voltmeter" - }, - "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter":{ - "link":"/entry/instrument/manipulator/drain_current_amperemeter" - }, - "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun":{ - "link":"/entry/instrument/flood_gun" - }, - "/ENTRY[entry]/data/@signal":"", - "/ENTRY[entry]/data/data":"@data:cycle", - "/ENTRY[entry]/data/data/@units":"CPS", - "/ENTRY[entry]/data/energy":"@data:energy", - "/ENTRY[entry]/data/energy/@type":"binding", - "/ENTRY[entry]/data/energy/@units":"eV", - #####"/ENTRY[entry]/data/@energy_indices":"None", - #####"/ENTRY[entry]/data/@energy_depends":"None" -} diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index 2fb99e016..8c42ee41f 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -400,7 +400,6 @@ def __init__(self): "energy/@type": self._change_energy_type, "excitation_energy": self._convert_excitation_energy, "time_stamp": self._convert_date_time, - # "measurement_type": self._convert_date_measurement_type, "energy_scan_mode": self._convert_energy_scan_mode, } From f895a854569af7e11766283a5158c6d2a3a2ca3e Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:57:20 +0100 Subject: [PATCH 69/88] use beam_TYPE in config file --- .../dataconverter/readers/xps/config/config_sle_specs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 4866137f0..eadadaf6c 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -34,7 +34,7 @@ "resolution":"@eln", "resolution/@units":"@eln" }, - "SOURCE[source_probe]":{ + "source_TYPE[source_probe]":{ "type":"@eln", "name":"@xps_token:source/name", "probe":"@eln", @@ -49,7 +49,7 @@ }, "associated_beam":"@link:/entry/instrument/beam_probe" }, - "BEAM[beam_probe]":{ + "beam_TYPE[beam_probe]":{ "distance":"@eln", "distance/@units":"@eln", "incident_energy":"@xps_token:beam/excitation_energy", From 120d40c965b4fa68bde23bbb1640e9d74b5e3175 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:58:07 +0100 Subject: [PATCH 70/88] make template config file nested --- .../readers/xps/config/template.json | 402 +++++++++++------- 1 file changed, 244 insertions(+), 158 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/template.json b/pynxtools/dataconverter/readers/xps/config/template.json index 87acfe03c..a40ddffd7 100644 --- a/pynxtools/dataconverter/readers/xps/config/template.json +++ b/pynxtools/dataconverter/readers/xps/config/template.json @@ -1,159 +1,245 @@ { - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/angular_acceptance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/iris": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/spatial_acceptance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/@signal": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/raw_data/raw": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/resolution": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/transmission_function": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/PID[pid]/setpoint": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/cryostat/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/measurement": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current_amperemeter/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/PID[pid]/setpoint": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_potentiostat/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/measurement": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias_voltmeter/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/PID[pid]/setpoint": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/heater_power": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_heater/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/measurement": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/temperature_sensor/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/associated_source": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/distance": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/distance/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/extent": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_TYPE/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/resolution/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/current_log/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/physical_quantity": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/flood_gun/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/measurement": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/pressure_gauge/value_log/value/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/associated_beam": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/device_information/identifier": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/device_information/model": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/device_information/vendor": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/name": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/probe": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/type": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_TYPE/type_other": "None", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/binding_energy": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/level": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/offset": "None", - "/ENTRY[entry]/PROCESS[process]/energy_referencing/reference_peak": "None", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/calibrated_axis": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/@axes": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/@signal": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/kinetic_energy": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/kinetic_energy/@units": "None", - "/ENTRY[entry]/PROCESS[process]/transmission_correction/transmission_function/relative_intensity": "None", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/end_time": "None", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/method": "None", - "/ENTRY[entry]/SAMPLE[sample]/SAMPLE_HISTORY[sample_history]/sample_preparation/start_time": "None", - "/ENTRY[entry]/SAMPLE[sample]/SUBSTANCE[substance]/molecular_formula_hill": "None", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/potentiostat": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/voltmeter": "None", - "/ENTRY[entry]/SAMPLE[sample]/drain_current": "None", - "/ENTRY[entry]/SAMPLE[sample]/drain_current/amperemeter": "None", - "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current": "None", - "/ENTRY[entry]/SAMPLE[sample]/flood_gun_current/flood_gun": "None", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "None", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/pressure_gauge": "None", - "/ENTRY[entry]/SAMPLE[sample]/name": "None", - "/ENTRY[entry]/SAMPLE[sample]/physical_form": "None", - "/ENTRY[entry]/SAMPLE[sample]/situation": "None", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "None", - "/ENTRY[entry]/SAMPLE[sample]/temperature/cryostat": "None", - "/ENTRY[entry]/SAMPLE[sample]/temperature/sample_heater": "None", - "/ENTRY[entry]/SAMPLE[sample]/temperature/temperature_sensor": "None", - "/ENTRY[entry]/USER[user]/affiliation": "None", - "/ENTRY[entry]/USER[user]/name": "None", - "/ENTRY[entry]/data/@energy_depends": "None", - "/ENTRY[entry]/data/@energy_indices": "None", - "/ENTRY[entry]/data/@signal": "None", - "/ENTRY[entry]/data/data": "None", - "/ENTRY[entry]/data/data/@units": "None", - "/ENTRY[entry]/data/energy": "None", - "/ENTRY[entry]/data/energy/@type": "None", - "/ENTRY[entry]/data/energy/@units": "None", - "/ENTRY[entry]/definition": "None", - "/ENTRY[entry]/definition/@version": "None", - "/ENTRY[entry]/end_time": "None", - "/ENTRY[entry]/method": "None", - "/ENTRY[entry]/start_time": "None", - "/ENTRY[entry]/title": "None" -} + "/@default":"None", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"None", + "definition/@version":"None", + "title":"None", + "start_time":"None", + "end_time":"None", + "method":"None" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"None", + "affiliation":"None" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"None", + "identifier":"None", + "model":"None" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"None", + "resolution":"None", + "resolution/@units":"None" + }, + "source_TYPE[source_probe]":{ + "type":"None", + "type_other":"None", + "name":"None", + "probe":"None", + "device_information":{ + "vendor":"None", + "identifier":"None", + "model":"None" + }, + "associated_beam":"None" + }, + "beam_TYPE[beam_probe]":{ + "distance":"None", + "distance/@units":"None", + "incident_energy":"None", + "incident_energy/@units":"None", + "incident_energy_spread":"None", + "incident_energy_spread/@units":"None", + "incident_polarization":"None", + "incident_polarization/@units":"None", + "extent":"None", + "associated_source":"None" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "None", + "description":"None", + "work_function":"None", + "work_function/@units":"None", + "fast_axes":"None", + "slow_axes":"None", + "device_information":{ + "vendor":"None", + "model":"None", + "identifier":"None" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"None", + "resolution":"None" + }, + "transmission_function":"None", + "COLLECTIONCOLUMN[collectioncolumn]":{ + "scheme":"None", + "lens_mode":"None", + "projection":"None", + "angular_acceptance":"None", + "spatial_acceptance":"None", + "field_aperture":"None", + "contrast_aperture":"None", + "iris":"None", + "device_information":{ + "vendor":"None", + "model":"None", + "identifier":"None" + } + }, + "ENERGYDISPERSION[energydispersion]":{ + "scheme":"None", + "pass_energy":"None", + "pass_energy/@units":"None", + "energy_scan_mode":"None", + "entrance_slit":"None", + "exit_slit":"None", + "device_information":{ + "vendor":"None", + "model":"None", + "identifier":"None" + } + }, + "DETECTOR[detector]":{ + "@default":"raw_data", + "amplifier_type":"None", + "detector_type":"None", + "device_information":{ + "vendor":"None", + "model":"None", + "identifier":"None" + }, + "raw_data":{ + "@signal":"None", + "@default":"raw", + "raw":"None" + } + } + }, + "MANIPULATOR[manipulator]":{ + "device_information":{ + "vendor":"None", + "model":"None", + "identifier":"None" + }, + "temperature_sensor":{ + "name":"None", + "measurement":"None", + "type":"None", + "value":"None" + }, + "sample_heater":{ + "name":"None", + "physical_quantity":"None", + "type":"None", + "heater_power":"None", + "PID[pid]/setpoint":"None" + }, + "cryostat":{ + "name":"None", + "physical_quantity":"None", + "type":"None", + "PID[pid]/setpoint":"None" + }, + "drain_current_amperemeter":{ + "name":"None", + "measurement":"None", + "type":"None", + "value":"None" + }, + "sample_bias_voltmeter":{ + "name":"@eln", + "measurement":"@eln", + "type":"@eln", + "value":"@eln" + }, + "sample_bias_potentiostat":{ + "name":"None", + "physical_quantity":"None", + "type":"None", + "PID[pid]/setpoint":"None" + } + }, + "pressure_gauge":{ + "name":"None", + "measurement":"None", + "type":"None", + "value":"None", + "value_log/value":"None" + }, + "flood_gun":{ + "name":"None", + "physical_quantity":"None", + "type":"None", + "current":"None", + "current/@units":"None", + "current_log/value":"None", + "current_log/value/@units":"None" + } + }, + "/ENTRY[entry]/PROCESS[process]":{ + "angular_calibration":{ + "calibrated_axis":"None" + }, + "energy_calibration":{ + "calibrated_axis":"None", + }, + "energy_referencing":{ + "level":"None", + "reference_peak":"None", + "binding_energy":"None", + "offset":"None", + "calibrated_axis":"None" + }, + "transmission_correction":{ + "transmission_function":{ + "@axes":"None", + "@signal":"None", + "kinetic_energy":"None", + "kinetic_energy/@units":"None", + "relative_intensity":"None" + } + } + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"None", + "atom_types":"@eln", + "physical_form":"None", + "situation":"None", + "SUBSTANCE[substance]":{ + "molecular_formula_hill":"None" + }, + "sample_history":{ + "sample_preparation":{ + "start_time":"None", + "end_time":"None", + "method":"None" + } + }, + "temperature":{ + "temperature_sensor": "None", + "sample_heater":"None", + "cryostat":"None" + }, + "gas_pressure":{ + "pressure_gauge":"None" + }, + "bias":{ + "potentiostat":"None", + "voltmeter":"None" + }, + "drain_current":{ + "amperemeter":"None" + }, + "flood_gun_current":{ + "flood_gun":"@None" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"data", + "@axes":["energy"], + "data":"None", + "data/@units":"None", + "energy":"None", + "energy/@type":"None", + "energy/@units":"None", + "@energy_indices":"None", + "@energy_depends":"None" + } + } \ No newline at end of file From c943452463184d8761869f0599599f3ad76a94d2 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:58:51 +0100 Subject: [PATCH 71/88] update XPS reader convert dict --- pynxtools/dataconverter/readers/xps/reader.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index d2e8c9fff..826969740 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -59,8 +59,8 @@ "version": "@version", "user": "USER[user]", "instrument": "INSTRUMENT[instrument]", - "source_probe": "SOURCE[source_probe]", - "beam_probe": "BEAM[beam_probe]", + "source_probe": "source_TYPE[source_probe]", + "beam_probe": "beam_TYPE[beam_probe]", "analyser": "ELECTRONANALYSER[electronanalyser]", "collectioncolumn": "COLLECTIONCOLUMN[collectioncolumn]", "energydispersion": "ENERGYDISPERSION[energydispersion]", @@ -129,7 +129,6 @@ def fill_data_group(key, entries_values, config_dict, template): count = 0 for entry, xr_data in entries_values.items(): - # print(entry) root = key[0] # Set first Survey as default for .nxs file From 6d12f51f70033cf2ceb4a966ef604c986e4a1f8b Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:02:58 +0100 Subject: [PATCH 72/88] update config for XPS XY reader --- .../readers/xps/config/config_specs_xy.json | 344 +++++++++++++----- .../readers/xps/config/template.json | 8 +- 2 files changed, 267 insertions(+), 85 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json b/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json index 19f9c95b0..67ed41cf2 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json +++ b/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json @@ -1,85 +1,261 @@ { - "/ENTRY[entry]/DATA[data]/@signal": "", - "/ENTRY[entry]/DATA[data]/data": "@data:cycle", - "/ENTRY[entry]/DATA[data]/data/@units": "@xps_token:data/y_units", - "/ENTRY[entry]/DATA[data]/energy": "@data:energy", - "/ENTRY[entry]/DATA[data]/energy/@type": "@xps_token:data/x_units", - "/ENTRY[entry]/DATA[data]/energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time": "@xps_token:region/dwell_time", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time/@units": "s", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@xps_token:detector/detector_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/analyser_name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/target_bias/": "@xps_token:analyser/target_bias", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/target_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "@xps_token:source/source_label", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "photon", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/": "@xps_token:instrument/work_function", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": "@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": false, - "/ENTRY[entry]/SAMPLE[sample]/bias": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "V", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/orcid": "@eln", - "/ENTRY[entry]/method": "@xps_token:region/analysis_method", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/title": "@eln" -} + "/@default":"None", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"@eln", + "definition/@version":"@eln", + "title":"@eln", + "start_time":"@eln", + "end_time":"@eln", + "method":"@xps_token:region/analysis_method" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"None", + "identifier":"None", + "model":"None" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"derived", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"eV" + }, + "source_TYPE[source_probe]":{ + "type":"@eln", + "name": "@xps_token:source/source_label", + "probe":"photon", + "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" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "None", + "description":"@eln", + "name": @xps_token:analyser/analyser_name, + "work_function":"@xps_token:instrument/work_function", + "work_function/@units":"eV", + "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/scan_mode", + "entrance_slit":"@eln", + "exit_slit":"@eln", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + } + }, + "DETECTOR[detector]":{ + "@default":"raw_data", + "amplifier_type":"@eln", + "count_time": "@xps_token:region/dwell_time", + "count_time/@units": "s", + "detector_type":"@eln", + "detector_voltage": "@xps_token:detector/detector_voltage", + "detector_voltage/@units": "V", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "raw_data":{ + "@signal":"None", + "@default":"raw", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"counts" + } + } + }, + "MANIPULATOR[manipulator]":{ + "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" + } + }, + "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":{ + "transmission_function":{ + "@axes":"None", + "@signal":"None", + "kinetic_energy":"None", + "kinetic_energy/@units":"None", + "relative_intensity":"None" + } + } + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"@eln", + "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" + }, + "PHYSICAL_PROCESS[sample_loading]":{ + "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" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"data", + "@axes":["energy"], + "data":"@data:cycle", + "data/@units":"@xps_token:data/y_units", + "energy":"@data:energy", + "energy/@units":"eV", + "energy/@typex":"@xps_token:data/x_units", + "@energy_indices":"None", + "@energy_depends":"None" + } + } \ No newline at end of file diff --git a/pynxtools/dataconverter/readers/xps/config/template.json b/pynxtools/dataconverter/readers/xps/config/template.json index a40ddffd7..478b4a999 100644 --- a/pynxtools/dataconverter/readers/xps/config/template.json +++ b/pynxtools/dataconverter/readers/xps/config/template.json @@ -177,7 +177,7 @@ "calibrated_axis":"None" }, "energy_calibration":{ - "calibrated_axis":"None", + "calibrated_axis":"None" }, "energy_referencing":{ "level":"None", @@ -186,6 +186,12 @@ "offset":"None", "calibrated_axis":"None" }, + "momentum_calibration":{ + "calibrated_axis":"None" + }, + "spatial_calibration":{ + "calibrated_axis":"None" + }, "transmission_correction":{ "transmission_function":{ "@axes":"None", From a92c78d98c0a5ba7b0bd25e200b162bd1cec51ba Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:04:21 +0100 Subject: [PATCH 73/88] update XPS SLE config file --- .../dataconverter/readers/xps/config/config_sle_specs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index eadadaf6c..9af753f76 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -13,7 +13,8 @@ "entry_identifier":"@eln", "duration":"None", "duration/@units":"s", - "method":"@xps_token:region/analysis_method" + "method":"@xps_token:region/analysis_method", + "program_name":"@eln" }, "/ENTRY[entry]/USER[user]":{ "name":"@eln", From 85a81a2ec2d12b5e3dbfe62a63a7f8792302f892 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:05:11 +0100 Subject: [PATCH 74/88] update SPECX XY config --- .../readers/xps/config/config_specs_xy.json | 545 +++++++++--------- 1 file changed, 285 insertions(+), 260 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json b/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json index 67ed41cf2..814ed84d3 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json +++ b/pynxtools/dataconverter/readers/xps/config/config_specs_xy.json @@ -1,261 +1,286 @@ -{ - "/@default":"None", - "/ENTRY[entry]":{ - "@default":"data", - "definition":"@eln", - "definition/@version":"@eln", - "title":"@eln", - "start_time":"@eln", - "end_time":"@eln", - "method":"@xps_token:region/analysis_method" - }, - "/ENTRY[entry]/USER[user]":{ - "name":"@eln", - "affiliation":"@eln", - "address":"@eln", - "orcid":"@eln", - "email":"@eln" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]":{ - "device_information":{ - "vendor":"None", - "identifier":"None", - "model":"None" - }, - "energy_resolution":{ - "physical_quantity":"energy", - "type":"derived", - "resolution":"@xps_token:data/step_size", - "resolution/@units":"eV" - }, - "source_TYPE[source_probe]":{ - "type":"@eln", - "name": "@xps_token:source/source_label", - "probe":"photon", - "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" - }, - "ELECTRONANALYSER[electronanalyser]":{ - "@default": "None", - "description":"@eln", - "name": @xps_token:analyser/analyser_name, - "work_function":"@xps_token:instrument/work_function", - "work_function/@units":"eV", - "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/scan_mode", - "entrance_slit":"@eln", - "exit_slit":"@eln", - "device_information":{ - "vendor":"@eln", - "model":"@eln", - "identifier":"@eln" - } - }, - "DETECTOR[detector]":{ - "@default":"raw_data", - "amplifier_type":"@eln", - "count_time": "@xps_token:region/dwell_time", - "count_time/@units": "s", - "detector_type":"@eln", - "detector_voltage": "@xps_token:detector/detector_voltage", - "detector_voltage/@units": "V", - "device_information":{ - "vendor":"@eln", - "model":"@eln", - "identifier":"@eln" - }, - "raw_data":{ - "@signal":"None", - "@default":"raw", - "raw":"@detector_data:cycles/Cycle_", - "raw/@units":"counts" - } - } - }, - "MANIPULATOR[manipulator]":{ - "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" - } - }, - "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":{ - "transmission_function":{ - "@axes":"None", - "@signal":"None", - "kinetic_energy":"None", - "kinetic_energy/@units":"None", - "relative_intensity":"None" - } - } - }, - "/ENTRY[entry]/SAMPLE[sample]":{ - "name":"@eln", - "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" - }, - "PHYSICAL_PROCESS[sample_loading]":{ - "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" - } - }, - "/ENTRY[entry]/data":{ - "@signal":"data", - "@default":"data", - "@axes":["energy"], - "data":"@data:cycle", - "data/@units":"@xps_token:data/y_units", - "energy":"@data:energy", - "energy/@units":"eV", - "energy/@typex":"@xps_token:data/x_units", - "@energy_indices":"None", - "@energy_depends":"None" - } +{ + "/@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":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"None", + "identifier":"None", + "model":"None" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"derived", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"eV" + }, + "source_TYPE[source_probe]":{ + "type":"@eln", + "name": "@xps_token:source/source_label", + "probe":"photon", + "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" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "None", + "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" + } + }, + "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", + "@default":"raw", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"counts" + } + } + }, + "MANIPULATOR[manipulator]":{ + "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" + }, + }, + "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":{ + "transmission_function":{ + "@axes":"None", + "@signal":"None", + "kinetic_energy":"None", + "kinetic_energy/@units":"None", + "relative_intensity":"None" + } + } + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"@eln", + "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" + }, + "PHYSICAL_PROCESS[sample_loading]":{ + "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" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"data", + "@axes":["energy"], + "data":"@data:cycle", + "data/@units":"@xps_token:data/y_units", + "energy":"@data:energy", + "energy/@units":"eV", + "energy/@typex":"@xps_token:data/x_units", + "@energy_indices":"None", + "@energy_depends":"None" + } } \ No newline at end of file From dc71664d354a9812f334907a421abe73c3ea03e2 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:05:51 +0100 Subject: [PATCH 75/88] update Scienta txt config --- .../xps/config/config_txt_scienta.json | 375 +++++++++++++----- 1 file changed, 282 insertions(+), 93 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_txt_scienta.json b/pynxtools/dataconverter/readers/xps/config/config_txt_scienta.json index 9c6fc6be9..7d7a63b4c 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_txt_scienta.json +++ b/pynxtools/dataconverter/readers/xps/config/config_txt_scienta.json @@ -1,93 +1,282 @@ -{ - "/ENTRY[entry]/DATA[data]/@signal": "", - "/ENTRY[entry]/DATA[data]/data": "@data:cycle", - "/ENTRY[entry]/DATA[data]/data/@units": "CPS", - "/ENTRY[entry]/DATA[data]/energy": "@data:energy", - "/ENTRY[entry]/DATA[data]/energy/@type": "@xps_token:data/energy_type", - "/ENTRY[entry]/DATA[data]/energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time": "@xps_token:region/dwell_time", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time/@units": "@xps_token:region/dwell_time/time", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/acquisition_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/APERTURE[entrance_slit]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/APERTURE[entrance_slit]/shape": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/APERTURE[entrance_slit]/size": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/APERTURE[entrance_slit]/size/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_x]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_x]/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_y]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_y]/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_z]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_z]/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_phi]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/POSITIONER[positioner_phi]/value/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "photon", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/name": "@xps_token:instrument/instrument_name", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": "@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": false, - "/ENTRY[entry]/SAMPLE[sample]/bias": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "V", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@xps_token:sample/sample_name", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/initials": "xps_token:user/user_initials", - "/ENTRY[entry]/USER[user]/orcid": "@eln", - "/ENTRY[entry]/method": "@eln", - "/ENTRY[entry]/sequence_file": "@xps_token:file_info/sequence_file", - "/ENTRY[entry]/data_file": "@xps_token:file_info/data_file", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/start_time": "@xps_token:time_stamp", - "/ENTRY[entry]/title": "@eln" -} \ No newline at end of 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":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln", + "initials": "xps_token:user/user_initials" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "name": "@xps_token:instrument/instrument_name", + "device_information":{ + "vendor":"None", + "identifier":"None", + "model":"None" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"derived", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"eV" + }, + "source_TYPE[source_probe]":{ + "type":"@", + "name": "@eln", + "probe":"photon", + "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" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "None", + "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" + } + }, + "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", + "@default":"raw", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"counts" + } + } + }, + "MANIPULATOR[manipulator]":{ + "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" + } + }, + "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":{ + "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]":{ + "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" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"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 89632bfcb0116ffafa7b4b7249f757c36d352e48 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:07:44 +0100 Subject: [PATCH 76/88] add missed pre-commit fix --- .../xps/config/config_txt_vamas_export.json | 338 ++++++++++++---- .../readers/xps/config/config_vms.json | 382 +++++++++++++----- .../readers/xps/config/config_xml_specs.json | 339 ++++++++++++---- .../dataconverter/readers/xps/vms/vamas.py | 12 +- 4 files changed, 819 insertions(+), 252 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_txt_vamas_export.json b/pynxtools/dataconverter/readers/xps/config/config_txt_vamas_export.json index 9900402aa..6de354d50 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_txt_vamas_export.json +++ b/pynxtools/dataconverter/readers/xps/config/config_txt_vamas_export.json @@ -1,81 +1,259 @@ { - "/ENTRY[entry]/DATA[data]/@signal": "", - "/ENTRY[entry]/DATA[data]/data": "@data:cycle", - "/ENTRY[entry]/DATA[data]/data/@units": "@xps_token:data/y_units", - "/ENTRY[entry]/DATA[data]/energy": "@data:energy", - "/ENTRY[entry]/DATA[data]/energy/@type": "@xps_token:data/x_units", - "/ENTRY[entry]/DATA[data]/energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "@xps_token:beam/excitation_energy/units", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "@detector_data:cycles/Scan_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time": "@xps_token:region/dwell_time", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time/@units": "@xps_token:region/dwell_time/time", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "photon", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": "@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": false, - "/ENTRY[entry]/SAMPLE[sample]/bias": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "V", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/orcid": "@eln", - "/ENTRY[entry]/method": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/title": "@eln" -} \ No newline at end of file + "/@default":"entry", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"@eln", + "definition/@version":"@eln", + "title":"@eln", + "start_time":"@eln", + "end_time":"@eln", + "experiment_institution":"@eln", + "experiment_facility":"@eln", + "experiment_laboratory":"@eln", + "entry_identifier":"@eln", + "duration":"@eln", + "duration/@units":"@eln", + "method":"@eln", + "program_name":"@eln" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"@eln", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"@eln" + }, + "source_TYPE[source_probe]":{ + "type":"@eln", + "name":"@eln", + "probe":"photon", + "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":"@xps_token:beam/excitation_energy/units", + "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" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "None", + "name":"@eln", + "description":"@eln", + "work_function":"@eln", + "work_function/@units":"@eln", + "fast_axes":"None", + "slow_axes":"energy", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"@eln", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"@eln" + }, + "transmission_function":"None", + "COLLECTIONCOLUMN[collectioncolumn]":{ + "scheme":"@eln", + "lens_mode":"@eln", + "projection":"None", + "angular_acceptance":"None", + "spatial_acceptance":"None", + "field_aperture":"None", + "contrast_aperture":"None", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + } + }, + "ENERGYDISPERSION[energydispersion]":{ + "scheme":"@eln", + "pass_energy":"@eln", + "pass_energy/@units":"@eln", + "energy_scan_mode":"@eln", + "entrance_slit":"@eln", + "exit_slit":"@eln", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + } + }, + "DETECTOR[detector]":{ + "@default":"raw_data", + "amplifier_type":"@eln", + "detector_type":"@eln", + "count_time":"@xps_token:detector/dwell_time", + "count_time/@units":"@xps_token:detector/dwell_time/units", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "raw_data":{ + "@signal":"raw", + "@default":"raw", + "raw":"@detector_data:cycles/Scan_", + "raw/@units":"counts" + } + } + }, + "MANIPULATOR[manipulator]":{ + "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" + } + }, + "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" + } + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"@xps_token:parameters/Group", + "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" + }, + "PHYSICAL_PROCESS[sample_loading]":{ + "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" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"data", + "@axes":["energy"], + "data":"@data:cycle", + "data/@units":"@xps_token:data/y_units", + "energy":"@link:/entry/process/energy_calibration/calibrated_axis", + "energy/@type":"@xps_token:data/x_units", + "energy/@units":"eV", + "@energy_indices":"None", + "@energy_depends":"None" + } + } + + \ No newline at end of file diff --git a/pynxtools/dataconverter/readers/xps/config/config_vms.json b/pynxtools/dataconverter/readers/xps/config/config_vms.json index 78dbe4ec9..fabe167d2 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_vms.json +++ b/pynxtools/dataconverter/readers/xps/config/config_vms.json @@ -1,95 +1,289 @@ { - "/ENTRY[entry]/DATA[data]/@signal": "", - "/ENTRY[entry]/DATA[data]/data": "@data:cycle", - "/ENTRY[entry]/DATA[data]/data/@units": "@xps_token:data/y_units_1", - "/ENTRY[entry]/DATA[data]/energy": "@data:energy", - "/ENTRY[entry]/DATA[data]/energy/@type": "@xps_token:data/x_units_1", - "/ENTRY[entry]/DATA[data]/energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:beam/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@xps_token:collectioncolumn/lens_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time": "@xps_token:region/dwell_time", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/count_time/@units": "s", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/signal_mode": "@xps_token:detector/signal_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@xps_token:detector/detector_voltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:energydispersion/scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@xps_token:energydispersion/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/name": "@xps_token:analyser/analyser_name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analyzer_take_off_azimuth/": "@xps_token:analyser/analyzer_take_off_azimuth", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analyzer_take_off_azimuth/@units": "degree", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analyzer_take_off_polar/": "@xps_token:analyser/analyzer_take_off_polar", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analyzer_take_off_polar/@units": "degree", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analysis_width_x/": "@xps_token:analyser/analysis_width_x", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analysis_width_x/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analysis_width_y/": "@xps_token:analyser/analysis_width_y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/analysis_width_y/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/target_bias/": "@xps_token:analyser/target_bias", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/target_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "@xps_token:source/source_label", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "photon", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/source_analyzer_angle": "@xps_token:source/source_analyzer_angle", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/source_analyzer_angle/@units": "degree", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@xps_token:data/step_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/": "@xps_token:instrument/work_function", - "/ENTRY[entry]/INSTRUMENT[instrument]/work_function/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": "@eln", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": false, - "/ENTRY[entry]/SAMPLE[sample]/bias": "@xps_token:sample/target_bias", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "V", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/orcid": "@eln", - "/ENTRY[entry]/method": "@xps_token:region/analysis_method", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/start_time": "@xps_token:region/time_stamp", - "/ENTRY[entry]/title": "@eln" -} \ No newline at end of file + "/@default":"entry", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"@eln", + "definition/@version":"@eln", + "title":"@eln", + "start_time":"@xps_token:region/time_stamp", + "end_time":"@eln", + "experiment_institution":"@eln", + "experiment_facility":"@eln", + "experiment_laboratory":"@eln", + "entry_identifier":"@eln", + "duration":"None", + "duration/@units":"s", + "method":"@xps_token:region/analysis_method", + "program_name":"@eln" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"derived", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"eV" + }, + "source_TYPE[source_probe]":{ + "type":"@eln", + "name":"@xps_token:source/source_label", + "probe":"photon", + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" + }, + "associated_beam":"@link:/entry/instrument/beam_probe", + "source_analyzer_angle": "source_analyzer_angle", + "source_analyzer_angle/@units": "degree" + }, + "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" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "detector0", + "name":"@xps_token:analyser/analyser_name", + "description":"@eln", + "work_function":"@xps_token:analyser/work_function", + "work_function/@units":"eV", + "fast_axes":"None", + "slow_axes":"energy", + "analyzer_take_off_azimuth": "@xps_token:analyser/analyzer_take_off_azimuth", + "analyzer_take_off_azimuth/@units": "degree", + "analyzer_take_off_polar/": "@xps_token:analyser/analyzer_take_off_polar", + "analyzer_take_off_polar/@units": "degree", + "analysis_width_x": "@xps_token:analyser/analysis_width_x", + "analysis_width_x/@units": "mm", + "analysis_width_y": "@xps_token:analyser/analysis_width_y", + "analysis_width_y/@units": "mm", + "target_bias": "@xps_token:analyser/target_bias", + "target_bias/@units": "V", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"estimated", + "resolution":"@xps_token:data/step_size", + "resolution/@units":"eV" + }, + "transmission_function":{ + "@default":"relative_intensity", + "@signal":"relative_intensity", + "@axes":["kinetic_energy"], + "kinetic_energy":"@xps_token:transmission_function/kinetic_energy", + "kinetic_energy/@units":"@xps_token:transmission_function/kinetic_energy/@units", + "relative_intensity":"@xps_token:collectioncolumn/transmission_function/relative_intensity" + }, + "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", + "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/scan_mode", + "entrance_slit":"@eln", + "exit_slit":"@eln", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + }, + "DETECTOR[detector]":{ + "@default":"raw_data", + "amplifier_type":"@eln", + "detector_type":"@eln", + "detector_voltage": "@xps_token:detector/detector_voltage", + "detector_voltage/@units": "V", + "count_time":"@xps_token:detector/dwell_time", + "count_time/@units":"s", + "acquisition_mode": "@xps_token:detector/signal_mode", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "raw_data":{ + "@signal":"raw", + "@default":"raw", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"counts" + } + } + }, + "MANIPULATOR[manipulator]":{ + "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":"@xps_token:sample/target_bias", + "value/@units": "V" + }, + "sample_bias_potentiostat":{ + "name":"@eln", + "physical_quantity":"@eln", + "type":"@eln", + "PID[pid]/setpoint":"@eln" + } + }, + "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":{ + "transmission_function":{ + "@axes":"None", + "@signal":"None", + "kinetic_energy":"None", + "kinetic_energy/@units":"None", + "relative_intensity":"None" + } + } + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"@eln", + "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" + }, + "PHYSICAL_PROCESS[sample_loading]":{ + "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" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"data", + "@axes":["energy"], + "data":"@data:cycle", + "data/@units":"@xps_token:data/y_units_1", + "energy": "@data:energy", + "energy/@type":"@xps_token:data/x_units_1", + "energy/@units":"eV", + "@energy_indices":"None", + "@energy_depends":"None" + } + } \ No newline at end of file diff --git a/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json b/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json index 9bee088c6..fe9a55def 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json @@ -1,73 +1,268 @@ { - "/ENTRY[entry]/DATA[data]/@signal": "data", - "/ENTRY[entry]/DATA[data]/data": "@data:cycles/Cycle_", - "/ENTRY[entry]/DATA[data]/data/@units": "counts", - "/ENTRY[entry]/DATA[data]/binding_energy": "counts", - "/ENTRY[entry]/DATA[data]/binding_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/distance/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy": "@xps_token:region/excitation_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_energy_spread/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/BEAM[beam]/incident_polarization/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/contrast_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/field_aperture": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/@signal": "raw", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw": "@detector_data:cycles/Cycle_", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/DATA[data]/raw/@units": "counts", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "channeltron", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@xps_token:region/scan_mode/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/entrance_slit": "@xps_token:region/analyzer_slit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/exit_slit": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@xps_token:region/pass_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "@xps_token:analyzer_info/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution": "@xps_token:region/scan_delta", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/energy_resolution/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/drain_current/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "None", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/name": "@xps_token:source_info/name", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/probe": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@xps_token:region/scan_delta", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/angular_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy", - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis/@units": "eV", - "/ENTRY[entry]/PROCESS[process]/momentum_calibration/applied": false, - "/ENTRY[entry]/PROCESS[process]/spatial_calibration/applied": false, - "/ENTRY[entry]/SAMPLE[sample]/bias": "None", - "/ENTRY[entry]/SAMPLE[sample]/bias/@units": "None", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula": "None", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "None", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "None", - "/ENTRY[entry]/SAMPLE[sample]/name": "@xps_token:parameters/Group", - "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "None", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/sample_history": "None", - "/ENTRY[entry]/SAMPLE[sample]/situation": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/temperature/@units": "@eln", - "/ENTRY[entry]/USER[user]/address": "None", - "/ENTRY[entry]/USER[user]/affiliation": "None", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/USER[user]/orcid": "None", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@version": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/title": "@eln" -} + "/@default":"entry", + "/ENTRY[entry]":{ + "@default":"data", + "definition":"@eln", + "definition/@version":"@eln", + "title":"@eln", + "start_time":"@eln", + "end_time":"@eln", + "experiment_institution":"@eln", + "experiment_facility":"@eln", + "experiment_laboratory":"@eln", + "entry_identifier":"@eln", + "duration":"@eln", + "duration/@units":"@eln", + "method":"@xps_token:region/analysis_method", + "program_name":"@eln" + }, + "/ENTRY[entry]/USER[user]":{ + "name":"@eln", + "affiliation":"@eln", + "address":"@eln", + "orcid":"@eln", + "email":"@eln" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]":{ + "device_information":{ + "vendor":"@eln", + "identifier":"@eln", + "model":"@eln" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"@eln", + "resolution":"@xps_token:region/scan_delta", + "resolution/@units":"eV" + }, + "source_TYPE[source_probe]":{ + "type":"@eln", + "name":"@xps_token:source_info/name", + "probe":"@eln", + "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" + }, + "ELECTRONANALYSER[electronanalyser]":{ + "@default": "None", + "name":"@xps_token:analyzer_info/name", + "description":"@eln", + "work_function":"@eln", + "work_function/@units":"@eln", + "fast_axes":"None", + "slow_axes":"energy", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "energy_resolution":{ + "physical_quantity":"energy", + "type":"estimated", + "resolution":"@xps_token:region/scan_delta", + "resolution/@units":"eV" + }, + "transmission_function":{ + "@default":"relative_intensity", + "@signal":"relative_intensity", + "@axes":["kinetic_energy"], + "kinetic_energy":"@xps_token:transmission_function/kinetic_energy", + "kinetic_energy/@units":"@xps_token:transmission_function/kinetic_energy/@units", + "relative_intensity":"@xps_token:collectioncolumn/transmission_function/relative_intensity" + }, + "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":{ + "size":"@xps_token:collectioncolumn/iris_diameter", + "size/@units":"@xps_token:collectioncolumn/iris_diameter/@units" + }, + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + } + }, + "ENERGYDISPERSION[energydispersion]":{ + "scheme":"@eln", + "pass_energy":"@xps_token:region/pass_energy", + "pass_energy/@units":"eV", + "energy_scan_mode":"@xps_token:region/scan_mode/name", + "entrance_slit/description":"@xps_token:region/analyzer_slit", + "exit_slit/description":"None", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "diameter":"@eln", + "diameter/@units":"@eln" + }, + "DETECTOR[detector]":{ + "@default":"raw_data", + "amplifier_type":"@eln", + "detector_type":"@eln", + "device_information":{ + "vendor":"@eln", + "model":"@eln", + "identifier":"@eln" + }, + "raw_data":{ + "@signal":"raw", + "@default":"raw", + "raw":"@detector_data:cycles/Cycle_", + "raw/@units":"@xps_token:detector/raw_data/raw/@units" + } + } + }, + "MANIPULATOR[manipulator]":{ + "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" + } + }, + "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" + } + }, + "/ENTRY[entry]/SAMPLE[sample]":{ + "name":"@xps_token:parameters/Group", + "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" + }, + "PHYSICAL_PROCESS[sample_loading]":{ + "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" + } + }, + "/ENTRY[entry]/data":{ + "@signal":"data", + "@default":"data", + "@axes":["energy"], + "data":"@data:cycle", + "data/@units":"counts", + "energy":"@link:/entry/process/energy_calibration/calibrated_axis", + "energy/@type":"@xps_token:data/energy/@type", + "energy/@units":"@xps_token:data/energy/@units", + "@energy_indices":"None", + "@energy_depends":"None" + } + } \ No newline at end of file diff --git a/pynxtools/dataconverter/readers/xps/vms/vamas.py b/pynxtools/dataconverter/readers/xps/vms/vamas.py index 8a9ceb59b..8af1dd027 100644 --- a/pynxtools/dataconverter/readers/xps/vms/vamas.py +++ b/pynxtools/dataconverter/readers/xps/vms/vamas.py @@ -94,9 +94,7 @@ def construct_data(self): key_map = { "user": [], - "instrument": [ - "work_function", - ], + "instrument": [], "source": [ "source_label", "source_analyzer_angle", @@ -108,13 +106,17 @@ def construct_data(self): "analysis_width_x", "analysis_width_y", "target_bias", + "work_function", ], "collectioncolumn": [], "energydispersion": [ "scan_mode", "pass_energy", ], - "detector": ["signal_mode"], + "detector": [ + "signal_mode", + "dwell_time", + ], "manipulator": [], "sample": [], "calibration": [], @@ -128,12 +130,10 @@ def construct_data(self): "n_values", "start_energy", "step_size", - "dwell_time", ], "region": [ "analysis_method", "spectrum_type", - "dwell_time", "comments", "spectrum_id", "time_stamp", From ec840332d3a6fdceaea7a0fa55ba1f72e343764b Mon Sep 17 00:00:00 2001 From: domna Date: Mon, 22 Jan 2024 09:42:04 +0100 Subject: [PATCH 77/88] Allow Pathobject for json file path --- pynxtools/dataconverter/readers/utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/utils.py b/pynxtools/dataconverter/readers/utils.py index 2ccd8accc..f05d240b9 100644 --- a/pynxtools/dataconverter/readers/utils.py +++ b/pynxtools/dataconverter/readers/utils.py @@ -21,7 +21,8 @@ import re from collections.abc import Mapping from dataclasses import dataclass, replace -from typing import Any, Dict, List, Optional, Tuple +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple, Union import yaml @@ -276,7 +277,7 @@ def update_config(key, value, rkey): return flattened_config -def parse_json(file_path: str) -> Dict[str, Any]: +def parse_json(file_path: Union[str, Path]) -> Dict[str, Any]: """Parses a metadata json file into a dictionary. Args: From 05a8755292efe8020990e1353813619decae34a5 Mon Sep 17 00:00:00 2001 From: domna Date: Mon, 22 Jan 2024 10:26:36 +0100 Subject: [PATCH 78/88] Allow paths in `parse_flatten_json`, too --- pynxtools/dataconverter/readers/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/utils.py b/pynxtools/dataconverter/readers/utils.py index f05d240b9..1eecc99ef 100644 --- a/pynxtools/dataconverter/readers/utils.py +++ b/pynxtools/dataconverter/readers/utils.py @@ -290,13 +290,13 @@ def parse_json(file_path: Union[str, Path]) -> Dict[str, Any]: return json.load(file) -def parse_flatten_json(file_path: str) -> Dict[str, Any]: +def parse_flatten_json(file_path: Union[str, Path]) -> Dict[str, Any]: """ Parses a metadata json file into a dictionary and flattens it into a flat dictionary of absolute paths. Args: - file_path (str): The file path of the json file. + file_path (Union[str, Path]): The file path of the json file. Returns: Dict[str, Any]: From e669e404f6916a9acdb090c1557b7f7b1882f63f Mon Sep 17 00:00:00 2001 From: domna Date: Mon, 22 Jan 2024 10:30:14 +0100 Subject: [PATCH 79/88] Re-enable xps reader in tests --- tests/dataconverter/test_readers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/dataconverter/test_readers.py b/tests/dataconverter/test_readers.py index a777e5182..2dfed9947 100644 --- a/tests/dataconverter/test_readers.py +++ b/tests/dataconverter/test_readers.py @@ -59,7 +59,6 @@ def get_all_readers() -> List[ParameterSet]: "EmOmReader", "EmSpctrscpyReader", "EmNionReader", - "XPSReader", ): readers.append( pytest.param( From 741cea464c9905193d132754f6baf0502efb8fee Mon Sep 17 00:00:00 2001 From: domna Date: Mon, 22 Jan 2024 10:36:23 +0100 Subject: [PATCH 80/88] Fix mypy --- pynxtools/dataconverter/readers/xps/reader.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index 826969740..febe15d3f 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -2,6 +2,9 @@ A generic reader for loading XPS (X-ray Photoelectron Spectroscopy) data file into mpes nxdl (NeXus Definition Language) template. """ +import datetime +import sys + # Copyright The NOMAD Authors. # # This file is part of NOMAD. See https://nomad-lab.eu for further info. @@ -19,25 +22,21 @@ # limitations under the License. # from pathlib import Path -from typing import Any, Dict, Set, List, Tuple -import sys -import json -import datetime +from typing import Any, Dict, List, Set, Tuple -import yaml import numpy as np +import yaml +from pynxtools.dataconverter.helpers import extract_atom_types from pynxtools.dataconverter.readers.base.reader import BaseReader from pynxtools.dataconverter.readers.utils import ( FlattenSettings, flatten_and_replace, parse_flatten_json, ) -from pynxtools.dataconverter.template import Template -from pynxtools.dataconverter.helpers import extract_atom_types - from pynxtools.dataconverter.readers.xps.file_parser import XpsDataFileParser from pynxtools.dataconverter.readers.xps.reader_utils import construct_entry_name +from pynxtools.dataconverter.template import Template np.set_printoptions(threshold=sys.maxsize) @@ -410,7 +409,7 @@ def read( # This code is not very robust. elif file_ext == "json": if "config" in file: - config_file = file + config_file = Path(file) config_dict = parse_flatten_json(config_file) From 19cf050bfbc91918f5648dcbda5fa8316dfcecce Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:06:21 +0100 Subject: [PATCH 81/88] update definitions --- pynxtools/definitions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynxtools/definitions b/pynxtools/definitions index 9e5722e35..dcf6a9700 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit 9e5722e3524571fe659e1a82d3ff7b5ac73c9061 +Subproject commit dcf6a9700b3c9004bd355bec422eefd3a2182c04 From 203292004af8bb78560193b7427705a1c5be8c3a Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:17:38 +0100 Subject: [PATCH 82/88] remove logger --- pynxtools/dataconverter/logger.py | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 pynxtools/dataconverter/logger.py diff --git a/pynxtools/dataconverter/logger.py b/pynxtools/dataconverter/logger.py deleted file mode 100644 index 13a4cf4ea..000000000 --- a/pynxtools/dataconverter/logger.py +++ /dev/null @@ -1,25 +0,0 @@ -"""Logger for pynxtools""" -# -# 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. -# - -import logging - -logger = logging.getLogger("pynxtools") - -# Lowest level log allows to other levels erros, crittical, info and debug -logger.setLevel(logging.DEBUG) From 8b970e3488d23902d0f63ea1f0ff14adfde79578 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:31:32 +0100 Subject: [PATCH 83/88] update definitions to current fairmat branch --- .gitmodules | 3 +-- pynxtools/definitions | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index e5f3cf69f..304dc9b2d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,3 @@ [submodule "pynxtools/definitions"] path = pynxtools/definitions - url = https://github.com/FAIRmat-NFDI/nexus_definitions.git - branch = mpes-fixes \ No newline at end of file + url = https://github.com/FAIRmat-NFDI/nexus_definitions.git \ No newline at end of file diff --git a/pynxtools/definitions b/pynxtools/definitions index dcf6a9700..d2fdad4fc 160000 --- a/pynxtools/definitions +++ b/pynxtools/definitions @@ -1 +1 @@ -Subproject commit dcf6a9700b3c9004bd355bec422eefd3a2182c04 +Subproject commit d2fdad4fca14048ef7c73067927f67eb978c6826 From 0d871351a75f995ee0faaac2f9139eb6e1a804a6 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:14:42 +0100 Subject: [PATCH 84/88] mapping fix in XPS SLE reader --- pynxtools/dataconverter/readers/xps/sle/sle_specs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index 8c42ee41f..596661009 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -212,8 +212,8 @@ def _update_xps_dict_with_spectrum(self, spectrum, key_map): "energydispersion": f"{analyser_parent}/energydispersion", "detector": f"{analyser_parent}/detector", "manipulator": f"{instrument_parent}/manipulator", - "process/energy_calibration": f"{instrument_parent}/process/energy_calibration", - "process/transmission_correction": f"{instrument_parent}/process/transmission_correction", + "process/energy_calibration": f"{region_parent}/process/energy_calibration", + "process/transmission_correction": f"{region_parent}/process/transmission_correction", "sample": f"{region_parent}/sample", "data": f"{region_parent}/data", "region": f"{region_parent}/region", From 9c1290ac2570e7bb28e8aaeccda023a17384f7a5 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:35:33 +0100 Subject: [PATCH 85/88] read analyser voltage range in XPS SLE reader --- .../readers/xps/config/config_sle_specs.json | 2 ++ .../readers/xps/sle/sle_specs.py | 22 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json index 9af753f76..06d406c17 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_sle_specs.json @@ -66,6 +66,8 @@ "@default": "detector0", "name":"@xps_token:analyser/name", "description":"@eln", + "voltage_energy_range":"@xps_token:analyser/voltage_energy_range", + "voltage_energy_range/@units":"@xps_token:analyser/voltage_energy_range/@units", "work_function":"@xps_token:analyser/work_function", "work_function/@units":"@xps_token:analyser/work_function/@units", "fast_axes":"None", diff --git a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py index 596661009..664c0ff88 100644 --- a/pynxtools/dataconverter/readers/xps/sle/sle_specs.py +++ b/pynxtools/dataconverter/readers/xps/sle/sle_specs.py @@ -134,6 +134,8 @@ def construct_data(self): ], "beam": ["excitation_energy"], "analyser": [ + "voltage_range", + "voltage_range/@units", "work_function", ], "collectioncolumn": [ @@ -147,7 +149,6 @@ def construct_data(self): "lens_mode", "transmission_function/relative_intensity", "transmission_function/file", - "voltage_range", ], "energydispersion": [ "energy_scan_mode", @@ -1639,11 +1640,17 @@ def _extract_comm_settings(self, comm_settings): for setting in comm_settings.iter(): if setting.tag == "ScanMode": energy_scan_mode = self.energy_scan_mode_map[setting.attrib["Name"]] + common_spectrum_settings[setting.tag] = energy_scan_mode elif setting.tag == "SlitInfo": for key, val in setting.attrib.items(): common_spectrum_settings[key] = val elif setting.tag == "Lens": - common_spectrum_settings.update(setting.attrib) + voltage_range = setting.attrib["VoltageRange"] + split_text = re.split(r"([A-Z])", voltage_range, 1) + val = split_text[0] + unit = "".join(split_text[1:]) + common_spectrum_settings["voltage_range"] = float(val) + common_spectrum_settings["voltage_range/@units"] = unit elif setting.tag == "EnergyChannelCalibration": common_spectrum_settings["calibration_file/dir"] = setting.attrib["Dir"] common_spectrum_settings["calibration_file/path"] = setting.attrib[ @@ -1814,12 +1821,19 @@ def _extract_comm_settings(self, comm_settings): common_spectrum_settings = {} for setting in comm_settings.iter(): if setting.tag == "ScanMode": - common_spectrum_settings[setting.tag] = setting.attrib["Name"] + energy_scan_mode = self.energy_scan_mode_map[setting.attrib["Name"]] + common_spectrum_settings[setting.tag] = energy_scan_mode elif setting.tag == "SlitInfo": for key, val in setting.attrib.items(): common_spectrum_settings[key] = val elif setting.tag == "Lens": - common_spectrum_settings.update(setting.attrib) + voltage_range = setting.attrib["VoltageRange"] + voltage_range = "400V" + split_text = re.split(r"([A-Z])", voltage_range, 1) + val = split_text[0] + unit = "".join(split_text[1:]) + common_spectrum_settings["voltage_range"] = float(val) + common_spectrum_settings["voltage_range/@units"] = unit elif setting.tag == "EnergyChannelCalibration": common_spectrum_settings["calibration_file/dir"] = setting.attrib["Dir"] common_spectrum_settings["calibration_file/path"] = setting.attrib[ From 64212f4cba95bc9ce20ab07799f3bc21b41791d0 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:57:08 +0100 Subject: [PATCH 86/88] update XPS xml reader and tests file --- .../readers/xps/config/config_xml_specs.json | 27 +-- .../readers/xps/xml/xml_specs.py | 47 +++-- .../dataconverter/readers/xps/eln_data.yaml | 193 +++++++++++++----- 3 files changed, 174 insertions(+), 93 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json b/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json index fe9a55def..1bc5df069 100644 --- a/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json +++ b/pynxtools/dataconverter/readers/xps/config/config_xml_specs.json @@ -11,8 +11,6 @@ "experiment_facility":"@eln", "experiment_laboratory":"@eln", "entry_identifier":"@eln", - "duration":"@eln", - "duration/@units":"@eln", "method":"@xps_token:region/analysis_method", "program_name":"@eln" }, @@ -77,14 +75,7 @@ "resolution":"@xps_token:region/scan_delta", "resolution/@units":"eV" }, - "transmission_function":{ - "@default":"relative_intensity", - "@signal":"relative_intensity", - "@axes":["kinetic_energy"], - "kinetic_energy":"@xps_token:transmission_function/kinetic_energy", - "kinetic_energy/@units":"@xps_token:transmission_function/kinetic_energy/@units", - "relative_intensity":"@xps_token:collectioncolumn/transmission_function/relative_intensity" - }, + "transmission_function":"None", "COLLECTIONCOLUMN[collectioncolumn]":{ "scheme":"@eln", "lens_mode":"@xps_token:collectioncolumn/lens_mode", @@ -93,10 +84,6 @@ "spatial_acceptance":"None", "field_aperture":"None", "contrast_aperture":"None", - "iris":{ - "size":"@xps_token:collectioncolumn/iris_diameter", - "size/@units":"@xps_token:collectioncolumn/iris_diameter/@units" - }, "device_information":{ "vendor":"@eln", "model":"@eln", @@ -131,7 +118,7 @@ "@signal":"raw", "@default":"raw", "raw":"@detector_data:cycles/Cycle_", - "raw/@units":"@xps_token:detector/raw_data/raw/@units" + "raw/@units":"counts" } } }, @@ -226,12 +213,6 @@ "end_time":"@eln", "description":"@eln", "method":"@eln" - }, - "PHYSICAL_PROCESS[sample_loading]":{ - "start_time":"@eln", - "end_time":"@eln", - "description":"@eln", - "method":"@eln" } }, "temperature":{ @@ -260,8 +241,8 @@ "data":"@data:cycle", "data/@units":"counts", "energy":"@link:/entry/process/energy_calibration/calibrated_axis", - "energy/@type":"@xps_token:data/energy/@type", - "energy/@units":"@xps_token:data/energy/@units", + "energy/@type":"kinetic", + "energy/@units":"eV", "@energy_indices":"None", "@energy_depends":"None" } diff --git a/pynxtools/dataconverter/readers/xps/xml/xml_specs.py b/pynxtools/dataconverter/readers/xps/xml/xml_specs.py index 7e9d07ed7..f519bcadb 100644 --- a/pynxtools/dataconverter/readers/xps/xml/xml_specs.py +++ b/pynxtools/dataconverter/readers/xps/xml/xml_specs.py @@ -31,23 +31,6 @@ ) -def _construct_entry_name_xml(key): - """Construction entry name.""" - key_parts = key.split("/") - try: - # entry example : vendor__sample__name_of_scan_region - entry_name = ( - f"{key_parts[2]}" - f"__" - f'{key_parts[3].split("_", 1)[1]}' - f"__" - f'{key_parts[5].split("_", 1)[1]}' - ) - except IndexError: - entry_name = "" - return entry_name - - class XmlMapperSpecs(XPSMapper): """ Class for restructuring xml data file from @@ -180,13 +163,14 @@ def construct_data(self): f"{scan_nm}_chan_{row}" ] = xr.DataArray( data=channel_counts[row + 1, :], - coords={"BE": binding_energy}, + coords={"energy": binding_energy}, ) # Storing callibrated and after accumulated each scan counts if row == mcd_num - 1: self._xps_dict["data"][entry][scan_nm] = xr.DataArray( - data=channel_counts[0, :], coords={"BE": binding_energy} + data=channel_counts[0, :], + coords={"energy": binding_energy}, ) else: for row in np.arange(mcd_num): @@ -203,13 +187,14 @@ def construct_data(self): f"{scan_nm}_chan{row}" ] = xr.DataArray( data=channel_counts[row + 1, :], - coords={"BE": binding_energy}, + coords={"energy": binding_energy}, ) # Storing callibrated and after accumulated each scan counts if row == mcd_num - 1: self._xps_dict["data"][entry][scan_nm] = xr.DataArray( - data=channel_counts[0, :], coords={"BE": binding_energy} + data=channel_counts[0, :], + coords={"energy": binding_energy}, ) @@ -699,6 +684,7 @@ def collect_raw_data_to_construct_data(self): self.entry_to_data[entry]["raw_data"]["excitation_energy"] = val elif "region/scan_mode/name" in key: + val = self._convert_energy_scan_mode(val) self.entry_to_data[entry]["raw_data"]["scan_mode"] = val elif "region/kinetic_energy" in key: @@ -748,3 +734,22 @@ def collect_raw_data_to_construct_data(self): scan_name = f"cycle{cycle_num}_scan{scan_num}" self.entry_to_data[entry]["raw_data"]["scans"][scan_name] = val + + def _convert_energy_scan_mode(self, energy_scan_mode): + """ + Convert the native names for the energy scan modes to the ones + used in NXmpes. + + """ + energy_scan_mode_map = { + "FixedAnalyzerTransmission": "fixed_analyser_transmission", + "FixedRetardationRatio": "fixed_retardation_ratio", + "FixedEnergies": "fixed_energy", + "Snapshot": "snapshot", + } + + try: + energy_scan_mode = energy_scan_mode_map[energy_scan_mode] + except KeyError: + pass + return energy_scan_mode diff --git a/tests/data/dataconverter/readers/xps/eln_data.yaml b/tests/data/dataconverter/readers/xps/eln_data.yaml index 58e81f99e..5abaeca11 100644 --- a/tests/data/dataconverter/readers/xps/eln_data.yaml +++ b/tests/data/dataconverter/readers/xps/eln_data.yaml @@ -1,51 +1,146 @@ -Instrument: - Analyser: - Collectioncolumn: - scheme: "Angular dispersive" - mode: "Unknown" - description: "hemispherical" - name: null - Energydispersion: - entrance_slit: "Unknown" - scheme: "hemispherical" - energy_scan_mode: "fixed" - pass_energy: - unit: null - Detector: - amplifier_type: "channeltron" - detector_type: "Multi-anode" - Beam: +definition: + value: NXmpes + version: 1.0 +title: XPS Experiment +start_time: 2022-04-08T11:47:02.0200Z +end_time: 2022-04-08T12:32:06.0200Z +experiment_institution: BESSY II +program_name: SpecsLab 2 +user: + name: Lukas Pielsticker + email: lukas.pielsticker@cec.mpg.de +instrument: + device_information: + vendor: SPECS GmbH + model: XPS setup + identifier: null + energy_resolution: + type: calibrated + resolution: + value: 0.2 + unit: eV + source_probe: + type: Synchrotron X-ray Source + probe: x-ray + device_information: + vendor: null + model: null + identifier: null + beam_probe: distance: - unit: "mm" value: 0.0 - energy_resolution: - unit: null - value: null - Source: - type: "Synchrotron X-ray Source" - probe: "x-ray" -Sample: - name: "PBTTT" - chemical_formula: "(C42H62S4)n" - preparation_description: "From third party" - temperature: - unit: "K" - value: 298.0 - situation: "vacuum" - gas_pressure: - unit: "Pa" - value: 101325.0 - density: null - description: "A polymer material called PBTTT with chemical name poly[2,5-bis(3-dodecylthiophen-2-yl)thieno[3,2-b]thiophene]." -title: "XPS Experiment" -start_time: "2022-04-08T11:47:02.0200Z" -definition: - value: "NXmpes" - version: "1.0" -User: - name: "Ahmed Mansour" - email: "amansour@physik.hu-berlin.de" -Data: - BE: - unit: null - + unit: mm + analyser: + description: hemispherical + name: PHOIBOS 150 + device_information: + vendor: SPECS GmbH + model: PHOIBOS 150 + identifier: null + collectioncolumn: + scheme: angular dispersive + device_information: + vendor: null + model: null + identifier: null + energydispersion: + scheme: hemispherical + entrance_slit: unknown + energy_scan_mode: fixed_analyser_transmission + diameter: + unit: mm + value: 150 + device_information: + vendor: null + model: null + identifier: null + detector: + amplifier_type: channeltron + detector_type: Multi-anode + manipulator: + device_information: + vendor: SPECS GmbH + model: 5-axis manipulator + identifier: null + 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.0 + unit: A + 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 + 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: + description: A polymer material called PBTTT with chemical name poly[2,5-bis(3-dodecylthiophen-2-yl)thieno[3,2-b]thiophene]. + substance: + molecular_formula_hill: (C42H62S4)n + situation: vacuum + sample_history: + sample_preparation: + start_time: 2022-04-08T11:02:38.0200Z + end_time: 2022-04-08T11:06:42.200Z + description: From third party + method: null + \ No newline at end of file From 2f9242cc153033398070a863619561c7bcc3783d Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:57:46 +0100 Subject: [PATCH 87/88] allow for direct parsing of energy from data field --- pynxtools/dataconverter/readers/xps/reader.py | 102 +++++++++--------- 1 file changed, 53 insertions(+), 49 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index febe15d3f..f997e424d 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -121,7 +121,7 @@ def get_entries_and_detectors(config_dict, xps_data_dict): # pylint: disable=too-many-locals # pylint: disable=too-many-statements -def fill_data_group(key, entries_values, config_dict, template): +def fill_data_group(key, key_part, entries_values, config_dict, template): """Fill out fields and attributes for NXdata""" survey_count_ = 0 @@ -143,52 +143,55 @@ def fill_data_group(key, entries_values, config_dict, template): data_field_key = key.replace("entry", entry) data_group_key = data_field_key.rsplit("/data", 1)[0] - # Define energy axis and energy_indices - # energy_key = - template[f"{data_group_key}/energy/@long_name"] = "energy" - template[f"{data_group_key}/@energy_indices"] = 0 + if key_part == "energy": + energy_field_key = f"{data_group_key}/energy" + binding_energy = np.array(xr_data.coords) + template[energy_field_key] = binding_energy - units = "counts_per_second" + else: + # Define energy axis and energy_indices + template[f"{data_group_key}/energy/@long_name"] = "energy" + template[f"{data_group_key}/@energy_indices"] = 0 + + units = "counts_per_second" + + chan_count = "_chan" + scan_count = "_scan" + for data_var in xr_data.data_vars: + cycle_scan = data_var + # Collecting only accumulated counts + # indivisual channeltron counts goes 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 + template[indv_scan_key_unit] = units + + template[data_field_key] = np.mean( + [ + xr_data[x_arr].data + for x_arr in xr_data.data_vars + if (chan_count not in x_arr and scan_count in x_arr) + ], + axis=0, + ) - chan_count = "_chan" - scan_count = "_scan" - for data_var in xr_data.data_vars: - cycle_scan = data_var - # Collecting only accumulated counts - # indivisual channeltron counts goes 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 - template[indv_scan_key_unit] = units - - template[data_field_key] = np.mean( - [ - xr_data[x_arr].data - for x_arr in xr_data.data_vars - if (chan_count not in x_arr and scan_count in x_arr) - ], - axis=0, - ) - - template[f"{data_field_key}_errors"] = np.std( - [ - xr_data[x_arr].data - for x_arr in xr_data.data_vars - if (chan_count not in x_arr and scan_count in x_arr) - ], - axis=0, - ) - - template[f"{data_field_key}/@long_name"] = "XPS intensity" + template[f"{data_field_key}_errors"] = np.std( + [ + xr_data[x_arr].data + for x_arr in xr_data.data_vars + if (chan_count not in x_arr and scan_count in x_arr) + ], + axis=0, + ) + + template[f"{data_field_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""" for entry, xr_data in entries_values.items(): - cycle_count = "cycle" - scan_count = "_scan" chan_count = "_chan" # unit_key = config_dict[f"{key}/@units"] @@ -213,7 +216,6 @@ def fill_detector_group(key, entries_values, config_dict, xps_data_dict, templat cycle_scan_key = modified_key.replace( "raw_data/raw", f"raw_data/{cycle_scan_num}" ) - cycle_scan_key_unit = modified_key + "/@units" template[cycle_scan_key] = xr_data[data_var].data template[f"{cycle_scan_key}/@units"] = units @@ -294,10 +296,9 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): entries_values = find_entry_and_value( xps_data_dict, key_part, dt_typ=XPS_DATA_TOKEN ) + fill_data_group(key, key_part, entries_values, config_dict, template) - fill_data_group(key, entries_values, config_dict, template) - - if XPS_DETECTOR_TOKEN in str(config_value): + elif XPS_DETECTOR_TOKEN in str(config_value): 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 @@ -308,15 +309,15 @@ def fill_template_with_xps_data(config_dict, xps_data_dict, template): ) elif XPS_TOKEN in str(config_value): - token = config_value.split(XPS_TOKEN)[-1] + key_part = config_value.split(XPS_TOKEN)[-1] entries_values = find_entry_and_value( - xps_data_dict, token, dt_typ=XPS_TOKEN + xps_data_dict, key_part, dt_typ=XPS_TOKEN ) for entry, ent_value in entries_values.items(): - fill_template_with_value(key, ent_value, template) # + modified_key = key.replace("[entry]", f"[{entry}]") + fill_template_with_value(modified_key, ent_value, template) else: - # Fill with config value. fill_template_with_value(key, config_value, template) @@ -324,8 +325,11 @@ 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): - field_value = eln_data_dict[key] - fill_template_with_value(key, field_value, template) + try: + field_value = eln_data_dict[key] + fill_template_with_value(key, field_value, template) + except KeyError: + pass elif key in eln_data_dict: field_value = eln_data_dict[key] fill_template_with_value(key, field_value, template) From 2d0baa783bd14352065d13f8f0f81805067cec56 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Mon, 22 Jan 2024 16:10:56 +0100 Subject: [PATCH 88/88] Fix energy reading in XPS reader --- pynxtools/dataconverter/readers/xps/reader.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pynxtools/dataconverter/readers/xps/reader.py b/pynxtools/dataconverter/readers/xps/reader.py index f997e424d..79b36e5fa 100644 --- a/pynxtools/dataconverter/readers/xps/reader.py +++ b/pynxtools/dataconverter/readers/xps/reader.py @@ -145,8 +145,9 @@ def fill_data_group(key, key_part, entries_values, config_dict, template): if key_part == "energy": energy_field_key = f"{data_group_key}/energy" - binding_energy = np.array(xr_data.coords) - template[energy_field_key] = binding_energy + energy = np.array(xr_data.coords["energy"].values) + print(energy) + template[energy_field_key] = energy else: # Define energy axis and energy_indices