ツール置き場 INDEX

bpfreq(仮)

since: 2010/01/19; last modified:2010/01/22

これは何?

http://oshiete1.goo.ne.jp/qa3139266.htmlのお題に従って実装してみたツール。2007年後半に作成したまま放置してたソースを、少し手直しして公開する。

塩基配列の頻度解析で使うらしいのだが、生化学なんて全く分からない人間が実装したので、ツール名もソースコード中の諸々の名前も無茶苦茶だと思われる。

ANSI C89/ISO C90縛りで、且つ他人が使う前提でエラー処理を組み込んだりコメントをそれなりに書いたりしたので、他の実装と比べてステップ数が異常に多くなっている。

まあしかし、この手のツール作成にC言語Onlyというのは、あまり効率的ではないと思う。

ライセンス

zlib/libpng ライセンス。

もっともコメントが全部日本語なので、妥当なのかどうか不明。

ファイル

面倒なのでソースコードのみ公開する。Windows XP上で数種類のコンパイラでビルド && 実行可能なことを確認済み。文字コードと改行コードを変換すれば、多分Unixマシン上でも使えると思う。

公開しているソースコードは、予告無く勝手に変更されることがあるので注意。

裏話

2007年の半ばから後半は、C++を触ったり抽象データ型について調べたりしていた時期と重なる。bpfreqの実装は、勉強していた諸々の内容の実験を兼ねていた。覚えている限りではボトムアップ手法、データ構造を軸とした構成、抽象データ型の利用、といった内容をbpfreq実装時に詰め込んだ記憶がある。

基本的なアイデアとしては、入力データ長が不定であることや、1文字ずつシフトしつつ8文字処理するという要求に対応する為、キュー(リングバッファ)を採用した。また、ファイルストリームから1文字ずつ読み込む実装にしたが、内部でバッファリングしているだろうから効率面の問題は小さいだろうと判断した。

初期の実装では、元データから8文字長のテキストレコード形式(改行区切り)に変換するmakerecと、makerecで生成したレコードを処理して頻度解析を行うbpfreqに分かれていた。Unix環境では、0件のパターンを表示する必要がないならばbpfreqは不要で、例えば「makerec data.txt | sort | uniq -c | gawk '{print $2, $1}'」で十分だった。

その後、makerecとbpfreqを合体させてできたのが、今のbpfreqである。最大データ量がイマイチ分からなかったので、念の為パイプを使わない構成にしようと考えて合体させた。


ツール置き場 INDEX

Copyright © eel3 All rights reserved. 著作権は放棄していません。