Strand-specific アラインメントの分割

Strand-specific RNA-seq により得られた paired-end read はリード 1 と リード 2 が相違異なる鎖にマッピングされるのが一般的である。ライブラリーの調整方法により、リード 1 と リード 2 が逆になることもある。

Read1                                     <------------5'

DNA    5'----------------------------------------------3' (antisense)
       3'----------------------------------------------5' (sense)

Read2  5'------------>

Strand-specific RNA-seq においてもシーケンシングの結果として、最終的に FASTQ ファイルが得られる。これらのリードをリファレンスゲノムにマッピングして始めて、strand の方向性がわかる。マッピング結果として SAM または BAM ファイルとして得られる。マップされたリードの方向性はファイル中の FLAG フィールドに記載されている。FLAG コードを利用して、strand 方向別に SAM / BAM を分割することができる。

samtools

SAM または BAM ファイルに対して編集を行うとき samtools を利用する。ここでは主に samtools view コマンドを利用する。このコマンドには多くのオプションが用意されているが、ここで利用するのは主に以下のいくつかである。

samtools view のオプション

-b 出力ファイルを BAM フォーマットとする。
-f 指定された条件を満たすアラインメントだけを出力する。
-F 指定された条件を満たすアラインメントだけを出力しない。

アラインメントの指定条件

SAM / BAM ファイル中で、アラインメントの特徴は FLAG フィールドで記載されている。これらの特徴は数値として定義されている。

16 進数 10 進数
0x1 1 複数のリードからなる(= paired end)
0x2 2 すべてのリードがアラインメントされている
0x4 4 リードがマップされていない
0x8 8 相方のリードがマップされていない
0x10 16 逆相補鎖にマップされている
0x20 32 相方のリードが相補鎖にマップされている
0x40 64 アラインメント中の最初のリードである
0x80 128 アラインメント中の最後のリードである
0x100 256 複数箇所にマップされている

例えば、リード 1 が antisense 鎖にマップされている場合を考える。まずリード 1 は「複数リードのうち最初のリード」であるから得点は 64 である。また、あるリードが antisense 鎖(逆相補鎖)にマップされているので得点は 16 である。ここで、リード 1 かつ antisense 鎖にマップされるときの得点は 64 + 16 = 80 である。

上で紹介した samtools view のオプションと FLAG の定義を利用して、BAM ファイルから antisense 鎖にマップされているリード 1 だけを取得する場合は以下のようにすれば良い。

samtools view -b -f 80 input.bam > output.bam

forward strand mapped reads

「リード 1 が antisense 鎖にマップされている」かつ「リード 2 が sense 鎖にマップされている」を満たすアラインメントだけを抽出する例を示す。

まず、リード 2 が antisense 鎖にマップされていないアラインメントを取得する。※この条件ではマップされていないリード 2 も含まれる。

samtools view -b -f 128 -F 16 input.bam > fwd1.bam

次に「リード 1 が antisense 鎖にマップされている」を満たすアラインメントだけを抽出し、fwd2.bam とする。※この条件ではリード 2 がマップされているかどうかを考慮していない。

samtools view -b -f 80 input.bam > fwd2.bam

fwd1.bam と fwd2.bam のインデックスを作成し、2 つのファイルをマージする。マージ後のファイルは fwd.bam である。

samtools index fwd1.bam
samtools index fwd2.bam
samtools merge -f fwd.bam fwd1.bam fwd2.bam

reverse strand mapped reads

「リード 1 が sense 鎖にマップされている」かつ「リード 2 が antisense 鎖にマップされている」を満たすアラインメントだけを抽出する例を示す。

まず、リード 2 が antisense 鎖にマップされているアラインメントを取得し rev1.bam に保存する。※この条件ではリード 1 がマップされているかどうかを考慮しない。

samtools view -b -f 144 input.bam > rev1.bam

次に、リード 1 が antisense 鎖にマップされていないアラインメントだけを抽出し、rev2.bam に保存する。※この条件ではマップされていないリード 1 も含まれる。

samtools view -b -f 64 -F 16 input.bam > rev2.bam

rev1.bam と rev2.bam のインデックスを作成し、2 つのファイルをマージする。マージ後のファイルは rev.bam である。こうしてマージされるファイルには、片方のリードしか含まれない場合も含まれる。

samtools index rev1.bam
samtools index rev2.bam
samtools merge -f rev.bam rev1.bam rev2.bam

paired-end リードの両方を考慮した分割方法

上で紹介した方法では、paired-end リードに対してどちらか片方のリードだけがマップされていても、データとして抽出することができる。

リード 1 とリード 2 の両方がマップされているケースだけに対して、fwd.bam と rev.bam を作成する場合は、上の作業を行う前に、BAM ファイルから両方のリードがマップされているアラインメントだけを取り出して新しい BAM ファイルを作成すればよい。

samtools view -b -f 2 input.bam > input2.bam

References

  1. Albert I. Tutorial: How To Separate Illumina Based Strand Specific Rna-Seq Alignments By Strand BioStars 2014. BioStars
  2. The SAM/BAM Format Specification Working Group. Sequence Alignment/Map Format Specification. 2014. PDF