FORMAT COMPARISON
SAM vs BAM
SAMとBAMは同じアラインメント情報を扱います。SAMはタブ区切りテキスト、BAMはBGZFで圧縮するバイナリ表現です。
SAMとBAM、どちらを選ぶ?
内容の確認やデバッグにはSAM、対応する解析ツールでの保存・領域アクセスにはBAMを検討します。 変換だけでは整列や索引は完了しません。受け手の要件に合わせて座標順にソートし、必要なBAI/CSIを作成します。
SAM向き
塩基配列リード・フラグメントと参照配列へのアラインメント情報をテキストで交換する・ヘッダーや任意タグを目視点検しながら解析結果を引き渡す
- ヘッダーに参照配列名・長さ・プログラム等を記録する
- FLAG・CIGAR・MAPQ・配列・品質・タグを行単位で確認する
BAM向き
大規模なシーケンスリードと参照アラインメントをバイナリで保管・交換する・座標順データを索引化して領域単位で解析する
- SAMに対応するヘッダー・レコード・タグを圧縮して保持する
- BGZFとBAI/CSI等の索引を使う対応ツールで読み取る
基本情報を比較
SAMとBAMの主な違いを確認できます。
| 項目 | SAM | BAM |
|---|---|---|
| 拡張子 | .sam | .bam |
| MIME Type | text/plain | application/octet-stream |
| 主な用途 | 塩基配列リード・フラグメントと参照配列へのアラインメント情報をテキストで交換する・ヘッダーや任意タグを目視点検しながら解析結果を引き渡す | 大規模なシーケンスリードと参照アラインメントをバイナリで保管・交換する・座標順データを索引化して領域単位で解析する |
| 圧縮 | optional_external_compression | block_compressed |
| 開く方法 | SAM仕様に対応するツールまたはテキストエディターで開きます。`@HD`、`@SQ`、`@RG`、`@PG`等のヘッダー、各行の11必須列、FLAGのビット、参照名と1-based表示位置、CIGAR、MAPQ、SEQ/QUAL、任意タグを確認してください。単なる表計算ソフトで列を並べ替えたり、タブを空白に置換したりしないでください。 | SAM/BAM対応ツールで開きます。ヘッダーの`@SQ`参照名・長さ・M5等、ソート順、リード件数と未マッピング件数、FLAG/CIGAR、品質や任意タグを確認します。領域照会にはファイルのソート状態に合うBAI/CSI等の索引を用意し、BAM本体と同じ版のまま管理してください。 |
| 書き出し・変換 | SAMからBAMへ変換する場合は、ヘッダー、FLAG、CIGAR、配列品質、タグと並び順が保持されるか確認します。座標順BAMに索引を作るには、対象ツールの要件に沿った座標ソートが必要です。FASTQからSAMを作るには参照配列とアラインメント処理が必要で、単純な形式変換ではありません。 | BAMからSAMへ変換すると読めるテキストになりますが、容量が大きくなることがあります。SAMからBAMへ戻す場合はヘッダー、フィールド、タグと並び順を検査します。CRAMへ変換する場合は参照配列への依存や品質保持設定を確認し、復号に必要な参照を管理してください。 |
用途別の選び方
作りたいものや使う場面から選べます。
ヘッダーに参照配列名・長さ・プログラム等を記録する
塩基配列リード・フラグメントと参照配列へのアラインメント情報をテキストで交換する・ヘッダーや任意タグを目視点検しながら解析結果を引き渡す
SAM向きFLAG・CIGAR・MAPQ・配列・品質・タグを行単位で確認する
塩基配列リード・フラグメントと参照配列へのアラインメント情報をテキストで交換する・ヘッダーや任意タグを目視点検しながら解析結果を引き渡す
SAM向きSAMに対応するヘッダー・レコード・タグを圧縮して保持する
大規模なシーケンスリードと参照アラインメントをバイナリで保管・交換する・座標順データを索引化して領域単位で解析する
BAM向きBGZFとBAI/CSI等の索引を使う対応ツールで読み取る
大規模なシーケンスリードと参照アラインメントをバイナリで保管・交換する・座標順データを索引化して領域単位で解析する
BAM向き確認ポイント 1
SAMはテキストツールで確認できます。 BAMは専用ツールで復号して読みます。
使い分け確認ポイント 2
SAMのFLAG・CIGAR・MAPQや任意タグは意味を持つフィールドです。単なる表として編集すると参照辞書やレコードとの整合を壊すことがあります。
使い分け選ぶ理由を詳しく
- BAMのBGZFは一般的なgzipと同一の使い方ではありません。対応する索引と座標順のファイルを使って領域取得を行います。
よくある質問
BAMにするとマッピング精度が上がりますか?
いいえ。保存表現の変換は再アラインメントではありません。レコード数・参照辞書・タグ・品質値を照合し、変換時のフィルターにも注意します。