メイトペアリードのマッピングと距離のグラフ化

メイトペアライブラリーのシーケンスを参照配列にマッピングしてインサート長の分布を調べたい。

問題点

このとき、リードの中にアダプターが含まれていて、単純にマッピングすると アダプターを超えて3'側の領域の方がアラインメントスコアが高いprimaryなマッピングとなり、 FRなペアであるように解析されることがあり問題となる。

これを回避するには、あらかじめ、アダプター以降の配列を除去してからマッピングすれば良い。

前提

基本方針

cutadaptでアダプターを除去する

bwa memを使うこととする。

cutadaptの入手

$ cd
$ wget http://cutadapt.googlecode.com/files/cutadapt-1.2.1.tar.gz
$ tar zxvf cutadapt-1.2.1.tar.gz 

read数を揃える

複数のライブラリーを比較する場合、リード数が揃っていないと、ライブラリーの質と、 シーケンシング条件が混ざって分かりにくくなるので、リード数を一定に揃えてから 解析する。

$ cd run_data_dir
$ pigz -dc s_1_1_sequence.qf.fastq.gz | head -80000000 | pigz -b 2048 > s_1_1.20M.fastq.gz &
$ pigz -dc s_1_2_sequence.qf.fastq.gz | head -80000000 | pigz -b 2048 > s_1_2.20M.fastq.gz

read1とread2の刈り込みは一方をバックグラウンドで同時並列におこなうことが出来る。

CPUとdisk IOの能力のバランスでgzipした方が良いかどうかは異なる。ここでは、 CPUの余裕の方が多い状況を仮定して、入出力はpigzによってgzip形式に圧縮する例を示しているが、 IOに余裕がある場合は、圧縮しない方が速い。

アダプターの除去

cutadaptのオプションについては README fileに説明されている。

ここでは、-a オプションを用いて検出されたアダプター配列の3'側をとりのぞく。

$ ~/cutadapt-1.2.1/bin/cutadapt -a CTGTCTCTTATACACATCT -a AGATGTGTATAAGAGACAG -a GATCGGAAGAGCACACGTCTGAACTCCAGTCAC s_1_1.20M.fastq.gz | pigz -b 2048 > s_1_1.20M.trim.fastq.gz &
$ ~/cutadapt-1.2.1/bin/cutadapt -a CTGTCTCTTATACACATCT -a AGATGTGTATAAGAGACAG -a GATCGGAAGAGCACACGTCTGAACTCCAGTCAC s_1_2.20M.fastq.gz | pigz -b 2048 > s_1_2.20M.trim.fastq.gz 

実際のマッピング

$ bwa mem -t 8 ~/chara0.clean.contigs.fasta s_1_1.20M.trim.fastq.gz  s_1_2.20M.trim.fastq.gz | samtools view -S -b - > mp1.20M.trim.bam

bwaはSAMを標準出力に出力するのでそのままパイプでsamtools viewに渡してbam fileにする。

マッピング後の処理

cutadaptによって有効なシーケンスの長さが0となったレコードは後の処理でエラーを生じるので除く。 ついでにどうせmappingできない10 bp以下のも除く。
$ samtools view -H  mp1.20M.trim.bam > samhead
$ samtools view mp1.20M.trim.bam | ruby -e 'ARGF.each_line{|line| s=line.split("\t")[9]; puts line if s!=nil && s.size>10}'|cat samhead - | samtools view -bS - > mp1.20Mlong.bam
$ java -jar ~/lcl/lib/picard-tools-1.92/SortSam.jar I=mp1.20Mlong.bam O=mp1.20M.trimaligned.bam SORT_ORDER=coordinate
$ java -jar ~/lcl/lib/picard-tools-1.92/CollectInsertSizeMetrics.jar I=mp1.20M.trimaligned.bam O=mp1.5M.trim.metrics H=mp1.20M.trim.pdf HISTOGRAM_WIDTH=15000

これによって次のようなヒストグラムが得られる。
plotによって表示される画像

グラフのプロット

上のヒストグラムは、1つのライブラリーのインサート長を表現するには十分であるが、 複数のライブラリーのインサート長を比較するには、塗りつぶされていることが災いして 分かりにくいものとなる。

そこで、インサート長と頻度の標からRを用いてプロットすることとする。

次の様にしてインサート長と頻度の対応表取り出すことが出来る。

% sed  -n -e  '/^insert_size/,$p' > mp1.20M.insertsizefreq

この後Rのコンソールから読み取って、自由にグラフを重ねることができる。

% R
...
> mp1 <-read.table("mp1.20M.insertsizefreq", head=T)
> plot(mp1, type="l")

これによって次のようなfrequency polygonが得られる。
plotによって表示される画像

図の基本構造に満足したら、PNGやPDF形式のファイルに書き出す。例えばPNGに書き出すには

> png("mp1.20M.insertsize.png")
> plot(mp1, type="l")
> dev.off()

PDFに書き出すには

> pdf("mp1.20M.insertsize.pdf")
> plot(mp1, type="l")
> dev.off()

とする。

先の自動で作られたヒストグラムの図と異なり、frequency polygonは塗られていないので重ねあわせ比較が容易である。 col=2やlty=2というようなパラメータを追加することで異なる色、線種(破線,点線等)の設定が可能である。

mp1<- read.table("mp1.5M.trim.metrics.tab", head=T)
plot(mp1,type="n", col=3)