From 4c5ac332b9f55f2104ca525e579f150d0e1461c7 Mon Sep 17 00:00:00 2001 From: JakHolzer <53743814+JakHolzer@users.noreply.github.com> Date: Thu, 10 Sep 2020 15:17:55 +0200 Subject: [PATCH 1/4] Function to export *.comm files --- pyzebra/comm_export.py | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 pyzebra/comm_export.py diff --git a/pyzebra/comm_export.py b/pyzebra/comm_export.py new file mode 100644 index 0000000..695a5c0 --- /dev/null +++ b/pyzebra/comm_export.py @@ -0,0 +1,43 @@ +path = 'C:\\Users\\Jakub\\Desktop\\' +name = 'test' +extension = '.comm' + + +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 + + +def export_comm(data, name): + """exports data in the *.comm format + :arg data - data to export, is dict after peak fitting + arg: name - name of the exported file + """ + out_file = open(str(path+name+extension), "w") + 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) + 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) + 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) + print('Measurement written:', keys) + + except KeyError: + print('Measurement skipped - no fit value for:', keys) + + out_file.close() + -- 2.49.0 From 0ee53ad210933cd61681774506a784f70c3e5863 Mon Sep 17 00:00:00 2001 From: JakHolzer <53743814+JakHolzer@users.noreply.github.com> Date: Fri, 11 Sep 2020 14:55:41 +0200 Subject: [PATCH 2/4] Update comm_export.py --- pyzebra/comm_export.py | 142 ++++++++++++++++++++++++++++++++++------- 1 file changed, 118 insertions(+), 24 deletions(-) diff --git a/pyzebra/comm_export.py b/pyzebra/comm_export.py index 695a5c0..654d6cb 100644 --- a/pyzebra/comm_export.py +++ b/pyzebra/comm_export.py @@ -1,6 +1,5 @@ -path = 'C:\\Users\\Jakub\\Desktop\\' -name = 'test' -extension = '.comm' +path = "C:\\Users\\Jakub\\Desktop\\" +name = "test" def fill_string(string, total_lenght): @@ -9,8 +8,8 @@ def fill_string(string, total_lenght): :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) + white_spaces = " " * total_lenght + return_string = white_spaces[: -len(str(string))] + str(string) return return_string @@ -19,25 +18,120 @@ def export_comm(data, name): :arg data - data to export, is dict after peak fitting arg: name - name of the exported file """ - out_file = open(str(path+name+extension), "w") - 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) - 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) - 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) - print('Measurement written:', keys) - except KeyError: - print('Measurement skipped - no fit value for:', keys) + if data["meta"]["indices"] == "hkl": + extension = ".comm" + with open(str(path + name + 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 + ) - out_file.close() + 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) + elif data["meta"]["indices"] == "real": + extension = ".incomm" + with open(str(path + name + 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 + ) + 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) -- 2.49.0 From a3126f027e55e48388202b7282c851a11d42e206 Mon Sep 17 00:00:00 2001 From: JakHolzer <53743814+JakHolzer@users.noreply.github.com> Date: Fri, 11 Sep 2020 15:38:54 +0200 Subject: [PATCH 3/4] removed strings, added argument --- pyzebra/comm_export.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/pyzebra/comm_export.py b/pyzebra/comm_export.py index 654d6cb..29110cd 100644 --- a/pyzebra/comm_export.py +++ b/pyzebra/comm_export.py @@ -1,6 +1,3 @@ -path = "C:\\Users\\Jakub\\Desktop\\" -name = "test" - def fill_string(string, total_lenght): """fills string to tatal_length with whitespaces @@ -13,15 +10,15 @@ def fill_string(string, total_lenght): return return_string -def export_comm(data, name): +def export_comm(data, path): """exports data in the *.comm format + :param path: path to file + name :arg data - data to export, is dict after peak fitting - arg: name - name of the exported file """ if data["meta"]["indices"] == "hkl": extension = ".comm" - with open(str(path + name + extension), "w") as out_file: + with open(str(path + extension), "w") as out_file: for keys in data["Measurements"]: try: meas_number_str = fill_string(keys[1:], 6) @@ -80,7 +77,7 @@ def export_comm(data, name): elif data["meta"]["indices"] == "real": extension = ".incomm" - with open(str(path + name + extension), "w") as out_file: + with open(str(path + extension), "w") as out_file: for keys in data["Measurements"]: try: meas_number_str = fill_string(keys[1:], 4) -- 2.49.0 From 09797672fb7c9953350136c3dcc257e4b944be02 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 4/4] 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) + -- 2.49.0