import os from models.LIFACnoise import LifacNoiseModel import numpy as np def get_best_fit(folder_path): min_err = np.inf min_item = "" for item in os.listdir(folder_path): err = float(item.split("_")[-1]) if err < min_err: min_err = err min_item = item return ModelFit(os.path.join(folder_path, min_item)) class ModelFit: def __init__(self, folder_path): self.path = folder_path self.parameter_file_name = "parameters_info.txt" self.value_file = "value_comparision.tsv" self.fi_comp_img = "fi_curve_comparision.png" self.isi_hist_img = "isi-histogram.png" self.isi_hist_comp_img = "isi-histogram_comparision.png" def get_final_parameters(self): par_file_path = os.path.join(self.path, self.parameter_file_name) with open(par_file_path, 'r') as par_file: for line in par_file: line = line.strip().split('\t') if line[0] == "final_parameters:": return dict(line[1]) print("Final parameters not found! - ", self.path) return {} def get_start_parameters(self): par_file_path = os.path.join(self.path, self.parameter_file_name) with open(par_file_path, 'r') as par_file: for line in par_file: line = line.strip().split('\t') if line[0] == "start_parameters:": return dict(line[1]) print("Start parameters not found! - ", self.path) return {} def get_behaviour_values(self): values_file_path = os.path.join(self.path, self.value_file) cell_values = {} model_values = {} with open(values_file_path, 'r') as val_file: line = val_file.readline() # ignore headers for line in val_file: line = line.strip().split('\t') cell_values[line[0]] = float(line[1]) model_values[line[0]] = float(line[2]) return cell_values, model_values def get_fi_curve_comparision_image(self): path = os.path.join(self.path, self.fi_comp_img) if os.path.exists(path): return path else: raise FileNotFoundError("Fi-curve comparision image is missing. - " + self.path) def get_isi_histogram_image(self): path = os.path.join(self.path, self.isi_hist_img) if os.path.exists(path): return path else: raise FileNotFoundError("Isi-histogram image is missing. - " + self.path) def get_error_value(self): return self.path.split("_")[-1] def get_model(self): return LifacNoiseModel(self.get_final_parameters())