import argparse

# Создание парсера
parser = argparse.ArgumentParser(description='Вычисление N50 для файла контигов в формате FASTA (заголовки velvet: ...length_1234...).')
parser.add_argument('fasta', help='Путь к файлу contigs.fa')
args = parser.parse_args()

# Список для длин контигов
lengths = []

# Чтение файла и извлечение длин из заголовков
with open(args.fasta, 'r') as f:
    for line in f:
        if line.startswith('>'):
            # Поиск подстроки 'length_' и числа после неё
            parts = line.split('_')
            for i, part in enumerate(parts):
                if part == 'length':
                    # Следующий элемент после 'length' — это длина
                    length = int(parts[i+1])
                    lengths.append(length)

# Сортировка длин по убыванию
lengths.sort(reverse=True)

# Вычисление N50
total = sum(lengths)
half = total / 2.0
cumulative = 0
n50 = 0
for l in lengths:
    cumulative += l
    if cumulative >= half:
        n50 = l
        break

print(f'N50 = {n50}')
