この関数は、オブジェクトの文字数(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 };
あなたがの多くを見つけることができますが、メガソフトウェアをチェック距離のペアの合計を計算するために、あなたはちょうどアルゴリズムを把握し、それを自分で実装してください。難しくなくても、3重のループで実装することができます。必要な場合は、C#実装のコードを表示できます。 –
こんにちは@RicardoOrtegaMagaña - ペアの合計のC#実装のコードを私に見せてもらえたら、本当に感謝します。ありがとう – NatalieStephenson