# HG changeset patch
# User muon-spectroscopy-computational-project
# Date 1701867826 0
# Node ID 84c8e04bc1a12e31d709a12cf8fb1842b6701b7f
# Parent  2752b2dd7ad65ab57250906c67702ace6fffd9fe
planemo upload for repository https://github.com/MaterialsGalaxy/larch-tools/tree/main/larch_artemis commit 1cf6d7160497ba58fe16a51f00d088a20934eba6
diff -r 2752b2dd7ad6 -r 84c8e04bc1a1 common.py
--- a/common.py	Tue Nov 14 15:34:23 2023 +0000
+++ b/common.py	Wed Dec 06 13:03:46 2023 +0000
@@ -7,38 +7,145 @@
 
 
 def get_group(athena_group: AthenaGroup, key: str = None) -> Group:
+    group_keys = list(athena_group._athena_groups.keys())
     if key is None:
-        group_keys = list(athena_group._athena_groups.keys())
         key = group_keys[0]
-    return extract_athenagroup(athena_group._athena_groups[key])
+    else:
+        key = key.replace("-", "_")
+
+    try:
+        return extract_athenagroup(athena_group._athena_groups[key])
+    except KeyError as e:
+        raise KeyError(f"{key} not in {group_keys}") from e
+
+
+def read_all_groups(dat_file: str, key: str = None) -> "dict[str, Group]":
+    # Cannot rely on do_ABC as _larch is None
+    athena_group = read_athena(
+        dat_file,
+        do_preedge=False,
+        do_bkg=False,
+        do_fft=False,
+    )
+    all_groups = {}
+    for key in athena_group._athena_groups.keys():
+        group = get_group(athena_group, key)
+        pre_edge_with_defaults(group=group)
+        xftf_with_defaults(group=group)
+        all_groups[key] = group
+
+    return all_groups
+
+
+def read_group(dat_file: str, key: str = None):
+    # Cannot rely on do_ABC as _larch is None
+    athena_group = read_athena(
+        dat_file,
+        do_preedge=False,
+        do_bkg=False,
+        do_fft=False,
+    )
+    group = get_group(athena_group, key)
+    pre_edge_with_defaults(group=group)
+    xftf_with_defaults(group=group)
+    return group
 
 
-def read_group(dat_file: str, key: str = None, xftf_params: dict = None):
-    athena_group = read_athena(dat_file)
-    group = get_group(athena_group, key)
-    bkg_parameters = group.athena_params.bkg
-    print(group.athena_params.fft)
-    print(group.athena_params.fft.__dict__)
-    pre_edge(
-        group,
-        e0=bkg_parameters.e0,
-        pre1=bkg_parameters.pre1,
-        pre2=bkg_parameters.pre2,
-        norm1=bkg_parameters.nor1,
-        norm2=bkg_parameters.nor2,
-        nnorm=bkg_parameters.nnorm,
-        make_flat=bkg_parameters.flatten,
+def pre_edge_with_defaults(group: Group, settings: dict = 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
+
+    keys = (
+        ("e0", "e0", None),
+        ("pre1", "pre1", None),
+        ("pre2", "pre2", None),
+        ("norm1", "nor1", None),
+        ("norm2", "nor2", None),
+        ("nnorm", "nnorm", None),
+        ("make_flat", "flatten", None),
+        ("step", "step", None),
+        # This cannot be read from file as it is not stored by Larch (0.9.71)
+        # ("nvict", "nvict", None),
     )
-    autobk(group)
-    if xftf_params is None:
-        xftf(group)
-    else:
-        print(xftf_params)
-        xftf(group, **xftf_params)
-        xftf_details = Group()
-        setattr(xftf_details, "call_args", xftf_params)
-        group.xftf_details = xftf_details
-    return group
+    for key, parameters_key, default in keys:
+        extract_attribute(
+            merged_settings, key, bkg_parameters, parameters_key, default
+        )
+
+    if settings:
+        for k, v in settings.items():
+            if k == "nvict":
+                print(
+                    "WARNING: `nvict` can be used for pre-edge but is not "
+                    "saved to file, so value used will not be accessible in "
+                    "future operations using this Athena .prj"
+                )
+            merged_settings[k] = v
+
+    print(f"Pre-edge normalization with {merged_settings}")
+    try:
+        pre_edge(group, **merged_settings)
+    except Warning as e:
+        raise Warning(
+            "Unable to perform pre-edge fitting with:\n\n"
+            f"energy:\n{group.energy}\n\nmu:{group.mu}\n\n"
+            "Consider checking the correct columns have been extracted"
+        ) from e
+    autobk(group, pre_edge_kws=merged_settings)
+
+
+def xftf_with_defaults(group: Group, settings: dict = None):
+    merged_settings = {}
+    try:
+        fft_parameters = group.athena_params.fft
+    except AttributeError as e:
+        print(f"Cannot load group.athena_params.fft from group:\n{e}")
+        fft_parameters = None
+
+    keys = (
+        ("kmin", "kmin", 0),
+        ("kmax", "kmax", 20),
+        ("dk", "dk", 1),
+        ("kweight", "kw", 2),
+        ("kweight", "kweight", 2),
+        ("window", "kwindow", "kaiser"),
+    )
+    for key, parameters_key, default in keys:
+        extract_attribute(
+            merged_settings, key, fft_parameters, parameters_key, default
+        )
+
+    if settings:
+        for k, v in settings.items():
+            merged_settings[k] = v
+
+    print(f"XFTF with {merged_settings}")
+    xftf(group, **merged_settings)
+    xftf_details = Group()
+    setattr(xftf_details, "call_args", merged_settings)
+    group.xftf_details = xftf_details
+
+
+def extract_attribute(
+    merged_settings: dict,
+    key: str,
+    parameters_group: Group,
+    parameters_key: str,
+    default: "str|int" = None,
+):
+    if parameters_group is not None:
+        try:
+            merged_settings[key] = getattr(parameters_group, parameters_key)
+            return
+        except AttributeError:
+            pass
+
+    if default is not None:
+        merged_settings[key] = default
 
 
 def read_groups(dat_files: "list[str]", key: str = None) -> Iterable[Group]:
diff -r 2752b2dd7ad6 -r 84c8e04bc1a1 larch_artemis.py
--- a/larch_artemis.py	Tue Nov 14 15:34:23 2023 +0000
+++ b/larch_artemis.py	Wed Dec 06 13:03:46 2023 +0000
@@ -5,20 +5,16 @@
 import os
 import sys
 
-from common import get_group
+from common import read_group
 
 from larch.fitting import guess, param, param_group
-from larch.io import read_athena
 from larch.symboltable import Group
 from larch.xafs import (
     FeffPathGroup,
     FeffitDataSet,
     TransformGroup,
-    autobk,
     feffit,
     feffit_report,
-    pre_edge,
-    xftf,
 )
 
 import matplotlib
@@ -39,14 +35,6 @@
     return csv_data
 
 
-def calc_with_defaults(xafs_group: Group) -> Group:
-    """Calculate pre_edge and background with default arguments"""
-    pre_edge(xafs_group)
-    autobk(xafs_group)
-    xftf(xafs_group)
-    return xafs_group
-
-
 def dict_to_gds(data_dict):
     dgs_group = param_group()
     for par_idx in data_dict:
@@ -209,12 +197,10 @@
     rmr_path = f"rmr/rmr{series_id}.png"
     chikr_path = f"chikr/chikr{series_id}.png"
 
-    athena_project = read_athena(prj_file)
-    athena_group = get_group(athena_project)
     # calc_with_defaults will hang indefinitely (>6 hours recorded) if the
     # data contains any NaNs - consider adding an early error here if this is
     # not fixed in Larch?
-    data_group = calc_with_defaults(athena_group)
+    data_group = read_group(prj_file)
 
     print(f"Fitting project from file {data_group.filename}")
 
diff -r 2752b2dd7ad6 -r 84c8e04bc1a1 larch_artemis.xml
--- a/larch_artemis.xml	Tue Nov 14 15:34:23 2023 +0000
+++ b/larch_artemis.xml	Wed Dec 06 13:03:46 2023 +0000
@@ -4,7 +4,7 @@
         
         0.9.71
         
-        0
+        1
         
         
         10.1088/1742-6596/430/1/012007
@@ -40,6 +40,7 @@
     
     
         
+        
     
     Filtered k-space
                 
             
-            
+            
+            
+            
+            
+            
+                
+                
+                
+                
+                
+                
+            
+            
+            
         
         
         
diff -r 2752b2dd7ad6 -r 84c8e04bc1a1 macros.xml
--- a/macros.xml	Tue Nov 14 15:34:23 2023 +0000
+++ b/macros.xml	Wed Dec 06 13:03:46 2023 +0000
@@ -1,26 +1,6 @@
 
-    
-        
-            
-            
-        
-        
-        
-    
-    
-        
-        
-        
-        
-        
-            
-            
-            
-            
-            
-            
-        
-        
-        
+    
+        
+        
     
 
\ No newline at end of file