ab1ファイルを読み込みたい(3)
めっちゃ更新遅れました。1年前くらいじゃないのかな。 理由は、まあ察して下さい。
読み込んでもデータの読み方が分からなかったんですぅ。
でも一応、tdirっていうディレクトリについて書いておきますね。
tdirとは
他のディレクトリを格納するディレクトリです。従って、はじめにこのディレクトリを見てあげないことにはお話になりません。でも別にそんな難しくないっす。
構成
- name
"tdir"です。いわずもがな。
- number
別に要らない情報だと思うんですが、多分1になってます。
使うことはないでしょう。
- elementtype
これも要りません。多分、1023になっている。
- elementsize
28です。一つのディレクトリは28 byteのサイズを持っているからです。
- numelements
多分重要です。子ディレクトリの個数。
- datasize
28 * numelementsに等しいはずです。僕は使いませんでした。
- dataoffset
ここから各ディレクトリの情報が始まっています。"tdir"ディレクトリを読んだあとはファイルの先頭から(dataoffset) byte目に飛んで、各ディレクトリがどこにあるかを探していくことになります。
仕様書にもある通り、N番目のディレクトリは (dataoffset) + 28 * (N - 1) byte目から始まります。
で、読み込んだけど
結論から言えば、ApEなんかでhage.ab1を開いた時のあの波形は得られません。
DATAディレクトリに格納されている生データに対して、basecallという作業をする必要があるのでした。
生データは各チャンネルから得られた蛍光強度です。ここから塩基配列を決定する作業をbasecallと呼ぶようです。そのためのソフトウェアはbasecallerと呼ばれるようです。
現在、もっともよく使われているものはphredというbasecallerで、どっかの大学の研究者が開発したようです。ライセンスに関する記述を読んで、
「ライセンスに同意するからphredちょうだい!」
というメールを送ると、Cか何かで書かれたソースがドンッと送られてくるようです。
ほらよ。勝手にコンパイルして使え。
もっと優しくしてよ……って思いますけど、まあ仕方ない。
で、あの波形を得ることは諦めたので、モチベーションが石になって砕け散ったというわけでした。
実は、phred以降も新しいbasecallingの手法は開発されています。
PubMedで"basecall"って検索かけると"baseball"の結果が大量に出てくるんですが、めげずに"basecalling"とか"basecaller"ってクエリを打ち込めば出てきます。
隠れマルコフモデルとかベイジアン何とかみたいなヤツが大量にヒットして、 全体的に難しそうなので僕は「もういいや」ってなりました。
ab1ファイル自体は一応読めたので、もうこの件は忘れてゆるーくblog続けていこうと思ってます……。