SAMtools

SAMtools — это набор утилит для обработки коротких фрагментов секвенированной ДНК в форматах SAM или BAM. Автор SAMtools — китайский биоинформатик Хэн Ли, который является также автором спецификаций форматов SAM и BAM. В настоящее время ведущими разработчиками SAMtools являются Петр Данечек (чеш. Petr Daněček)[3][4] и Джон Маршалл (англ. John Marshall)[5].

SAMtools
Тип Биоинформатика
Автор Хэн Ли
Разработчики Джон Маршалл, Петр Данечек
Написана на Си[1]
Операционная система UNIX
Первый выпуск 2009
Последняя версия 1.9 (2018-07-19)
Читаемые форматы файлов Sequence Alignment/Map[2], FASTA[2], Variant Call Format[2]
Создаваемые форматы файлов Sequence Alignment/Map
Лицензия MIT
Сайт htslib.org

Предпосылки создания

С появлением новых технологий секвенирования, таких как Illumina/Solexa, AB/SOLiD и Roche/454, было разработано множество новых инструментов выравнивания с целью реализовать эффективное картирование чтений на большие референсныепоследовательности, включая геном человека. Однако, эти инструменты генерируют выравнивания в разных форматах, что усложняет последующую обработку. Общий формат выравнивания, который поддерживает все типы последовательностей и инструменты для их выравнивания, создает четко определенный переход от выравнивания к последующему анализу, включающему поиск мутаций, генотипирование и сборку генома[6].

Формат Sequence Alignment/Map (SAM) предназначен для достижения этой цели. Он поддерживает одиночные и парные чтения, а также может комбинировать чтения разных типов, включая чтения цветового пространства AB/SOLiD. Этот формат предназначен для сведения в выравнивание наборов из 1011 или более пар оснований, что характерно для глубокого ресеквенирования одного человека[6].

SAMtools разработан специально для обработки выравниваний в формате SAM/BAM. Он может конвертировать из других форматов выравнивания, сортировать и объединять выравнивания, удалять дубликаты PCR, генерировать информацию по позициям в формате pileup, коллировать SNP и варианты коротких инделей, а также отображать выравнивания в текстовом средстве просмотра[6].

Принцип работы

SAMtools предназначен для работы с потоком данных. Каждая программа вызывается отдельной командой, принимает входной файл через стандартный поток ввода (stdin) и возвращает результат через стандартный поток вывода (stdout). Предупреждения и сообщения об ошибках выводятся в стандартный поток ошибок (stderr). Команды samtools могут быть скомбинированы в конвейеры с другими Unix-командами[7].

По умолчанию поток вывода направляется на экран. Так как он может быть громоздким и сложным, используется перенаправление вывода в файл (> и >>) или следующей команде в конвейере (|)[8].

SAMtools также может открывать файлы BAM (но не SAM!) через FTP или HTTP[7].

SAMtools написан на C и может быть использован через API. Существуют обёртки для других языков программирования:

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

Форматы SAM, BAM и CRAM

Формат BAM (англ. Binary Alignment Map) представляет собой бинарный эквивалент SAM. BAM занимает меньше места и позволяет быстрее работать с информацией, чем SAM. Однако только файлы SAM доступны для чтения как текстовые файлы. SAMtools позволяет эффективно работать с форматом BAM и извлекать необходимую информацию в человекочитаемом формате[7][16].

Файлы формата CRAM являются ещё более эффективными с точки зрения занимаемого дискового пространства, чем файлы BAM. В CRAM-файл хранятся отличия прочтений от референсной последовательности, поэтому для работы с ним необходимо наличие файла с референсным геномом. Спецификация[17] формата разработана в Европейском институте биоинформатики. SAMtools позволяет выполнять конвертацию между форматами SAM, BAM и CRAM[7].

Формат SAM (англ. Sequence Alignment Map) — это текстовый формат для хранения биологических последовательностей, выровненных по эталонной последовательности, также называемой референсной. Этот формат широко используется для хранения таких данных, как фрагменты нуклеотидных последовательностей (иначе называемых чтениями, прочтениями или ридами), полученные с помощью технологии секвенирования нового поколения. Чаще всего SAM получают в результате картирования прочтений из файла FASTQ на последовательность референсного генома. Формат поддерживает короткие и длинные чтения (до 128 Mbp) и может включать одно или несколько выравниваний. Одно выравнивание состоит из нескольких строк, каждая из которых — выравнивание одного фрагмента[16].

SAM-файл может содержать заголовок, строки которого всегда начинаются с символа «@», за которым следует один из двухбуквенных кодов типа заголовка. В заголовке каждая строка разделена символом табуляции, и, кроме строк @CO, каждое поле данных соответствует формату тэг: значение, где тэг представляет собой двухсимвольную строку, которая определяет формат и содержимое значения. Ниже кратко описаны типы заголовка, которые могут быть использованы в файле[16].

Тип заголовка Описание
@HD Строка заголовка. Это первая строка, если она присутствует. Обязательно содержит данные о версии формата, может содержать информацию о сортировке выравниваний в файле (если их несколько) и их группировке.
@SQ Словарь референсных последовательностей. Порядок строк @SQ определяет порядок сортировки выравнивания. Обязательно содержит имя референсной последовательности и ее длину. Также может включать альтернативные имена последовательностей, описание, особенности последовательности и проч.
@RG Группа чтений. Разрешены несколько неупорядоченных строк @RG. Обязательно содержит уникальный идентификатор группы. Может содержать описание, дату получения группы и программы, использованные при этом, название образца во время секвенирования и проч.
@PG Использованная при запуске программа. Обязательно содержит уникальный идентификатор записи программы. Может содержать название программы, текст команды, описание и версию программы.
@CO Однострочный текстовый комментарий. Разрешены несколько неупорядоченных строк @CO.

Под заголовком находится раздел выравнивания. Он имеет 11 обязательных полей, содержащих такую информацию, как позиция и качество выравнивания, направление прочтения, указание на парное прочтение и др. Кроме того, возможно указание ряда опциональных полей в виде тэг: тип: значение[16][18].

Спецификацию[16] формата SAM можно найти в репозитории SAMtools[19] или в официальной документации формата[16]. Ниже рассмотрена часть выравнивания в формате SAM с описанием полей[16].

r001   99 ref  7 30 8M2I4M1D3M = 37  39 TTAGATAAAGGATACTG *
r001  147 ref 37 30 9M         =  7 -39 CAGCGGCAT         * NM:i:1
Номер поля Название поля[20] Комментарий[20]
1Название ридаОдинаковые названия даются ридам, прочитанным по одной матрице, например парным ридам.
2ФлагПредставляет собой комбинацию нескольких бинарных флагов, обозначающих парность, картированность и т. д. Так, флаг 99 (в шестнадцатеричной системе — 0x63) является комбинацией битов 0x1, 0x2, 0x20 и 0x40, что в совокупности даёт следующую информацию о прочтении: это первый рид из пары, для каждого рида пары есть выравнивание, пара данного рида — в обратной ориентации.
3Название референсаНазвание референса должно присутствовать в одной из строк заголовка, начинающихся с @SQ, если такие строки в файле присутствуют.
4Самая левая позиция выравниванияПозиция в референсе, которой соответствует начало прочтения. Позиции в референсе нумеруются с 1. Для некартированного рида значение этого поля, как правило, равно нулю. (Спецификация формата, однако, допускает отличное от нуля значение для некартированного рида, что может быть полезным, например, при сортировке ридов по координате.)
5MAPQПо определению, значение MAPQ равно −10 log10 P, округлённому до целого числа, где P есть вероятность того, что выравнивание неверно. Так, если MAPQ = 30, то P = 0,001.
6CIGARОписание выравнивания, в записи которого используется набор операций (совпадение, инсерция и др.). Например, строка 8M2I4M1D3M означает: 8 совпадений с референсом, 2 инсерции, 4 совпадения, 1 делеция, 3 совпадения.
7Название референса парыНазвание референса для пары должно присутствовать в одной из строк заголовка, начинающихся с @SQ, если такие строки в файле присутствуют. Если референс пары совпадает с референсом данного рида, то значение поля равно =, а при отсутствии информации о референсе пары — * (например, прочтение может быть одиночным).
8Начало выравнивания парыПозиция в референсе, которой соответствует начало пары. Аналогично четвёртому полю.
9Расстояние между крайними точками выравниванияМаксимальное расстояние по референсу. При этом в случае парного выравнивания это значение положительное для левого (по референсу) рида и отрицательное для правого. Для одиночных прочтений значение равно нулю.
10Последовательность ридаРегистр букв не имеет значения.
11КачествоМожет записываться в формате Phred+33. Если информация отсутствует, то указывается знак *.

Поле флаг представляет собой комбинацию нескольких бинарных флагов. Если чтение имеет пару, то по этой комбинации можно однозначно восстановить флаг спаренного с ним чтения и, как следствие, сведения о нем. Полный список флагов со значениями представлен в таблице ниже[21][20].

Флаг Описание[20]
110 ≡ 116 Чтение имеет пару
210 ≡ 216 Чтение картировано в правильную пару
410 ≡ 416 Чтение не картировано
810 ≡ 816 Пара чтения не картирована
1610 ≡ 1016 Чтение в обратной ориентации
3210 ≡ 2016 Пара чтения в обратной ориентации
6410 ≡ 4016 Первое чтение в паре
12810 ≡ 8016 Второе чтение в паре
25610 ≡ 10016 Выравнивание не является первичным
51210 ≡ 20016 Чтение не прошло контроль качества
102410 ≡ 40016 Чтение является оптическим или ПЦР-дубликатом
204810 ≡ 80016 Это выравнивание дополнительное

Таким образом, наиболее часто встречающиеся флаги группируются по главным значениям[22]:

  • одно из чтений в паре некартировано: 73, 133, 89, 121, 165, 181, 101, 117, 153, 185, 69, 137;
  • оба чтения некартированы: 77, 141;
  • чтения картированы в пределах размера вставки и в правильной ориентации: 99, 147, 83, 163;
  • чтения картированы в пределах размера вставки, но в неправильной ориентации: 67, 131, 115, 179;
  • чтения картированы однозначно, но с неверным размером вставки: 81 , 161 , 97 , 145 , 65 , 129 , 113 , 177.

Опциональные поля должны соответствовать формату двухбуквенный тэг: тип: значение. Например, NH:i:1 указывает число выравниваний в файле для данного прочтения как целочисленную величину, равную единице[18]. Некоторые другие распространённые теги[20]:

  • AS — вес (score) выравнивания, рассчитанный программой-картировщиком;
  • NM — редакционное расстояние от прочтения до референса;
  • MD — строка с информацией о невыровненных позициях; например, 10A5^AC6’ означает 10 совпадений с референсом → A в референсе, отличное от нуклеотида в соответствующей позиции прочтения → 5 совпадений → делеция (отсутствие в прочтении) двух нуклеотидов — AC → 6 совпадений;
  • CC — название референса для «следующего» выравнивания («хита») — для случая неуникального выравнивания;
  • CP — координата крайней левой позиции для «следующего» выравнивания («хита»);
  • HI — индекс выравнивания («хита») для данного прочтения.

Опциональные поля, тэги которых начинаются с X, Y или Z, зарезервированы для использования различными программами и непосредственно пользователями. Часто эти поля генерируются с помощью BWAtools, и наиболее часто встречающиеся такие тэги можно посмотреть в спецификации BWAtools[20], а также в спецификации дополнительных полей формата SAM[18].

Команды SAMtools

Вызов команд осуществляется в виде «samtools название_команды». Далее указываются опции вызова и необходимые файлы (если файл не был передан через конвейер). В качестве примера можно привести команду, конвертирующую файл формата SAM в формат BAM: samtools view -bS sample.sam > sample.bam, где view является командой, -bS — опциями, а sample.sam и sample.bam задают файлы в соответствующих форматах[7].

Список команд SAMtools представлен ниже.

[7]
bedcovКоманда bedcov сообщает общее число считанных оснований для каждой области генома, указанной в прилагаемом файле BED.
catcat позволяет быстро объединять BAM- и CRAM- файлы, порядок записей во входных файлах сохраняется.
calmdКоманда calmd дополняет записи входного файла тэгом MD, в котором содержится информация о полиморфизмах и инделах[20][18].
depthВысчитывает глубину каждой позиции или региона.
dictСоздает словарь последовательностей из fasta-файла.
faidxfaidx индексирует входной FASTA-файл и создает индекс-файл fasta.fai. Команду можно применять как для полной последовательности, так и для заданного региона. Все последовательности во входном файле должны иметь разные имена, иначе индексирование выдаст предупреждение о повторяющихся последовательностях и при извлечении будут получены только подпоследовательности из первой последовательности с дублированным именем.
Например, если в заголовке SAM-файла не указано, по какой последовательности проводилось выравнивание (поле @SQ), можно дополнить файл этой информацией.
Интересно, что при вызове команды view с опцией -T и указанием неиндексированного fastq-файла, соответствующий индекс будет сгенерирован автоматически.
fastq/fastaКонвертирует файл формата BAM или CRAM в файл формата FASTQ или FASTA (в зависимости от того, какая из команд была использована). Используется начиная с версии SAMtools 1.3, до этого для конвертации файла формата BAM в формат FASTQ использовалась команда bam2fq[23].
fixmatefixmate позволяет дополнять файл с парными прочтениями: заполняет координаты соответствующих пар, добавляет тэг ISIZE (отвечает за расстояние между двумя парами) и другие тэги, отвечающие за информацию о парах. С помощью опции -r можно удалять пары со вторичными и некартированными прочтениями.
flagsflags конвертирует флаги картирования из численного в текстовое представление и наоборот.
flagstatВыдает статистику по 13 категориям для файла, поданного на вход команде, работая с полем FLAG. Для каждой категории в выходной файл записывается число прошедших и не прошедших QC (quality control) ридов. Общее число ридов, прошедших и не прошедших QC, записывается в первой строчке выходного файла. Если выходной файл не указан, информация выдается в stdout.
fqidxКоманда fqidx индексирует входной FASTQ-файл (или извлекает из него подпоследовательность) и создает индекс-файл fasta.fai. Команду можно применять как для полной последовательности, так и для заданного региона.
Используется только для файлов с небольшим числом записей. Использование данной команды в файле, содержащем миллионы коротких чтений, приведет к тому, что индекс может стать таким же большим, как и исходный файл, а поиск с использованием индекса будет очень медленным и потребует много памяти.
idxstatsidxstats выводит короткую аннотацию по входному BAM-файлу в формате значений, разделённых табуляций (TSV). В аннотации содержится информация о названиях референсных последовательностей, их длинах, количестве картированных и некартированных ридов.
Важно, что для использования этой команды входной файл должен быть отсортирован и индексирован с помощью команды SAMtools index.
[7]
indexКоманда index формирует индекс-файл на основе отсортированного BAM или CRAM файла. Индекс-файл имеет формат .cram.crai для CRAM и .bam.bai или .bam.csi для BAM. Index позволяет быстрее работать командам view и tview в случае, если требуется извлечь какой-то регион из ассоциированного файла. Некоторые команды SAMtools требуют обязательного индексирования файлов (например, idxstats).
mergemerge объединяет несколько отсортированных файлов BAM в один выходной файл, также отсортированный. Если заголовки исходных файлов отличаются, merge формирует новый, обобщённый. Если в файлах присутствуют записи в одинаковыми ID, по умолчанию к ним добавляется суффикс, позволяющий их различить.
mpileupmpileup принимает на вход один или несколько BAM-файлов и генерирует форматы pileup, en:VCF или его бинарный вариант BCF. Они предназначены для хранения или поиска однонуклеотидных полиморфизмов и инделов (вставок или делеций).
В формате pileup каждая строка представляет одну геномную позицию и содержит информацию о её покрытии, нуклеотидном составе, качестве выравнивания и других характеристиках. В формате VCF (или BCF) хранится информация только о позициях, измененных по сравнению с референсным геномом[24].
phaseКоманда phase позволяет находить и фазировать гетерозиготные однонуклеотидные полиморфизмы.
sortsort сортирует прочтения во входном файле, при использовании опции -o записывает результат в файл. По умолчанию сортировка производится по левой координате прочтений (то есть по первой координате прочтений на прямой цепи и по второй координате прочтений на обратной цепи). С использованием опции -n возможна сортировка картирований по имени.
Сортировка требует больших затрат памяти, поэтому для экономии ресурсов программа записывает промежуточные BAM-файлы. По умолчанию максимальной памятью на один поток выполнения является 768 MiB. С помощью опции -m можно менять этот порог, а с помощью -@ можно увеличивать количество потоков.
В настоящее время при использовании команды явно указывают префикс для временных файлов (-T) и выходной файл (-o), однако до сих пор часто встречается устаревшая форма использования. В ней после названия входного файла обязательно указывается префикс для выходного файла и временных файлов. Например, команда принимает на вход файл unsorted_in.bam, записывает промежуточные файлы вида sorted_out.%d.out (%d обозначает номер временного файла)[25] и записывает результирующий файл sorted_out.bam.
splitРазбивает файл по группе чтений.
statsСобирает статистику из файлов формата BAM и предоставляет выходной файл в текстовом формате. Выдача может быть визуализирована графически при помощи plot-bamstats.
reheaderКоманда reheader предназначена для переименования заголовка входного BAM на заголовок другого входного SAM-файла. Такая команда работает быстрее, чем конвертация BAM→ SAM → BAM.
tviewtview вызывает интерактивный консольный текстовый просмотрщик. Он позволяет просматривать выравнивание картирований на небольшой фрагмент референсного генома. С помощью клавиши ‘g’ можно перемещаться на разные позиции выравнивания. ‘?’ вызывает помощник с перечислением возможных горячих клавиш.
viewКоманда view позволяет проводить различные операции с форматами SAM, BAM и CRAM. Например, можно конвертировать файл из одного формата в другой, фильтровать по региону, качеству или тэгу, просматривать содержимое через stdout.

Примечания

  1. The samtools Open Source Project on Open Hub: Languages Page (англ.). Дата обращения: 4 мая 2019.
  2. Samtools manual pages (англ.). Дата обращения: 4 мая 2019.
  3. Petr Danecek (англ.). Дата обращения: 28 апреля 2015. Архивировано 20 августа 2017 года.
  4. Regular Wednesday IMG seminar Petr Daněček, Ph.D. (англ.). Дата обращения: 2 мая 2019.
  5. John Marshall (англ.). Дата обращения: 28 апреля 2015. Архивировано 10 июня 2017 года.
  6. Li H., Handsaker B., Wysoker A., Fennell T., Ruan J., Homer N., Marth G., Abecasis G., Durbin R., 1000 Genome Project Data Processing Subgroup. The Sequence Alignment/Map format and SAMtools. (англ.) // Bioinformatics. — 2009. — 15 August (vol. 25, no. 16). P. 2078—2079. doi:10.1093/bioinformatics/btp352. PMID 19505943.
  7. Официальная документация SAMtools (версия 1.9) (англ.). Дата обращения: 21 апреля 2019. Архивировано 11 апреля 2019 года.
  8. Geradot. Вывод в файл Bash в Linux. — Samtools работает из командной строки.
  9. Библиотека для Python (англ.). Дата обращения: 29 апреля 2015. Архивировано 3 августа 2015 года.
  10. Библиотека для Ruby (англ.). Дата обращения: 1 мая 2019. Архивировано 1 мая 2019 года.
  11. Библиотека для Perl (англ.). Дата обращения: 1 мая 2019. Архивировано 21 апреля 2019 года.
  12. Библиотека для Haskell (англ.). Дата обращения: 29 апреля 2015. Архивировано 31 марта 2015 года.
  13. BamTools (англ.). Дата обращения: 29 апреля 2015. Архивировано 2 августа 2015 года.
  14. Picard (англ.). Дата обращения: 29 сентября 2017. Архивировано 29 сентября 2017 года.
  15. cl-sam (англ.). Дата обращения: 29 апреля 2015. Архивировано 17 июля 2017 года.
  16. Спецификация форматов SAM/BAM (англ.). Дата обращения: 28 апреля 2015. Архивировано 6 апреля 2017 года.
  17. Спецификация формата CRAM (англ.). Дата обращения: 29 апреля 2015. Архивировано 27 апреля 2015 года.
  18. Спецификация дополнительных полей формата SAM (англ.). Дата обращения: 27 апреля 2019. Архивировано 28 марта 2019 года.
  19. Репозиторий SAMtools (англ.). Дата обращения: 28 апреля 2015. Архивировано 28 апреля 2015 года.
  20. Спецификация BWAtools (англ.). bio-bwa.sourceforge.net. Архивировано 5 апреля 2017 года.
  21. SAM Format (англ.). www.samformat.info. Архивировано 27 апреля 2019 года.
  22. SAMtool bitwise flag meaning explained: how to understand samflags without pains (англ.). A Pillow Diary of an Expatriate Scientist (25 августа 2010). Архивировано 21 апреля 2019 года.
  23. Официальная документация SAMtools (версия 1.2) (англ.). Дата обращения: 28 апреля 2015. Архивировано 26 марта 2015 года.
  24. Спецификация форматов VCF/BCF (англ.). Дата обращения: 27 апреля 2019. Архивировано 28 марта 2019 года.
  25. Документация по SAMtools NERC Enviromental Bioinformatics Centre (англ.). Дата обращения: 27 апреля 2019. Архивировано 27 апреля 2019 года.

Литература

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.