Consolidate angle names between data formats
This commit is contained in:
parent
7e6df95c49
commit
239949b7c0
@ -110,7 +110,7 @@ def create():
|
||||
temperature_spinner.value = None
|
||||
|
||||
gamma, nu = calculate_pol(det_data, index)
|
||||
omega = np.ones((IMAGE_H, IMAGE_W)) * det_data["rot_angle"][index]
|
||||
omega = np.ones((IMAGE_H, IMAGE_W)) * det_data["omega"][index]
|
||||
image_source.data.update(gamma=[gamma], nu=[nu], omega=[omega])
|
||||
|
||||
def update_overview_plot():
|
||||
@ -611,25 +611,25 @@ def calculate_hkl(det_data, index):
|
||||
|
||||
wave = det_data["wave"]
|
||||
ddist = det_data["ddist"]
|
||||
gammad = det_data["pol_angle"][index]
|
||||
om = det_data["rot_angle"][index]
|
||||
nud = det_data["tlt_angle"]
|
||||
gammad = det_data["gamma"][index]
|
||||
om = det_data["omega"][index]
|
||||
nud = det_data["nu"]
|
||||
ub = det_data["UB"]
|
||||
geometry = det_data["zebra_mode"]
|
||||
|
||||
if geometry == "bisecting":
|
||||
ch = det_data["chi_angle"][index]
|
||||
ph = det_data["phi_angle"][index]
|
||||
chi = det_data["chi"][index]
|
||||
phi = det_data["phi"][index]
|
||||
elif geometry == "normal beam":
|
||||
ch = 0
|
||||
ph = 0
|
||||
chi = 0
|
||||
phi = 0
|
||||
else:
|
||||
raise ValueError(f"Unknown geometry type '{geometry}'")
|
||||
|
||||
for xi in np.arange(IMAGE_W):
|
||||
for yi in np.arange(IMAGE_H):
|
||||
h[yi, xi], k[yi, xi], l[yi, xi] = pyzebra.ang2hkl(
|
||||
wave, ddist, gammad, om, ch, ph, nud, ub, xi, yi
|
||||
wave, ddist, gammad, om, chi, phi, nud, ub, xi, yi
|
||||
)
|
||||
|
||||
return h, k, l
|
||||
@ -640,8 +640,8 @@ def calculate_pol(det_data, index):
|
||||
nu = np.empty(shape=(IMAGE_H, IMAGE_W))
|
||||
|
||||
ddist = det_data["ddist"]
|
||||
gammad = det_data["pol_angle"][index]
|
||||
nud = det_data["tlt_angle"]
|
||||
gammad = det_data["gamma"][index]
|
||||
nud = det_data["nu"]
|
||||
|
||||
for xi in np.arange(IMAGE_W):
|
||||
for yi in np.arange(IMAGE_H):
|
||||
|
@ -183,11 +183,11 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
|
||||
wave = dat["wave"]
|
||||
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]
|
||||
gamma = dat["gamma"][0]
|
||||
omega = dat["omega"][0]
|
||||
nu = dat["nu"][0]
|
||||
chi = dat["chi"][0]
|
||||
phi = dat["phi"][0]
|
||||
|
||||
var_angle = dat["variable"]
|
||||
var_angle_name = dat["variable_name"]
|
||||
@ -210,16 +210,16 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
|
||||
var_step = var_C - var_F
|
||||
var_p = var_F + var_step * frStep
|
||||
|
||||
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
|
||||
if var_angle_name == "gamma":
|
||||
gamma = var_p
|
||||
elif var_angle_name == "omega":
|
||||
omega = var_p
|
||||
elif var_angle_name == "nu":
|
||||
nu = var_p
|
||||
elif var_angle_name == "chi":
|
||||
chi = var_p
|
||||
elif var_angle_name == "phi":
|
||||
phi = var_p
|
||||
|
||||
intensity = coeff[1] * abs(coeff[2] * var_step) * math.sqrt(2) * math.sqrt(np.pi)
|
||||
|
||||
@ -231,8 +231,8 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
|
||||
coeff, _ = curve_fit(gauss, range(len(projY)), projY, p0=p0, maxfev=maxfev)
|
||||
y_pos = y0 + coeff[1]
|
||||
|
||||
ga, nu = pyzebra.det2pol(ddist, pol_angle, tlt_angle, x_pos, y_pos)
|
||||
diff_vector = pyzebra.z1frmd(wave, ga, rot_angle, chi_angle, phi_angle, nu)
|
||||
ga, nu = pyzebra.det2pol(ddist, gamma, nu, x_pos, y_pos)
|
||||
diff_vector = pyzebra.z1frmd(wave, ga, omega, chi, phi, nu)
|
||||
d_spacing = float(pyzebra.dandth(wave, diff_vector)[0])
|
||||
dv1, dv2, dv3 = diff_vector.flatten() * 1e10
|
||||
|
||||
|
@ -66,18 +66,8 @@ CCL_FIRST_LINE = (
|
||||
)
|
||||
|
||||
CCL_ANGLES = {
|
||||
"bi": (
|
||||
("twotheta_angle", float),
|
||||
("omega_angle", float),
|
||||
("chi_angle", float),
|
||||
("phi_angle", float),
|
||||
),
|
||||
"nb": (
|
||||
("gamma_angle", float),
|
||||
("omega_angle", float),
|
||||
("nu_angle", float),
|
||||
("unkwn_angle", float),
|
||||
),
|
||||
"bi": (("twotheta", float), ("omega", float), ("chi", float), ("phi", float)),
|
||||
"nb": (("gamma", float), ("omega", float), ("nu", float), ("unkwn_angle", float)),
|
||||
}
|
||||
|
||||
CCL_SECOND_LINE = (
|
||||
@ -122,6 +112,8 @@ def parse_1D(fileobj, data_type):
|
||||
variable = variable.strip()
|
||||
value = value.strip()
|
||||
if variable in META_VARS_FLOAT:
|
||||
if variable == "2-theta": # fix that angle name not to be an expression
|
||||
variable = "twotheta"
|
||||
metadata[variable] = float(value)
|
||||
elif variable in META_VARS_STR:
|
||||
metadata[variable] = value
|
||||
@ -151,8 +143,8 @@ def parse_1D(fileobj, data_type):
|
||||
s[param_name] = param_type(param)
|
||||
|
||||
s["om"] = np.linspace(
|
||||
s["omega_angle"] - (s["n_points"] / 2) * s["angle_step"],
|
||||
s["omega_angle"] + (s["n_points"] / 2) * s["angle_step"],
|
||||
s["omega"] - (s["n_points"] / 2) * s["angle_step"],
|
||||
s["omega"] + (s["n_points"] / 2) * s["angle_step"],
|
||||
s["n_points"],
|
||||
)
|
||||
|
||||
@ -194,13 +186,13 @@ def parse_1D(fileobj, data_type):
|
||||
except KeyError:
|
||||
print("Mag_field not present in dat file")
|
||||
|
||||
s["omega_angle"] = metadata["omega"]
|
||||
s["omega"] = metadata["omega"]
|
||||
s["n_points"] = len(s["om"])
|
||||
s["monitor"] = s["Monitor1"][0]
|
||||
s["twotheta_angle"] = metadata["2-theta"]
|
||||
s["chi_angle"] = metadata["chi"]
|
||||
s["phi_angle"] = metadata["phi"]
|
||||
s["nu_angle"] = metadata["nu"]
|
||||
s["twotheta"] = metadata["twotheta"]
|
||||
s["chi"] = metadata["chi"]
|
||||
s["phi"] = metadata["phi"]
|
||||
s["nu"] = metadata["nu"]
|
||||
|
||||
s["idx"] = 1
|
||||
scan.append(dict(s))
|
||||
@ -249,12 +241,12 @@ def export_1D(data, path, area_method=AREA_METHODS[0], lorentz=False, hkl_precis
|
||||
# apply lorentz correction to area
|
||||
if lorentz:
|
||||
if zebra_mode == "bi":
|
||||
twotheta_angle = np.deg2rad(scan["twotheta_angle"])
|
||||
corr_factor = np.sin(twotheta_angle)
|
||||
twotheta = np.deg2rad(scan["twotheta"])
|
||||
corr_factor = np.sin(twotheta)
|
||||
else: # zebra_mode == "nb":
|
||||
gamma_angle = np.deg2rad(scan["gamma_angle"])
|
||||
nu_angle = np.deg2rad(scan["nu_angle"])
|
||||
corr_factor = np.sin(gamma_angle) * np.cos(nu_angle)
|
||||
gamma = np.deg2rad(scan["gamma"])
|
||||
nu = np.deg2rad(scan["nu"])
|
||||
corr_factor = np.sin(gamma) * np.cos(nu)
|
||||
|
||||
area_n = np.abs(area_n * corr_factor)
|
||||
area_s = np.abs(area_s * corr_factor)
|
||||
|
@ -41,7 +41,7 @@ def read_detector_data(filepath):
|
||||
filepath (str): File path of an h5 file.
|
||||
|
||||
Returns:
|
||||
ndarray: A 3D array of data, rot_angle, pol_angle, tilt_angle.
|
||||
ndarray: A 3D array of data, omega, gamma, nu.
|
||||
"""
|
||||
with h5py.File(filepath, "r") as h5f:
|
||||
data = h5f["/entry1/area_detector2/data"][:]
|
||||
@ -63,19 +63,19 @@ def read_detector_data(filepath):
|
||||
|
||||
# om, sometimes ph
|
||||
if det_data["zebra_mode"] == "nb":
|
||||
det_data["rot_angle"] = h5f["/entry1/area_detector2/rotation_angle"][:]
|
||||
else: # bi
|
||||
det_data["rot_angle"] = h5f["/entry1/sample/rotation_angle"][:]
|
||||
det_data["omega"] = h5f["/entry1/area_detector2/rotation_angle"][:]
|
||||
else: # bi
|
||||
det_data["omega"] = h5f["/entry1/sample/rotation_angle"][:]
|
||||
|
||||
det_data["pol_angle"] = h5f["/entry1/ZEBRA/area_detector2/polar_angle"][:] # gammad
|
||||
det_data["tlt_angle"] = h5f["/entry1/ZEBRA/area_detector2/tilt_angle"][:] # nud
|
||||
det_data["gamma"] = h5f["/entry1/ZEBRA/area_detector2/polar_angle"][:] # gammad
|
||||
det_data["nu"] = h5f["/entry1/ZEBRA/area_detector2/tilt_angle"][:] # nud
|
||||
det_data["ddist"] = h5f["/entry1/ZEBRA/area_detector2/distance"][:]
|
||||
det_data["wave"] = h5f["/entry1/ZEBRA/monochromator/wavelength"][:]
|
||||
det_data["chi_angle"] = h5f["/entry1/sample/chi"][:] # ch
|
||||
det_data["phi_angle"] = h5f["/entry1/sample/phi"][:] # ph
|
||||
det_data["chi"] = h5f["/entry1/sample/chi"][:] # ch
|
||||
det_data["phi"] = h5f["/entry1/sample/phi"][:] # ph
|
||||
det_data["UB"] = h5f["/entry1/sample/UB"][:].reshape(3, 3)
|
||||
|
||||
for var in ("rot_angle", "pol_angle", "tlt_angle", "chi_angle", "phi_angle"):
|
||||
for var in ("omega", "gamma", "nu", "chi", "phi"):
|
||||
if abs(det_data[var][0] - det_data[var][-1]) > 0.1:
|
||||
det_data["variable"] = det_data[var]
|
||||
det_data["variable_name"] = var
|
||||
|
@ -35,7 +35,6 @@ def merge(scan1, scan2):
|
||||
note: dict1 and dict2 can be same dict
|
||||
:return dict1 with merged scan"""
|
||||
|
||||
|
||||
# load om and Counts
|
||||
x1, x2 = scan1["om"], scan2["om"]
|
||||
# print(scan1["om"])
|
||||
@ -134,7 +133,6 @@ def check_temp_mag(scan1, scan2):
|
||||
except KeyError:
|
||||
print("temperature missing")
|
||||
|
||||
|
||||
if all(truth_list):
|
||||
return True
|
||||
else:
|
||||
@ -147,17 +145,17 @@ def merge_dups(dictionary):
|
||||
return
|
||||
|
||||
if dictionary["meta"]["zebra_mode"] == "bi":
|
||||
angles = ["twotheta_angle", "omega_angle", "chi_angle", "phi_angle"]
|
||||
angles = ["twotheta", "omega", "chi", "phi"]
|
||||
elif dictionary["meta"]["zebra_mode"] == "nb":
|
||||
angles = ["gamma_angle", "omega_angle", "nu_angle"]
|
||||
angles = ["gamma", "omega", "nu"]
|
||||
|
||||
precision = {
|
||||
"twotheta_angle": 0.1,
|
||||
"chi_angle": 0.1,
|
||||
"nu_angle": 0.1,
|
||||
"phi_angle": 0.05,
|
||||
"omega_angle": 5,
|
||||
"gamma_angle": 0.05,
|
||||
"twotheta": 0.1,
|
||||
"chi": 0.1,
|
||||
"nu": 0.1,
|
||||
"phi": 0.05,
|
||||
"omega": 5,
|
||||
"gamma": 0.05,
|
||||
}
|
||||
|
||||
for i in range(len(dictionary["scan"])):
|
||||
@ -166,8 +164,9 @@ def merge_dups(dictionary):
|
||||
continue
|
||||
else:
|
||||
# print(i, j)
|
||||
if check_angles(dictionary["scan"][i], dictionary["scan"][j], angles, precision) \
|
||||
and check_temp_mag(dictionary["scan"][i], dictionary["scan"][j]):
|
||||
if check_angles(
|
||||
dictionary["scan"][i], dictionary["scan"][j], angles, precision
|
||||
) and check_temp_mag(dictionary["scan"][i], dictionary["scan"][j]):
|
||||
merge(dictionary["scan"][i], dictionary["scan"][j])
|
||||
print("merged %d with %d within the dictionary" % (i, j))
|
||||
|
||||
@ -240,22 +239,21 @@ def unified_merge(dict1, dict2):
|
||||
|
||||
# decide angles
|
||||
if dict1["meta"]["zebra_mode"] == "bi":
|
||||
angles = ["twotheta_angle", "omega_angle", "chi_angle", "phi_angle"]
|
||||
angles = ["twotheta", "omega", "chi", "phi"]
|
||||
elif dict1["meta"]["zebra_mode"] == "nb":
|
||||
angles = ["gamma_angle", "omega_angle", "nu_angle"]
|
||||
angles = ["gamma", "omega", "nu"]
|
||||
|
||||
# precision of angles to check
|
||||
precision = {
|
||||
"twotheta_angle": 0.1,
|
||||
"chi_angle": 0.1,
|
||||
"nu_angle": 0.1,
|
||||
"phi_angle": 0.05,
|
||||
"omega_angle": 5,
|
||||
"gamma_angle": 0.1,
|
||||
"twotheta": 0.1,
|
||||
"chi": 0.1,
|
||||
"nu": 0.1,
|
||||
"phi": 0.05,
|
||||
"omega": 5,
|
||||
"gamma": 0.1,
|
||||
}
|
||||
if (dict1["meta"]["data_type"] == "ccl") and (dict2["meta"]["data_type"] == "ccl"):
|
||||
precision["omega_angle"] = 0.05
|
||||
|
||||
precision["omega"] = 0.05
|
||||
|
||||
process(dict1, dict2, angles, precision)
|
||||
|
||||
|
@ -11,6 +11,7 @@ import collections
|
||||
|
||||
from .ccl_io import load_1D
|
||||
|
||||
|
||||
def create_tuples(x, y, y_err):
|
||||
"""creates tuples for sorting and merginng of the data
|
||||
Counts need to be normalized to monitor before"""
|
||||
@ -344,9 +345,9 @@ def scan_dict(dict, precision=0.5):
|
||||
"""
|
||||
|
||||
if dict["meta"]["zebra_mode"] == "bi":
|
||||
angles = ["twotheta_angle", "omega_angle", "chi_angle", "phi_angle"]
|
||||
angles = ["twotheta", "omega", "chi", "phi"]
|
||||
elif dict["meta"]["zebra_mode"] == "nb":
|
||||
angles = ["gamma_angle", "omega_angle", "nu_angle"]
|
||||
angles = ["gamma", "omega", "nu"]
|
||||
else:
|
||||
print("Unknown zebra mode")
|
||||
return
|
||||
@ -421,11 +422,11 @@ def variables(dictionary):
|
||||
"n_points",
|
||||
"monitor",
|
||||
"Time",
|
||||
"omega_angle",
|
||||
"twotheta_angle",
|
||||
"chi_angle",
|
||||
"phi_angle",
|
||||
"nu_angle",
|
||||
"omega",
|
||||
"twotheta",
|
||||
"chi",
|
||||
"phi",
|
||||
"nu",
|
||||
]
|
||||
inall_red = [i for i in inall if i not in wrong]
|
||||
|
||||
|
@ -407,24 +407,24 @@ def box_int(file, box):
|
||||
|
||||
dat = pyzebra.read_detector_data(file)
|
||||
|
||||
sttC = dat["pol_angle"][0]
|
||||
om = dat["rot_angle"]
|
||||
nuC = dat["tlt_angle"][0]
|
||||
sttC = dat["gamma"][0]
|
||||
om = dat["omega"]
|
||||
nuC = dat["nu"][0]
|
||||
ddist = dat["ddist"]
|
||||
|
||||
# defining indices
|
||||
x0, xN, y0, yN, fr0, frN = box
|
||||
|
||||
# omega fit
|
||||
om = dat["rot_angle"][fr0:frN]
|
||||
om = dat["omega"][fr0:frN]
|
||||
cnts = np.sum(dat["data"][fr0:frN, y0:yN, x0:xN], axis=(1, 2))
|
||||
|
||||
p0 = [1.0, 0.0, 1.0]
|
||||
coeff, var_matrix = curve_fit(gauss, range(len(cnts)), cnts, p0=p0)
|
||||
|
||||
frC = fr0 + coeff[1]
|
||||
omF = dat["rot_angle"][math.floor(frC)]
|
||||
omC = dat["rot_angle"][math.ceil(frC)]
|
||||
omF = dat["omega"][math.floor(frC)]
|
||||
omC = dat["omega"][math.ceil(frC)]
|
||||
frStep = frC - math.floor(frC)
|
||||
omStep = omC - omF
|
||||
omP = omF + omStep * frStep
|
||||
|
Loading…
x
Reference in New Issue
Block a user