macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

オリジナルfastqと比較してbamのリード情報が完全に同じかどうか調べる BamHash

 

 (ゲノム)リシーケンシングプロジェクトは、既知ゲノムを有する種の個体のシーケンシング解析であり、大量の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でテストした。

 Github

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