(ゲノム)リシーケンシングプロジェクトは、既知ゲノムを有する種の個体のシーケンシング解析であり、大量のraw シーケンシングリードを生成し、その後、これらはリファレンスゲノムにアライメントされる。シーケンシングコストが減少し、現在のシーケンシング技術のスループットが増加し続けているため、データストレージが問題になっている。
Rawシーケンシングリードは、一般的に圧縮されたFASTQファイル形式で保存される。マッピング後に得られたアライメント情報はBAMファイルに格納される(Li et al、2009)。このBAMファイルはソートされ、さらに処理されるが、最も重要なのは、FASTQファイルのオリジナル情報が全て含まれていることである。ソートされたBAMファイルは、ソートされていないBAMファイルと比較してより優れた圧縮を提供し、ゲノム領域に対するランダムルックアップを可能にする。この理由のために、ほとんど全てのポストアラインメント解析が可能である。例えばバリアントコール、リアライメント、ローカルアセンブリは、元のFASTQファイルではなく、ソートされたBAMファイルを使って実行される。
BAMファイルにはFASTQファイルのすべての情報が含まれているため、アライメント後にFASTQファイルを削除することには正当性がある。つまりFASTQファイルの内容はBAMファイルから再生成することができる。
しかし、FASTQファイルを削除する前に、データの損失がないこと、すなわちFASTQファイルのシーケンスがBAMファイルのシーケンスとまったく同じであることを確認する必要がある。 2つのファイルは様々な理由により異なる場合がある。アライメントパイプラインにエラーがあると、一貫性のないファイルが生成される可能性がある。アライメントパイプラインは十分にテストされたツールに基づいているが、通常の状態で動作することを意図しており、ハードウェアの故障やディスク領域がなくなった場合に動作が予測できない可能性がある。したがって、パイプライン全体の出力を独立して検証できることが重要になる。
(この論文では)FASTQとBAMファイル間のデータの整合性を検証するためのツールであるBamHashを紹介する。このプログラムは両方のfastqの配列とリード名から64ビットのfingerprint(用語)を計算する。この方法は入力の変化に対して非常に敏感であるため、1ヌクレオチドの変化でも異なるfingerprintを生じる。偶然同じfingerprintを生成する確率は天文学的に小さい。このツールの役割は、異なるフィンガープリントを持つFASTQファイルとBAMファイルにフラグを立てて、FASTQファイルの削除が安全でないとマークをつけることである。
BamHashは、ファイルのfingerprintを計算するmd5sumプログラムと同じ役割を果たす。フォーマットと順序が異なるため、FASTQとBAMファイルのmd5sumのfingerprint(Rivest、1992)を比較しても同等の結果は得られない。著者らの方法は高速かつメモリ効率的である。30xヒトゲノムシーケンシングのBAMファイルのfingerprintを30分で計算することができる。
BamHashに関するツイート。
インストール
ubuntu18.04でテストした。
git clone https://github.com/DecodeGenetics/BamHash.git
cd BamHash/
make
> ./bamhash_checksum_bam -h
$ ./bamhash_checksum_bam -h
bamhash_checksum_bam - Checksum of a bam file
=============================================
SYNOPSIS
bamhash_checksum_bam [OPTIONS] <in.bam> <in2.bam> ...
DESCRIPTION
Program for checksum of sequence reads.
-h, --help
Displays this help message.
--version
Display version information
Options:
-d, --debug
Debug mode. Prints full hex for each read to stdout
-R, --no-readnames
Do not use read names as part of checksum
-Q, --no-quality
Do not use read quality as part of checksum
-P, --no-paired
Bam files were not generated with paired-end reads
VERSION
bamhash_checksum_bam version: 1.1
Last update May 2015
—
> ./bamhash_checksum_fasta -h
$ ./bamhash_checksum_fasta -h
bamhash_checksum_fasta - Checksum of a set of fasta files
=========================================================
SYNOPSIS
bamhash_checksum_fasta [OPTIONS] <in1.fasta> [in2.fasta ... ]
DESCRIPTION
Program for checksum of sequence reads.
-h, --help
Displays this help message.
--version
Display version information
Options:
-d, --debug
Debug mode. Prints full hex for each read to stdout
-R, --no-readnames
Do not use read names as part of checksum
VERSION
bamhash_checksum_fasta version: 1.1
Last update May 2015
——
> ./bamhash_checksum_fastq -h
$ ./bamhash_checksum_fastq -h
bamhash_checksum_fastq - Checksum of a set of fastq files
=========================================================
SYNOPSIS
bamhash_checksum_fastq [OPTIONS] <in1.fastq.gz> [in2.fastq.gz ... ]
DESCRIPTION
Program for checksum of sequence reads.
-h, --help
Displays this help message.
--version
Display version information
Options:
-d, --debug
Debug mode. Prints full hex for each read to stdout
-R, --no-readnames
Do not use read names as part of checksum
-Q, --no-quality
Do not use read quality as part of checksum
-P, --no-paired
List of fastq files are not paired-end reads
VERSION
bamhash_checksum_fastq version: 1.1
Last update May 2015
kazu@ubuntu:~/BamHash$
——
ラン
ペアエンドのbamファイル(シングルエンドは"--no-paired"をつける)
bamhash_checksum_bam [OPTIONS] <in.bam> <in2.bam> ...
ペアエンドのfastq
bamhash_checksum_fastq [OPTIONS] <in1.fastq.gz> [in2.fastq.gz ... ]
ペアエンドのFASTAファイル(シングルエンドは"--no-paired"をつける)
bamhash_checksum_fastq [OPTIONS] <in1.fastq.gz> [in2.fastq.gz ... ]
ペアエンドのFASTAからbamを作成した時は、bamのchecksumを"--no-quality"フラグをつけて行う。
テスト
とあるbamファイルのハッシュ値(fastq部分だけのハッシュ値)を調べる。
$ bamhash_checksum_bam recal_reads.bam
c7d51310b2a044d3 508742
次にそのfastqのchecksumを調べる。
$ bamhash_checksum_fastq R1.fastq R2.fastq
1e5b86c9181ca09f 254371
異なると判定された。これは、sam=>bamにするときにelprep(リンク)で不要なリード情報を除いたbamを使ったためである。次は、先ほどと同じbamだがフィルタリングせず作ったbamのハッシュ値。
$ bamhash_checksum_bam R1R2_sorted.bam
1e5b86c9181ca09f 508742
合致している。
引用
BamHash: a checksum program for verifying the integrity of sequence data
Óskarsdóttir A, Másson G, Melsted P
Bioinformatics. 2016 Jan 1;32(1):140-1