2017-03-06 5 views
0

現在、私は複数配列アライメントにおける各アミノ酸位置の保存を計算しようとしています。私はBioConductorの "msa"を使って分析を行っています。これを介して、私はClustalWを使用して複数の配列アライメントを実行します。これは私がClustalWのは、それの計算でBLOSUM80マトリックスを使用しています知っているに似てアライメント...配列アラインメントの各位置の保存の計算

[1] FEYLKLLGKGTFGKVILVKEKATG...KKDPKQRLGGGSEDAKEIMQHRFF 
[2] FDYLKLLGKGTFGKVILVREKATG...KKDPKQRLGGGPSDAKEVMEHRFF 
[3] FDYLKLLGKGTFGKVILVREKASG...IKDPNKRLGGGPDDAKEIMRHSFF 
[4] FIFMEVLGSGAFSEVFLVKQRLTG...EKDPNERY-----TCEKALSHPWI 
[5] YRLEKTLGKGQTGLVKLGVHCVTC...EVDAARRL-----TLEHIQKHIWY 
[6] ITMKHKLGGGQYGEVYEGVWKKYS...QWNPSDRP-----SFAEIHQAF-- 
... 

を与えますが、私は、このコマンドは、各位置での保全を印刷することを可能にする引数を見つけることができません。私が見つけた 最も近いように少し見える保全マトリックス出力である...

v1 v2 v3 v4 v5 ... 
- 2 2 1 0 0 
A 0 1 0 1 0 
C 0 0 0 0 0 
D 0 2 0 1 0 
E 0 1 0 1 10 
F 4 0 2 0 0 
... 

は、ペアの合計を計算するためにBLOSUM80のペアごとのマトリックスと組み合わせて、この情報を利用する方法は、ありますのためのスコアアライメントの各位置合わせされた位置??

ご提供いただけるお手伝いやアドバイスをありがとうございます。

ベスト願い、

ナタリー

+0

あなたがの多くを見つけることができますが、メガソフトウェアをチェック距離のペアの合計を計算するために、あなたはちょうどアルゴリズムを把握し、それを自分で実装してください。難しくなくても、3重のループで実装することができます。必要な場合は、C#実装のコードを表示できます。 –

+0

こんにちは@RicardoOrtegaMagaña - ペアの合計のC#実装のコードを私に見せてもらえたら、本当に感謝します。ありがとう – NatalieStephenson

答えて

0

この関数は、オブジェクトの文字数(seqToAlign)のリストのリストを持って、およびBLOSUM62または単純なギャップペナルティ定数を使用してペアの合計を得点することができ、無視してくださいコードの余分な行、私はその関数にいくつかの問題を抱えていたので、私は物事が適切に動作するようにしなければならず、それを磨く時間がなかった。わかりやすく、私の悪い英語です。

Blosum62では
/// <summary> 
    /// Score function using a substitution matrix [matrixSub] for pairwise comparison or blank matrixSub for 
    /// penalty of S(Letter, dash)=-2, S(Different Letters)=-1, S(Same letters)=1 , S(dashes)=0 
    /// Optional parameters: Start, End to manage to score from sequence[Start] to sequence[end] 
    /// </summary> 
    /// <returns>int with sum of all scoring combinations of columns between sequences</returns> 
    public int sumOfPairs(String matrixSub = "Blosum62", int start = 0, int end = -1) 
    { 
     if (matrixSub == "Blosum62") 
     { 
      int backGM = gap(2); 

      //gap(gap(0), gap(1), -10); 

      int sum = 0; 
      int totsum = 0; 
      int k = seqToAlign.longest(); 
      for (int c = 0; c != k; c++) 
      { 
       sum = 0; 
       for (int seq = 0; seq != seqToAlign.count(); seq++) 
       { 
        for (int seqToCompare = seq; seqToCompare != seqToAlign.count(); seqToCompare++) 
        { 
         if (seqToCompare != seq) 
         { 
          if (c < seqToAlign.sequences.ElementAt(seq).Count && c < seqToAlign.sequences.ElementAt(seqToCompare).Count) 
          { 
           if (seqToAlign.sequences.ElementAt(seq).ElementAt(c) - 65 < 27 && seqToAlign.sequences.ElementAt(seq).ElementAt(c) - 65 >= 0 && seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c) - 65 < 27 && seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c) - 65 >= 0) 
           { 
            sum += Blosum62[seqToAlign.sequences.ElementAt(seq).ElementAt(c) - 65][seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c) - 65]; 
           } 
           else 
           { 
            if (seqToAlign.sequences.ElementAt(seq).ElementAt(c) == seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c)) 
            { 
             sum += gap("gap-gap"); 
            } 
            else 
            { 
             sum += gap("mismatch"); 
            } 
           } 
          } 
          else 
          { 
           sum += gap("mismatch"); 
          } 
         } 
        } 
       } 
       totsum += sum; 
       sum = 0; 
      } 
      //gap(gap(0), gap(1), backGM); 
      return totsum; 
     } 
     else 
     { 
      int st = 0, en = 0; 
      if (start < 0) { st = 0; } else { st = start; } 
      if (en < st || end > seqToAlign.count() || end == -1) { en = seqToAlign.count(); } else { en = end + 1; } 

      int sum = 0; 
      int totsum = 0; 
      int k = seqToAlign.longest(); 
      if (k != -1) 
      { 
       for (int c = 0; c != k; c++) 
       { 
        sum = 0; 
        for (int seq = st; seq != en; seq++) 
        { 
         for (int seqToCompare = seq; seqToCompare != en; seqToCompare++) 
         { 
          if (seqToCompare != seq) 
          { 
           if (c < seqToAlign.sequences.ElementAt(seq).Count && c < seqToAlign.sequences.ElementAt(seqToCompare).Count) 
           { 
            if (seqToAlign.sequences.ElementAt(seq).ElementAt(c) - 65 < 27 && seqToAlign.sequences.ElementAt(seq).ElementAt(c) - 65 >= 0 && seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c) - 65 < 27 && seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c) - 65 >= 0) 
            { 
             if (seqToAlign.sequences.ElementAt(seq).ElementAt(c) == seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c)) 
             { 
              sum += 1; 
             } 
             else 
             { 
              sum += -1; 
             } 
            } 
            else 
            { 
             if (seqToAlign.sequences.ElementAt(seq).ElementAt(c) == seqToAlign.sequences.ElementAt(seqToCompare).ElementAt(c)) 
             { 
              sum += 0; 
             } 
             else 
             { 
              sum += -2; 
             } 
            } 
           } 
           else 
           { 
            sum += -2; 
           } 
          } 
         } 
        } 
        totsum += sum; 
        sum = 0; 
       } 
      } 
      else 
      { 
       Console.Write("Empty sequence. Check your input file."); 
      } 
      return totsum; 
     } 
    } 

/// <summary> 
    /// Scoring matrix BLOSUM62 
    /// Matrix is ordered by the English alphabet to compare, on missing letter is assigned an arbitrary value 
    /// example Blosum62 structure: 
    ///  A B C D E F G .... 
    /// A 4 -2 0 -2 -1 -2 0 .... 
    /// B -2 4 -3 4 1 -3 -1 .... 
    /// C 0 -3 9 -3 -4 -2 -3 .... 
    /// D -2 4 -3 6 2 -3 -1 .... 
    /// . . . . . . . . .... 
    /// . . . . . . . . .... 
    /// . . . . . . . . .... 
    /// </summary> 
    private int[][] Blosum62; 

とギャップ機能:

public int gap(string val) 
    { 
     if (val == "gap-gap") { return gapgap; } 
     if (val == "gap opening") { return gapopening; } 
     if (val == "gap mismatch") { return gapmismatch; } 
     return 0; 
    } 

BLOSUM62マトリックス:

Blosum62 = new int[27][]; 
    Blosum62[0] = new int[27] { 4, -2, 0, -2, -1, -2, 0, -2, -1, -4, -1, -1, -1, -2, -4, -1, -1, -1, 1, 0, -4, 0, -3, -20, -2, -1, -4 }; 
    Blosum62[1] = new int[27] { -2, 4, -3, 4, 1, -3, -1, 0, -3, -4, 0, -4, -3, 3, -4, -2, 0, -1, 0, -1, -4, -3, -4, -20, -3, 1, -4 }; 
    Blosum62[2] = new int[27] { 0, -3, 9, -3, -4, -2, -3, -3, -1, -4, -3, -1, -1, -3, -4, -3, -3, -3, -1, -1, -4, -1, -2, -20, -2, -3, -4 }; 
    Blosum62[3] = new int[27] { -2, 4, -3, 6, 2, -3, -1, -1, -3, -4, -1, -4, -3, 1, -4, -1, 0, -2, 0, -1, -4, -3, -4, -20, -3, 1, -4 }; 
    Blosum62[4] = new int[27] { -1, 1, -4, 2, 5, -3, -2, 0, -3, -4, 1, -3, -2, 0, -4, -1, 2, 0, 0, -1, -4, -2, -3, -20, -2, 4, -4 }; 
    Blosum62[5] = new int[27] { -2, -3, -2, -3, -3, 6, -3, -1, 0, -4, -3, 0, 0, -3, -4, -4, -3, -3, -2, -2, -4, -1, 1, -20, 3, -3, -4 }; 
    Blosum62[6] = new int[27] { 0, -1, -3, -1, -2, -3, 6, -2, -4, -4, -2, -4, -3, 0, -4, -2, -2, -2, 0, -2, -4, -3, -2, -20, -3, -2, -4 }; 
    Blosum62[7] = new int[27] { -2, 0, -3, -1, 0, -1, -2, 8, -3, -4, -1, -3, -2, 1, -4, -2, 0, 0, -1, -2, -4, -3, -2, -20, 2, 0, -4 }; 
    Blosum62[8] = new int[27] { -1, -3, -1, -3, -3, 0, -4, -3, 4, -4, -3, 2, 1, -3, -4, -3, -3, -3, -2, -1, -4, 3, -3, -20, -1, -3, -4 }; 
    Blosum62[9] = new int[27] { -4, -4, -4, -4, -4, -4, -4, -4, -4, 1, -4, -4, -4, -4, 1, -4, -4, -4, -4, -4, 1, -4, -4, -20, -4, -4, 1 }; 
    Blosum62[10] = new int[27] { -1, 0, -3, -1, 1, -3, -2, -1, -3, -4, 5, -2, -1, 0, -4, -1, 1, 2, 0, -1, -4, -2, -3, -20, -2, 1, -4 }; 
    Blosum62[11] = new int[27] { -1, -4, -1, -4, -3, 0, -4, -3, 2, -4, -2, 4, 2, -3, -4, -3, -2, -2, -2, -1, -4, 1, -2, -20, -1, -3, -4 }; 
    Blosum62[12] = new int[27] { -1, -3, -1, -3, -2, 0, -3, -2, 1, -4, -1, 2, 5, -2, -4, -2, 0, -1, -1, -1, -4, 1, -1, -20, -1, -1, -4 }; 
    Blosum62[13] = new int[27] { -2, 3, -3, 1, 0, -3, 0, 1, -3, -4, 0, -3, -2, 6, -4, -2, 0, 0, 1, 0, -4, -3, -4, -20, -2, 0, -4 }; 
    Blosum62[14] = new int[27] { -4, -4, -4, -4, -4, -4, -4, -4, -4, 1, -4, -4, -4, -4, 1, -4, -4, -4, -4, -4, 1, -4, -4, -20, -4, -4, 1 }; 
    Blosum62[15] = new int[27] { -1, -2, -3, -1, -1, -4, -2, -2, -3, -4, -1, -3, -2, -2, -4, 7, -1, -2, -1, -1, -4, -2, -4, -20, -3, -1, -4 }; 
    Blosum62[16] = new int[27] { -1, 0, -3, 0, 2, -3, -2, 0, -3, -4, 1, -2, 0, 0, -4, -1, 5, 1, 0, -1, -4, -2, -2, -20, -1, 3, -4 }; 
    Blosum62[17] = new int[27] { -1, -1, -3, -2, 0, -3, -2, 0, -3, -4, 2, -2, -1, 0, -4, -2, 1, 5, -1, -1, -4, -3, -3, -20, -2, 0, -4 }; 
    Blosum62[18] = new int[27] { 1, 0, -1, 0, 0, -2, 0, -1, -2, -4, 0, -2, -1, 1, -4, -1, 0, -1, 4, 1, -4, -2, -3, -20, -2, 0, -4 }; 
    Blosum62[19] = new int[27] { 0, -1, -1, -1, -1, -2, -2, -2, -1, -4, -1, -1, -1, 0, -4, -1, -1, -1, 1, 5, -4, 0, -2, -20, -2, -1, -4 }; 
    Blosum62[20] = new int[27] { -4, -4, -4, -4, -4, -4, -4, -4, -4, 1, -4, -4, -4, -4, 1, -4, -4, -4, -4, -4, 1, -4, -4, -20, -4, -4, 1 }; 
    Blosum62[21] = new int[27] { 0, -3, -1, -3, -2, -1, -3, -3, 3, -4, -2, 1, 1, -3, -4, -2, -2, -3, -2, 0, -4, 4, -3, -20, -1, -2, -4 }; 
    Blosum62[22] = new int[27] { -3, -4, -2, -4, -3, 1, -2, -2, -3, -4, -3, -2, -1, -4, -4, -4, -2, -3, -3, -2, -4, -3, 11, -20, 2, -3, -4 }; 
    Blosum62[23] = new int[27] { -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20 }; 
    Blosum62[24] = new int[27] { -2, -3, -2, -3, -2, 3, -3, 2, -1, -4, -2, -1, -1, -2, -4, -3, -1, -2, -2, -2, -4, -1, 2, -20, 7, -2, -4 }; 
    Blosum62[25] = new int[27] { -1, 1, -3, 1, 4, -3, -2, 0, -3, -4, 1, -3, -1, 0, -4, -1, 3, 0, 0, -1, -4, -2, -3, -20, -2, 4, -4 }; 
    Blosum62[26] = new int[27] { -4, -4, -4, -4, -4, -4, -4, -4, -4, 1, -4, -4, -4, -4, 1, -4, -4, -4, -4, -4, 1, -4, -4, -20, -4, -4, 1 }; 
関連する問題