たこぜりー研究室

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

スポンサーサイト

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

卒業研究 #8

#419
using System.Collections.Generic;
using System.Linq;

コドン使用頻度の次は、塩基置換数だな。

n 個の配列があれば、n * (n - 1) / 2 種類の組み合わせがあるわけで…。
今回は 2 次元配列ではなく、List<?> でいく。
で見た目は 2 次元辞書。
もちろん O(1) の操作にはならないので詐欺実装だが。


でせっかくコドン使用頻度を調べたので、塩基置換もコドンごとで調べる。
こちらは前回の IEqualityComparer<byte[]> 実装を拡張して、long 値を出してそれをサブキーにする。

俺専用イメージ :

SubstitutionTable -(string, string)->> SubTable -(long)->> int


出力だが、配列の組み合わせごと、同義置換のみ、置換数の多いアミノ酸の順、置換数の多いコドンの順、で出そうと思うのだが。
C# 2.0 では厳しいって、というよりも面倒。ひたすら面倒。

LINQ を知ってるのでよけい面倒。
ということで、ついにでた Visual Studio 2008 Beta2 を使う。
わざわざ各地の匿名メソッドをラムダ式に直してみる新し物好きな馬鹿。

var list = from entry in table.GetSubTable(name1, name2).Substitutions
  select new
  {
    AminoAcid1 = CodonTable.GetAminoAcid(entry.Codon1),
    AminoAcid2 = CodonTable.GetAminoAcid(entry.Codon2),
    Codon1 = SequenceHelper.BytesToString(entry.Codon1),
    Codon2 = SequenceHelper.BytesToString(entry.Codon2),
    Usage1 = usages[name1].GetUsage(entry.Codon1),
    Usage2 = usages[name2].GetUsage(entry.Codon2),
    Number = entry.Value
  } into value
  where value.AminoAcid1 == value.AminoAcid2
  orderby value.Number descending
  group
value by value.AminoAcid1 into g
  orderby g.Sum(value => value.Number) descending
  from
value in g select value;

おぅ。into が必要なことに気づくまで数時間かかった。
匿名型も使ってみたぜ。

でこんな感じ。
File #=9,850
Length = 19,546,788

Triplet Codon   Codon Usage   # of Sub.   Amino Acid

dmel vs dsec

TTG  CTG  0.17  0.46  7858  L
CTA  CTG  0.09  0.46  6878  L
CTG  TTG  0.44  0.17  5140  L
CTT  CTC  0.09  0.16  4312  L



GCT  GCC  0.18  0.46  5639  A
GCC  GCT  0.45  0.18  4362  A
GCA  GCG  0.17  0.20  3693  A
GCA  GCC  0.17  0.46  3358  A

コメント


コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURL:  http://takojelly.blog2.fc2.com/tb.php/419-4651515f
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。