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