domain = "domain.txt"
scores = "scores.txt"

score_dict = {}
with open(scores) as s:
    for line in s:
        score_dict[line.split()[0]] = float(line.split()[1])
print("Всего", len(score_dict), "находки")

domain_dict = {}
with open(domain) as d:
    with open(scores) as s:
        for line in d:
            name = line.split('/')[0]
            domain_dict[name] = score_dict[name]

min_score = min(domain_dict.values())
max_score = max(domain_dict.values())
print("Все", len(domain_dict), "белков подсемейства было найдено")
print("Минимальный score:", min_score)
print("Максимальный:", max_score)


        
score_list = sorted(list(score_dict.values()))
domain_list = sorted(list(domain_dict.values()))

results = []

for j in range(1, 19):
    threshold = domain_list[j-1]

    TP = 38 - j
    FP = sum([score_list[i] > threshold for i in range(len(score_list))])-TP
    FN = j
    TN = sum([score_list[i] <= domain_list[j-1] for i in range(len(score_list))])-FN

    precision = TP / (TP + FP)
    recall = TP / (TP + FN)
    F1 = 2 * precision * recall / (precision + recall) if precision + recall > 0 else 0

    results.append([threshold, TP, FP, FN, TN, F1])

best = sorted(results, key=lambda x: x[5], reverse=True)[0]
threshold, TP, FP, FN, TN, F1 = best

print("Лучший кандидат:")
print("threshold:", threshold)
print("TP:", TP)
print("FP:", FP)
print("FN:", FN)
print("TN:", TN)
print("F1:", F1)