From 6bf401aba871e264807a3ee3e3acee6f57eb5442 Mon Sep 17 00:00:00 2001 From: Ivan Usov Date: Tue, 2 Feb 2021 17:58:15 +0100 Subject: [PATCH] Show hkl values for the peaks in spind panel Fix #22 --- pyzebra/app/panel_spind.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/pyzebra/app/panel_spind.py b/pyzebra/app/panel_spind.py index 98d5278..0110d2a 100644 --- a/pyzebra/app/panel_spind.py +++ b/pyzebra/app/panel_spind.py @@ -34,7 +34,10 @@ def create(): 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) + diff_vec = [] + def process_button_callback(): + nonlocal diff_vec with tempfile.TemporaryDirectory() as temp_dir: temp_peak_list_dir = os.path.join(temp_dir, "peak_list") os.mkdir(temp_peak_list_dir) @@ -58,7 +61,7 @@ def create(): 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( [ @@ -98,7 +101,7 @@ def create(): vals = list(map(float, c_rest)) ub_matrix_spind = np.array(vals).reshape(3, 3) 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) @@ -108,6 +111,19 @@ def create(): process_button = Button(label="Process", button_type="primary") 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 = DataTable( source=results_table_source, @@ -125,6 +141,8 @@ def create(): index_position=None, ) + results_table_source.selected.on_change("indices", results_table_select_callback) + tab_layout = row( column( path_prefix_textinput, @@ -137,7 +155,7 @@ def create(): eval_hkl_tol_spinner, process_button, ), - results_table, + column(results_table, row(hkl_textareainput)), ) 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=""): + diff_vec = [] p0 = [1.0, 0.0, 1.0] maxfev = 100000 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]) 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") + + return diff_vec