diff --git a/src/specsscan/config/default.yaml b/src/specsscan/config/default.yaml index 94d2250..652062a 100644 --- a/src/specsscan/config/default.yaml +++ b/src/specsscan/config/default.yaml @@ -2,6 +2,9 @@ data_path: "" # option to enable nested progress bars enable_nested_progress_bar: false +# option to shift by photon energy if available +shift_by_photon_energy: false + # dictionary containing parameters passed to the SpecsAnalyzer. Will be completed by the SpecsAnalyzer default config parameters spa_params: apply_fft_filter: false diff --git a/src/specsscan/config/example_config_FHI.yaml b/src/specsscan/config/example_config_FHI.yaml index a18a255..cb26071 100644 --- a/src/specsscan/config/example_config_FHI.yaml +++ b/src/specsscan/config/example_config_FHI.yaml @@ -2,6 +2,8 @@ data_path: "path/to/data" # option to enable nested progress bars enable_nested_progress_bar: false +# option to shift by photon energy if available +shift_by_photon_energy: true # dictionary containing renaming rules for axis names (to change the name in the xarrays) coordinate_mapping: @@ -25,6 +27,17 @@ coordinate_depends: Y: "/entry/sample/transformations/trans_y" Z: "/entry/sample/transformations/trans_z" +# dictionary of axis labels for the different axes +coordinate_labels: + Ekin: "Kinetic Energy" + Angle: "Analyzer Dispersion" + polar: "Sample Polar" + tilt: "Sample Tilt" + azimuth: "Sample Azimuth" + X: "X Translation" + Y: "Y Translation" + Z: "Z Translation" + # dictionary containing units for the respective axes units: angular0: "degree" diff --git a/src/specsscan/core.py b/src/specsscan/core.py index 039d7b4..8b88c6c 100755 --- a/src/specsscan/core.py +++ b/src/specsscan/core.py @@ -245,6 +245,7 @@ def load_scan( # rename coords and store mapping information, if available coordinate_mapping = self._config.get("coordinate_mapping", {}) coordinate_depends = self._config.get("coordinate_depends", {}) + coordinate_labels = self._config.get("coordinate_labels", {}) rename_dict = { k: coordinate_mapping[k] for k in coordinate_mapping.keys() if k in res_xarray.dims } @@ -253,6 +254,11 @@ def load_scan( for k in coordinate_depends.keys() if k in res_xarray.dims } + label_dict = { + rename_dict.get(k, k): coordinate_labels[k] + for k in coordinate_depends.keys() + if k in res_xarray.dims + } # store data for resolved axis coordinates for axis in res_xarray.dims: @@ -267,10 +273,12 @@ def load_scan( slow_axes.remove(k) slow_axes.add(v) self._scan_info["coordinate_depends"] = depends_dict + self._scan_info["coordinate_label"] = label_dict for name in res_xarray.dims: try: res_xarray[name].attrs["unit"] = self._config["units"][name] + res_xarray[name].attrs["long_name"] = label_dict[name] except KeyError: pass @@ -294,6 +302,32 @@ def load_scan( **{"conversion_parameters": conversion_metadata}, ) + # shift energy axis + photon_energy = 0.0 + try: + photon_energy = self.metadata["elabFTW"]["laser_status"]["probe_photon_energy"] + except KeyError: + try: + photon_energy = self.metadata["elabFTW"]["laser_status"]["probe_photon_energy"] + except KeyError: + pass + + self.metadata["scan_info"]["reference_energy"] = "vacuum level" + if photon_energy and self._config["shift_by_photon_energy"]: + logger.info(f"Shifting energy axis by photon energy: -{photon_energy} eV") + res_xarray = res_xarray.assign_coords( + { + rename_dict["Ekin"]: ( + rename_dict["Ekin"], + res_xarray[rename_dict["Ekin"]].data - photon_energy, + res_xarray[rename_dict["Ekin"]].attrs, + ), + }, + ) + self.metadata["scan_info"]["reference_energy"] = "Fermi edge" + self.metadata["scan_info"]["coordinate_label"][rename_dict["Ekin"]] = "E-E_F" + res_xarray[rename_dict["Ekin"]].attrs["long_name"] = "E-E_F" + res_xarray.attrs["metadata"] = self.metadata self._result = res_xarray