こんにちは、h--ishiです。
今回は、業務の際にあるエラーに遭遇したときの備忘録をかきます。
GATK の一部のツールを使ってbamファイルから処理を実行するとき、以下のようなエラー(一部変更)に遭遇したことはないだろうか。
htsjdk.samtools.SAMException: 4 program groups weren't processed. Do their PP ids point to existing PGs? @PG ID:samtools PN:samtools PP:SampleName @PG ID:samtools.1 PN:samtools PP:samtools @PG ID:samtools PN:samtools PP:SampleName @PG ID:samtools.1 PN:samtools PP:samtools
bam ファイルのPGヘッダー中のPP というタグがどうやらおかしいらしい。
ここで、PPというタグについて説明します。
PGヘッダーはそのbamファイルを処理したプログラムに関する情報が記述されます。
PGヘッダーには、ID、PN、PP、CLなどのタグがあり、ここに情報が記述されます。
ID: 処理を実行したプログラムのID
PN: 処理を実行したプログラムの名前
PP: このヘッダーに記述されている処理の前のプログラムヘッダーのIDタグ
CL: 処理を実行した時のコマンドライン
公式説明ドキュメントhttps://samtools.github.io/hts-specs/SAMv1.pdf
要するに、PP (Previous rogram) タグは、 @PG行で記載している処理とその一個前の処理とをリンクさせるために使われているタグです。
他の行のPGヘッダーのIDタグと同じ文字列がPPにはいっていないと処理の順番がわからないと怒られているエラーです。
ここで、エラーがでていたPGヘッダーをみてみましょう。
@PG ID:samtools PN:samtools PP:SampleName @PG ID:samtools.1 PN:samtools PP:samtools @PG ID:samtools PN:samtools PP:SampleName @PG ID:samtools.1 PN:samtools PP:samtools
上記ヘッダー では、二つ以上の行に同じID(1行目と3行目のsamtools)がはいっています。
また、2行目と4行目のPPにはsamtools が入っています。
これでは処理の順番がわからないことがわかります。
2行目の前の処理が1行目なのか3行目なのかがわかりません。
PPタグを参照すると処理の流れがおかしいですよ。と怒られているわけですね。
対処法としては、以下です。
- PPタグを除去
- PPタグを矛盾の内容に書き換える(整合性だけ揃えれば、実際の正しい実行順番でなくてもよいと思われます。)
PPタグは処理結果に影響を及ぼすものではないので、削除してしまうのが手っ取り早いと思います。
それでは、またの機会に。