Combine comm_export and load_1D modules
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
import pyzebra.ccl_dict_operation
|
||||
from pyzebra.anatric import *
|
||||
from pyzebra.ccl_findpeaks import ccl_findpeaks
|
||||
from pyzebra.comm_export import export_comm
|
||||
from pyzebra.fit2 import fitccl
|
||||
from pyzebra.h5 import *
|
||||
from pyzebra.load_1D import load_1D, parse_1D
|
||||
from pyzebra.ccl_io import load_1D, parse_1D, export_comm
|
||||
from pyzebra.param_study_moduls import add_dict, auto, merge, scan_dict
|
||||
from pyzebra.xtal import *
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ META_VARS_STR = (
|
||||
"proposal_email",
|
||||
"detectorDistance",
|
||||
)
|
||||
|
||||
META_VARS_FLOAT = (
|
||||
"omega",
|
||||
"mf",
|
||||
@@ -213,3 +214,82 @@ def parse_1D(fileobj, data_type):
|
||||
metadata["area_method"] = "fit"
|
||||
|
||||
return {"meta": metadata, "scan": scan}
|
||||
|
||||
|
||||
def correction(value, lorentz=True, zebra_mode="--", ang1=0, ang2=0):
|
||||
if lorentz is False:
|
||||
return value
|
||||
else:
|
||||
if zebra_mode == "bi":
|
||||
corr_value = np.abs(value * np.sin(ang1))
|
||||
return corr_value
|
||||
elif zebra_mode == "nb":
|
||||
corr_value = np.abs(value * np.sin(ang1) * np.cos(ang2))
|
||||
return corr_value
|
||||
|
||||
|
||||
def export_comm(data, path, lorentz=False):
|
||||
"""exports data in the *.comm format
|
||||
:param lorentz: perform Lorentz correction
|
||||
:param path: path to file + name
|
||||
:arg data - data to export, is dict after peak fitting
|
||||
|
||||
"""
|
||||
zebra_mode = data["meta"]["zebra_mode"]
|
||||
align = ">"
|
||||
if data["meta"]["indices"] == "hkl":
|
||||
extension = ".comm"
|
||||
padding = [6, 4, 10, 8]
|
||||
elif data["meta"]["indices"] == "real":
|
||||
extension = ".incomm"
|
||||
padding = [4, 6, 10, 8]
|
||||
|
||||
with open(str(path + extension), "w") as out_file:
|
||||
for key, scan in data["scan"].items():
|
||||
if "fit" not in scan:
|
||||
print("Scan skipped - no fit value for:", key)
|
||||
continue
|
||||
scan_number_str = f"{key:{align}{padding[0]}}"
|
||||
h_str = f'{int(scan["h_index"]):{padding[1]}}'
|
||||
k_str = f'{int(scan["k_index"]):{padding[1]}}'
|
||||
l_str = f'{int(scan["l_index"]):{padding[1]}}'
|
||||
if data["meta"]["area_method"] == "fit":
|
||||
area = float(scan["fit"]["fit_area"].n)
|
||||
sigma_str = (
|
||||
f'{"{:8.2f}".format(float(scan["fit"]["fit_area"].s)):{align}{padding[2]}}'
|
||||
)
|
||||
elif data["meta"]["area_method"] == "integ":
|
||||
area = float(scan["fit"]["int_area"].n)
|
||||
sigma_str = (
|
||||
f'{"{:8.2f}".format(float(scan["fit"]["int_area"].s)):{align}{padding[2]}}'
|
||||
)
|
||||
|
||||
if zebra_mode == "bi":
|
||||
area = correction(area, lorentz, zebra_mode, scan["twotheta_angle"])
|
||||
int_str = f'{"{:8.2f}".format(area):{align}{padding[2]}}'
|
||||
angle_str1 = f'{scan["twotheta_angle"]:{padding[3]}}'
|
||||
angle_str2 = f'{scan["omega_angle"]:{padding[3]}}'
|
||||
angle_str3 = f'{scan["chi_angle"]:{padding[3]}}'
|
||||
angle_str4 = f'{scan["phi_angle"]:{padding[3]}}'
|
||||
elif zebra_mode == "nb":
|
||||
area = correction(area, lorentz, zebra_mode, scan["gamma_angle"], scan["nu_angle"])
|
||||
int_str = f'{"{:8.2f}".format(area):{align}{padding[2]}}'
|
||||
angle_str1 = f'{scan["gamma_angle"]:{padding[3]}}'
|
||||
angle_str2 = f'{scan["omega_angle"]:{padding[3]}}'
|
||||
angle_str3 = f'{scan["nu_angle"]:{padding[3]}}'
|
||||
angle_str4 = f'{scan["unkwn_angle"]:{padding[3]}}'
|
||||
|
||||
line = (
|
||||
scan_number_str
|
||||
+ h_str
|
||||
+ k_str
|
||||
+ l_str
|
||||
+ int_str
|
||||
+ sigma_str
|
||||
+ angle_str1
|
||||
+ angle_str2
|
||||
+ angle_str3
|
||||
+ angle_str4
|
||||
+ "\n"
|
||||
)
|
||||
out_file.write(line)
|
||||
@@ -1,80 +0,0 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
def correction(value, lorentz=True, zebra_mode="--", ang1=0, ang2=0):
|
||||
if lorentz is False:
|
||||
return value
|
||||
else:
|
||||
if zebra_mode == "bi":
|
||||
corr_value = np.abs(value * np.sin(ang1))
|
||||
return corr_value
|
||||
elif zebra_mode == "nb":
|
||||
corr_value = np.abs(value * np.sin(ang1) * np.cos(ang2))
|
||||
return corr_value
|
||||
|
||||
|
||||
def export_comm(data, path, lorentz=False):
|
||||
"""exports data in the *.comm format
|
||||
:param lorentz: perform Lorentz correction
|
||||
:param path: path to file + name
|
||||
:arg data - data to export, is dict after peak fitting
|
||||
|
||||
"""
|
||||
zebra_mode = data["meta"]["zebra_mode"]
|
||||
align = ">"
|
||||
if data["meta"]["indices"] == "hkl":
|
||||
extension = ".comm"
|
||||
padding = [6, 4, 10, 8]
|
||||
elif data["meta"]["indices"] == "real":
|
||||
extension = ".incomm"
|
||||
padding = [4, 6, 10, 8]
|
||||
|
||||
with open(str(path + extension), "w") as out_file:
|
||||
for key, scan in data["scan"].items():
|
||||
if "fit" not in scan:
|
||||
print("Scan skipped - no fit value for:", key)
|
||||
continue
|
||||
scan_number_str = f"{key:{align}{padding[0]}}"
|
||||
h_str = f'{int(scan["h_index"]):{padding[1]}}'
|
||||
k_str = f'{int(scan["k_index"]):{padding[1]}}'
|
||||
l_str = f'{int(scan["l_index"]):{padding[1]}}'
|
||||
if data["meta"]["area_method"] == "fit":
|
||||
area = float(scan["fit"]["fit_area"].n)
|
||||
sigma_str = (
|
||||
f'{"{:8.2f}".format(float(scan["fit"]["fit_area"].s)):{align}{padding[2]}}'
|
||||
)
|
||||
elif data["meta"]["area_method"] == "integ":
|
||||
area = float(scan["fit"]["int_area"].n)
|
||||
sigma_str = (
|
||||
f'{"{:8.2f}".format(float(scan["fit"]["int_area"].s)):{align}{padding[2]}}'
|
||||
)
|
||||
|
||||
if zebra_mode == "bi":
|
||||
area = correction(area, lorentz, zebra_mode, scan["twotheta_angle"])
|
||||
int_str = f'{"{:8.2f}".format(area):{align}{padding[2]}}'
|
||||
angle_str1 = f'{scan["twotheta_angle"]:{padding[3]}}'
|
||||
angle_str2 = f'{scan["omega_angle"]:{padding[3]}}'
|
||||
angle_str3 = f'{scan["chi_angle"]:{padding[3]}}'
|
||||
angle_str4 = f'{scan["phi_angle"]:{padding[3]}}'
|
||||
elif zebra_mode == "nb":
|
||||
area = correction(area, lorentz, zebra_mode, scan["gamma_angle"], scan["nu_angle"])
|
||||
int_str = f'{"{:8.2f}".format(area):{align}{padding[2]}}'
|
||||
angle_str1 = f'{scan["gamma_angle"]:{padding[3]}}'
|
||||
angle_str2 = f'{scan["omega_angle"]:{padding[3]}}'
|
||||
angle_str3 = f'{scan["nu_angle"]:{padding[3]}}'
|
||||
angle_str4 = f'{scan["unkwn_angle"]:{padding[3]}}'
|
||||
|
||||
line = (
|
||||
scan_number_str
|
||||
+ h_str
|
||||
+ k_str
|
||||
+ l_str
|
||||
+ int_str
|
||||
+ sigma_str
|
||||
+ angle_str1
|
||||
+ angle_str2
|
||||
+ angle_str3
|
||||
+ angle_str4
|
||||
+ "\n"
|
||||
)
|
||||
out_file.write(line)
|
||||
@@ -8,7 +8,7 @@ import scipy.io as sio
|
||||
import uncertainties as u
|
||||
from mpl_toolkits.mplot3d import Axes3D # dont delete, otherwise waterfall wont work
|
||||
|
||||
from .load_1D import load_1D
|
||||
from .ccl_io import load_1D
|
||||
|
||||
|
||||
def create_tuples(x, y, y_err):
|
||||
|
||||
Reference in New Issue
Block a user