Show hkl values for the peaks in spind panel

Fix #22
This commit is contained in:
usov_i 2021-02-02 17:58:15 +01:00
parent 0c4fffff0d
commit 6bf401aba8

View File

@ -34,7 +34,10 @@ def create():
seed_angle_tol_spinner = Spinner(title="seed-angle-tol", value=1, step=0.01) seed_angle_tol_spinner = Spinner(title="seed-angle-tol", value=1, step=0.01)
eval_hkl_tol_spinner = Spinner(title="eval-hkl-tol", value=0.15, step=0.01) eval_hkl_tol_spinner = Spinner(title="eval-hkl-tol", value=0.15, step=0.01)
diff_vec = []
def process_button_callback(): def process_button_callback():
nonlocal diff_vec
with tempfile.TemporaryDirectory() as temp_dir: with tempfile.TemporaryDirectory() as temp_dir:
temp_peak_list_dir = os.path.join(temp_dir, "peak_list") temp_peak_list_dir = os.path.join(temp_dir, "peak_list")
os.mkdir(temp_peak_list_dir) os.mkdir(temp_peak_list_dir)
@ -58,7 +61,7 @@ def create():
check=True, check=True,
) )
prepare_event_file(temp_event_file, roi_dict, path_prefix_textinput.value) diff_vec = prepare_event_file(temp_event_file, roi_dict, path_prefix_textinput.value)
subprocess.run( subprocess.run(
[ [
@ -98,7 +101,7 @@ def create():
vals = list(map(float, c_rest)) vals = list(map(float, c_rest))
ub_matrix_spind = np.array(vals).reshape(3, 3) ub_matrix_spind = np.array(vals).reshape(3, 3)
ub_matrix = np.linalg.inv(np.transpose(ub_matrix_spind)) * 1e10 ub_matrix = np.linalg.inv(np.transpose(ub_matrix_spind)) * 1e10
spind_res["ub_matrix"].append(str(ub_matrix)) spind_res["ub_matrix"].append(ub_matrix)
results_table_source.data.update(spind_res) results_table_source.data.update(spind_res)
@ -108,6 +111,19 @@ def create():
process_button = Button(label="Process", button_type="primary") process_button = Button(label="Process", button_type="primary")
process_button.on_click(process_button_callback) process_button.on_click(process_button_callback)
hkl_textareainput = TextAreaInput(title="hkl values:", rows=7)
def results_table_select_callback(_attr, old, new):
if new:
ind = new[0]
ub_matrix = results_table_source.data["ub_matrix"][ind]
res = ""
for vec in diff_vec:
res += f"{vec @ ub_matrix}\n"
hkl_textareainput.value = res
else:
hkl_textareainput.value = None
results_table_source = ColumnDataSource(dict()) results_table_source = ColumnDataSource(dict())
results_table = DataTable( results_table = DataTable(
source=results_table_source, source=results_table_source,
@ -125,6 +141,8 @@ def create():
index_position=None, index_position=None,
) )
results_table_source.selected.on_change("indices", results_table_select_callback)
tab_layout = row( tab_layout = row(
column( column(
path_prefix_textinput, path_prefix_textinput,
@ -137,7 +155,7 @@ def create():
eval_hkl_tol_spinner, eval_hkl_tol_spinner,
process_button, process_button,
), ),
results_table, column(results_table, row(hkl_textareainput)),
) )
return Panel(child=tab_layout, title="spind") return Panel(child=tab_layout, title="spind")
@ -155,6 +173,7 @@ def gauss(x, *p):
def prepare_event_file(export_filename, roi_dict, path_prefix=""): def prepare_event_file(export_filename, roi_dict, path_prefix=""):
diff_vec = []
p0 = [1.0, 0.0, 1.0] p0 = [1.0, 0.0, 1.0]
maxfev = 100000 maxfev = 100000
with open(export_filename, "w") as f: with open(export_filename, "w") as f:
@ -217,4 +236,8 @@ def prepare_event_file(export_filename, roi_dict, path_prefix=""):
d_spacing = float(pyzebra.dandth(wave, diff_vector)[0]) d_spacing = float(pyzebra.dandth(wave, diff_vector)[0])
dv1, dv2, dv3 = diff_vector.flatten() * 1e10 dv1, dv2, dv3 = diff_vector.flatten() * 1e10
diff_vec.append(diff_vector.flatten())
f.write(f"{x_pos} {y_pos} {intensity} {snr_cnts} {dv1} {dv2} {dv3} {d_spacing}\n") f.write(f"{x_pos} {y_pos} {intensity} {snr_cnts} {dv1} {dv2} {dv3} {d_spacing}\n")
return diff_vec