P-unit_model/ModelFit.py
2020-07-04 11:28:33 +02:00

84 lines
2.7 KiB
Python

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())