NGSデータ解析まとめ

サカナ研究者の手探りNGS解析(おもに進化生物学)

IGV (Integrative Genomic Viewer)を使ってみる

次に、IGVで実際にリファレンスゲノムにreadsがマップされた結果を見てみます。

まず、IGVを開きます。デスクトップ上のIGVのエイリアスをダブルクリックします。このとき、IGVでは"Loading genome"という表示が一瞬出ますが、このときリファレンスゲノムとしてhg19を読み込んでいるようです。

IGVが起動したら、自分のサンプルを読み込みます。

(1) BAM fileを読み込む

"File"メニューから"Load from File..."を選択し、開きたいBAM file(indexあり)を選択します。
Mappingされた状態の見方ですが、まず画面左上の2番目の選択する場所(図1)で、"All"から"chr1"などに選択を変更します。

f:id:hashiyuki:20151207155057j:plain
図1. IGVの染色体番号を選択する部分

次に、IGV画面右上のZoomを選択する部分(図2)で、倍率を適当に上げていくと(+側に動かす)、BAMファイルに記録されている個々のreadの位置が表示されます。

f:id:hashiyuki:20151207155110j:plain
図2. IGVの右上(Zoom)

ただし、最初は見ている染色体上の位置が、何もないところ(セントロメア上)になっているので、赤で示されているカーソルを適当な位置に動かします(図3)。

f:id:hashiyuki:20151207160016j:plain
図3. 染色体の位置とカーソル(赤い四角)

(2) VCF file(SNP等のアノテーション)を読み込む

"File"メニューから"Load from File..."を選択し、開きたいVCF fileを選択します。VCFファイルは圧縮された状態(.gz)をそのまま開けます(解凍する必要なし)。

うまく開けると図4のような状態になります。

f:id:hashiyuki:20151207160533j:plain
図4. IGV window (BAM fileとVCF fileを読み込んだ状態)

"Sample"の行に示されているのがreferenceのgenotypeの状態で、水色はreferenceと異なるalleleのhomozygote, 青はheterozygoteになっています。色の部分にカーソルを合わせると、各SNPの情報を見ることができます(おそらくVCF fileに記載されているもの)。

IGVの具体的な使い方については次回以降のエントリで説明します。

IGV (Integrative Genomic Viewer)のインストール(Macの場合)

Broad Instituteが提供しているIGV (Integrative Genomic Viewer)のインストールについての覚え書きです。

まず最初に、以下のIGVのPageを開きます。

Home | Integrative Genomics Viewer

"Download"のところをクリックします。最初は、ユーザ登録を求められるので、登録のページに移動してメールアドレスを入力します。メールアドレスを送ると、ダウンロードのページに移動できます。

IGVのインストール方法は3つあります。
(1) Mac applicationとしてIGVをインストールする
(2) "Use the Java Web Start buttons"を使用する
(3) バイナリをダウンロードして、コマンドラインからIGVを立ち上げる

このうち(1)ですが、このAppを使用するためには、MacJava 7がインストールされている必要があります。Java 6 (JRE1.6)を使用している場合は、(2)の方法でインストールする必要があります。自分のMacJavaのversionを確認するためには、ターミナルを起動して

java -verison

と入力します。

たとえば私のMac (OS10.8.5) <--ちょっと古い では、こうでした。Version 6です。

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

そこで、(2)の方法で行きます(もし最初からJava 7がインストールされている場合は、(1)でダウンロードしたアプリをダブルクリックするだけでIGVが開くと思います)。

まず、Dowanloadページから"Java Web Start"をインストールします。うまくいけば、ダウンロードされたファイル"igv_hm.jnlp"(注)をダブルクリックするとIGVのインストールが始まり、起動します。他のソフト(テキストエディタ等)で開いてしまう場合、「右クリック」-> 「このアプリケーションで開く」-> 「Java Web Start.app」とします。

うまく行かない場合、Java Runtime Environmentをupdateする必要があり、この場合はOSの指示に従って最新のJREをインストールします。

インストールが完了すると、IGVのエイリアスがデスクトップに生成されます。

(3) の方法については試していません(Linuxなどではこちらを使う?)


注:igv_hm.jnlpがダウンロードされる位置

/private/var/folders/nz/cgn91zkn2vg1lp8fbnvmbgvr0000gn/T/igv_hm.jnlp

BAM fileからunmapped readsを抽出する(samtoolsを使用する)

BAM file (.bam)から、reference sequencesにmapされなかったreadsを抽出する方法について。以下、ちょっとした覚え書き。

BAM fileはbwaなどでreference sequence(s)にNGS readsをマッピングした結果のoutput file であるSAM file (.sam)を圧縮したファイル。基本的には、samtools view コマンドで作成します。

samtools view -bS example.sam > example.bam

マッピング結果から多型サイトを抽出したり、contigをexportしたり、などの作業は、BAM fileをもとに行うことが多いです。また、BAM indexを作成して、samtools tviewやTabletなどでmapping結果を見る際にも使用します。

samtools sort example.bam example.sort
samtools index example.sort.bam
samtools view example.sort.bam reference.fasta

以下は、BAM fileから"mappingされなかった" readsをFASTQ formatで抽出する方法について。

具体的には、novoalignの解説サイト

Extracting Unmapped Reads from a BAM File Produced by NovoAlign | Novocraft

を参考にしています。ていうか、以下はこのサイトの(ほぼ)日本語訳です。

          • -

以下ここから

Novoalignで作られたBAM fileからunmapped readsを抽出する (extracting)方法について

Introduction

Referenceにmapされなかった配列をBAM fileから抽出することがが必要となるケースはしばしば生じる。Samtoolsを使うことで、この作業は容易に行うことができる。
(中略)

この作業は以下の2つのステップで行われる。

1. Unmapped readsを、readnameでsortされたBAM fileから抽出する
2. BAM fileをFASTQ read fileに変換する

FASTQ fileの生成をskipして、(unmapped) readsを直接、BAM fileから再度アラインメントすることも可能である。BAMをFASTQに変換するために、Hydra packageの"bamToFastq"を使用する。
(中略)

Novoalignによるアラインメント

# Illumina paired-end: mean=500, sd=100
novoalign -d database.nix -f reads1.fastq -reads2.fastq -oSAM  -i 500 100 | samtools view -bS - alignments

Unmapped readsに対するフィルタリング

次に、以下3つのカテゴリーでreadsのフィルタリングを行う。(注:ここではIllumina NGSによるpaired end readsを想定している)

1. Paired endの一方はマッピングされているが、それ自体はマッピングされていない
2. それ自体はマッピングされているが、paired endのもう一方はマッピングされていない
3. Paired endの両方ともマッピングされていない

1-3の各カテゴリは、以下のsamtools filtering commandで抽出することができる。

samtools view -u  -f 4 -F264 alignments.bam  > tmps1.bam
samtools view -u -f 8 -F 260 alignments.bam  > tmps2.bam
samtools view -u -f 12 -F 256 alignments.bam > tmps3.bam

上のコマンドは、sortされたBAM fileでも、sortされていないBAM fileでも可能である。

次に、これら各カテゴリのBAM fileを結合 (merge)し、readsの名前順にsortする。ここでのsortはpaired endの相手を正しく得るために必要である。

samtools merge -u - tmps[123].bam | samtools sort -n - unmapped

ReadsをBAM fileから直接再アラインメントする

novoalign  -F BAMPE -f unmapped.bam -d

または

ReadsをFASTQ formatで抽出する

次に、unmapped read pairsをそれぞれのFASTQ filesに抽出する(注:paired end readsを想定)。ここではHydra-SV packageのbamToFastqプログラムを利用する。

bamToFastq -bam unmapped.bam -fq1 unmapped_reads1.fastq -fq2 unmapped_reads2.fastq

Single endの場合はもっと簡単に、以下の1行コマンドで抽出できる。

samtools view -uf 4 alignments.bam | bamToFastq -bam stdin -fq1 unmapped.fastq -fq2  empty.fastq

ここまで

          • -

わからないのは、3つのカテゴリをsamtoolsで抽出するところの

samtools view -u  -f 4 -F 264 alignments.bam  > tmps1.bam
samtools view -u -f 8 -F 260 alignments.bam  > tmps2.bam
samtools view -u -f 12 -F 256 alignments.bam > tmps3.bam

の部分ですが、samtoolsにおけるoption -fや-Fを理解するためには、SAM fileの形式を理解する必要がありそうです。SAM fileがどのように記述されているか、については、日本語で以下のサイトが参考になりました。

http://crusade1096.web.fc2.com/sam.html

SAM fileの2列目は、FLAGという形式で、readの状況を表わしているようです(2進数の10進法表示!?)。いずれにしても、samtoolsを使いこなすには、まずSAM fileの意味を理解する必要がありそうです・・・

WGSデータの参照ゲノム配列へのマッピング (5): VCF fileの生成、アノテーション

2015-08-06

Mapping結果の.bam fileから、SNPなどの多型を抽出して、VCF formatのfileを生成します。その後、Variant Effect Predictorを使ってSNPのアノテーションを行います。方法は以前紹介したこのエントリ(VCF fileの生成)や、このエントリ(Variant Effect Predictorの使い方その1)このエントリ(Variant Effect Predictorの使い方その2)とほとんど同じです。

(1) 多型情報の抽出(VCF fileの生成)

samtools (bcftools)を使って以下のコマンドを実行します。

# mpileup // やや時間がかかる(30分-1時間)
samtools mpileup -g -f Homo_sapiens.GRCh38.dna_rm.chromosome.6.fa ERR251633.chr6.sort.bam > ERR251633.chr6.bcf
# bcftools view
bcftools view -bvcg ERR251633.chr6.bcf > ERR251633.chr6.var.bcf
# bcftools vcfutils.pl
bcftools view ERR251633.chr6.var.bcf | vcfutils.pl varFilter -> ERR251633.chr6.var.vcf

(2) Variant Effect PredictorによるSNPsアノテーション

Variant Effect Predictorのページに移動し、"ERR251633.chr6.var.vcf"を"Or upload file:"のところでアップロードして、解析を実行します。解析結果の見方はこちらを参照して下さい。

WGSデータの参照ゲノム配列へのマッピング (4): BWAによるマッピング

2015-08-06

ヒトゲノム参照配列に対して、NGSのリード(ERR251633)をbwaを使ってマッピングします。この辺りの解析は、以前のエントリと大体同じです。

ただし、今回はmappingの前にNGSのraw dataに前処理をします。MappingするFASTQ fileに対して、qualityの低いリードを除き、長さの短い(<50bp)リードも除去します。前処理を行うことで、bwaの解析にかかる時間の短縮と、精度の向上が期待できます(150805 --> 本当に? どれくらい?)。具体的な方法は、井上さんによる以下のサイトを参考にしています。

参考URL: Trinity - 井上 潤

必要な解析ソフト(SolexaQA, DynamicTrim, LengthSort)
SolexaQA

(1) Index fileの作成

まずリファレンス配列のindexを作成します。ここでは時間の都合上、ヒトゲノム参照配列の6番染色体を使用します。データの入手はこちらを参照。

# bwa index実行 // 3分くらいかかる
bwa index -a bwtsw Homo_sapiens.GRCh38.dna_rm.chromosome.6.fa

(2) NGS reads (.fastq) ファイルの前処理

.sra fileからFASTQ fileを抽出

以下のコマンドを実行します。ここではpaired endの右側・左側のデータをそれぞれ別のfileに分けます。

fastq-dump --split-files ERR251633.sra

DynamicTrimによるlow quality readsの除去

以下のようにコマンドを実行します。

DynamicTrim.pl ERR251633_1.fastq -h 20 &
DynamicTrim.pl ERR251633_2.fastq -h 20 &

LengthSortによる短すぎるreadsの除去

以下のようにコマンドを実行します。ここでは50bpより短いreadsを除きます。

LengthSort.pl ERR251633_1.fastq.trimmed ERR251633_2.fastq.trimmed -length 50

ここで生成される"ERR251633_1.fastq.trimmed.paired1"と"ERR251633_1.fastq.trimmed.paired2"が、以下のbwaでのmappingに使用するFASTQ fileになります。

(3) BWAによるmappingの実行

ここではbwa memを使用します。以下のコマンドを実行します。

# bwa mem実行 // 約21分 (MacPro 2 x 3.06GHz 6 core Intel Xeon, 32GB RAM)
bwa mem -M -t 12 Homo_sapiens.GRCh38.dna_rm.chromosome.6.fa ../ERR251633_1.fastq.trimmed.paired1 ../ERR251633_1.fastq.trimmed.paired2 > ERR251633.chr6.sam

(4) samtoolsによるSAM->BAM変換、sorting, indexing

以下のコマンドを順次実行します。

samtools view -bS ERR251633.chr6.sam > ERR251633.chr6.bam    # .sam -> .bam変換
samtools sort ERR251633.chr6.bam ERR251633.chr6.sort    # sorting
samtools index ERR251633.chr6.sort.bam

.bam fileはsamtools tviewコマンドや、Tabletなどのviewerを使って見ることができます。