This commit is contained in:
@@ -1446,3 +1446,29 @@ def define_slits():
|
||||
]
|
||||
return slits
|
||||
|
||||
def get_mirror_data(history_index: int):
|
||||
"""Read data from the BEC history and return the X and Y data as arrays."""
|
||||
motor1 = "vfm_bu"
|
||||
motor2 = "vfm_bd"
|
||||
|
||||
scan = bec.history[history_index]
|
||||
md = scan.metadata["bec"]
|
||||
x1_data = scan.devices[motor1][motor1].read()["value"]
|
||||
x2_data = scan.devices[motor2][motor2].read()["value"]
|
||||
y1_data = scan.devices['microscope_stats']['microscope_stats_data_sigma_y'].read()['value']
|
||||
y2_data = scan.devices['microscope_stats']['microscope_stats_data_eccentricity'].read()['value']
|
||||
np.savetxt("luts/x1_data", x1_data)
|
||||
np.savetxt("luts/x2_data", x2_data)
|
||||
np.savetxt("luts/y1_data", y1_data)
|
||||
np.savetxt("luts/y2_data", y2_data)
|
||||
|
||||
|
||||
# plt.imshow(y1_data, cmap="hot")
|
||||
# plt.clf
|
||||
# return {
|
||||
# "signal_name": signal_name,
|
||||
# "x_data": x_data,
|
||||
# "y_data": y_data,
|
||||
# "motor_name": motor_name,
|
||||
# "scan_number": scan_number,
|
||||
# }
|
||||
@@ -15,6 +15,7 @@ import matplotlib.pyplot as plt
|
||||
|
||||
def create_fit_parameters(
|
||||
deriv: bool = False,
|
||||
negative: bool = False,
|
||||
model: str = "Voigt",
|
||||
baseline: str = "Linear",
|
||||
smoothing: None = None,
|
||||
@@ -30,6 +31,7 @@ def create_fit_parameters(
|
||||
}
|
||||
return {
|
||||
"deriv": deriv,
|
||||
"negative": negative,
|
||||
"model": model_mappings[model],
|
||||
"baseline": model_mappings[baseline],
|
||||
"smoothing": smoothing,
|
||||
@@ -53,23 +55,39 @@ def get_data_from_h5(signal_name: str = "lu_bpmsum"):
|
||||
"scan_number": str(scan_number),
|
||||
}
|
||||
|
||||
def get_history(scan):
|
||||
if isinstance(scan, int):
|
||||
if scan < 0:
|
||||
return bec.history[scan]
|
||||
return bec.history.get_by_scan_number(scan)
|
||||
# return bec.history.get_by_dataset_number(scan)
|
||||
return scan
|
||||
|
||||
|
||||
def get_data_from_history(
|
||||
history_index: int,
|
||||
scan: int,
|
||||
signal_name: str = "lu_bpmsum",
|
||||
):
|
||||
"""Read data from the BEC history and return the X and Y data as arrays."""
|
||||
scan = bec.history[history_index]
|
||||
md = scan.metadata["bec"]
|
||||
|
||||
data = get_history(scan)
|
||||
md = data.metadata["bec"]
|
||||
motor_name = md["scan_report_devices"][0].decode()
|
||||
mot_name = motor_name.replace(".","_")
|
||||
if "." in motor_name:
|
||||
root_name = motor_name.split(".")[0]
|
||||
x_data = data.devices[root_name][mot_name].read()["value"]
|
||||
else:
|
||||
x_data = data.devices[mot_name][mot_name].read()["value"]
|
||||
|
||||
scan_number = md["scan_number"]
|
||||
x_data = scan.devices[motor_name][motor_name].read()["value"]
|
||||
y_data = scan.devices[signal_name][signal_name].read()["value"]
|
||||
|
||||
y_data = data.devices[signal_name][signal_name].read()["value"]
|
||||
return {
|
||||
"signal_name": signal_name,
|
||||
"x_data": x_data,
|
||||
"y_data": y_data,
|
||||
"motor_name": motor_name,
|
||||
"motor_name": mot_name,
|
||||
"scan_number": scan_number,
|
||||
}
|
||||
|
||||
@@ -78,31 +96,56 @@ def process_data(data, fit_params):
|
||||
"""
|
||||
Process the signal data for fitting based on derivative or smoothing.
|
||||
"""
|
||||
smoothing, deriv = fit_params["smoothing"], fit_params["deriv"]
|
||||
smoothing = fit_params["smoothing"]
|
||||
deriv = fit_params["deriv"]
|
||||
negative = fit_params["negative"]
|
||||
|
||||
signal_name = data["signal_name"]
|
||||
y_data = data["y_data"]
|
||||
|
||||
if deriv:
|
||||
if smoothing:
|
||||
y_smooth = gaussian_filter1d(y_data, smoothing)
|
||||
fitting_data = np.gradient(y_smooth)
|
||||
signal_name = f"Derivative of smoothed {signal_name}"
|
||||
else:
|
||||
fitting_data = np.gradient(y_data)
|
||||
signal_name = f"Derivative of {signal_name}"
|
||||
elif smoothing and smoothing > 0.01:
|
||||
if smoothing and smoothing > 0.01:
|
||||
fitting_data = gaussian_filter1d(y_data, smoothing)
|
||||
signal_name = f"Smoothed {signal_name}"
|
||||
else:
|
||||
fitting_data = y_data
|
||||
fitting_data = y_data.copy()
|
||||
|
||||
updated_data = {
|
||||
"y_to_fit": fitting_data,
|
||||
"signal_name": signal_name,
|
||||
}
|
||||
data.update(updated_data)
|
||||
if deriv:
|
||||
fitting_data = np.gradient(fitting_data)
|
||||
signal_name = f"Derivative of {signal_name}"
|
||||
|
||||
if negative:
|
||||
fitting_data = -fitting_data
|
||||
signal_name = f"Negative {signal_name}"
|
||||
|
||||
data.update(
|
||||
{
|
||||
"y_to_fit": fitting_data,
|
||||
"signal_name": signal_name,
|
||||
}
|
||||
)
|
||||
return data
|
||||
|
||||
# if deriv:
|
||||
# if smoothing:
|
||||
# y_smooth = gaussian_filter1d(y_data, smoothing)
|
||||
# fitting_data = np.gradient(y_smooth)
|
||||
# signal_name = f"Derivative of smoothed {signal_name}"
|
||||
# else:
|
||||
# fitting_data = np.gradient(y_data)
|
||||
# signal_name = f"Derivative of {signal_name}"
|
||||
# elif smoothing and smoothing > 0.01:
|
||||
# fitting_data = gaussian_filter1d(y_data, smoothing)
|
||||
# signal_name = f"Smoothed {signal_name}"
|
||||
# else:
|
||||
# fitting_data = y_data
|
||||
|
||||
# updated_data = {
|
||||
# "y_to_fit": fitting_data,
|
||||
# "signal_name": signal_name,
|
||||
# }
|
||||
# data.update(updated_data)
|
||||
# return data
|
||||
|
||||
|
||||
def fit(data, fit_params):
|
||||
"""Fit a signal to a model and return the fitting results."""
|
||||
@@ -234,9 +277,9 @@ def plot_fitted_data_bec(
|
||||
"""
|
||||
wf, text_box = select_bec_window()
|
||||
fit_text = (
|
||||
f"Fit parameters: Centre = {fit_result['centre']:.4f}, "
|
||||
f"FWHM = {fit_result['fwhm']:.3f}, "
|
||||
f"Height = {fit_result['height']:.4f}\n"
|
||||
f"Fit parameters: Centre = {fit_result['centre']:.5g}, "
|
||||
f"FWHM = {fit_result['fwhm']:.5f}, "
|
||||
f"Height = {fit_result['height']:.4g}\n"
|
||||
f"Model = {fit_result['model']}\n"
|
||||
f"Chi sq = {fit_result['chi_sq']:.3g}"
|
||||
)
|
||||
|
||||
@@ -198,6 +198,7 @@ def fit_history(
|
||||
history_index: int,
|
||||
signal_name: str,
|
||||
deriv: bool = False,
|
||||
negative: bool = False,
|
||||
model: str = FitDefaults.MODEL,
|
||||
move_to_peak: bool = False,
|
||||
):
|
||||
@@ -226,7 +227,7 @@ def fit_history(
|
||||
data = get_data_from_history(history_index, signal_name)
|
||||
|
||||
# Define fitting parameters
|
||||
fit_params = create_fit_parameters(deriv, model, FitDefaults.BASELINE)
|
||||
fit_params = create_fit_parameters(deriv, negative, model, FitDefaults.BASELINE)
|
||||
|
||||
# Perform fit and plot the data
|
||||
fit_result = fit(data, fit_params)
|
||||
|
||||
Reference in New Issue
Block a user