From 3aeffc7f8c5228dc0cc848b91e8385ad19f00e50 Mon Sep 17 00:00:00 2001 From: rettigl Date: Thu, 7 Dec 2023 13:43:22 +0100 Subject: [PATCH 01/10] rename coordinate names, and add mechanism to extract depends fields --- specsscan/core.py | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/specsscan/core.py b/specsscan/core.py index 557ac03..29df470 100755 --- a/specsscan/core.py +++ b/specsscan/core.py @@ -31,20 +31,40 @@ package_dir = os.path.dirname(find_spec("specsscan").origin) default_units: Dict[Any, Any] = { - "Angle": "degrees", - "Ekin": "eV", + "angular1": "degrees", + "energy": "eV", "delay": "fs", "mirrorX": "steps", "mirrorY": "steps", "X": "mm", "Y": "mm", "Z": "mm", - "polar": "degrees", - "tilt": "degrees", - "azimuth": "degrees", + "angular2": "degrees", "voltage": "V", } +coordinate_mapping = { + "Ekin": "energy", + "Angle": "angular1", + "polar": "angular2", + "tilt": "angular2", + "azimuth": "angular2", + "X": "spatial1", + "Y": "spatial1", + "Z": "spatial1", +} + +coordinate_depends = { + "Ekin": "/entry/instrument/electronanalyser/energydispersion/kinetic_energy", + "Angle": "/entry/instrument/electronanalyser/transformations/analyzer_dispersion", + "polar": "/entry/sample/transformations/rot_tht", + "tilt": "/entry/sample/transformations/rot_phi", + "azimuth": "/entry/sample/transformations/rot_omg", + "X": "/entry/sample/transformations/trans_x", + "Y": "/entry/sample/transformations/trans_y", + "Z": "/entry/sample/transformations/trans_z", +} + class SpecsScan: """SpecsAnalyzer class for loading scans and data from SPECS phoibos electron analyzers, @@ -233,6 +253,12 @@ def load_scan( else: res_xarray = res_xarray.transpose("Angle", "Ekin", dim) + # rename coords and store mapping information + rename_dict = {k:coordinate_mapping[k] for k in coordinate_mapping.keys() if k in res_xarray.dims} + depends_dict = {rename_dict[k]:coordinate_depends[k] for k in coordinate_depends.keys() if k in res_xarray.dims} + res_xarray = res_xarray.rename(rename_dict) + self._scan_info["coordinate_depends"] = depends_dict + for name in res_xarray.dims: res_xarray[name].attrs["unit"] = default_units[name] From 1a48a76ccc9a00082a8a8d68900e9be0e75e6369 Mon Sep 17 00:00:00 2001 From: rettigl Date: Fri, 9 Feb 2024 23:18:09 +0100 Subject: [PATCH 02/10] move FHI config and Nexus config file to config directory --- .../config/NXmpes_arpes_phoibos_config.json | 244 ++++++++++++++++++ .../config/NXmpes_arpes_phoibos_config.json_ | 244 ++++++++++++++++++ specsscan/config/example_config_FHI.yaml | 55 ++++ specsscan/config/example_config_FHI.yaml_ | 90 +++++++ 4 files changed, 633 insertions(+) create mode 100644 specsscan/config/NXmpes_arpes_phoibos_config.json create mode 100644 specsscan/config/NXmpes_arpes_phoibos_config.json_ create mode 100644 specsscan/config/example_config_FHI.yaml create mode 100644 specsscan/config/example_config_FHI.yaml_ diff --git a/specsscan/config/NXmpes_arpes_phoibos_config.json b/specsscan/config/NXmpes_arpes_phoibos_config.json new file mode 100644 index 0000000..9cf676d --- /dev/null +++ b/specsscan/config/NXmpes_arpes_phoibos_config.json @@ -0,0 +1,244 @@ +{ + "/@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/loader/scan_path", + "/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]/INSTRUMENT[instrument]/name": "Phoibos 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]/angular_resolution": { + "link": "/entry/instrument/electronanalyser/angular_resolution" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution": "@attrs:metadata/scan_info/angular_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Phoibos 150 Hemispherical Energy Analyzer", + "/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/scan_info/spatial_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "@attrs:metadata/scan_info/fast_axes", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/scan_info/slow_axes", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/scan_info/projection", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "Angular dispersive", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/scan_info/LensMode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 40.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/scan_info/PassEnergy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "hemispherical", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": 300.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "Phosphor+CCD", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ + 1800, + 1800 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/scan_info/ConversionVoltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/scan_info/ScreenVoltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/scan_info/DetectorVoltage", + "/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]": 40.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]": 140.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/scan_info/trARPES:Carving:TEMP_RBV", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "K", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": 0.0, + "/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]/preparation_description": "Here should be a description of the preparation procedure.", + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@attrs:metadata/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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]/DATA[data]/@axes": "@data:dims", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Angle_indices]": "@data:Angle.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Ekin_indices]": "@data:Ekin.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@delay_indices]": "@data:delay.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@tilt_indices]": "@data:tilt.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[Angle]": "@data:Angle.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[Angle]/@units": "@data:Angle.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]": "@data:Ekin.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]/@units": "@data:Ekin.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[delay]": "@data:delay.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[delay]/@units": "@data:delay.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]": "@data:tilt.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]/@units": "@data:tilt.unit" +} diff --git a/specsscan/config/NXmpes_arpes_phoibos_config.json_ b/specsscan/config/NXmpes_arpes_phoibos_config.json_ new file mode 100644 index 0000000..9cf676d --- /dev/null +++ b/specsscan/config/NXmpes_arpes_phoibos_config.json_ @@ -0,0 +1,244 @@ +{ + "/@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/loader/scan_path", + "/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]/INSTRUMENT[instrument]/name": "Phoibos 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]/angular_resolution": { + "link": "/entry/instrument/electronanalyser/angular_resolution" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution": "@attrs:metadata/scan_info/angular_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Phoibos 150 Hemispherical Energy Analyzer", + "/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/scan_info/spatial_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "@attrs:metadata/scan_info/fast_axes", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/scan_info/slow_axes", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/scan_info/projection", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "Angular dispersive", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/scan_info/LensMode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 40.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/scan_info/PassEnergy", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "hemispherical", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": 300.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "Phosphor+CCD", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ + 1800, + 1800 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/scan_info/ConversionVoltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/scan_info/ScreenVoltage", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/scan_info/DetectorVoltage", + "/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]": 40.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]": 140.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/scan_info/trARPES:Carving:TEMP_RBV", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "K", + "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": 0.0, + "/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]/preparation_description": "Here should be a description of the preparation procedure.", + "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@attrs:metadata/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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]/DATA[data]/@axes": "@data:dims", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Angle_indices]": "@data:Angle.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Ekin_indices]": "@data:Ekin.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@delay_indices]": "@data:delay.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@tilt_indices]": "@data:tilt.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[Angle]": "@data:Angle.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[Angle]/@units": "@data:Angle.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]": "@data:Ekin.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]/@units": "@data:Ekin.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[delay]": "@data:delay.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[delay]/@units": "@data:delay.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]": "@data:tilt.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]/@units": "@data:tilt.unit" +} diff --git a/specsscan/config/example_config_FHI.yaml b/specsscan/config/example_config_FHI.yaml new file mode 100644 index 0000000..69ec127 --- /dev/null +++ b/specsscan/config/example_config_FHI.yaml @@ -0,0 +1,55 @@ +data_path: "//mnt/topfloor/trARPES/PESData/" +enable_nested_progress_bar: false +epics_channels: + tempa: "trARPES:Carving:TEMP_RBV" + x: "trARPES:Carving:TRX.RBV" + y: "trARPES:Carving:TRY.RBV" + z: "trARPES:Carving:TRZ.RBV" + polar: "trARPES:Carving:THT.RBV" + tilt: "trARPES:Carving:PHI.RBV" + azimuth: "trARPES:Carving:OMG.RBV" + sample_bias: "KTOF:Lens:Sample:V" + pressure: "trARPES:XGS600:PressureAC:P_RD" +nexus: + reader: "mpes" + definition: "NXmpes" + input_files: ["../tests/data/phoibos_config.json"] +spa_params: + calib2d_file: "../tests/data/phoibos150.calib2d" + nx_pixel: 1376 + ny_pixel: 1024 + pixel_size: 0.00645 + magnification: 4.54 + crop: False + apply_fft_filter: true + fft_filter_peaks: + - amplitude: 1 + pos_x: 79 + pos_y: 0 + sigma_x: 8 + sigma_y: 8 + - amplitude: 1 + pos_x: 176 + pos_y: 0 + sigma_x: 8 + sigma_y: 8 + - amplitude: 1 + pos_x: 0 + pos_y: 109 + sigma_x: 5 + sigma_y: 8 + - amplitude: 1 + pos_x: 78 + pos_y: 109 + sigma_x: 5 + sigma_y: 5 + - amplitude: 1 + pos_x: 175 + pos_y: 108 + sigma_x: 5 + sigma_y: 5 + - amplitude: 1 + pos_x: 254 + pos_y: 109 + sigma_x: 5 + sigma_y: 8 diff --git a/specsscan/config/example_config_FHI.yaml_ b/specsscan/config/example_config_FHI.yaml_ new file mode 100644 index 0000000..08b095a --- /dev/null +++ b/specsscan/config/example_config_FHI.yaml_ @@ -0,0 +1,90 @@ +data_path: "//mnt/topfloor/trARPES/PESData/" +enable_nested_progress_bar: false + +coordinate_mapping: + Ekin: "energy" + Angle: "angular1" + polar: "angular2" + tilt: "angular2" + azimuth: "angular2" + X: "spatial1" + Y: "spatial1" + Z: "spatial1" + +coordinate_depends: + Ekin: "/entry/instrument/electronanalyser/energydispersion/kinetic_energy" + Angle: "/entry/instrument/electronanalyser/transformations/analyzer_dispersion" + polar: "/entry/sample/transformations/rot_tht" + tilt: "/entry/sample/transformations/rot_phi" + azimuth: "/entry/sample/transformations/rot_omg" + X: "/entry/sample/transformations/trans_x" + Y: "/entry/sample/transformations/trans_y" + Z: "/entry/sample/transformations/trans_z" + +units: + angular1: "degree" + angular2: "degree" + energy: "eV" + delay: "fs" + mirrorX: "steps" + mirrorY: "steps" + X: "mm" + Y: "mm" + Z: "mm" + voltage: "V" + +epics_channels: + tempa: "trARPES:Carving:TEMP_RBV" + x: "trARPES:Carving:TRX.RBV" + y: "trARPES:Carving:TRY.RBV" + z: "trARPES:Carving:TRZ.RBV" + polar: "trARPES:Carving:THT.RBV" + tilt: "trARPES:Carving:PHI.RBV" + azimuth: "trARPES:Carving:OMG.RBV" + sample_bias: "KTOF:Lens:Sample:V" + pressure: "trARPES:XGS600:PressureAC:P_RD" + +nexus: + reader: "mpes" + definition: "NXmpes" + input_files: ["../specsscan/config/NXmpes_arpes_phoibos_config.json"] + +spa_params: + calib2d_file: "../tests/data/phoibos150.calib2d" + nx_pixel: 1376 + ny_pixel: 1024 + pixel_size: 0.00645 + magnification: 4.54 + crop: false + apply_fft_filter: true + fft_filter_peaks: + - amplitude: 1 + pos_x: 79 + pos_y: 0 + sigma_x: 8 + sigma_y: 8 + - amplitude: 1 + pos_x: 176 + pos_y: 0 + sigma_x: 8 + sigma_y: 8 + - amplitude: 1 + pos_x: 0 + pos_y: 109 + sigma_x: 5 + sigma_y: 8 + - amplitude: 1 + pos_x: 78 + pos_y: 109 + sigma_x: 5 + sigma_y: 5 + - amplitude: 1 + pos_x: 175 + pos_y: 108 + sigma_x: 5 + sigma_y: 5 + - amplitude: 1 + pos_x: 254 + pos_y: 109 + sigma_x: 5 + sigma_y: 8 From 9922fe5eb4de0634cbd9ca0148471c200833d7d9 Mon Sep 17 00:00:00 2001 From: rettigl Date: Fri, 9 Feb 2024 23:22:12 +0100 Subject: [PATCH 03/10] move default units, coordinates_mapping, and coordinates_depend into config --- .../config/NXmpes_arpes_phoibos_config.json_ | 244 ------------------ specsscan/config/default.yaml | 14 + specsscan/config/example_config_FHI.yaml | 39 ++- specsscan/config/example_config_FHI.yaml_ | 90 ------- specsscan/core.py | 59 ++--- tests/test_io.py | 26 +- 6 files changed, 79 insertions(+), 393 deletions(-) delete mode 100644 specsscan/config/NXmpes_arpes_phoibos_config.json_ delete mode 100644 specsscan/config/example_config_FHI.yaml_ diff --git a/specsscan/config/NXmpes_arpes_phoibos_config.json_ b/specsscan/config/NXmpes_arpes_phoibos_config.json_ deleted file mode 100644 index 9cf676d..0000000 --- a/specsscan/config/NXmpes_arpes_phoibos_config.json_ +++ /dev/null @@ -1,244 +0,0 @@ -{ - "/@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/loader/scan_path", - "/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]/INSTRUMENT[instrument]/name": "Phoibos 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]/angular_resolution": { - "link": "/entry/instrument/electronanalyser/angular_resolution" - }, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution": "@attrs:metadata/scan_info/angular_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Phoibos 150 Hemispherical Energy Analyzer", - "/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/scan_info/spatial_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "@attrs:metadata/scan_info/fast_axes", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/scan_info/slow_axes", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/scan_info/projection", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "Angular dispersive", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/scan_info/LensMode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 40.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/scan_info/PassEnergy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "hemispherical", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": 300.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "Phosphor+CCD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ - 1800, - 1800 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/scan_info/ConversionVoltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/scan_info/ScreenVoltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/scan_info/DetectorVoltage", - "/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]": 40.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]": 140.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/scan_info/trARPES:Carving:TEMP_RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "K", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": 0.0, - "/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]/preparation_description": "Here should be a description of the preparation procedure.", - "/ENTRY[entry]/SAMPLE[sample]/gas_pressure": "@attrs:metadata/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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]/DATA[data]/@axes": "@data:dims", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Angle_indices]": "@data:Angle.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Ekin_indices]": "@data:Ekin.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@delay_indices]": "@data:delay.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@tilt_indices]": "@data:tilt.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[Angle]": "@data:Angle.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[Angle]/@units": "@data:Angle.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]": "@data:Ekin.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]/@units": "@data:Ekin.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[delay]": "@data:delay.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[delay]/@units": "@data:delay.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]": "@data:tilt.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]/@units": "@data:tilt.unit" -} diff --git a/specsscan/config/default.yaml b/specsscan/config/default.yaml index 6f1666b..f753580 100644 --- a/specsscan/config/default.yaml +++ b/specsscan/config/default.yaml @@ -2,3 +2,17 @@ data_path: "//nap32/topfloor/trARPES/PESData/" enable_nested_progress_bar: false spa_params: apply_fft_filter: false + +units: + Angle: "degree" + Ekin: "eV" + delay: "fs" + mirrorX: "steps" + mirrorY: "steps" + X: "mm" + Y: "mm" + Z: "mm" + tilt: "degree" + azimuth: "degree" + polar: "degree" + voltage: "V" diff --git a/specsscan/config/example_config_FHI.yaml b/specsscan/config/example_config_FHI.yaml index 69ec127..08b095a 100644 --- a/specsscan/config/example_config_FHI.yaml +++ b/specsscan/config/example_config_FHI.yaml @@ -1,5 +1,38 @@ data_path: "//mnt/topfloor/trARPES/PESData/" enable_nested_progress_bar: false + +coordinate_mapping: + Ekin: "energy" + Angle: "angular1" + polar: "angular2" + tilt: "angular2" + azimuth: "angular2" + X: "spatial1" + Y: "spatial1" + Z: "spatial1" + +coordinate_depends: + Ekin: "/entry/instrument/electronanalyser/energydispersion/kinetic_energy" + Angle: "/entry/instrument/electronanalyser/transformations/analyzer_dispersion" + polar: "/entry/sample/transformations/rot_tht" + tilt: "/entry/sample/transformations/rot_phi" + azimuth: "/entry/sample/transformations/rot_omg" + X: "/entry/sample/transformations/trans_x" + Y: "/entry/sample/transformations/trans_y" + Z: "/entry/sample/transformations/trans_z" + +units: + angular1: "degree" + angular2: "degree" + energy: "eV" + delay: "fs" + mirrorX: "steps" + mirrorY: "steps" + X: "mm" + Y: "mm" + Z: "mm" + voltage: "V" + epics_channels: tempa: "trARPES:Carving:TEMP_RBV" x: "trARPES:Carving:TRX.RBV" @@ -10,17 +43,19 @@ epics_channels: azimuth: "trARPES:Carving:OMG.RBV" sample_bias: "KTOF:Lens:Sample:V" pressure: "trARPES:XGS600:PressureAC:P_RD" + nexus: reader: "mpes" definition: "NXmpes" - input_files: ["../tests/data/phoibos_config.json"] + input_files: ["../specsscan/config/NXmpes_arpes_phoibos_config.json"] + spa_params: calib2d_file: "../tests/data/phoibos150.calib2d" nx_pixel: 1376 ny_pixel: 1024 pixel_size: 0.00645 magnification: 4.54 - crop: False + crop: false apply_fft_filter: true fft_filter_peaks: - amplitude: 1 diff --git a/specsscan/config/example_config_FHI.yaml_ b/specsscan/config/example_config_FHI.yaml_ deleted file mode 100644 index 08b095a..0000000 --- a/specsscan/config/example_config_FHI.yaml_ +++ /dev/null @@ -1,90 +0,0 @@ -data_path: "//mnt/topfloor/trARPES/PESData/" -enable_nested_progress_bar: false - -coordinate_mapping: - Ekin: "energy" - Angle: "angular1" - polar: "angular2" - tilt: "angular2" - azimuth: "angular2" - X: "spatial1" - Y: "spatial1" - Z: "spatial1" - -coordinate_depends: - Ekin: "/entry/instrument/electronanalyser/energydispersion/kinetic_energy" - Angle: "/entry/instrument/electronanalyser/transformations/analyzer_dispersion" - polar: "/entry/sample/transformations/rot_tht" - tilt: "/entry/sample/transformations/rot_phi" - azimuth: "/entry/sample/transformations/rot_omg" - X: "/entry/sample/transformations/trans_x" - Y: "/entry/sample/transformations/trans_y" - Z: "/entry/sample/transformations/trans_z" - -units: - angular1: "degree" - angular2: "degree" - energy: "eV" - delay: "fs" - mirrorX: "steps" - mirrorY: "steps" - X: "mm" - Y: "mm" - Z: "mm" - voltage: "V" - -epics_channels: - tempa: "trARPES:Carving:TEMP_RBV" - x: "trARPES:Carving:TRX.RBV" - y: "trARPES:Carving:TRY.RBV" - z: "trARPES:Carving:TRZ.RBV" - polar: "trARPES:Carving:THT.RBV" - tilt: "trARPES:Carving:PHI.RBV" - azimuth: "trARPES:Carving:OMG.RBV" - sample_bias: "KTOF:Lens:Sample:V" - pressure: "trARPES:XGS600:PressureAC:P_RD" - -nexus: - reader: "mpes" - definition: "NXmpes" - input_files: ["../specsscan/config/NXmpes_arpes_phoibos_config.json"] - -spa_params: - calib2d_file: "../tests/data/phoibos150.calib2d" - nx_pixel: 1376 - ny_pixel: 1024 - pixel_size: 0.00645 - magnification: 4.54 - crop: false - apply_fft_filter: true - fft_filter_peaks: - - amplitude: 1 - pos_x: 79 - pos_y: 0 - sigma_x: 8 - sigma_y: 8 - - amplitude: 1 - pos_x: 176 - pos_y: 0 - sigma_x: 8 - sigma_y: 8 - - amplitude: 1 - pos_x: 0 - pos_y: 109 - sigma_x: 5 - sigma_y: 8 - - amplitude: 1 - pos_x: 78 - pos_y: 109 - sigma_x: 5 - sigma_y: 5 - - amplitude: 1 - pos_x: 175 - pos_y: 108 - sigma_x: 5 - sigma_y: 5 - - amplitude: 1 - pos_x: 254 - pos_y: 109 - sigma_x: 5 - sigma_y: 8 diff --git a/specsscan/core.py b/specsscan/core.py index 29df470..865748a 100755 --- a/specsscan/core.py +++ b/specsscan/core.py @@ -30,41 +30,6 @@ package_dir = os.path.dirname(find_spec("specsscan").origin) -default_units: Dict[Any, Any] = { - "angular1": "degrees", - "energy": "eV", - "delay": "fs", - "mirrorX": "steps", - "mirrorY": "steps", - "X": "mm", - "Y": "mm", - "Z": "mm", - "angular2": "degrees", - "voltage": "V", -} - -coordinate_mapping = { - "Ekin": "energy", - "Angle": "angular1", - "polar": "angular2", - "tilt": "angular2", - "azimuth": "angular2", - "X": "spatial1", - "Y": "spatial1", - "Z": "spatial1", -} - -coordinate_depends = { - "Ekin": "/entry/instrument/electronanalyser/energydispersion/kinetic_energy", - "Angle": "/entry/instrument/electronanalyser/transformations/analyzer_dispersion", - "polar": "/entry/sample/transformations/rot_tht", - "tilt": "/entry/sample/transformations/rot_phi", - "azimuth": "/entry/sample/transformations/rot_omg", - "X": "/entry/sample/transformations/trans_x", - "Y": "/entry/sample/transformations/trans_y", - "Z": "/entry/sample/transformations/trans_z", -} - class SpecsScan: """SpecsAnalyzer class for loading scans and data from SPECS phoibos electron analyzers, @@ -253,14 +218,25 @@ def load_scan( else: res_xarray = res_xarray.transpose("Angle", "Ekin", dim) - # rename coords and store mapping information - rename_dict = {k:coordinate_mapping[k] for k in coordinate_mapping.keys() if k in res_xarray.dims} - depends_dict = {rename_dict[k]:coordinate_depends[k] for k in coordinate_depends.keys() if k in res_xarray.dims} + # rename coords and store mapping information, if available + coordinate_mapping = self._config.get("coordinate_mapping", {}) + coordinate_depends = self._config.get("coordinate_depends", {}) + rename_dict = { + k: coordinate_mapping[k] for k in coordinate_mapping.keys() if k in res_xarray.dims + } + depends_dict = { + rename_dict[k]: coordinate_depends[k] + for k in coordinate_depends.keys() + if k in res_xarray.dims + } res_xarray = res_xarray.rename(rename_dict) self._scan_info["coordinate_depends"] = depends_dict for name in res_xarray.dims: - res_xarray[name].attrs["unit"] = default_units[name] + try: + res_xarray[name].attrs["unit"] = self._config["units"][name] + except KeyError: + pass self.metadata.update( **handle_meta( @@ -314,7 +290,6 @@ def check_scan( else: # search for the given scan using the default path path = Path(self._config["data_path"]) - # path_scan = sorted(path.glob(f"20[1,2][9,0-9]/*/*/Raw Data/{scan}")) path_scan_list = find_scan(path, scan) if not path_scan_list: raise FileNotFoundError( @@ -386,7 +361,7 @@ def check_scan( res_xarray = res_xarray.transpose("Angle", "Ekin", "Iteration") for name in res_xarray.dims: try: - res_xarray[name].attrs["unit"] = default_units[name] + res_xarray[name].attrs["unit"] = self._config["units"][name] except KeyError: pass @@ -441,6 +416,8 @@ def save( config["nexus"]["definition"] - **input_files**: A list of input files to pass to the reader. Defaults to config["nexus"]["input_files"] + - **eln_data**: Path to a json file with data from an electronic lab notebook. + Its is appended to the ``input_files``. """ if self._result is None: raise NameError("Need to load data first!") diff --git a/tests/test_io.py b/tests/test_io.py index d7af80d..e097992 100644 --- a/tests/test_io.py +++ b/tests/test_io.py @@ -1,5 +1,6 @@ """This is a code that performs several tests for the input/output functions """ +import os import random from pathlib import Path @@ -31,20 +32,10 @@ def test_save_and_load_tiff_array(_da): """Test the tiff saving/loading function for np.ndarrays.""" nd_array = _da.data if nd_array.ndim > 1: - to_tiff(nd_array, "test") - as_array = load_tiff("test.tiff") + to_tiff(nd_array, f"test_nd_{nd_array.ndim}") + as_array = load_tiff(f"test_nd_{nd_array.ndim}.tiff") np.testing.assert_allclose(nd_array, as_array) - - -@pytest.mark.parametrize( - "_da", - binned_arrays, - ids=lambda x: f"ndims:{len(x.shape)}", -) -def test_save_xarr_to_tiff(_da): - """Test the tiff saving function for xr.DataArrays.""" - to_tiff(_da, "test") - assert Path("test.tiff").is_file() + os.remove(f"test_nd_{nd_array.ndim}.tiff") @pytest.mark.parametrize( @@ -54,14 +45,16 @@ def test_save_xarr_to_tiff(_da): ) def test_save_and_load_tiff_xarray(_da): """Test the tiff saving/loading function for xr.DataArrays.""" - to_tiff(_da, "test") - loaded = load_tiff("test.tiff") + to_tiff(_da, f"test_xr_{_da.data.ndim}") + assert Path(f"test_xr_{_da.data.ndim}.tiff").is_file() + loaded = load_tiff(f"test_xr_{_da.data.ndim}.tiff") dims_order = _sort_dims_for_imagej(_da.dims) transposed = _da.transpose(*dims_order).astype(np.float32) np.testing.assert_allclose( transposed.values, loaded.values, ) + os.remove(f"test_xr_{_da.data.ndim}.tiff") @pytest.mark.parametrize( @@ -71,10 +64,11 @@ def test_save_and_load_tiff_xarray(_da): ) def test_save_and_load_hdf5(_da): """Test the hdf5 saving/loading function.""" - faddr = f"test_{len(_da.shape)}.h5" + faddr = f"test_{_da.data.ndim}.h5" to_h5(_da, faddr, mode="w") loaded = load_h5(faddr) xr.testing.assert_equal(_da, loaded) np.testing.assert_equal(_da.attrs, loaded.attrs) for axis in _da.coords: np.testing.assert_equal(_da[axis].attrs, loaded[axis].attrs) + os.remove(f"test_{_da.data.ndim}.h5") From a97e630069b3d25fc60be4a1e34700f5a78ad943 Mon Sep 17 00:00:00 2001 From: rettigl Date: Fri, 9 Feb 2024 23:58:23 +0100 Subject: [PATCH 04/10] partial solution to convert to NXmpes_arpes --- pyproject.toml | 2 +- .../config/NXmpes_arpes_phoibos_config.json | 205 +++++++++++------- specsscan/core.py | 2 +- tutorial/phoibos_eln_data.yaml | 108 +++++++++ 4 files changed, 240 insertions(+), 77 deletions(-) mode change 100644 => 100755 specsscan/config/NXmpes_arpes_phoibos_config.json create mode 100644 tutorial/phoibos_eln_data.yaml diff --git a/pyproject.toml b/pyproject.toml index 43891f5..53e3cfd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ ipympl = ">=0.9.1" ipywidgets = ">=7.7.1" matplotlib = ">=3.5.1" numpy = ">=1.21.6" -pynxtools = ">=0.0.9" +pynxtools = ">=0.0.2, <0.0.9" python-dateutil = ">=2.8.2" pyyaml = ">=6.0" xarray = ">=0.20.2" diff --git a/specsscan/config/NXmpes_arpes_phoibos_config.json b/specsscan/config/NXmpes_arpes_phoibos_config.json old mode 100644 new mode 100755 index 9cf676d..5498d0b --- a/specsscan/config/NXmpes_arpes_phoibos_config.json +++ b/specsscan/config/NXmpes_arpes_phoibos_config.json @@ -14,18 +14,37 @@ "/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": "Phoibos 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]/angular_resolution": { "link": "/entry/instrument/electronanalyser/angular_resolution" }, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution": "@attrs:metadata/scan_info/angular_resolution", + "/ENTRY[entry]/geometries/arpesgeometry/depends_on": "/entry/geometries/arpesgeometry/transformations/rot_y", + "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@depends_on": ".", + "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]": 140.0, + "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@transformation_type": "rotation", + "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@units": "degrees", + "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@vector": [ + 0, + 1, + 0 + ], + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@attrs:metadata/instrument/energy_resolution", + "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "meV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution": "@attrs:metadata/instrument/electronanalyser/angular_resolution", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution/@units": "degrees", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Phoibos 150 Hemispherical Energy Analyzer", "/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/scan_info/spatial_resolution", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": 4.55, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "@attrs:metadata/scan_info/fast_axes", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/scan_info/slow_axes", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/scan_info/projection", @@ -36,6 +55,8 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/scan_info/PassEnergy", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/kinetic_energy": "@data:energy.data", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/kinetic_energy/@units": "@data:energy.unit", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "hemispherical", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": 300.0, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "mm", @@ -52,72 +73,79 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/scan_info/DetectorVoltage", "/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]/@depends_on": "analyzer_elevation", "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": 40.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[trans_z]/@vector": [0, 0, 1], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@depends_on": "analyzer_rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion": "@data:angular1.data", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@transformation_type": "rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@vector": [1, 0, 0], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@depends_on": "analyzer_dispersion", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation": 0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@transformation_type": "rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@vector": [0, 1, 0], + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@depends_on": "rot_y", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation": 0.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@transformation_type": "rotation", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@units": "degrees", + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@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]": 140.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]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@vector": [0, 1, 0], + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/name": "HHG @ TR-ARPES @ FHI", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/probe": "ultraviolet", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "HHG laser", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/mode": "Single Bunch", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/frequency": "@attrs:metadata/instrument/beam/probe/frequency", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/frequency/@units": "kHz", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/photon_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": 0.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread": "@attrs:metadata/instrument/beam/probe/incident_energy_spread", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/pulse_duration": "@attrs:metadata/instrument/beam/probe/pulse_duration", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/pulse_duration/@units": "fs", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization": "@attrs:metadata/instrument/beam/probe/incident_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units": "V^2/mm^2", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent": "@attrs:metadata/instrument/beam/probe/extent", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/name": "OPCPA @ TR-ARPES @ FHI", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/probe": "visible light", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/type": "Optical Laser", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/mode": "Single Bunch", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/frequency": "@attrs:metadata/instrument/beam/pump/frequency", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/frequency/@units": "kHz", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/photon_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/distance": 0.0, + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/distance/@units": "mm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy_spread": "@attrs:metadata/instrument/beam/pump/incident_energy_spread", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy_spread/@units": "eV", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_wavelength": "@attrs:metadata/instrument/beam/pump/incident_wavelength", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_wavelength/@units": "nm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_duration": "@attrs:metadata/instrument/beam/pump/pulse_duration", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_duration/@units": "fs", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_polarization": "@attrs:metadata/instrument/beam/pump/incident_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_polarization/@units": "V^2/mm^2", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_energy": "@attrs:metadata/instrument/beam/pump/pulse_energy", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_energy/@units": "µJ", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/average_power": "@attrs:metadata/instrument/beam/pump/average_power", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/average_power/@units": "mW", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/extent": "@attrs:metadata/instrument/beam/pump/extent", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/extent/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/fluence": "@attrs:metadata/instrument/beam/pump/fluence", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/fluence/@units": "mJ/cm^2", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@attrs:metadata/scan_info/trARPES:Carving:TEMP_RBV", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "K", "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": 0.0, @@ -151,7 +179,11 @@ 0 ], "/ENTRY[entry]/SAMPLE[sample]/preparation_date": "@attrs:metadata/sample/preparation_date", - "/ENTRY[entry]/SAMPLE[sample]/preparation_description": "Here should be a description of the preparation procedure.", + "/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/scan_info/trARPES:XGS600:PressureAC:P_RD", "/ENTRY[entry]/SAMPLE[sample]/gas_pressure/@units": "mbar", "/ENTRY[entry]/SAMPLE[sample]/situation": "vacuum", @@ -161,7 +193,16 @@ "/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]/depends_on": "/entry/sample/transformations/corrected_omg", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@depends_on": "corrected_phi", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]": 90.0, + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@units": "degrees", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@transformation_type": "rotation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@vector": [ + 0, + 0, + 1 + ], "/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", @@ -189,7 +230,7 @@ 1, 0 ], - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@depends_on": "trans_z", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]/@depends_on": "tht_offset", "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]": "@attrs:metadata/scan_info/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", @@ -198,6 +239,15 @@ 0, 1 ], + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@depends_on": "trans_z", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]": -17, + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@units": "degrees", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@transformation_type": "rotation", + "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@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/scan_info/trARPES:Carving:TRZ.RBV", "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]/@units": "mm", @@ -225,20 +275,25 @@ 0, 0 ], + "/ENTRY[entry]/PROCESS[process]/energy_calibration/applied": true, + "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy.data", + "/ENTRY[entry]/PROCESS[process]/angular1_calibration/applied": true, + "/ENTRY[entry]/PROCESS[process]/angular1_calibration/calibrated_axis": "@data:angular1.data", "/ENTRY[entry]/DATA[data]/@axes": "@data:dims", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Angle_indices]": "@data:Angle.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@Ekin_indices]": "@data:Ekin.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@delay_indices]": "@data:delay.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@tilt_indices]": "@data:tilt.index", + "/ENTRY[entry]/DATA[data]/@angular1_indices": "@data:angular1.index", + "/ENTRY[entry]/DATA[data]/@energy_indices": "@data:energy.index", + "/ENTRY[entry]/DATA[data]/@angular2_indices": "@data:angular2.index", + "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@*_indices]": "@data:*.index", + "/ENTRY[entry]/DATA[data]/@*_depends": "@attrs:metadata/scan_info/coordinate_depends/*", "/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[Angle]": "@data:Angle.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[Angle]/@units": "@data:Angle.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]": "@data:Ekin.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[Ekin]/@units": "@data:Ekin.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[delay]": "@data:delay.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[delay]/@units": "@data:delay.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]": "@data:tilt.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[tilt]/@units": "@data:tilt.unit" + "/ENTRY[entry]/DATA[data]/angular1": "@data:angular1.data", + "/ENTRY[entry]/DATA[data]/angular1/@units": "@data:angular1.unit", + "/ENTRY[entry]/DATA[data]/energy": "@data:energy.data", + "/ENTRY[entry]/DATA[data]/energy/@units": "@data:energy.unit", + "/ENTRY[entry]/DATA[data]/angular2": "@data:angular2.data", + "/ENTRY[entry]/DATA[data]/angular2/@units": "@data:angular2.unit", + "/ENTRY[entry]/DATA[data]/AXISNAME[*]": "@data:*.data", + "/ENTRY[entry]/DATA[data]/AXISNAME[*]/@units": "@data:*.unit" } diff --git a/specsscan/core.py b/specsscan/core.py index 865748a..90bbb2c 100755 --- a/specsscan/core.py +++ b/specsscan/core.py @@ -444,7 +444,7 @@ def save( ) input_files = kwds.pop( "input_files", - self._config["nexus"]["input_files"], + copy.deepcopy(self._config["nexus"]["input_files"]), ) if isinstance(input_files, str): input_files = [input_files] diff --git a/tutorial/phoibos_eln_data.yaml b/tutorial/phoibos_eln_data.yaml new file mode 100644 index 0000000..935aa68 --- /dev/null +++ b/tutorial/phoibos_eln_data.yaml @@ -0,0 +1,108 @@ +Instrument: + energy_resolution: + unit: meV + value: 140.0 + temporal_resolution: + unit: fs + value: 35.0 + Analyzer: + energy_resolution: + unit: meV + value: 110.00000000000001 + angular_resolution: + unit: degrees + value: 0.08 + spatial_resolution: + unit: µm + value: 100 + Beam: + Probe: + extent: + unit: µm + value: + - 80.0 + - 80.0 + incident_energy: + unit: eV + value: 21.7 + incident_energy_spread: + unit: eV + value: 0.11 + incident_polarization: + - 1.0 + - 1.0 + - 0.0 + - 0.0 + pulse_duration: + unit: fs + value: 20.0 + Pump: + average_power: + unit: mW + value: 300.0 + extent: + unit: µm + value: + - 229.99999999999997 + - 265.0 + fluence: + unit: mJ / cm ** 2 + value: 0.15000000000000002 + incident_energy: + unit: eV + value: 1.5499999999999998 + incident_energy_spread: + unit: eV + value: 0.08 + incident_polarization: + - 1.0 + - -1.0 + - 0.0 + - 0.0 + incident_wavelength: + unit: nm + value: 799.9999999999999 + pulse_duration: + unit: fs + value: 35.0 + pulse_energy: + unit: µJ + value: 0.6 + Manipulator: + sample_temperature: + unit: K + value: 300.0 + Source: + Probe: + frequency: + unit: kHz + value: 500.0 + photon_energy: + unit: eV + value: 21.700000000000003 + Pump: + frequency: + unit: kHz + value: 500.0 + photon_energy: + unit: eV + value: 1.5500000000000003 +Sample: + chemical_formula: WSe2 + description: Sample + gas_pressure: + unit: mbar + value: 5.000000000000001e-11 + name: WSe2 Single Crystal + preparation_date: '2019-01-13T09:00:00+00:00' + sample_history: Cleaved + temperature: + unit: K + value: 300.0 +User: + address: Faradayweg 4-6, 14915 Berlin + affiliation: Fritz Haber Institute of the Max Planck Society + email: user@fhi-berlin.mpg.de + name: user + role: Principal Investigator +title: Valence Band Dynamics - 800 nm linear s-polarized pump, 0.6 mJ/cm2 absorbed fluence From 4c77b8810e4d2a47b4732dc03072078274c076fb Mon Sep 17 00:00:00 2001 From: rettigl Date: Mon, 12 Feb 2024 10:30:00 +0100 Subject: [PATCH 05/10] rename NXmpes config --- ...{NXmpes_arpes_phoibos_config.json => NXmpes_arpes_config.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename specsscan/config/{NXmpes_arpes_phoibos_config.json => NXmpes_arpes_config.json} (100%) diff --git a/specsscan/config/NXmpes_arpes_phoibos_config.json b/specsscan/config/NXmpes_arpes_config.json similarity index 100% rename from specsscan/config/NXmpes_arpes_phoibos_config.json rename to specsscan/config/NXmpes_arpes_config.json From 0bffd68b60b0150bb6850b8c640a68cfe75793bb Mon Sep 17 00:00:00 2001 From: rettigl Date: Mon, 12 Feb 2024 10:32:07 +0100 Subject: [PATCH 06/10] update config and add example for conversion to NXmpes --- specsscan/config/NXmpes_arpes_config.json | 589 ++++++++++--------- specsscan/config/example_config_FHI.yaml | 4 +- specsscan/helpers.py | 3 + tutorial/specscan_conversion_to_NXmpes.ipynb | 301 ++++++++++ 4 files changed, 616 insertions(+), 281 deletions(-) mode change 100755 => 100644 specsscan/config/NXmpes_arpes_config.json create mode 100755 tutorial/specscan_conversion_to_NXmpes.ipynb diff --git a/specsscan/config/NXmpes_arpes_config.json b/specsscan/config/NXmpes_arpes_config.json old mode 100755 new mode 100644 index 5498d0b..8056677 --- a/specsscan/config/NXmpes_arpes_config.json +++ b/specsscan/config/NXmpes_arpes_config.json @@ -14,286 +14,317 @@ "/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": "Phoibos 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]/angular_resolution": { - "link": "/entry/instrument/electronanalyser/angular_resolution" + "/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]/geometries/arpesgeometry/depends_on": "/entry/geometries/arpesgeometry/transformations/rot_y", - "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@depends_on": ".", - "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]": 140.0, - "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@transformation_type": "rotation", - "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@units": "degrees", - "/ENTRY[entry]/geometries/arpesgeometry/TRANSFORMATIONS[transformations]/AXISNAME[rot_y]/@vector": [ - 0, - 1, - 0 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution": "@attrs:metadata/instrument/energy_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/energy_resolution/@units": "meV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution": "@attrs:metadata/instrument/electronanalyser/angular_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/angular_resolution/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/description": "SPECS Phoibos 150 Hemispherical Energy Analyzer", - "/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/scan_info/spatial_resolution", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/spatial_resolution/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function": 4.55, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/work_function/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/fast_axes": "@attrs:metadata/scan_info/fast_axes", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/slow_axes": "@attrs:metadata/scan_info/slow_axes", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/projection": "@attrs:metadata/scan_info/projection", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/scheme": "Angular dispersive", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/mode": "@attrs:metadata/scan_info/LensMode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance": 40.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/COLLECTIONCOLUMN[collectioncolumn]/working_distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy": "@attrs:metadata/scan_info/PassEnergy", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/pass_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/kinetic_energy": "@data:energy.data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/kinetic_energy/@units": "@data:energy.unit", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/scheme": "hemispherical", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter": 300.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]/diameter/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_type": "MCP", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_type": "Phosphor+CCD", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/sensor_pixels": [ - 1800, - 1800 - ], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias": "@attrs:metadata/scan_info/ConversionVoltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_bias/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage": "@attrs:metadata/scan_info/ScreenVoltage", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/amplifier_voltage/@units": "V", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]/detector_voltage": "@attrs:metadata/scan_info/DetectorVoltage", - "/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": "analyzer_elevation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/AXISNAME[trans_z]": 40.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]/analyzer_dispersion/@depends_on": "analyzer_rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion": "@data:angular1.data", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_dispersion/@vector": [1, 0, 0], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@depends_on": "analyzer_dispersion", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation": 0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_elevation/@vector": [0, 1, 0], - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@depends_on": "rot_y", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@transformation_type": "rotation", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@units": "degrees", - "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/TRANSFORMATIONS[transformations]/analyzer_rotation/@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]": 140.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_probe/name": "HHG @ TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/probe": "ultraviolet", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/type": "HHG laser", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/mode": "Single Bunch", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/frequency": "@attrs:metadata/instrument/beam/probe/frequency", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/frequency/@units": "kHz", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/photon_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_probe/photon_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy": "@attrs:metadata/instrument/beam/probe/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread": "@attrs:metadata/instrument/beam/probe/incident_energy_spread", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_energy_spread/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/pulse_duration": "@attrs:metadata/instrument/beam/probe/pulse_duration", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/pulse_duration/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization": "@attrs:metadata/instrument/beam/probe/incident_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/incident_polarization/@units": "V^2/mm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent": "@attrs:metadata/instrument/beam/probe/extent", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_probe/extent/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/name": "OPCPA @ TR-ARPES @ FHI", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/probe": "visible light", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/type": "Optical Laser", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/mode": "Single Bunch", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/frequency": "@attrs:metadata/instrument/beam/pump/frequency", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/frequency/@units": "kHz", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/photon_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/source_pump/photon_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/distance": 0.0, - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/distance/@units": "mm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy": "@attrs:metadata/instrument/beam/pump/incident_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy_spread": "@attrs:metadata/instrument/beam/pump/incident_energy_spread", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_energy_spread/@units": "eV", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_wavelength": "@attrs:metadata/instrument/beam/pump/incident_wavelength", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_wavelength/@units": "nm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_duration": "@attrs:metadata/instrument/beam/pump/pulse_duration", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_duration/@units": "fs", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_polarization": "@attrs:metadata/instrument/beam/pump/incident_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/incident_polarization/@units": "V^2/mm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_energy": "@attrs:metadata/instrument/beam/pump/pulse_energy", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/pulse_energy/@units": "µJ", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/average_power": "@attrs:metadata/instrument/beam/pump/average_power", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/average_power/@units": "mW", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/extent": "@attrs:metadata/instrument/beam/pump/extent", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/extent/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/fluence": "@attrs:metadata/instrument/beam/pump/fluence", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_pump/fluence/@units": "mJ/cm^2", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature": "@attrs:metadata/scan_info/trARPES:Carving:TEMP_RBV", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_temperature/@units": "K", - "/ENTRY[entry]/INSTRUMENT[instrument]/MANIPULATOR[manipulator]/sample_bias": 0.0, - "/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/scan_info/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]/COORDINATE_SYSTEM_SET[geometries]/COORDINATE_SYSTEM[arpesgeometry]": { + "depends_on": "/entry/geometries/arpesgeometry/transformations/rot_y", + "TRANSFORMATIONS[transformations]": { + "AXISNAME[rot_y]/@depends_on": ".", + "AXISNAME[rot_y]": 140.0, + "AXISNAME[rot_y]/@transformation_type": "rotation", + "AXISNAME[rot_y]/@units": "degrees", + "AXISNAME[rot_y]/@vector": [0, 1, 0] + } }, - "/ENTRY[entry]/SAMPLE[sample]/bias": { - "link": "/entry/instrument/manipulator/sample_bias" + "/ENTRY[entry]/INSTRUMENT[instrument]": { + "name": "Phoibos detector, at the endstation of the high rep-rate HHG source at FHI", + "name/@short_name": "TR-ARPES @ FHI", + "energy_resolution": { + "resolution": "@attrs:metadata/instrument/energy_resolution", + "resolution/@units": "meV", + "physical_quantity": "energy", + "type": "estimated" + }, + "RESOLUTION[temporal_resolution]": { + "resolution": 35.0, + "resolution/@units": "fs", + "physical_quantity": "time", + "type": "estimated" + }, + "RESOLUTION[angular_resolution]": { + "resolution": "@link:/entry/instrument/electronanalyser/angular_resolution/resolution", + "resolution/@units": "deg", + "physical_quantity": "angle", + "type": "derived" + }, + "pressure_gauge": { + "name": "sample_chamber_pressure", + "measurement": "pressure", + "value": "@attrs:metadata/scan_info/trARPES:XGS600:PressureAC:P_RD", + "value/@units": "mbar" + } }, - "/ENTRY[entry]/SAMPLE[sample]/depends_on": "/entry/sample/transformations/corrected_omg", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@depends_on": "corrected_phi", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]": 90.0, - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[corrected_omg]/@vector": [ - 0, - 0, - 1 - ], - "/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/scan_info/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/scan_info/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": "tht_offset", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[rot_tht]": "@attrs:metadata/scan_info/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[tht_offset]/@depends_on": "trans_z", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]": -17, - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@units": "degrees", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@transformation_type": "rotation", - "/ENTRY[entry]/SAMPLE[sample]/TRANSFORMATIONS[transformations]/AXISNAME[tht_offset]/@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/scan_info/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/scan_info/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/scan_info/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]/energy_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/energy_calibration/calibrated_axis": "@data:energy.data", - "/ENTRY[entry]/PROCESS[process]/angular1_calibration/applied": true, - "/ENTRY[entry]/PROCESS[process]/angular1_calibration/calibrated_axis": "@data:angular1.data", - "/ENTRY[entry]/DATA[data]/@axes": "@data:dims", - "/ENTRY[entry]/DATA[data]/@angular1_indices": "@data:angular1.index", - "/ENTRY[entry]/DATA[data]/@energy_indices": "@data:energy.index", - "/ENTRY[entry]/DATA[data]/@angular2_indices": "@data:angular2.index", - "/ENTRY[entry]/DATA[data]/AXISNAME_indices[@*_indices]": "@data:*.index", - "/ENTRY[entry]/DATA[data]/@*_depends": "@attrs:metadata/scan_info/coordinate_depends/*", - "/ENTRY[entry]/DATA[data]/@signal": "data", - "/ENTRY[entry]/DATA[data]/data": "@data:data", - "/ENTRY[entry]/DATA[data]/data/@units": "counts", - "/ENTRY[entry]/DATA[data]/angular1": "@data:angular1.data", - "/ENTRY[entry]/DATA[data]/angular1/@units": "@data:angular1.unit", - "/ENTRY[entry]/DATA[data]/energy": "@data:energy.data", - "/ENTRY[entry]/DATA[data]/energy/@units": "@data:energy.unit", - "/ENTRY[entry]/DATA[data]/angular2": "@data:angular2.data", - "/ENTRY[entry]/DATA[data]/angular2/@units": "@data:angular2.unit", - "/ENTRY[entry]/DATA[data]/AXISNAME[*]": "@data:*.data", - "/ENTRY[entry]/DATA[data]/AXISNAME[*]/@units": "@data:*.unit" + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]": { + "description": "SPECS Phoibos 150 Hemispherical Energy Analyzer", + "device_information": { + "vendor": "SPECS GmbH", + "model": "Phoibos 150 CCD Hemispherical Analyzer" + }, + "work_function": 4.55, + "work_function/@units": "eV", + "fast_axes": "@attrs:metadata/scan_info/fast_axes", + "slow_axes": "@attrs:metadata/scan_info/slow_axes", + "energy_resolution": { + "resolution": "@attrs:metadata/instrument/electronanalyser/energy_resolution", + "resolution/@units": "meV", + "physical_quantity": "energy", + "type": "derived" + }, + "angular_resolution": { + "resolution": "@attrs:metadata/instrument/electronanalyser/angular_resolution", + "resolution/@units": "deg", + "physical_quantity": "angle", + "type": "derived" + }, + "spatial_resolution": { + "resolution": "@attrs:metadata/instrument/electronanalyser/spatial_resolution", + "resolution/@units": "µm", + "physical_quantity": "length", + "type": "estimated" + }, + + + "depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", + "TRANSFORMATIONS[transformations]": { + "AXISNAME[trans_z]/@depends_on": "analyzer_elevation", + "AXISNAME[trans_z]": 40.0, + "AXISNAME[trans_z]/@transformation_type": "translation", + "AXISNAME[trans_z]/@units": "mm", + "AXISNAME[trans_z]/@vector": [0, 0, 1], + "analyzer_dispersion/@depends_on": "analyzer_rotation", + "analyzer_dispersion": "@link:/entry/data/angular1", + "analyzer_dispersion/@transformation_type": "rotation", + "analyzer_dispersion/@units": "degrees", + "analyzer_dispersion/@vector": [1, 0, 0], + "analyzer_elevation/@depends_on": "analyzer_dispersion", + "analyzer_elevation": 0, + "analyzer_elevation/@transformation_type": "rotation", + "analyzer_elevation/@units": "degrees", + "analyzer_elevation/@vector": [0, 1, 0], + "analyzer_rotation/@depends_on": "rot_y", + "analyzer_rotation": 0.0, + "analyzer_rotation/@transformation_type": "rotation", + "analyzer_rotation/@units": "degrees", + "analyzer_rotation/@vector": [0, 0, 1], + "AXISNAME[rot_y]/@depends_on": ".", + "AXISNAME[rot_y]": 140.0, + "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/scan_info/projection", + "scheme": "@attrs:metadata/scan_info/scheme", + "lens_mode": "@attrs:metadata/scan_info/LensMode", + "working_distance": 40.0, + "working_distance/@units": "mm", + "entrance_slit": { + "shape": "curved", + "size": "1.0", + "size/@units": "mm" + }, + "exit_slit": { + "shape": "mesh" + } + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]": { + "energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", + "pass_energy": "@attrs:metadata/scan_info/PassEnergy", + "pass_energy/@units": "eV", + "kinetic_energy": "@attrs:metadata/scan_info/KineticEnergy", + "kinetic_energy/@units": "eV", + "scheme": "hemispherical", + "diameter": 300.0, + "diameter/@units": "mm" + }, + "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]": { + "amplifier_type": "MCP", + "detector_type": "Phosphor+CCD", + "sensor_pixels": [ + 256, + 320 + ], + "amplifier_bias": "@attrs:metadata/scan_info/ConversionVoltage", + "amplifier_bias/@units": "V", + "amplifier_voltage": "@attrs:metadata/scan_info/DetectorVoltage", + "amplifier_voltage/@units": "V", + "detector_voltage": "@attrs:metadata/scan_info/ScreenVoltage", + "detector_voltage/@units": "V" + }, + "/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", + "associated_beam": "/entry/instrument/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", + "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_TYPE[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", + "associated_beam": "/entry/instrument/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", + "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/scan_info/trARPES:Carving:TEMP_RBV", + "value/@units": "K" + }, + "sample_bias_voltmeter": { + "name": "sample_bias", + "measurement": "voltage", + "value": 0.0, + "value/@units": "V" + }, + "drain_current_amperemeter": { + "name": "drain_current", + "measurement": "current", + "value": "@attrs:metadata/scan_info/trARPES:Sample:Measure", + "value/@units": "A" + }, + "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", + "description": "@attrs:metadata/sample/chemical_formula", + "name": "@attrs:metadata/sample/name", + "situation": "vacuum", + "SUBSTANCE[substance]/molecular_formula_hill": "@attrs:metadata/sample/chemical_formula", + "temperature": { + "temperature_sensor": "@link:/entry/instrument/manipulator/temperature_sensor" + }, + "gas_pressure": { + "pressure_gauge": "@link:/entry/instrument/pressure_gauge" + }, + "bias": { + "voltmeter": "@link:/entry/instrument/manipulator/sample_bias_voltmeter" + }, + "drain_current": { + "amperemeter": "@link:/entry/instrument/manipulator/drain_current_amperemeter" + }, + "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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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/scan_info/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]/energy_calibration":{ + "calibrated_axis": "@link:/entry/data/energy" + }, + "/ENTRY[entry]/PROCESS[process]/angular1_calibration":{ + "calibrated_axis": "@link:/entry/data/angular1" + }, + "/ENTRY[entry]/data": { + "@axes": "@data:dims", + "AXISNAME_indices[@*_indices]": "@data:*.index", + "@signal": "data", + "data": "@data:data", + "data/@units": "counts", + "AXISNAME[*]": "@data:*.data", + "AXISNAME[*]/@units": "@data:*.unit", + "@*_depends": "@attrs:metadata/scan_info/coordinate_depends/*", + "energy/@type": "kinetic" + } } diff --git a/specsscan/config/example_config_FHI.yaml b/specsscan/config/example_config_FHI.yaml index 08b095a..1e5750b 100644 --- a/specsscan/config/example_config_FHI.yaml +++ b/specsscan/config/example_config_FHI.yaml @@ -41,13 +41,13 @@ epics_channels: polar: "trARPES:Carving:THT.RBV" tilt: "trARPES:Carving:PHI.RBV" azimuth: "trARPES:Carving:OMG.RBV" - sample_bias: "KTOF:Lens:Sample:V" + drain_current: "trARPES:Sample:Measure" pressure: "trARPES:XGS600:PressureAC:P_RD" nexus: reader: "mpes" definition: "NXmpes" - input_files: ["../specsscan/config/NXmpes_arpes_phoibos_config.json"] + input_files: ["../specsscan/config/NXmpes_arpes_config.json"] spa_params: calib2d_file: "../tests/data/phoibos150.calib2d" diff --git a/specsscan/helpers.py b/specsscan/helpers.py index f9cfcd5..b355af4 100644 --- a/specsscan/helpers.py +++ b/specsscan/helpers.py @@ -385,6 +385,9 @@ def handle_meta( # pylint:disable=too-many-branches if lens_mode in mode_list: metadata_dict["scan_info"]["projection"] = projection fast = "Angle" if projection == "reciprocal" else "Position" + metadata_dict["scan_info"]["scheme"] = ( + "angular dispersive" if projection == "reciprocal" else "spatial dispersive" + ) metadata_dict["scan_info"]["slow_axes"] = dim metadata_dict["scan_info"]["fast_axes"] = [ diff --git a/tutorial/specscan_conversion_to_NXmpes.ipynb b/tutorial/specscan_conversion_to_NXmpes.ipynb new file mode 100755 index 0000000..244fc45 --- /dev/null +++ b/tutorial/specscan_conversion_to_NXmpes.ipynb @@ -0,0 +1,301 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## This is an example showcasing the loading of trARPES data as collected using the Phoibos detector at FHI Berlin.\n", + "The band dispersion is loaded as a xarray dataframe following a conversion to the [NeXus format](https://manual.nexusformat.org/classes/contributed_definitions/NXmpes.html#nxmpes) using the [Nomad Parser Nexus](https://github.com/nomad-coe/nomad-parser-nexus)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, the SpecsScan class is imported which has the scan loader as its class method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "from specsscan import SpecsScan\n", + "from pathlib import Path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, a SpecsScan class instance is created as per the configuration provided in [config.yaml](../tests/data/config.yaml). The user may set the entries in config.yaml file, for example, the data path and conversion parameters as per the requirements before creating this instance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The path may changed to point to the scan folder of the data of interest (for example, on a server drive)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "metadata = {}\n", + "# manual Meta data. These should ideally come from an Electronic Lab Notebook.\n", + "#General\n", + "metadata['experiment_summary'] = 'TbTe3 tilt map around EF with 800nm pump at 20fs after pump-probe overlap'\n", + "metadata['entry_title'] = 'TbTe3 XUV Fermi surface map at 20 fs'\n", + "metadata['experiment_title'] = 'TbTe3 XUV Fermi surface map at 20 fs'\n", + "\n", + "#User\n", + "# Fill general parameters of NXuser\n", + "# TODO: discuss how to deal with multiple users?\n", + "metadata['user0'] = {}\n", + "metadata['user0']['name'] = 'Laurenz Rettig'\n", + "metadata['user0']['role'] = 'Principal Investigator'\n", + "metadata['user0']['affiliation'] = 'Fritz Haber Institute of the Max Planck Society'\n", + "metadata['user0']['address'] = 'Faradayweg 4-6, 14195 Berlin'\n", + "metadata['user0']['email'] = 'rettig@fhi-berlin.mpg.de'\n", + "\n", + "metadata['user1'] = {}\n", + "metadata['user1']['name'] = 'William Windsor'\n", + "metadata['user1']['role'] = 'Principal Investigator'\n", + "metadata['user1']['affiliation'] = 'Fritz Haber Institute of the Max Planck Society'\n", + "metadata['user1']['address'] = 'Faradayweg 4-6, 14195 Berlin'\n", + "metadata['user1']['email'] = 'windsor@fhi-berlin.mpg.de'\n", + "\n", + "metadata['instrument'] = {}\n", + "# energy resolution\n", + "metadata['instrument']['energy_resolution'] = 150.\n", + "metadata['instrument']['electronanalyser'] = {}\n", + "metadata['instrument']['electronanalyser']['energy_resolution'] = 120\n", + "metadata['instrument']['electronanalyser']['angular_resolution'] = 0.2\n", + "metadata['instrument']['electronanalyser']['spatial_resolution'] = 0.5\n", + "\n", + "#probe beam\n", + "metadata['instrument']['beam']={}\n", + "metadata['instrument']['beam']['probe']={}\n", + "metadata['instrument']['beam']['probe']['incident_energy'] = 21.7\n", + "metadata['instrument']['beam']['probe']['incident_energy_spread'] = 0.11\n", + "metadata['instrument']['beam']['probe']['pulse_duration'] = 20.\n", + "metadata['instrument']['beam']['probe']['frequency'] = 500.\n", + "metadata['instrument']['beam']['probe']['incident_polarization'] = [1, 1, 0, 0] # p pol Stokes vector\n", + "metadata['instrument']['beam']['probe']['extent'] = [80., 80.]\n", + "#pump beam\n", + "metadata['instrument']['beam']['pump']={}\n", + "metadata['instrument']['beam']['pump']['incident_energy'] = 1.55\n", + "metadata['instrument']['beam']['pump']['incident_energy_spread'] = 0.08\n", + "metadata['instrument']['beam']['pump']['pulse_duration'] = 35.\n", + "metadata['instrument']['beam']['pump']['frequency'] = 500.\n", + "metadata['instrument']['beam']['pump']['incident_polarization'] = [1, -1, 0, 0] # s pol Stokes vector\n", + "metadata['instrument']['beam']['pump']['incident_wavelength'] = 800.\n", + "metadata['instrument']['beam']['pump']['average_power'] = 224.\n", + "metadata['instrument']['beam']['pump']['pulse_energy'] = metadata['instrument']['beam']['pump']['average_power']/metadata['instrument']['beam']['pump']['frequency']#µJ\n", + "metadata['instrument']['beam']['pump']['extent'] = [300/4*2.34, 270/4*2.35] #Gaussian 4sigma -> FWHM\n", + "metadata['instrument']['beam']['pump']['fluence'] = 1.00\n", + "metadata['instrument']['beam']['pump']['delay'] = 0.02\n", + "\n", + "#sample\n", + "metadata['sample']={}\n", + "metadata['sample']['preparation_date'] = '2017-03-19T10:00:00+00:00'\n", + "metadata['sample']['preparation_description'] = 'Cleaved'\n", + "metadata['sample']['sample_history'] = 'Cleaved in UHV'\n", + "metadata['sample']['chemical_formula'] = 'TbTe3'\n", + "metadata['sample']['description'] = 'cleaved single crystal of TbTe3'\n", + "metadata['sample']['name'] = 'TbTe3 Single Crystal'\n", + "\n", + "#metadata[\"scan_info\"] = {}\n", + "#metadata[\"scan_info\"][\"trARPES:XGS600:PressureAC:P_RD\"] = 2.5E-11\n", + "#metadata[\"scan_info\"][\"trARPES:Carving:TEMP_RBV\"] = 70\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "config = {\"nexus\":{\"definition\": \"NXmpes\"}, \"spa_params\":{\"crop\":True, \"ek_min\":20.2, \"ek_max\":22.5, \"ang_min\":-13.5, \"ang_max\":13.5}}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "sps = SpecsScan(config=config, user_config=\"../specsscan/config/example_config_FHI.yaml\")\n", + "path = \"../tests/data/\" # Path to the test data set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The load_scan method loads the scan as an xarray along with the metadata needed for nexus conversion. The progress bars can be activated by changing the config parameter, enable_nested_progress_bar, to true in config.yaml " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "res_xarray = sps.load_scan(\n", + " scan=6833, # Tilt scan\n", + " metadata=metadata,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "res_xarray[:,29,:].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "res_xarray.loc[{\"energy\":slice(21.6, 21.8)}].sum(axis=2).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "sps.save(\"FS_map_CsV3Sb5.h5\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data may be visualised as a 2D plot by slicing the xarray in 2 dimensions keeping the third fixed. In the plot below, the Angle vs Ekin data is plotted for a fixed mirrorX value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "res_xarray.dims" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "sps.save(\"FS_map_CsV3Sb5.nxs\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The metadata associated with the scan is added as an attribute to the xarray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3D scans, where the images are recorded as a function of a third parameter (generally delay or in this case, mirrorX), can also be loaded with an option to average only the given iterations passed as a list or slice object. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from jupyterlab_h5web import H5Web" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "H5Web('spectest.mpes.nxs')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + }, + "vscode": { + "interpreter": { + "hash": "a164666994e9db75450cd7016dd7e51d42ea6e7c1e5e8017af1f8068ca906367" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From cc1753c451fa0815e9ecb52db3b1b303fde2da5c Mon Sep 17 00:00:00 2001 From: rettigl Date: Wed, 21 Feb 2024 19:28:12 +0100 Subject: [PATCH 07/10] update config file --- specsscan/config/NXmpes_arpes_config.json | 86 +++++++++++--------- tutorial/specscan_conversion_to_NXmpes.ipynb | 17 +--- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/specsscan/config/NXmpes_arpes_config.json b/specsscan/config/NXmpes_arpes_config.json index 8056677..7b2579b 100644 --- a/specsscan/config/NXmpes_arpes_config.json +++ b/specsscan/config/NXmpes_arpes_config.json @@ -21,7 +21,7 @@ "address": "@attrs:metadata/user0/address", "email": "@attrs:metadata/user0/email" }, - "/ENTRY[entry]/COORDINATE_SYSTEM_SET[geometries]/COORDINATE_SYSTEM[arpesgeometry]": { + "/ENTRY[entry]/geometries/arpes_geometry": { "depends_on": "/entry/geometries/arpesgeometry/transformations/rot_y", "TRANSFORMATIONS[transformations]": { "AXISNAME[rot_y]/@depends_on": ".", @@ -90,7 +90,7 @@ "depends_on": "/entry/instrument/electronanalyser/transformations/trans_z", - "TRANSFORMATIONS[transformations]": { + "transformations": { "AXISNAME[trans_z]/@depends_on": "analyzer_elevation", "AXISNAME[trans_z]": 40.0, "AXISNAME[trans_z]/@transformation_type": "translation", @@ -124,15 +124,7 @@ "scheme": "@attrs:metadata/scan_info/scheme", "lens_mode": "@attrs:metadata/scan_info/LensMode", "working_distance": 40.0, - "working_distance/@units": "mm", - "entrance_slit": { - "shape": "curved", - "size": "1.0", - "size/@units": "mm" - }, - "exit_slit": { - "shape": "mesh" - } + "working_distance/@units": "mm" }, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/ENERGYDISPERSION[energydispersion]": { "energy_scan_mode": "@attrs:metadata/scan_info/energy_scan_mode", @@ -142,7 +134,15 @@ "kinetic_energy/@units": "eV", "scheme": "hemispherical", "diameter": 300.0, - "diameter/@units": "mm" + "diameter/@units": "mm", + "entrance_slit": { + "shape": "curved", + "size": 1.0, + "size/@units": "mm" + }, + "exit_slit": { + "shape": "grid" + } }, "/ENTRY[entry]/INSTRUMENT[instrument]/ELECTRONANALYSER[electronanalyser]/DETECTOR[detector]": { "amplifier_type": "MCP", @@ -240,7 +240,7 @@ "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]/@depends_on": ".", "AXISNAME[rot_z]": -25.0, "AXISNAME[rot_z]/@transformation_type": "rotation", "AXISNAME[rot_z]/@units": "degrees", @@ -271,28 +271,38 @@ "drain_current": { "amperemeter": "@link:/entry/instrument/manipulator/drain_current_amperemeter" }, - "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/scan_info/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/scan_info/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/scan_info/trARPES:Carving:THT.RBV", - "AXISNAME[rot_tht]/@units": "degrees", - "AXISNAME[rot_tht]/@transformation_type": "rotation", - "AXISNAME[rot_tht]/@vector": [0, 0, 1], + "depends_on": "/entry/sample/transformations/bz_offset", + "transformations": { + "AXISNAME[bz_offset]/@depends_on": "sample_azimuth", + "AXISNAME[bz_offset]": 0, + "AXISNAME[bz_offset]/@units": "degrees", + "AXISNAME[bz_offset]/@transformation_type": "rotation", + "AXISNAME[bz_offset]/@vector": [0, 0, 1], + "sample_azimuth/@depends_on": "sample_tilt", + "sample_azimuth": "@attrs:metadata/scan_info/trARPES:Carving:OMG.RBV", + "sample_azimuth/@units": "degrees", + "sample_azimuth/@transformation_type": "rotation", + "sample_azimuth/@vector": [0, 0, 1], + "sample_tilt/@depends_on": "sample_polar", + "sample_tilt": "@attrs:metadata/scan_info/trARPES:Carving:PHI.RBV", + "sample_tilt/@units": "degrees", + "sample_tilt/@transformation_type": "rotation", + "sample_tilt/@vector": [1, 0, 0], + "sample_polar/@depends_on": "xy_flip", + "sample_polar": "@attrs:metadata/scan_info/trARPES:Carving:THT.RBV", + "sample_polar/@units": "degrees", + "sample_polar/@transformation_type": "rotation", + "sample_polar/@vector": [0, 1, 0], + "AXISNAME[xy_flip]/@depends_on": "xz_flip", + "AXISNAME[xy_flip]": -90.0, + "AXISNAME[xy_flip]/@units": "degrees", + "AXISNAME[xy_flip]/@transformation_type": "rotation", + "AXISNAME[xy_flip]/@vector": [0, 0, 1], + "AXISNAME[xz_flip]/@depends_on": "trans_z", + "AXISNAME[xz_flip]": -90.0, + "AXISNAME[xz_flip]/@units": "degrees", + "AXISNAME[xz_flip]/@transformation_type": "rotation", + "AXISNAME[xz_flip]/@vector": [0, 1, 0], "AXISNAME[trans_z]/@depends_on": "trans_y", "AXISNAME[trans_z]": "@attrs:metadata/scan_info/trARPES:Carving:TRZ.RBV", "AXISNAME[trans_z]/@units": "mm", @@ -307,13 +317,13 @@ "AXISNAME[trans_x]": "@attrs:metadata/scan_info/trARPES:Carving:TRX.RBV", "AXISNAME[trans_x]/@units": "mm", "AXISNAME[trans_x]/@transformation_type": "translation", - "AXISNAME[trans_x]/@vector": [1, 0, 0] + "AXISNAME[trans_x]/@vector": [0, 1, 0] } }, "/ENTRY[entry]/PROCESS[process]/energy_calibration":{ "calibrated_axis": "@link:/entry/data/energy" }, - "/ENTRY[entry]/PROCESS[process]/angular1_calibration":{ + "/ENTRY[entry]/PROCESS[process]/CALIBRATION[angular1_calibration]":{ "calibrated_axis": "@link:/entry/data/angular1" }, "/ENTRY[entry]/data": { @@ -324,7 +334,7 @@ "data/@units": "counts", "AXISNAME[*]": "@data:*.data", "AXISNAME[*]/@units": "@data:*.unit", - "@*_depends": "@attrs:metadata/scan_info/coordinate_depends/*", + "AXISNAME_depends[@*_depends]": "@attrs:metadata/scan_info/coordinate_depends/*", "energy/@type": "kinetic" } } diff --git a/tutorial/specscan_conversion_to_NXmpes.ipynb b/tutorial/specscan_conversion_to_NXmpes.ipynb index 244fc45..56a91a5 100755 --- a/tutorial/specscan_conversion_to_NXmpes.ipynb +++ b/tutorial/specscan_conversion_to_NXmpes.ipynb @@ -128,7 +128,7 @@ }, "outputs": [], "source": [ - "config = {\"nexus\":{\"definition\": \"NXmpes\"}, \"spa_params\":{\"crop\":True, \"ek_min\":20.2, \"ek_max\":22.5, \"ang_min\":-13.5, \"ang_max\":13.5}}" + "config = {\"nexus\":{\"definition\": \"NXmpes_arpes\"}, \"spa_params\":{\"crop\":True, \"ek_min\":20.2, \"ek_max\":22.5, \"ang_min\":-13.5, \"ang_max\":13.5}}" ] }, { @@ -214,18 +214,9 @@ }, "outputs": [], "source": [ - "res_xarray.dims" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "sps.save(\"FS_map_CsV3Sb5.nxs\")" + "import logging\n", + "logging.getLogger().setLevel(logging.INFO)\n", + "sps.save(\"FS_map_CsV3Sb5.nxs\", undocumented=True)" ] }, { From 81b0fae1546ca055f5f019e28da37147912aba03 Mon Sep 17 00:00:00 2001 From: rettigl Date: Thu, 22 Feb 2024 13:08:21 +0100 Subject: [PATCH 08/10] add link between scanned sample axis and data axis if appropriate --- specsscan/config/NXmpes_arpes_config.json | 2 +- specsscan/config/example_config_FHI.yaml | 6 +++--- specsscan/core.py | 10 ++++++++++ tutorial/specscan_conversion_to_NXmpes.ipynb | 2 -- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/specsscan/config/NXmpes_arpes_config.json b/specsscan/config/NXmpes_arpes_config.json index 7b2579b..a862a92 100644 --- a/specsscan/config/NXmpes_arpes_config.json +++ b/specsscan/config/NXmpes_arpes_config.json @@ -22,7 +22,7 @@ "email": "@attrs:metadata/user0/email" }, "/ENTRY[entry]/geometries/arpes_geometry": { - "depends_on": "/entry/geometries/arpesgeometry/transformations/rot_y", + "depends_on": "/entry/geometries/arpes_geometry/transformations/rot_y", "TRANSFORMATIONS[transformations]": { "AXISNAME[rot_y]/@depends_on": ".", "AXISNAME[rot_y]": 140.0, diff --git a/specsscan/config/example_config_FHI.yaml b/specsscan/config/example_config_FHI.yaml index 1e5750b..b71b42b 100644 --- a/specsscan/config/example_config_FHI.yaml +++ b/specsscan/config/example_config_FHI.yaml @@ -14,9 +14,9 @@ coordinate_mapping: coordinate_depends: Ekin: "/entry/instrument/electronanalyser/energydispersion/kinetic_energy" Angle: "/entry/instrument/electronanalyser/transformations/analyzer_dispersion" - polar: "/entry/sample/transformations/rot_tht" - tilt: "/entry/sample/transformations/rot_phi" - azimuth: "/entry/sample/transformations/rot_omg" + polar: "/entry/sample/transformations/sample_polar" + tilt: "/entry/sample/transformations/sample_tilt" + azimuth: "/entry/sample/transformations/sample_azimuth" X: "/entry/sample/transformations/trans_x" Y: "/entry/sample/transformations/trans_y" Z: "/entry/sample/transformations/trans_z" diff --git a/specsscan/core.py b/specsscan/core.py index 90bbb2c..88c700b 100755 --- a/specsscan/core.py +++ b/specsscan/core.py @@ -232,6 +232,16 @@ def load_scan( res_xarray = res_xarray.rename(rename_dict) self._scan_info["coordinate_depends"] = depends_dict + axis_dict = { + "/entry/sample/transformations/sample_polar": "Polar", + "/entry/sample/transformations/sample_tilt": "Tilt", + "/entry/sample/transformations/sample_azimuth": "Azimuth", + } + + for k, v in depends_dict.items(): + if v in axis_dict: + self._scan_info[axis_dict[v]] = "@link:/entry/data/" + k + for name in res_xarray.dims: try: res_xarray[name].attrs["unit"] = self._config["units"][name] diff --git a/tutorial/specscan_conversion_to_NXmpes.ipynb b/tutorial/specscan_conversion_to_NXmpes.ipynb index 56a91a5..5ae551a 100755 --- a/tutorial/specscan_conversion_to_NXmpes.ipynb +++ b/tutorial/specscan_conversion_to_NXmpes.ipynb @@ -214,8 +214,6 @@ }, "outputs": [], "source": [ - "import logging\n", - "logging.getLogger().setLevel(logging.INFO)\n", "sps.save(\"FS_map_CsV3Sb5.nxs\", undocumented=True)" ] }, From e409217575964d37318bd899af12ad12ad6e1bda Mon Sep 17 00:00:00 2001 From: rettigl Date: Mon, 26 Feb 2024 23:45:31 +0100 Subject: [PATCH 09/10] update NXmpes transformations --- specsscan/config/NXmpes_arpes_config.json | 33 +++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/specsscan/config/NXmpes_arpes_config.json b/specsscan/config/NXmpes_arpes_config.json index a862a92..43db21e 100644 --- a/specsscan/config/NXmpes_arpes_config.json +++ b/specsscan/config/NXmpes_arpes_config.json @@ -107,7 +107,7 @@ "analyzer_elevation/@units": "degrees", "analyzer_elevation/@vector": [0, 1, 0], "analyzer_rotation/@depends_on": "rot_y", - "analyzer_rotation": 0.0, + "analyzer_rotation": 90, "analyzer_rotation/@transformation_type": "rotation", "analyzer_rotation/@units": "degrees", "analyzer_rotation/@vector": [0, 0, 1], @@ -240,8 +240,8 @@ "AXISNAME[trans_z]/@transformation_type": "translation", "AXISNAME[trans_z]/@units": "m", "AXISNAME[trans_z]/@vector": [0, 0, 1], - "AXISNAME[rot_z]/@depends_on": ".", - "AXISNAME[rot_z]": -25.0, + "AXISNAME[rot_z]/@depends_on": "rot_x", + "AXISNAME[rot_z]": -115.0, "AXISNAME[rot_z]/@transformation_type": "rotation", "AXISNAME[rot_z]/@units": "degrees", "AXISNAME[rot_z]/@vector": [0, 0, 1], @@ -288,21 +288,26 @@ "sample_tilt/@units": "degrees", "sample_tilt/@transformation_type": "rotation", "sample_tilt/@vector": [1, 0, 0], - "sample_polar/@depends_on": "xy_flip", + "sample_polar/@depends_on": "polar_offset", "sample_polar": "@attrs:metadata/scan_info/trARPES:Carving:THT.RBV", "sample_polar/@units": "degrees", "sample_polar/@transformation_type": "rotation", "sample_polar/@vector": [0, 1, 0], - "AXISNAME[xy_flip]/@depends_on": "xz_flip", - "AXISNAME[xy_flip]": -90.0, - "AXISNAME[xy_flip]/@units": "degrees", - "AXISNAME[xy_flip]/@transformation_type": "rotation", - "AXISNAME[xy_flip]/@vector": [0, 0, 1], - "AXISNAME[xz_flip]/@depends_on": "trans_z", - "AXISNAME[xz_flip]": -90.0, - "AXISNAME[xz_flip]/@units": "degrees", - "AXISNAME[xz_flip]/@transformation_type": "rotation", - "AXISNAME[xz_flip]/@vector": [0, 1, 0], + "polar_offset/@depends_on": "yz_flip", + "polar_offset": -321, + "polar_offset/@units": "degrees", + "polar_offset/@transformation_type": "rotation", + "polar_offset/@vector": [0, 1, 0], + "AXISNAME[yz_flip]/@depends_on": "xy_adjust", + "AXISNAME[yz_flip]": 90.0, + "AXISNAME[yz_flip]/@units": "degrees", + "AXISNAME[yz_flip]/@transformation_type": "rotation", + "AXISNAME[yz_flip]/@vector": [1, 0, 0], + "AXISNAME[xy_adjust]/@depends_on": "trans_z", + "AXISNAME[xy_adjust]": -105, + "AXISNAME[xy_adjust]/@units": "degrees", + "AXISNAME[xy_adjust]/@transformation_type": "rotation", + "AXISNAME[xy_adjust]/@vector": [0, 0, 1], "AXISNAME[trans_z]/@depends_on": "trans_y", "AXISNAME[trans_z]": "@attrs:metadata/scan_info/trARPES:Carving:TRZ.RBV", "AXISNAME[trans_z]/@units": "mm", From f102e54a1aac767e90526748943217b6f8cc7ee2 Mon Sep 17 00:00:00 2001 From: rettigl Date: Mon, 26 Feb 2024 23:54:44 +0100 Subject: [PATCH 10/10] update pynxtools --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 53e3cfd..43891f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ ipympl = ">=0.9.1" ipywidgets = ">=7.7.1" matplotlib = ">=3.5.1" numpy = ">=1.21.6" -pynxtools = ">=0.0.2, <0.0.9" +pynxtools = ">=0.0.9" python-dateutil = ">=2.8.2" pyyaml = ">=6.0" xarray = ">=0.20.2"