Команда bwa mem сама по себе не создаёт файл на диске — результат выравнивания она пишет в стандартный поток вывода (stdout), и без перенаправления весь SAM-текст просто промелькнёт в терминале и пропадёт. Именно поэтому запрос «bwa to s(am)» чаще всего означает одну из двух задач: либо перенаправить вывод BWA в SAM-файл, либо сразу сконвертировать его в компактный BAM через samtools.

Ниже разберём оба сценария: получение текстового SAM, конвертацию в бинарный BAM, сортировку по координатам и индексацию. Все команды приведены для Linux/macOS-окружения, где BWA и samtools установлены через пакетный менеджер или bioconda.

Что такое SAM и зачем нужен BAM

SAM (Sequence Alignment/Map) — текстовый формат хранения выравниваний прочтений на референсный геном. Каждая строка описывает одно прочтение: его имя, флаги, позицию на референсе, строку CIGAR, последовательность и качество оснований. Файл легко просмотреть обычным less или head, что удобно для отладки.

BAM — бинарная, сжатая версия того же SAM. Он занимает заметно меньше места и поддерживает быстрый произвольный доступ после сортировки и индексации. Практически все downstream-инструменты (вызыватели вариантов, IGV, Picard) работают именно с отсортированным и проиндексированным BAM.

  • 📄 SAM — человекочитаемый текст, подходит для проверки и отладки.
  • 📦 BAM — бинарный формат, стандарт для хранения и анализа.
  • 🔍 BAI/CSI — индексные файлы для быстрого доступа к регионам BAM.

Подготовка: индексация референса

Перед любым выравниванием референсный геном нужно проиндексировать самим BWA — без индекса bwa mem завершится с ошибкой о невозможности найти индексные файлы. Индексация выполняется один раз для каждого референса:

bwa index reference.fa

В результате рядом с файлом референса появятся служебные файлы с расширениями вроде .amb, .ann, .bwt, .pac, .sa. Их не нужно трогать и перемещать отдельно от FASTA-файла — BWA ищет индекс по пути к референсу.

⚠️ Внимание: индексирование крупных геномов (например, человеческого) требует заметного объёма оперативной памяти и времени. Убедитесь, что на машине достаточно RAM, иначе процесс может быть прерван системой.

Получение SAM-файла из bwa mem

Самый прямой способ получить SAM — перенаправить вывод через оператор >. Для парных прочтений команда выглядит так:

bwa mem reference.fa reads_R1.fastq.gz reads_R2.fastq.gz > alignment.sam

Здесь reference.fa — проиндексированный референс, далее идут файлы прочтений (для одиночных прочтений указывается один файл). Результат — готовый alignment.sam, который можно открыть текстовым редактором или просмотреть командой head alignment.sam: в начале файла идут строки заголовка, начинающиеся с символа @.

Для ускорения работы стоит задать число потоков параметром -t, например -t 8. Количество потоков не должно превышать число доступных ядер процессора.

☑️ Проверка перед запуском bwa mem

Выполнено: 0 / 5

Прямая конвертация в BAM через пайп

Хранить промежуточный SAM на диске обычно не нужно — он занимает много места. Стандартная практика: передать вывод BWA напрямую в samtools через пайп и сразу получить BAM:

bwa mem -t 8 reference.fa R1.fastq.gz R2.fastq.gz | samtools view -b -o alignment.bam -

Ключ -b указывает samtools вывести бинарный формат, а дефис в конце означает чтение из стандартного ввода. Если SAM-файл уже существует, конвертация выполняется так:

samtools view -b -o alignment.bam alignment.sam
💡

Чтобы не держать на диске гигабайтный SAM, всегда используйте пайп bwa mem | samtools view — это экономит и место, и время на операции ввода-вывода.

Сортировка и индексация BAM

Сырой BAM из конвейера не отсортирован по координатам — записи идут в порядке прочтений. Для большинства downstream-инструментов требуется сортировка и индекс:

samtools sort -o alignment.sorted.bam alignment.bam

samtools index alignment.sorted.bam

После индексации рядом появится файл alignment.sorted.bam.bai. Проверить базовую статистику выравнивания можно командой samtools flagstat alignment.sorted.bam — она покажет, сколько прочтений картировалось, сколько пар выровнялись корректно и другие счётчики.

ЭтапКомандаРезультат
Индексация референсаbwa index ref.faИндексные файлы BWA
Выравнивание в SAMbwa mem ref.fa reads.fq > out.samТекстовый SAM
Конвертация в BAMsamtools view -bБинарный BAM
Сортировкаsamtools sortBAM по координатам
Индексация BAMsamtools indexФайл .bai
📊 Какой формат вы используете для хранения результатов выравнивания?
Только BAM с индексом
SAM для отладки, BAM для анализа
CRAM для экономии места
Ещё только настраиваю пайплайн

Типичные ошибки и их диагностика

Если конвейер падает, сначала посмотрите сообщения в stderr — BWA и samtools пишут диагностику именно туда, а не в выходной файл. Частые ситуации:

  • 🧩 «fail to locate the index files» — референс не проиндексирован или путь к нему указан неверно.
  • 🧩 Пустой SAM/BAM на выходе — проверьте, не оборвался ли пайп и совпадают ли имена файлов прочтений.
  • 🧩 «truncated file» у samtools — файл повреждён, вероятно, процесс был прерван; пересоздайте BAM.
  • 🧩 Все прочтения unmapped — возможно, референс не соответствует данным секвенирования.

⚠️ Внимание: не прерывайте работающий пайп с bwa mem принудительно без необходимости — частично записанный BAM будет повреждён, и samtools откажется его индексировать. Перед повторным запуском удалите неполные выходные файлы.

Полезная быстрая проверка целостности: samtools quickcheck alignment.bam — команда завершается молча, если файл корректен, и возвращает ошибку при повреждении.

Как посмотреть содержимое BAM в текстовом виде

Выполните samtools view alignment.sorted.bam | head — записи будут показаны в SAM-представлении. Добавьте флаг -h, чтобы увидеть также заголовок файла.

CRAM как альтернатива BAM

Если объёмы данных велики, вместо BAM можно использовать CRAM — формат с более сильным сжатием, который хранит различия относительно референса. Для записи CRAM samtools потребуется путь к референсному FASTA, а для чтения файла в дальнейшем референс должен оставаться доступным. Это важное отличие: CRAM без доступа к референсному геному, с которым он создавался, может оказаться нечитаемым.

💡

Стандартный путь «bwa to sam/bam»: bwa mem → пайп в samtools view → samtools sort → samtools index. Промежуточный SAM на диске обычно не нужен.

FAQ: частые вопросы

Чем SAM отличается от BAM?

SAM — текстовый формат, BAM — его бинарная сжатая версия. Содержимое записей идентично, различаются только представление, размер файла и скорость доступа.

Можно ли сконвертировать BAM обратно в SAM?

Да, командой samtools view -h alignment.bam > alignment.sam. Флаг -h добавляет в вывод заголовок, без него SAM будет неполным.

Зачем нужна сортировка BAM?

Отсортированный по координатам BAM требуется для индексации и для большинства инструментов анализа: вызова вариантов, подсчёта покрытия, визуализации в IGV.

Как проверить, сколько прочтений выровнялось?

Используйте samtools flagstat для сводной статистики или samtools idxstats для разбивки по хромосомам (требуется индекс).

Нужен ли SAM-файл, если конечная цель — BAM?

Нет. Передавайте вывод bwa mem напрямую в samtools view через пайп — это быстрее и не расходует дисковое пространство на промежуточный текстовый файл.