import re import numpy as np from prettytable import PrettyTable def main(): table_1 = """+----------+-----------------------+-----------------------+----------------------+\n | Variable | Value | Lower Error | Upper Error |\n +----------+-----------------------+-----------------------+----------------------+\n | AFB | -0.1327941714665493 | -0.011751983569979923 | 0.011695518975582573 |\n | FL | 0.778784190310989 | -0.013786738313616998 | 0.01334631516152801 |\n | S3 | 0.012016752919524067 | -0.014186281678810328 | 0.01390470699489175 |\n | S4 | 0.0030912112690471196 | -0.02494551503535478 | 0.02500682819273369 |\n | S5 | 0.06257482631549156 | -0.022576669869741432 | 0.02267902660423071 |\n | S7 | 0.026461647341068015 | -0.022870493984060422 | 0.022709046371542273 |\n | S8 | 0.022528200778115424 | -0.024500119399894143 | 0.02444883875849664 |\n | S9 | -0.010047596608480971 | -0.015100958783891871 | 0.01497061747614531 |\n +----------+-----------------------+-----------------------+----------------------+""" table_2 = """+----------+-----------------------+-----------------------+----------------------+\n | Variable | Value | Lower Error | Upper Error |\n +----------+-----------------------+-----------------------+----------------------+\n | AFB | -0.044313915998597596 | -0.011266005942710903 | 0.011376116194169396 |\n | FL | 0.8080898316779715 | -0.012903371237386076 | 0.012627755576193413 |\n | S3 | -0.001350693384098943 | -0.01425102196417036 | 0.014014236056631763 |\n | S4 | -0.16348388538343442 | -0.022982703026786865 | 0.02353050491741336 |\n | S5 | -0.12998638915138938 | -0.02207623402690808 | 0.02230804022923196 |\n | S7 | -0.019175072605277906 | -0.022219297227352726 | 0.02233298418372788 |\n | S8 | 0.03896504393685167 | -0.02306667997644898 | 0.023056355590581525 |\n | S9 | -0.026410777123662296 | -0.01497373735832672 | 0.015237714795859537 |\n +----------+-----------------------+-----------------------+----------------------+""" table_3 = """+----------+-----------------------+-----------------------+----------------------+\n | Variable | Value | Lower Error | Upper Error |\n +----------+-----------------------+-----------------------+----------------------+\n | AFB | 0.06877321968399613 | -0.00873785505692959 | 0.008866035437567673 |\n | FL | 0.7579354189983714 | -0.01048129883366948 | 0.01017491937670441 |\n | S3 | -0.02540601876438032 | -0.012075664333196083 | 0.012192632205060838 |\n | S4 | -0.18300822691744986 | -0.015545142299112552 | 0.016136099542591972 |\n | S5 | -0.28137307676130335 | -0.0160784362375397 | 0.01630021297009425 |\n | S7 | 0.033064765761582675 | -0.01837491321971226 | 0.018457429889962827 |\n | S8 | -0.022661825503764606 | -0.018831356033962507 | 0.018816177761568176 |\n | S9 | -0.01151502616377776 | -0.012778180225448249 | 0.013091600028830737 |\n +----------+-----------------------+-----------------------+----------------------+""" bin_labels = [r"$0.25 < q^2 < 4.00$", r"$4.00 < q^2 < 8.00$", r"$11.00 < q^2 < 12.50$", r"$15.00 < q^2 < 18.00$", r"$1.10 < q^2 < 6.00$", r"$1.1 < q^2 < 2.5$", r"$2.5 < q^2 < 4.0$", r"$4.0 < q^2 < 6.0$", r"$6.0 < q^2 < 8.0$"] tables = [table_1, table_2, table_3] variables = ["AFB", "FL", "S3", "S4", "S5", "S7", "S8", "S9"] select_regex = [".*AFB.*\d+", ".*FL.*\d+", ".*S3.*\d+", ".*S4.*\d+", ".*S5.*\d+", ".*S7.*\d+", ".*S8.*\d+", ".*S9.*\d+"] value_regex = "[- ]\d+.\d+" samples = {'1': {'AFB': None, 'FL': None, 'S3': None, 'S4': None, 'S5': None, 'S7': None, 'S8': None, 'S9': None}, '2': {'AFB': None, 'FL': None, 'S3': None, 'S4': None, 'S5': None, 'S7': None, 'S8': None, 'S9': None}, '3': {'AFB': None, 'FL': None, 'S3': None, 'S4': None, 'S5': None, 'S7': None, 'S8': None, 'S9': None}, } for index in range(len(tables)): for variable, regex in zip(variables, select_regex): splitted = tables[index].splitlines() for line in splitted: subresult = re.match(regex, line) if subresult != None: substring = subresult.group(0) result = re.findall(value_regex, substring) value = np.float64(result[0]) lower_err = np.float64(result[1]) upper_err = np.float64(result[2]) samples[str(index + 1)][variable] = (value, lower_err, upper_err) fit_variables_split = [[] for _ in range(8)] fit_errors_split = [[] for _ in range(8)] for value in samples.values(): count = 0 for fitvalue in value.values(): fit_variables_split[count].append(fitvalue[0]) fit_errors_split[count].append(np.sqrt(fitvalue[1]**2 + fitvalue[2]**2)) count += 1 info_table = PrettyTable(["Variable", "Value", "Lower Error", "Upper Error"]) info_table.title = f"q2_split_{bin_labels[4]}_average" fit_labels = ["AFB", "FL", "S3", "S4", "S5", "S7", "S8", "S9"] count = 0 for name, fit_split_var, fit_err_split in zip(fit_labels, fit_variables_split, fit_errors_split): fit_avg = np.mean(fit_split_var) error_split = 1/3 * np.sqrt(fit_err_split[0]**2 + fit_err_split[1]**2 + fit_err_split[2]**2) info_table.add_row([name, fit_avg, -error_split, error_split]) count += 1 print(info_table) if __name__ == "__main__": main()