2022년 1월 24일 월요일

BBMap을 제대로 쓰자(bamscript는 어디에?)

Brian Bushnell의 BBMap은 "a splice-aware global aligner for DNA and RNA sequencing reads"이다. 난 오늘까지도 BBMap이 bwa나 bowtie2를 구동하는 wrapper라고 생각했었다. 그것이 아니라 완전히 단독으로 돌아가는 프로그램임을 오늘 깨달았으니 Brian에게 약간 미안한 마음이 든다. 

BBMap의 공식 배포처는 SourceForge에 있다. 오늘 날짜의 최신 패키지는 BBMap_38.95.tar.gz이며, 압축을 풀면 196개의 Bash script가 나온다. 실제로 돌아가는 실행파일은 자바로 개발된 것으로 알고 있다. 

BBMap은 GitHub에도 비공식 repository가 있다. BBMap은 다른 생명정보학 도구 프로그램을 포함하여 BBTools이라는 이름으로 배포되기도 한다. Joint Genome Institute에서는 다음과 같이 BBMap과 BBTools에 대한 각각 별도의 가이드를 제공한다.

우분투에서 .dep package로 BBMap을 설치할 경우, 정말 BBMap 하나만 설치된다. 그러나 conda에서 설치되는 bbmap은 BBTools도 포함하고 있다. 사실 오늘은 이것 때문에 무척 혼동스러웠다.

BBMap에서 read mapping을 실시할 경우 기본적으로 출력물은 SAM 포맷이 된다. samtools가 깔려 있는 경우에는 이를 BAM으로 전환할 수 있다. 그러나 매핑과 동시에 파이프를 써서 samtools view 또는 sort를 실행하는 것이 아니라, 임시 스크립트 파일을 먼저 작성한 뒤 이를 실행하여 sort와 index 작업을 수행하도록 만들어 놓았다. 예를 들어 보자.

$ bbmap.sh in=reads_1.fq in2=read_2.fq ref=genome.fa out=mapped.sam bamscript=bs.sh; bs.sh

이 용례를 처음 접했을 때, 나는 bs.sh라는 스크립트가 도대체 어디에 있는지를 한참을 찾았다. bs.sh는 bbmap.sh이 매핑 실행을 하면서 새롭게 만드는 스크립트이다. 시스템에 메모리가 얼마나 있는지를 확인하여 안전하게 실행할 수 있는 스크립트를 작성해 주는 것이다. 실제 bs.sh의 사례는 다음과 같다.

#!/bin/bash
echo "Note: This script is designed to run with the amount of memory detected by BBMap."
echo "      If Samtools crashes, please ensure you are running on the same platform as BBMap,"
echo "      or reduce Samtools' memory setting (the -m flag)."
echo "Note: Please ignore any warnings about 'EOF marker is absent'; this is a bug in samtools that occurs when using piped input."
samtools view -bShu mapping.sam | samtools sort -m 15G -@ 3 - -o mapping_sorted.bam
samtools index mapping_sorted.bam

남들은 다 알고 있을것만 같은 기본적인 사항을 오늘 재발견하였다... 그동안 BBTools를 구성하는 유틸리티 중 stats.sh를 가끔 사용하는 것이 전부였다. 

2022년 1월 26일 업데이트

BioStars에 실렸던 BBMap 튜토리얼
  • Part I: Yes .. BBMap can do that! - Part I : bbmap (aligner), bbduk (scan/trim), repair (fix PE reads) and reformat (format conversions)
  • Part II: Yes .. BBMap can do that! - Part II randomreads (read simulation), demuxbyname/filterbyname, bbsplit (read binning/decontamination) and pileup (coverage stats)
Nanopore read의 매핑에는 mapPacBio.sh를 사용하라고 권장하였다. Part I의 시작 부분을 참고할 것.

댓글 없음: