restructured common mx utility files
This commit is contained in:
1 parent
d928c4deee
commit
d7ac5002fe
3 files changed
+24
-66
No files matched your search
@@ -176,9 +176,8 @@ def check_peak_fit(x_data, result, min_fwhm_steps=3):
|
||||
|
||||
if fwhm < min_fwhm_steps * step:
|
||||
problems.append(
|
||||
f"Peak FWHM spans only {fwhm_steps:.2f} scan steps "
|
||||
f"(minimum {min_fwhm_steps})"
|
||||
)
|
||||
f"Peak FWHM spans only {fwhm_steps:.2f} scan steps " f"(minimum {min_fwhm_steps})"
|
||||
)
|
||||
|
||||
if fwhm > 0.7 * scan_range:
|
||||
problems.append("peak is too broad for scan range")
|
||||
|
||||
@@ -81,17 +81,17 @@ def get_value(dev_name, details=False):
|
||||
root = "scam"
|
||||
live_root = "scam"
|
||||
name = "scam_contrast"
|
||||
value = dev_name.read()[name]["value"]
|
||||
value = dev_name.read(cached=True)[name]["value"]
|
||||
else:
|
||||
try:
|
||||
name = live_root = root = dev_name.name
|
||||
value = dev_name.read()[name]["value"]
|
||||
value = dev_name.read(cached=True)[name]["value"]
|
||||
except:
|
||||
print("non-standard device")
|
||||
root = dev_name.dotted_name
|
||||
name = dev_name.full_name
|
||||
live_root = dev_name.parent.name
|
||||
value = dev_name.read()[name]["value"]
|
||||
value = dev_name.read(cached=True)[name]["value"]
|
||||
|
||||
if details:
|
||||
return {"value": value, "root": root, "name": name, "live_root": live_root}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
from dataclasses import dataclass
|
||||
import numpy as np
|
||||
|
||||
|
||||
# from mxcomm_analysis import (
|
||||
# create_fit_parameters,
|
||||
# get_data_from_history,
|
||||
@@ -26,6 +25,7 @@ import numpy as np
|
||||
# dev
|
||||
# )
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ScanDefaults:
|
||||
"""Default values for fitting routines"""
|
||||
@@ -100,9 +100,11 @@ def move_to_scan_position(motor_device, motor_name: str, position: float, data:
|
||||
scans.umv(motor_device, motor_position, relative=False)
|
||||
print(f"\n Moving {motor_name} to position {motor_position: .3f}")
|
||||
|
||||
|
||||
def restore_position(motor_device, position):
|
||||
"""Return a motor to its position before the scan."""
|
||||
scans.umv(motor_device, position, relative=False)
|
||||
scans.umv(motor_device, position, relative=False)
|
||||
|
||||
|
||||
def go_to_peak(
|
||||
motor_device,
|
||||
@@ -256,21 +258,12 @@ def go_to_peak(
|
||||
# ------------------------------------------------------------
|
||||
|
||||
scan_result = scans.line_scan(
|
||||
motor_device,
|
||||
start,
|
||||
stop,
|
||||
steps=steps,
|
||||
relative=relative,
|
||||
settling_time=settle,
|
||||
motor_device, start, stop, steps=steps, relative=relative, settling_time=settle
|
||||
)
|
||||
|
||||
motor_data = (
|
||||
scan_result.scan.live_data[mres["live_root"]][mres["name"]].val
|
||||
)
|
||||
motor_data = scan_result.scan.live_data[mres["live_root"]][mres["name"]].val
|
||||
|
||||
signal_data = (
|
||||
scan_result.scan.live_data[sres["root"]][sres["name"]].val
|
||||
)
|
||||
signal_data = scan_result.scan.live_data[sres["root"]][sres["name"]].val
|
||||
|
||||
scan_number = "Current"
|
||||
|
||||
@@ -321,12 +314,7 @@ def go_to_peak(
|
||||
)
|
||||
|
||||
# Move to measured maximum
|
||||
move_to_scan_position(
|
||||
data["motor_device"],
|
||||
data["motor_name"],
|
||||
x_max,
|
||||
data,
|
||||
)
|
||||
move_to_scan_position(data["motor_device"], data["motor_name"], x_max, data)
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
@@ -342,10 +330,7 @@ def go_to_peak(
|
||||
# ============================================================
|
||||
|
||||
fit_params = create_fit_parameters(
|
||||
deriv=False,
|
||||
negative=negative,
|
||||
model=FitDefaults.MODEL,
|
||||
baseline=FitDefaults.BASELINE,
|
||||
deriv=False, negative=negative, model=FitDefaults.MODEL, baseline=FitDefaults.BASELINE
|
||||
)
|
||||
|
||||
fit_result = fit(data, fit_params)
|
||||
@@ -354,11 +339,7 @@ def go_to_peak(
|
||||
# Validate fitted peak
|
||||
# ------------------------------------------------------------
|
||||
|
||||
check = check_peak_fit(
|
||||
data["x_data"],
|
||||
fit_result,
|
||||
min_fwhm_steps=min_fwhm_steps,
|
||||
)
|
||||
check = check_peak_fit(data["x_data"], fit_result, min_fwhm_steps=min_fwhm_steps)
|
||||
|
||||
if not check["success"]:
|
||||
|
||||
@@ -375,32 +356,18 @@ def go_to_peak(
|
||||
title=f"{motor_name} scan - FIT REJECTED",
|
||||
)
|
||||
|
||||
print(
|
||||
f"Returning motor to start position, "
|
||||
f"{starting_position:.5g}"
|
||||
)
|
||||
print(f"Returning motor to start position, " f"{starting_position:.5g}")
|
||||
|
||||
restore_position(
|
||||
motor_device,
|
||||
starting_position,
|
||||
)
|
||||
restore_position(motor_device, starting_position)
|
||||
|
||||
return {
|
||||
"success": False,
|
||||
"problems": check["problems"],
|
||||
}
|
||||
return {"success": False, "problems": check["problems"]}
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Plot accepted fit
|
||||
# ------------------------------------------------------------
|
||||
|
||||
if plot:
|
||||
plot_fitted_data(
|
||||
data,
|
||||
fit_result,
|
||||
window_name=window_name,
|
||||
plot_widget=plot_widget,
|
||||
)
|
||||
plot_fitted_data(data, fit_result, window_name=window_name, plot_widget=plot_widget)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Move to fitted peak centre
|
||||
@@ -409,19 +376,11 @@ def go_to_peak(
|
||||
centre = fit_result["centre"]
|
||||
|
||||
if gap and centre < 4.5:
|
||||
print(
|
||||
f"Fitted gap position {centre:.5g} mm is below "
|
||||
"minimum gap of 4.5 mm"
|
||||
)
|
||||
print(f"Fitted gap position {centre:.5g} mm is below " "minimum gap of 4.5 mm")
|
||||
umv(dev.id_gap, 4.5)
|
||||
|
||||
else:
|
||||
move_to_scan_position(
|
||||
data["motor_device"],
|
||||
data["motor_name"],
|
||||
centre,
|
||||
data,
|
||||
)
|
||||
move_to_scan_position(data["motor_device"], data["motor_name"], centre, data)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Return successful fit information
|
||||
@@ -546,9 +505,9 @@ def find_feature(
|
||||
plot_live_data(
|
||||
motor_name,
|
||||
signal_name,
|
||||
window_name = window_name,
|
||||
plot_widget = plot_widget,
|
||||
title = f"{motor_name} scans"
|
||||
window_name=window_name,
|
||||
plot_widget=plot_widget,
|
||||
title=f"{motor_name} scans",
|
||||
)
|
||||
# Perform scan
|
||||
scan_result = scans.line_scan(
|
||||
|
||||
Reference in new issue
Block a user