アメリエフのブログ

Amelieff Staff Blog

NCBI SRA Toolkitの使い方

NCBI SRAで公開されているデータをテストデータとして使うには、sraファイルをダウンロードした後、fastqファイルに変換する必要があります(注:fastqで公開されているものもあります)。

sra→fastq変換には、NCBIが提供しているSRA Toolkitに含まれるfastq-dumpを用います。

・実行コマンド
$ fastq-dump -A SRR290592 --split-files SRR290592.lite.sra
注:ペアエンドデータの場合、--split-filesオプションを付けることによりfastqファイル2ファイルにわけて出力します。

・出力fastq(Reverse側ファイルの先頭4行)
@SRR290592.1 FCB062TABXX:4:1101:1435:1945 length=90
CGTTCACGCATCAGCTTCACGGAGCCAGAGG ・・・(略)
+SRR290592.1 FCB062TABXX:4:1101:1435:1945 length=90
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ・・・(略)


ここで問題があり、fastqの各リード1行目(ID行)の形式がIllumina CASAVA形式になっていないと動かないソフトウェアがたまにあります。
CASAVA形式のID表記は以下のようになります。

・CASAVAのID行形式(※CASAVA1.8の場合)
@ <instrument-name>:<run ID>:<flowcell ID>:<lane-number>:<tile-number>:<x-pos>: <y-pos> <read number>:<is filtered>:<control number>:<barcode sequence>


こんな時、fastq-dumpの--defline-seqオプションを使うことで、ID行をCASAVA形式風にしてfastqを出力することができます。

・fastq-dumpの--defline-seqで指定できる項目

$ac: accession【SRR290592】
$si: spot id【1】
$sn: spot name【FCB062TABXX:4:1101:1435:1945】
$sg: spot group【NAGNNNNN】
$sl: spot length in bases【180】
$ri: read number【2】
$rn: read name【(今回は空)】
$rl: read length in bases【90】  (【】内は例)


大体上記の項目でCASAVAとの対応が取れるのですが、該当する情報がないものもあります。
これらについては便宜的に適当な値を入れてしまいます。
CASAVAの<is filtered>は「フィルターをパスしていればN、していなければY」という項目なので'N'に、<control number>は「control bitsが1つも立っていない時は0、それ以外は偶数」という項目なので'18'にします。

また、--defline-qualオプションで各リード3行目の表示を変えることができます。
fastqの仕様では、3行目は「'+'だけ」でも「'+'とID」でもいいことになっていますので、'+'だけにすることによってファイルサイズを減らすことができます。
3行目にID行がないと動かないソフトウェアには私は今まで出会ったことがありませんが、もしかしたらあるかもしれませんので、一応ご注意ください。

--defline-seqオプションと--defline-qualオプションを付けてfastq-dumpを再実行します。

・実行コマンド
$ fastq-dump -A SRR290592 --split-files
--defline-seq '@$ac:$si:$sn $ri:N:18:$sg'
--defline-qual '+' SRR290592.lite.sra


・出力fastq(Reverse側ファイルの先頭4行)
@SRR290592:1:FCB062TABXX:4:1101:1435:1945 2:N:18:NAGNNNNN
CGTTCACGCATCAGCTTCACGGAGCCAGAGG ・・・(略)
+
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ・・・(略)


IDがCASAVA風、3行目が'+'だけになりました。
あくまでCASAVA「風」で、意味的に全く同じではありませんが、fastqのID行の形式チェックにひっかかって動かないソフトウェアがある場合などに試していただければと思います。