Add a possibility to plot (m)hkl with measured data
This commit is contained in:
parent
2a27ef7de1
commit
bb8c158591
@ -1,5 +1,6 @@
|
|||||||
import base64
|
import base64
|
||||||
import io
|
import io
|
||||||
|
import os
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from bokeh.layouts import column, row
|
from bokeh.layouts import column, row
|
||||||
@ -31,6 +32,9 @@ def create():
|
|||||||
measured_data_div = Div(text="Measured data:")
|
measured_data_div = Div(text="Measured data:")
|
||||||
measured_data = FileInput(accept=".hdf", multiple=True, width=200)
|
measured_data = FileInput(accept=".hdf", multiple=True, width=200)
|
||||||
|
|
||||||
|
upload_hkl_div = Div(text="Open hkl/mhkl data:")
|
||||||
|
upload_hkl_fi = FileInput(accept=".hkl,.mhkl", multiple=True, width=200)
|
||||||
|
|
||||||
def _prepare_plotting():
|
def _prepare_plotting():
|
||||||
flag_ub = bool(redef_ub_cb.active)
|
flag_ub = bool(redef_ub_cb.active)
|
||||||
flag_lattice = bool(redef_lattice_cb.active)
|
flag_lattice = bool(redef_lattice_cb.active)
|
||||||
@ -129,6 +133,24 @@ def create():
|
|||||||
y_c = np.cross(x_c, o_c)
|
y_c = np.cross(x_c, o_c)
|
||||||
hkl_in_plane_y.value = " ".join([f"{val:.1f}" for val in y_c])
|
hkl_in_plane_y.value = " ".join([f"{val:.1f}" for val in y_c])
|
||||||
|
|
||||||
|
# Prepare hkl/mhkl data
|
||||||
|
hkl_coord = []
|
||||||
|
for j, fname in enumerate(upload_hkl_fi.filename):
|
||||||
|
with io.StringIO(base64.b64decode(upload_hkl_fi.value[j]).decode()) as file:
|
||||||
|
_, ext = os.path.splitext(fname)
|
||||||
|
try:
|
||||||
|
fdata = pyzebra.parse_hkl(file, ext)
|
||||||
|
except:
|
||||||
|
print(f"Error loading {fname}")
|
||||||
|
return
|
||||||
|
|
||||||
|
for ind in range(len(fdata["counts"])):
|
||||||
|
# Recognize k_flag_vec
|
||||||
|
hkl = np.array([fdata["h"][ind], fdata["k"][ind], fdata["k"][ind]])
|
||||||
|
|
||||||
|
# Save data
|
||||||
|
hkl_coord.append(hkl)
|
||||||
|
|
||||||
def _update_slice():
|
def _update_slice():
|
||||||
# Where should cut be along orthogonal direction (Mutliplication factor onto orth_dir)
|
# Where should cut be along orthogonal direction (Mutliplication factor onto orth_dir)
|
||||||
orth_cut = hkl_cut.value
|
orth_cut = hkl_cut.value
|
||||||
@ -196,6 +218,22 @@ def create():
|
|||||||
image=[I.T], x=[min_x], dw=[max_x - min_x], y=[min_y], dh=[max_y - min_y]
|
image=[I.T], x=[min_x], dw=[max_x - min_x], y=[min_y], dh=[max_y - min_y]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
scan_x, scan_y = [], []
|
||||||
|
for j in range(len(hkl_coord)):
|
||||||
|
# Get middle hkl from list
|
||||||
|
hklm = M @ hkl_coord[j]
|
||||||
|
|
||||||
|
# Decide if point is in the cut
|
||||||
|
proj = np.dot(hklm, o_c)
|
||||||
|
if abs(proj - orth_cut) >= delta:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Plot middle point of scan
|
||||||
|
scan_x.append(hklm[0])
|
||||||
|
scan_y.append(hklm[1])
|
||||||
|
|
||||||
|
scatter_source.data.update(x=scan_x, y=scan_y)
|
||||||
|
|
||||||
return _update_slice
|
return _update_slice
|
||||||
|
|
||||||
def plot_file_callback():
|
def plot_file_callback():
|
||||||
@ -219,6 +257,9 @@ def create():
|
|||||||
image_source = ColumnDataSource(dict(image=[np.zeros((1, 1))], x=[0], y=[0], dw=[1], dh=[1]))
|
image_source = ColumnDataSource(dict(image=[np.zeros((1, 1))], x=[0], y=[0], dw=[1], dh=[1]))
|
||||||
plot.image(source=image_source, color_mapper=color_mapper)
|
plot.image(source=image_source, color_mapper=color_mapper)
|
||||||
|
|
||||||
|
scatter_source = ColumnDataSource(dict(x=[], y=[]))
|
||||||
|
plot.scatter(source=scatter_source, size=4, fill_color="green", line_color="green")
|
||||||
|
|
||||||
hkl_div = Div(text="HKL:", margin=(5, 5, 0, 5))
|
hkl_div = Div(text="HKL:", margin=(5, 5, 0, 5))
|
||||||
hkl_normal = TextInput(title="normal", value="0 0 1", width=70)
|
hkl_normal = TextInput(title="normal", value="0 0 1", width=70)
|
||||||
|
|
||||||
@ -312,7 +353,10 @@ def create():
|
|||||||
)
|
)
|
||||||
cm_layout = row(colormap_select, display_min_ni, display_max_ni)
|
cm_layout = row(colormap_select, display_min_ni, display_max_ni)
|
||||||
column1_layout = column(
|
column1_layout = column(
|
||||||
row(measured_data_div, measured_data, plot_file),
|
row(
|
||||||
|
column(row(measured_data_div, measured_data), row(upload_hkl_div, upload_hkl_fi)),
|
||||||
|
plot_file,
|
||||||
|
),
|
||||||
plot,
|
plot,
|
||||||
column(
|
column(
|
||||||
hkl_div,
|
hkl_div,
|
||||||
|
@ -35,6 +35,9 @@ class PlotHKL:
|
|||||||
measured_data_div = Div(text="Measured data:")
|
measured_data_div = Div(text="Measured data:")
|
||||||
measured_data = FileInput(accept=".ccl", multiple=True, width=200)
|
measured_data = FileInput(accept=".ccl", multiple=True, width=200)
|
||||||
|
|
||||||
|
upload_hkl_div = Div(text="Open hkl/mhkl data:")
|
||||||
|
upload_hkl_fi = FileInput(accept=".hkl,.mhkl", multiple=True, width=200)
|
||||||
|
|
||||||
min_grid_x = -10
|
min_grid_x = -10
|
||||||
max_grid_x = 10
|
max_grid_x = 10
|
||||||
min_grid_y = -5
|
min_grid_y = -5
|
||||||
@ -218,6 +221,24 @@ class PlotHKL:
|
|||||||
x=[x_c[0] / 2, y_c[0] / 2 - 0.1], y=[x_c[1] - 0.1, y_c[1] / 2], text=["h", "k"]
|
x=[x_c[0] / 2, y_c[0] / 2 - 0.1], y=[x_c[1] - 0.1, y_c[1] / 2], text=["h", "k"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Prepare hkl/mhkl data
|
||||||
|
hkl_coord2 = []
|
||||||
|
for j, fname in enumerate(upload_hkl_fi.filename):
|
||||||
|
with io.StringIO(base64.b64decode(upload_hkl_fi.value[j]).decode()) as file:
|
||||||
|
_, ext = os.path.splitext(fname)
|
||||||
|
try:
|
||||||
|
fdata = pyzebra.parse_hkl(file, ext)
|
||||||
|
except:
|
||||||
|
print(f"Error loading {fname}")
|
||||||
|
return
|
||||||
|
|
||||||
|
for ind in range(len(fdata["counts"])):
|
||||||
|
# Recognize k_flag_vec
|
||||||
|
hkl = np.array([fdata["h"][ind], fdata["k"][ind], fdata["k"][ind]])
|
||||||
|
|
||||||
|
# Save data
|
||||||
|
hkl_coord2.append(hkl)
|
||||||
|
|
||||||
def _update_slice():
|
def _update_slice():
|
||||||
cut_tol = hkl_delta.value
|
cut_tol = hkl_delta.value
|
||||||
cut_or = hkl_cut.value
|
cut_or = hkl_cut.value
|
||||||
@ -316,6 +337,22 @@ class PlotHKL:
|
|||||||
|
|
||||||
plot.legend.items = legend_items
|
plot.legend.items = legend_items
|
||||||
|
|
||||||
|
scan_x2, scan_y2 = [], []
|
||||||
|
for j in range(len(hkl_coord2)):
|
||||||
|
# Get middle hkl from list
|
||||||
|
hklm = M @ hkl_coord2[j]
|
||||||
|
|
||||||
|
# Decide if point is in the cut
|
||||||
|
proj = np.dot(hklm, o_c)
|
||||||
|
if abs(proj - cut_or) >= cut_tol:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Plot middle point of scan
|
||||||
|
scan_x2.append(hklm[0])
|
||||||
|
scan_y2.append(hklm[1])
|
||||||
|
|
||||||
|
scatter_source2.data.update(x=scan_x2, y=scan_y2)
|
||||||
|
|
||||||
return _update_slice
|
return _update_slice
|
||||||
|
|
||||||
def plot_file_callback():
|
def plot_file_callback():
|
||||||
@ -362,6 +399,9 @@ class PlotHKL:
|
|||||||
source=scan_source, marker="m", size="s", fill_color="c", line_color="c"
|
source=scan_source, marker="m", size="s", fill_color="c", line_color="c"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
scatter_source2 = ColumnDataSource(dict(x=[], y=[]))
|
||||||
|
plot.scatter(source=scatter_source2, size=4, fill_color="green", line_color="green")
|
||||||
|
|
||||||
plot.add_layout(Legend(items=[], location="top_left", click_policy="hide"))
|
plot.add_layout(Legend(items=[], location="top_left", click_policy="hide"))
|
||||||
|
|
||||||
hkl_div = Div(text="HKL:", margin=(5, 5, 0, 5))
|
hkl_div = Div(text="HKL:", margin=(5, 5, 0, 5))
|
||||||
@ -401,7 +441,10 @@ class PlotHKL:
|
|||||||
disting_layout = column(disting_opt_div, row(disting_opt_cb, disting_opt_rb))
|
disting_layout = column(disting_opt_div, row(disting_opt_cb, disting_opt_rb))
|
||||||
|
|
||||||
layout = column(
|
layout = column(
|
||||||
row(measured_data_div, measured_data, plot_file),
|
row(
|
||||||
|
column(row(measured_data_div, measured_data), row(upload_hkl_div, upload_hkl_fi)),
|
||||||
|
plot_file,
|
||||||
|
),
|
||||||
plot,
|
plot,
|
||||||
row(hkl_layout, k_vectors),
|
row(hkl_layout, k_vectors),
|
||||||
row(disting_layout, column(tol_k_ni, res_mult_ni)),
|
row(disting_layout, column(tol_k_ni, res_mult_ni)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user