Esempio n. 1
0
        public static void RunTheCode(string seq1File, string seq2File, int matchWeight, int misMatchWeight, int indlWeight)
        {
            ScoringParameterDto scoringParameter = new ScoringParameterDto(matchWeight, misMatchWeight, indlWeight);
            var          seq1      = LoadProteinDatabase.GetProteins(seq1File);
            var          seq2      = LoadProteinDatabase.GetProteins(seq2File);
            SequencesDto sequences = new SequencesDto(seq1[0].Seq, seq2[0].Seq);

            EvaluateDto evaluation = GridEvaluateFunction.Evaluate(scoringParameter, sequences);
            ResultsDto  results    = Traceback.Trace(evaluation, sequences);

            WriteAlignment.Write(results, scoringParameter);
        }
        public static EvaluateDto Evaluate(ScoringParameterDto scoringParameters, SequencesDto sequences)
        {
            int[,] matrx        = new int[sequences.Sequence1.Length + 1, sequences.Sequence2.Length + 1];
            List <int>[,] direx = new List <int> [sequences.Sequence1.Length + 1, sequences.Sequence2.Length + 1];

            for (int j = 0; j < sequences.Sequence2.Length + 1; j++)
            {
                for (int i = 0; i < sequences.Sequence1.Length + 1; i++)
                {
                    direx[i, j] = new List <int>();
                    if (i == 0 || j == 0)
                    {
                        direx[i, j].Add(0);
                        direx[i, j].Add(0);
                        direx[i, j].Add(0);
                    }
                }
            }

            for (int j = 1; j < sequences.Sequence2.Length + 1; j++)
            {
                for (int i = 1; i < sequences.Sequence1.Length + 1; i++)
                {
                    if (sequences.Sequence1[i - 1] == sequences.Sequence2[j - 1])
                    {
                        direx[i, j].Add(matrx[i, j - 1] + scoringParameters.gap);
                        direx[i, j].Add(matrx[i - 1, j] + scoringParameters.gap);
                        direx[i, j].Add(matrx[i - 1, j - 1] + scoringParameters.match);
                        direx[i, j].Add(0);
                    }
                    else
                    {
                        direx[i, j].Add(matrx[i, j - 1] + scoringParameters.gap);
                        direx[i, j].Add(matrx[i - 1, j] + scoringParameters.gap);
                        direx[i, j].Add(matrx[i - 1, j - 1] + scoringParameters.mismatch);
                        direx[i, j].Add(0);
                    }

                    matrx[i, j] = direx[i, j].Max();
                }
            }

            EvaluateDto evaluation = new EvaluateDto(matrx, direx);

            return(evaluation);
        }
Esempio n. 3
0
        public static void Write(ResultsDto results, ScoringParameterDto scores)
        {
            List <Alignment> alignments = results.alignments;
            int simScore = results.SimilarityScore;
            int count    = 0;
            int mismatch = 0;
            int gap      = 0;
            int match    = 0;

            string sep = "";

            Console.WriteLine("Local Alignment Results \n");
            string baseAbsoluteUri = Directory.GetCurrentDirectory();
            string relativePath    = @"\Output\LocalAlignmentResults.txt";
            string path            = Path.GetFullPath(baseAbsoluteUri + relativePath);

            if (!File.Exists(path))
            {
                var outFile = File.Create(path);
                outFile.Close();
                TextWriter tw = new StreamWriter(path);

                tw.WriteLine("Alignment " + ++count);
                tw.WriteLine("Match: {0}", scores.match);
                tw.WriteLine("Mismatch: {0}", scores.mismatch);
                tw.WriteLine("Gap: {0}", scores.gap);
                tw.WriteLine("Similarity Score: " + simScore + "\n");
                foreach (var align in alignments)
                {
                    int maxlength = Math.Max(align.Sequence1.Length, align.Sequence2.Length);
                    for (int i = 0; i < align.Sequence1.Length; i++)
                    {
                        if (align.Sequence1[i] == align.Sequence2[i])
                        {
                            if (align.Sequence1[i].Equals('_'))
                            {
                                gap  = gap + 2;
                                sep += " ";
                            }
                            else
                            {
                                sep += "|";
                                match++;
                            }
                        }
                        else if (align.Sequence1[i].Equals('_') || align.Sequence2[i].Equals('_'))
                        {
                            sep += " ";
                            gap++;
                        }
                        else
                        {
                            sep += " ";
                            mismatch++;
                        }
                    }
                    for (int line = 0; line < align.Sequence1.Length; line += 100)
                    {
                        if (line + 100 < align.Sequence1.Length)
                        {
                            tw.WriteLine(align.Sequence1.Substring(line, 100));
                            tw.WriteLine(sep.Substring(line, 100));
                            tw.WriteLine(align.Sequence2.Substring(line, 100) + "\n");
                        }
                        else
                        {
                            tw.WriteLine(align.Sequence1.Substring(line));
                            tw.WriteLine(sep.Substring(line));
                            tw.WriteLine(align.Sequence2.Substring(line) + "\n");
                        }
                    }
                    tw.WriteLine("Identity: {0}/{1} ({2:F1}%)", match, maxlength, (match / (double)maxlength * 100));
                    tw.WriteLine("Gaps: {0}/{1} ({2:F1}%) \n\n", gap, maxlength, (gap / (double)maxlength * 100));

                    mismatch = 0;
                    gap      = 0;
                    match    = 0;
                    tw.Close();
                }
            }
            else if (File.Exists(path))
            {
                using (var tw = new StreamWriter(path, false))
                {
                    tw.WriteLine("Alignment " + ++count);
                    tw.WriteLine("Match: {0}", scores.match);
                    tw.WriteLine("Mismatch: {0}", scores.mismatch);
                    tw.WriteLine("Gap: {0}", scores.gap);
                    tw.WriteLine("Similarity Score: " + simScore + "\n");

                    foreach (var align in alignments)
                    {
                        int maxlength = Math.Max(align.Sequence1.Length, align.Sequence2.Length);
                        for (int i = 0; i < align.Sequence1.Length; i++)
                        {
                            if (align.Sequence1[i] == align.Sequence2[i])
                            {
                                if (align.Sequence1[i].Equals('_'))
                                {
                                    gap  = gap + 2;
                                    sep += " ";
                                }
                                else
                                {
                                    sep += "|";
                                    match++;
                                }
                            }
                            else if (align.Sequence1[i].Equals('_') || align.Sequence2[i].Equals('_'))
                            {
                                sep += " ";
                                gap++;
                            }
                            else
                            {
                                sep += " ";
                                mismatch++;
                            }
                        }
                        for (int line = 0; line < align.Sequence1.Length; line += 100)
                        {
                            if (line + 100 < align.Sequence1.Length)
                            {
                                tw.WriteLine(align.Sequence1.Substring(line, 100));
                                tw.WriteLine(sep.Substring(line, 100));
                                tw.WriteLine(align.Sequence2.Substring(line, 100) + "\n");
                            }
                            else
                            {
                                tw.WriteLine(align.Sequence1.Substring(line));
                                tw.WriteLine(sep.Substring(line));
                                tw.WriteLine(align.Sequence2.Substring(line) + "\n");
                            }
                        }
                        tw.WriteLine("Identity: {0}/{1} ({2:F1}%)", match, maxlength, (match / (double)maxlength * 100));
                        tw.WriteLine("Gaps: {0}/{1} ({2:F1}%) \n\n", gap, maxlength, (gap / (double)maxlength * 100));

                        mismatch = 0;
                        gap      = 0;
                        match    = 0;
                    }
                }
            }

            sep = "";
            foreach (var align in alignments)
            {
                int maxlength = Math.Max(align.Sequence1.Length, align.Sequence2.Length);
                Console.WriteLine("Alignment " + ++count);
                Console.WriteLine("Match: {0}", scores.match);
                Console.WriteLine("Mismatch: {0}", scores.mismatch);
                Console.WriteLine("Gap: {0}", scores.gap);
                Console.WriteLine("Similarity Score: " + simScore + "\n");

                for (int i = 0; i < align.Sequence1.Length; i++)
                {
                    if (align.Sequence1[i] == align.Sequence2[i])
                    {
                        if (align.Sequence1[i].Equals('_'))
                        {
                            gap  = gap + 2;
                            sep += " ";
                        }
                        else
                        {
                            sep += "|";
                            match++;
                        }
                    }
                    else if (align.Sequence1[i].Equals('_') || align.Sequence2[i].Equals('_'))
                    {
                        sep += " ";
                        gap++;
                    }
                    else
                    {
                        sep += " ";
                        mismatch++;
                    }
                }

                for (int line = 0; line < align.Sequence1.Length; line += 100)
                {
                    if (line + 100 < align.Sequence1.Length)
                    {
                        Console.WriteLine(align.Sequence1.Substring(line, 100));
                        Console.WriteLine(sep.Substring(line, 100));
                        Console.WriteLine(align.Sequence2.Substring(line, 100) + "\n");
                    }
                    else
                    {
                        Console.WriteLine(align.Sequence1.Substring(line));
                        Console.WriteLine(sep.Substring(line));
                        Console.WriteLine(align.Sequence2.Substring(line) + "\n");
                    }
                }

                Console.WriteLine("Identity: {0}/{1} ({2:F1}%)", match, maxlength, (match / (double)maxlength * 100));
                Console.WriteLine("Gaps: {0}/{1} ({2:F1}%) \n\n", gap, maxlength, (gap / (double)maxlength * 100));

                mismatch = 0;
                gap      = 0;
                match    = 0;
            }
            Console.WriteLine("\n*** Press Any Key to Continue!");
            Console.ReadKey();
        }