BAMヘッダーのサイズが大きいとCufflinksでエラーが出る

このリンク先のSEQanswersの掲示板は2011年下旬のものなのですが,Cufflinks v2.0.1, v2.0.2 でも同様の現象を確認したので,ここにまとめます.

エラー

Cufflinksを実行したら,以下のようなエラーが出ました.

You are using Cufflinks v2.0.2, which is the most recent release.
Warning: BAM header too large
File ./accepted_hits.bam doesn't appear to be a valid BAM file, trying SAM...
[16:47:02] Inspecting reads and determining fragment length distribution.
SAM error on line 175: CIGAR op has zero length
SAM error on line 177: CIGAR op has zero length
SAM error on line 196: CIGAR op has zero length
SAM error on line 218: CIGAR op has zero length
SAM error on line 220: CIGAR op has zero length
SAM error on line 267: CIGAR op has zero length
...

原因

Cufflinks のhits.cppにある以下の行によって,BAMのヘッダーが4MB以上の場合,BAMのパースができなくなるのだそうです.

static const unsigned MAX_HEADER_LEN = 4 * 1024 * 1024;

Cufflinks, BAM header problem solved... for the moment - SEQanswers

BAMのパースに失敗するとCufflinksは入力ファイルをSAMと判断して読もうとしますが,実際にはBAMなので,当然エラーが出て実行が停止します.


実際に自分のBAMのヘッダーのサイズを確認した所,11MBもありました.

samtools view -H hoge.bam > header.txt
ls -lsh header.txt

対策

  1. hits.cppの数字を書き換えて再コンパイル
  2. BAMをSAMに変換してCufflinksの入力ファイルとする

今回は面倒だったので,後者の方法をとることで解決しました.

samtools view -h hoge.bam > hoge.sam

教訓

ヒトやマウスを扱うことが多かったので,まさかBAMのヘッダーが4MBを越えているとは思いませんでした.
しかし,非モデル生物のドラフトゲノムではscafoldが1万から100万にもなるケースもあるので,今後このエラーにぶつかる方も増えると予想されます.