# HG changeset patch # User muon-spectroscopy-computational-project # Date 1712826119 0 # Node ID a0d3b0fe0fa31dc02b7dffe3e6e943c4bffc02bd # Parent 82e9dd980916628c2ed22ed076a45062eaabfee3 planemo upload for repository https://github.com/MaterialsGalaxy/larch-tools/tree/main/larch_athena commit 3fe6078868efd0fcea0fb5eea8dcd4b152d9c0a8 diff -r 82e9dd980916 -r a0d3b0fe0fa3 common.py --- a/common.py Fri Mar 22 14:23:27 2024 +0000 +++ b/common.py Thu Apr 11 09:01:59 2024 +0000 @@ -7,14 +7,14 @@ def get_group(athena_group: AthenaGroup, key: str = None) -> Group: - group_keys = list(athena_group._athena_groups.keys()) + group_keys = list(athena_group.keys()) if key is None: key = group_keys[0] else: key = key.replace("-", "_") try: - return extract_athenagroup(athena_group._athena_groups[key]) + return extract_athenagroup(athena_group.groups[key]) except KeyError as e: raise KeyError(f"{key} not in {group_keys}") from e @@ -28,7 +28,7 @@ do_fft=False, ) all_groups = {} - for key in athena_group._athena_groups.keys(): + for key in athena_group.keys(): print(f"\nExtracting group {key}") group = get_group(athena_group, key) pre_edge_with_defaults(group=group) @@ -52,13 +52,22 @@ return group -def pre_edge_with_defaults(group: Group, settings: dict = None): +def pre_edge_with_defaults( + group: Group, settings: dict = None, ref_channel: str = None +): merged_settings = {} - try: - bkg_parameters = group.athena_params.bkg - except AttributeError as e: - print(f"Cannot load group.athena_params.bkg from group:\n{e}") - bkg_parameters = None + if ref_channel is not None: + print(f"Performing pre-edge with reference channel {ref_channel}") + ref = getattr(group, ref_channel.lower()) + group.e0 = None + pre_edge(energy=group.energy, mu=ref, group=group) + bkg_parameters = group.pre_edge_details + else: + try: + bkg_parameters = group.athena_params.bkg + except AttributeError as e: + print(f"Cannot load group.athena_params.bkg from group:\n{e}") + bkg_parameters = None keys = ( ("e0", "e0", None), diff -r 82e9dd980916 -r a0d3b0fe0fa3 larch_athena.py --- a/larch_athena.py Fri Mar 22 14:23:27 2024 +0000 +++ b/larch_athena.py Thu Apr 11 09:01:59 2024 +0000 @@ -261,6 +261,7 @@ do_rebin: bool, do_pre_edge: bool, pre_edge_settings: dict, + ref_channel: str, do_xftf: bool, xftf_settings: dict, plot_graph: list, @@ -286,7 +287,7 @@ do_pre_edge = True if do_pre_edge: - pre_edge_with_defaults(xas_data, pre_edge_settings) + pre_edge_with_defaults(xas_data, pre_edge_settings, ref_channel) if do_xftf: xftf_with_defaults(xas_data, xftf_settings) @@ -322,6 +323,16 @@ plt.plot(xas_data.energy, xas_data.pre_edge, "g", label="pre-edge") plt.plot(xas_data.energy, xas_data.post_edge, "r", label="post-edge") plt.plot(xas_data.energy, xas_data.mu, "b", label="fit data") + if hasattr(xas_data, "mu_std"): + plt.fill_between( + x=xas_data.energy, + y1=xas_data.mu - xas_data.mu_std, + y2=xas_data.mu + xas_data.mu_std, + alpha=0.2, + label="standard deviation", + ) + e0 = xas_data.e0 + plt.axvline(e0, color="m", label=f"edge energy = {e0}") plt.grid(color="r", linestyle=":", linewidth=1) plt.xlabel("Energy (eV)") plt.ylabel("x$\mu$(E)") # noqa: W605 @@ -331,7 +342,17 @@ if "flat" in plot_keys: plt.subplot(nrows, 1, index) - plt.plot(xas_data.energy, xas_data.flat) + plt.plot(xas_data.energy, xas_data.flat, label="flattened signal") + if hasattr(xas_data, "mu_std"): + mu_std_normalised = xas_data.mu_std / xas_data.edge_step + plt.fill_between( + x=xas_data.energy, + y1=xas_data.flat - mu_std_normalised, + y2=xas_data.flat + mu_std_normalised, + alpha=0.2, + label="standard deviation", + ) + plt.legend() plt.grid(color="r", linestyle=":", linewidth=1) plt.xlabel("Energy (eV)") plt.ylabel("Flattened x$\mu$(E)") # noqa: W605 @@ -357,29 +378,39 @@ dat_file = sys.argv[1] input_values = json.load(open(sys.argv[2], "r", encoding="utf-8")) merge_inputs = input_values["merge_inputs"]["merge_inputs"] - data_format = input_values["merge_inputs"]["format"]["format"] - if "is_zipped" in input_values["merge_inputs"]["format"]: - is_zipped = bool( - input_values["merge_inputs"]["format"]["is_zipped"]["is_zipped"] - ) + format_inputs = input_values["merge_inputs"]["format"] + if "is_zipped" in format_inputs: + is_zipped = bool(format_inputs["is_zipped"]["is_zipped"]) else: is_zipped = False extract_group = None - if "extract_group" in input_values["merge_inputs"]["format"]: - extract_group = input_values["merge_inputs"]["format"]["extract_group"] + if "extract_group" in format_inputs: + extract_group = format_inputs["extract_group"] - energy_column = None - mu_column = None - if "energy_column" in input_values["merge_inputs"]["format"]: - energy_column = input_values["merge_inputs"]["format"]["energy_column"] - if "mu_column" in input_values["merge_inputs"]["format"]: - mu_column = input_values["merge_inputs"]["format"]["mu_column"] + if "energy_column" not in format_inputs: + energy_column = None + else: + energy_column = format_inputs["energy_column"]["energy_column"] + if energy_column == "auto": + energy_column = None + elif energy_column == "other": + energy_column_input = format_inputs["energy_column"] + energy_column = energy_column_input["energy_column_text"] + + if "mu_column" not in format_inputs: + mu_column = None + else: + mu_column = format_inputs["mu_column"]["mu_column"] + if mu_column == "auto": + mu_column = None + elif mu_column == "other": + mu_column = format_inputs["mu_column"]["mu_column_text"] reader = Reader( energy_column=energy_column, mu_column=mu_column, - data_format=data_format, + data_format=format_inputs["format"], extract_group=extract_group, ) keyed_data = reader.load_data( @@ -396,7 +427,11 @@ pre_edge_items = input_values["processing"]["pre_edge"].items() pre_edge_settings = {k: v for k, v in pre_edge_items if v is not None} - do_pre_edge = pre_edge_settings.pop("pre_edge") == "true" + do_pre_edge = bool(pre_edge_settings.pop("pre_edge")) + + ref_channel = None + if "ref_channel" in pre_edge_settings: + ref_channel = pre_edge_settings.pop("ref_channel") xftf_items = input_values["processing"]["xftf"].items() xftf_settings = {k: v for k, v in xftf_items if v is not None} @@ -413,6 +448,7 @@ do_rebin=do_rebin, do_pre_edge=do_pre_edge, pre_edge_settings=pre_edge_settings, + ref_channel=ref_channel, do_xftf=do_xftf, xftf_settings=xftf_settings, plot_graph=plot_graph, diff -r 82e9dd980916 -r a0d3b0fe0fa3 larch_athena.xml --- a/larch_athena.xml Fri Mar 22 14:23:27 2024 +0000 +++ b/larch_athena.xml Thu Apr 11 09:01:59 2024 +0000 @@ -2,15 +2,15 @@ generate Athena projects from XAFS data - 0.9.74 + 0.9.75 - 1 + 0 10.1088/1742-6596/430/1/012007 - - + + @@ -33,11 +33,39 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -90,10 +118,10 @@ - + - + @@ -111,10 +139,10 @@ - + - + @@ -129,7 +157,7 @@
- + @@ -142,12 +170,16 @@ - - - + + + + - + + + + @@ -159,7 +191,7 @@ - + @@ -254,7 +286,7 @@ - + @@ -303,7 +335,7 @@ - + @@ -364,7 +396,7 @@ - + @@ -406,12 +438,23 @@ + + + + + + + + + + +