Support any variable angle

This commit is contained in:
usov_i 2020-12-16 17:23:23 +01:00
parent f694249298
commit ae33ee825e

View File

@ -127,17 +127,22 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
for file, rois in roi_dict.items(): for file, rois in roi_dict.items():
dat = pyzebra.read_detector_data(path_prefix + file + ".hdf") dat = pyzebra.read_detector_data(path_prefix + file + ".hdf")
# here is assumed that only omega_angle can vary wave = dat["wave"]
sttC = dat["pol_angle"][0]
om = dat["rot_angle"]
nuC = dat["tlt_angle"][0]
ddist = dat["ddist"] ddist = dat["ddist"]
pol_angle = dat["pol_angle"][0]
rot_angle = dat["rot_angle"][0]
tlt_angle = dat["tlt_angle"][0]
chi_angle = dat["chi_angle"][0]
phi_angle = dat["phi_angle"][0]
var_angle = dat["variable"]
var_angle_name = dat["variable_name"]
for roi in rois: for roi in rois:
x0, xN, y0, yN, fr0, frN = roi x0, xN, y0, yN, fr0, frN = roi
data_roi = dat["data"][fr0:frN, y0:yN, x0:xN] data_roi = dat["data"][fr0:frN, y0:yN, x0:xN]
# omega fit Here one should change to any rot_angle, i.e. phi
cnts = np.sum(data_roi, axis=(1, 2)) cnts = np.sum(data_roi, axis=(1, 2))
coeff, _ = curve_fit(gauss, range(len(cnts)), cnts, p0=p0, maxfev=maxfev) coeff, _ = curve_fit(gauss, range(len(cnts)), cnts, p0=p0, maxfev=maxfev)
@ -146,30 +151,36 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
snr_cnts = np.where(sd == 0, 0, m / sd) snr_cnts = np.where(sd == 0, 0, m / sd)
frC = fr0 + coeff[1] frC = fr0 + coeff[1]
omF = om[math.floor(frC)] var_F = var_angle[math.floor(frC)]
omC = om[math.ceil(frC)] var_C = var_angle[math.ceil(frC)]
frStep = frC - math.floor(frC) frStep = frC - math.floor(frC)
omStep = omC - omF var_step = var_C - var_F
omP = omF + omStep * frStep var_p = var_F + var_step * frStep
Int = coeff[1] * abs(coeff[2] * omStep) * math.sqrt(2) * math.sqrt(np.pi)
if var_angle_name == "pol_angle":
pol_angle = var_p
elif var_angle_name == "rot_angle":
rot_angle = var_p
elif var_angle_name == "tlt_angle":
tlt_angle = var_p
elif var_angle_name == "chi_angle":
chi_angle = var_p
elif var_angle_name == "phi_angle":
phi_angle = var_p
intensity = coeff[1] * abs(coeff[2] * var_step) * math.sqrt(2) * math.sqrt(np.pi)
# gamma fit
projX = np.sum(data_roi, axis=(0, 1)) projX = np.sum(data_roi, axis=(0, 1))
coeff, _ = curve_fit(gauss, range(len(projX)), projX, p0=p0, maxfev=maxfev) coeff, _ = curve_fit(gauss, range(len(projX)), projX, p0=p0, maxfev=maxfev)
x = x0 + coeff[1] x_pos = x0 + coeff[1]
x_pos = x0 + round(coeff[1])
# nu fit
projY = np.sum(data_roi, axis=(0, 2)) projY = np.sum(data_roi, axis=(0, 2))
coeff, _ = curve_fit(gauss, range(len(projY)), projY, p0=p0, maxfev=maxfev) coeff, _ = curve_fit(gauss, range(len(projY)), projY, p0=p0, maxfev=maxfev)
y = y0 + coeff[1] y_pos = y0 + coeff[1]
y_pos = y0 + round(coeff[1])
ga, nu = pyzebra.det2pol(ddist, sttC, nuC, x, y) ga, nu = pyzebra.det2pol(ddist, pol_angle, tlt_angle, x_pos, y_pos)
diff_vector = pyzebra.z1frmd( diff_vector = pyzebra.z1frmd(wave, ga, rot_angle, chi_angle, phi_angle, nu)
dat["wave"], ga, omP, dat["chi_angle"][0], dat["phi_angle"][0], nu[0] d_spacing = float(pyzebra.dandth(wave, diff_vector)[0])
)
d_spacing = float(pyzebra.dandth(dat["wave"], diff_vector)[0])
dv1, dv2, dv3 = diff_vector.flatten() * 1e10 dv1, dv2, dv3 = diff_vector.flatten() * 1e10
f.write(f"{x_pos} {y_pos} {Int} {snr_cnts} {dv1} {dv2} {dv3} {d_spacing}\n") f.write(f"{x_pos} {y_pos} {intensity} {snr_cnts} {dv1} {dv2} {dv3} {d_spacing}\n")