Команда 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
Прямая конвертация в 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 |
| Выравнивание в SAM | bwa mem ref.fa reads.fq > out.sam | Текстовый SAM |
| Конвертация в BAM | samtools view -b | Бинарный BAM |
| Сортировка | samtools sort | BAM по координатам |
| Индексация BAM | samtools index | Файл .bai |
Типичные ошибки и их диагностика
Если конвейер падает, сначала посмотрите сообщения в 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 через пайп — это быстрее и не расходует дисковое пространство на промежуточный текстовый файл.