From 870fb745ba8a7657d10be13d9addeff541bc40fb Mon Sep 17 00:00:00 2001 From: JakHolzer <53743814+JakHolzer@users.noreply.github.com> Date: Mon, 14 Sep 2020 15:22:29 +0200 Subject: [PATCH] Update comm_export.py reworked function to export data. Added lorenntz to decide if Lorentz correction should be done and also export_fit to decide whether fitter or itegrated area is to be exported (added also to fit2.py) --- pyzebra/comm_export.py | 188 +++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 121 deletions(-) diff --git a/pyzebra/comm_export.py b/pyzebra/comm_export.py index 29110cd..eac4c8b 100644 --- a/pyzebra/comm_export.py +++ b/pyzebra/comm_export.py @@ -1,134 +1,80 @@ - -def fill_string(string, total_lenght): - """fills string to tatal_length with whitespaces - :arg string - string to fill - :arg total_lenght - length of the final string - :return string of the lenght of total_lenght - """ - white_spaces = " " * total_lenght - return_string = white_spaces[: -len(str(string))] + str(string) - return return_string +import numpy as np -def export_comm(data, path): +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 + """ + align = ">" if data["meta"]["indices"] == "hkl": extension = ".comm" - with open(str(path + extension), "w") as out_file: - for keys in data["Measurements"]: - try: - meas_number_str = fill_string(keys[1:], 6) - h_str = fill_string(int(data["Measurements"][str(keys)]["h_index"]), 4) - k_str = fill_string(int(data["Measurements"][str(keys)]["k_index"]), 4) - l_str = fill_string(int(data["Measurements"][str(keys)]["l_index"]), 4) - int_str = fill_string( - "{:10.2f}".format(data["Measurements"][str(keys)]["fit"]["g_amp"][0]), 10 - ) - sigma_str = fill_string( - "{:10.2f}".format(data["Measurements"][str(keys)]["fit"]["g_width"][0]), 10 - ) - if data["meta"]["zebra_mode"] == 'bi': - twotheta_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["twotheta_angle"]), 8 - ) - omega_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["omega_angle"]), 8 - ) - chi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["chi_angle"]), 8 - ) - phi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["phi_angle"]), 8 - ) - elif data["meta"]["zebra_mode"] == 'nb': - twotheta_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["gamma_angle"]), 8 - ) - omega_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["omega_angle"]), 8 - ) - chi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["nu_angle"]), 8 - ) - phi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["unkwn_angle"]), 8 - ) - - line = ( - meas_number_str - + h_str - + l_str - + k_str - + int_str - + sigma_str - + twotheta_str - + omega_str - + chi_str - + phi_str - + "\n" - ) - out_file.write(line) - except KeyError: - print("Measurement skipped - no fit value for:", keys) - + padding = [6, 4, 10, 8] elif data["meta"]["indices"] == "real": extension = ".incomm" - with open(str(path + extension), "w") as out_file: - for keys in data["Measurements"]: - try: - meas_number_str = fill_string(keys[1:], 4) - h_str = fill_string(int(data["Measurements"][str(keys)]["h_index"]), 6) - k_str = fill_string(int(data["Measurements"][str(keys)]["k_index"]), 6) - l_str = fill_string(int(data["Measurements"][str(keys)]["l_index"]), 6) - int_str = fill_string( - "{:10.2f}".format(data["Measurements"][str(keys)]["fit"]["g_amp"][0]), 10 + padding = [4, 6, 10, 8] + + with open(str(path + extension), "w") as out_file: + for keys in data["Measurements"]: + print(keys) + try: + meas_number_str = f"{keys[1:]:{align}{padding[0]}}" + h_str = f'{int(data["Measurements"][str(keys)]["h_index"]):{padding[1]}}' + k_str = f'{int(data["Measurements"][str(keys)]["k_index"]):{padding[1]}}' + l_str = f'{int(data["Measurements"][str(keys)]["l_index"]):{padding[1]}}' + if data["Measurements"][str(keys)]["fit"]["export_fit"] is True: + area = float(data["Measurements"][str(keys)]["fit"]["g_amp"][0]) + float( + data["Measurements"][str(keys)]["fit"]["l_amp"][0] ) - sigma_str = fill_string( - "{:10.2f}".format(data["Measurements"][str(keys)]["fit"]["g_width"][0]), 10 + else: + area = float(data["Measurements"][str(keys)]["fit"]["int_area"]) - float( + data["Measurements"][str(keys)]["fit"]["int_background"][0] ) - if data["meta"]["zebra_mode"] == 'bi': - twotheta_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["twotheta_angle"]), 8 - ) - omega_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["omega_angle"]), 8 - ) - chi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["chi_angle"]), 8 - ) - phi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["phi_angle"]), 8 - ) - elif data["meta"]["zebra_mode"] == 'nb': - twotheta_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["gamma_angle"]), 8 - ) - omega_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["omega_angle"]), 8 - ) - chi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["nu_angle"]), 8 - ) - phi_str = fill_string( - "{:8.2f}".format(data["Measurements"][str(keys)]["unkwn_angle"]), 8 - ) - line = ( - meas_number_str - + h_str - + l_str - + k_str - + int_str - + sigma_str - + twotheta_str - + omega_str - + chi_str - + phi_str - + "\n" - ) - out_file.write(line) - except KeyError: - print("Measurement skipped - no fit value for:", keys) + + if data["meta"]["zebra_mode"] == "bi": + int_str = f'{"{:8.2f}".format(correction(area, lorentz, data["meta"]["zebra_mode"], data["Measurements"][str(keys)]["twotheta_angle"])):{align}{padding[2]}}' + angle_str1 = f'{data["Measurements"][str(keys)]["twotheta_angle"]:{padding[3]}}' + angle_str2 = f'{data["Measurements"][str(keys)]["omega_angle"]:{padding[3]}}' + angle_str3 = f'{data["Measurements"][str(keys)]["chi_angle"]:{padding[3]}}' + angle_str4 = f'{data["Measurements"][str(keys)]["phi_angle"]:{padding[3]}}' + elif data["meta"]["zebra_mode"] == "nb": + int_str = f'{"{:8.2f}".format(correction(area, lorentz, data["meta"]["zebra_mode"], data["Measurements"][str(keys)]["gamma_angle"],data["Measurements"][str(keys)]["nu_angle"])):{align}{padding[2]}}' + angle_str1 = f'{data["Measurements"][str(keys)]["gamma_angle"]:{padding[3]}}' + angle_str2 = f'{data["Measurements"][str(keys)]["omega_angle"]:{padding[3]}}' + angle_str3 = f'{data["Measurements"][str(keys)]["nu_angle"]:{padding[3]}}' + angle_str4 = f'{data["Measurements"][str(keys)]["unkwn_angle"]:{padding[3]}}' + + sigma_str = f'{"{:8.2f}".format(float(data["Measurements"][str(keys)]["fit"]["g_width"][0])):{align}{padding[2]}}' + line = ( + meas_number_str + + h_str + + l_str + + k_str + + int_str + + sigma_str + + angle_str1 + + angle_str2 + + angle_str3 + + angle_str4 + + "\n" + ) + out_file.write(line) + + except KeyError: + print("Measurement skipped - no fit value for:", keys) +