import matplotlib.pyplot as plt

hmmsearch_file = r"c:/Users/anyai/Music/term4/pr10/hmmsearch_b1.txt"
subfamily_file = r"c:/Users/anyai/Music/term4/pr10/true_list.txt"

# читаем все находки из hmmsearch
all_scores = {}
with open(hmmsearch_file, "r") as f:
    for line in f:
        if line.startswith("#") or not line.strip():
            continue
        parts = line.split()
        if len(parts) >= 6:
            try:
                protein_id = parts[0].split('|')[0]
                all_scores[protein_id] = float(parts[5])
            except ValueError:
                continue

# читаем ид исходных 53 белков и ищем их веса
subfamily_scores = []
with open(subfamily_file, "r") as f:
    for line in f:
        if line.startswith(">"):
            protein_id = line.strip().split('|')[0].replace(">", "")
        else:
            protein_id = line.strip().split('|')[0]
        
        if protein_id in all_scores:
            subfamily_scores.append(all_scores[protein_id])

# находим минимум и максимум
min_sub_score = min(subfamily_scores)
max_sub_score = max(subfamily_scores)

print(f"Всего белков подсемейства найдено в результатах: {len(subfamily_scores)} из 53")
print(f"Максимальный Score среди твоих белков: {max_sub_score:.2f}")
print(f"Минимальный Score среди твоих белков: {min_sub_score:.2f}")

optimal_threshold = int(min_sub_score) 

print(f"--> Оптимальный порог для отчёта: {optimal_threshold}")

sorted_all_scores = sorted(list(all_scores.values()), reverse=True)

plt.figure(figsize=(10, 6))
plt.plot(sorted_all_scores, marker='o', linestyle='-', color='royalblue', markersize=3, label='Все находки')
plt.axhline(y=optimal_threshold, color='crimson', linestyle='--', linewidth=2, 
            label=f'Биологический порог (Score = {optimal_threshold})')

plt.title("Распределение весов с учётом минимума подсемейства", fontsize=14)
plt.xlabel("Ранг находки", fontsize=12)
plt.ylabel("Full Sequence Score", fontsize=12)
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend(fontsize=11)

plt.savefig("28_05_26_new_domain_scores.png", dpi=300)
print("График сохранен как 28_05_26_new_domain_scores.png")