たこぜりー研究室

大腸菌DNAは4.64Mbp。酵母は13Mbpで、ヒトは3Gbp

スポンサーサイト

#
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

卒業研究 #7

#418
using System.Collections.Generic;

コドン使用頻度 (codon usage) を求める作戦に移行。

アミノ酸 20 こに三つ組コドンが 4*4*4 = 64 こが割り当てられていて、つまり、アミノ酸 1 こにコドンが複数割り当てられていることがある。単純に考えれば、そのうちのどれを使ってもいいはずなのだが、使用頻度はけっこうばらついているようだ。
以上説明終わり。


教科書的にはコドン表が 16*4 の 2 次元表になっているわけだが、ここでは 64*1 の辞書にする。
問題はキーのコドンで、どう表すかですね。

とりあえずファイルをバイト列で読み込んでるし、コドンもバイト列で、の方向でいく。
つまり、Dictionary<byte[], int> 。

一応 IEqualityComparer<byte[]> も実装しておく。

int hash = 0;
foreach (byte value in obj)
{
  hash <<= 8;
  hash += value;
}

としておけば、{0x65, 0x84, 0x71} のハッシュ値は 0x00658471 となる。


結果 :

44.49 sec, 244.29 MB

出力 (一部) :

M ATG 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
I ATA 0.19 0.19 0.19 0.18 0.19 0.18 0.21 0.21 0.30 0.27 0.30 0.25
I ATT 0.33 0.32 0.32 0.32 0.32 0.32 0.31 0.31 0.44 0.36 0.37 0.39
I ATC 0.48 0.49 0.50 0.50 0.50 0.49 0.48 0.48 0.26 0.37 0.33 0.36

第 1 列がアミノ酸、第 2 列がコドン、それ以降の 12 列が codon usage 。
ちなみに M はメチオニン、I はイソロイシン。
スポンサーサイト

卒業研究 #6

#417
using System.Collections.Generic;
using System.Collections.ObjectModel;

前回 :

ファイルからバイト列を読み込み、そのラッパークラス (FastaDocument) を用意。 FastaDocument クラスは KeyedCollection<string, ISequence> を継承。配列名をキーとする。あとはインデックス操作で動的にプロパティ値を取得。


今回 :

CDS から 9,850 遺伝子のアラインメント (224MB) に変えて実行。ファイル名が遺伝子 ID 、各配列 (1 ファイルに 12 個) の名前が種名となっている。

結果 :

4.71 sec, 241.24 MB

とりあえず Dictionary<string, FastaDocument> に叩き込んでおく。

卒業研究 #5

#416
System.IO.File.ReadAllText メソッドでも駄目だったので、同クラスの ReadAllBytes メソッドを使ってみた。

結果 :

0.65 sec, 27.67 MB (´∀`)


でも System.Array.ConvertAll<byte, char> メソッドを使って、変換しちゃうと即倍増。
GC が回収してないのかもしれん。
仕方ないので、ファイルそのものをオブジェクト化してバイト列を格納、個々の配列はそこへの参照とインデックスを保持させるだけにする。

これでなんとかなるべ。次は codon usage か?

卒業研究 #4

#415
一行ずつ読み込んだのを System.Text.StringBuilder で連結しているのが拙いんかなと思ったので、一行分をそのまま格納するようにしてみた (つまり List<string>) 。

結果 :

0.94 sec, 70.93 MB

効果薄。
まあ System.IO.StreamReader.ReadLine も StringBuilder 使ってるし。
やっぱりバッファで読まなきゃだめか?

卒業研究 #3

#414
試しに読み込んでみたらとんでもないメモリ使用量。

25.2 MB の CDS 13,733 コ。



1.51 sec, 77.50MB  ( ゚д゚ )

適当に実装しすぎだ >>自分
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。