public void SmithWatermanProteinSeqAffineGap() { IPairwiseSequenceAligner sw = new SmithWatermanAligner { SimilarityMatrix = new SimilarityMatrix(SimilarityMatrix.StandardSimilarityMatrix.Blosum62), GapOpenCost = -8, GapExtensionCost = -1, }; ISequence sequence1 = new Sequence(Alphabets.Protein, "HEAGAWGHEE"); ISequence sequence2 = new Sequence(Alphabets.Protein, "PAWHEAE"); IList <IPairwiseSequenceAlignment> result = sw.Align(sequence1, sequence2); AlignmentHelpers.LogResult(sw, result); IList <IPairwiseSequenceAlignment> expectedOutput = new List <IPairwiseSequenceAlignment>(); IPairwiseSequenceAlignment align = new PairwiseSequenceAlignment(); PairwiseAlignedSequence alignedSeq = new PairwiseAlignedSequence { FirstSequence = new Sequence(Alphabets.Protein, "AWGHE"), SecondSequence = new Sequence(Alphabets.Protein, "AW-HE"), Consensus = new Sequence(Alphabets.AmbiguousProtein, "AWGHE"), Score = 20, FirstOffset = 0, SecondOffset = 3 }; align.PairwiseAlignedSequences.Add(alignedSeq); expectedOutput.Add(align); Assert.IsTrue(AlignmentHelpers.CompareAlignment(result, expectedOutput)); }
public void SmithWatermanAlignerMultipleAlignments2() { Sequence sequence1 = new Sequence(Alphabets.DNA, "AAAAGGGGGGCCCC"); Sequence sequence2 = new Sequence(Alphabets.DNA, "AAAATTTTTTTCCCC"); SimilarityMatrix sm = new DiagonalSimilarityMatrix(5, -4); int gapPenalty = -10; SmithWatermanAligner sw = new SmithWatermanAligner(); sw.SimilarityMatrix = sm; sw.GapOpenCost = gapPenalty; IList <IPairwiseSequenceAlignment> result = sw.AlignSimple(sequence1, sequence2); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "{0}, Simple; Matrix {1}; GapOpenCost {2}", sw.Name, sw.SimilarityMatrix.Name, sw.GapOpenCost)); foreach (IPairwiseSequenceAlignment sequenceResult in result) { ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "score {0}", sequenceResult.PairwiseAlignedSequences[0].Score)); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "input 0 {0}", sequenceResult.FirstSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "input 1 {0}", sequenceResult.SecondSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "result 0 {0}", sequenceResult.PairwiseAlignedSequences[0].FirstSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "result 1 {0}", sequenceResult.PairwiseAlignedSequences[0].SecondSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "consesus {0}", sequenceResult.PairwiseAlignedSequences[0].Consensus.ToString())); } IList <IPairwiseSequenceAlignment> expectedOutput = new List <IPairwiseSequenceAlignment>(); IPairwiseSequenceAlignment align = new PairwiseSequenceAlignment(sequence1, sequence2); // First alignment PairwiseAlignedSequence alignedSeq = new PairwiseAlignedSequence(); alignedSeq.FirstSequence = new Sequence(Alphabets.DNA, "AAAA"); alignedSeq.SecondSequence = new Sequence(Alphabets.DNA, "AAAA"); alignedSeq.Consensus = new Sequence(Alphabets.DNA, "AAAA"); alignedSeq.Score = 20; alignedSeq.FirstOffset = 0; alignedSeq.SecondOffset = 0; align.PairwiseAlignedSequences.Add(alignedSeq); // Second alignment alignedSeq = new PairwiseAlignedSequence(); alignedSeq.FirstSequence = new Sequence(Alphabets.DNA, "CCCC"); alignedSeq.SecondSequence = new Sequence(Alphabets.DNA, "CCCC"); alignedSeq.Consensus = new Sequence(Alphabets.DNA, "CCCC"); alignedSeq.Score = 20; alignedSeq.FirstOffset = 1; alignedSeq.SecondOffset = 0; align.PairwiseAlignedSequences.Add(alignedSeq); expectedOutput.Add(align); Assert.IsTrue(CompareAlignment(result, expectedOutput)); }
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { SmithWatermanAligner SWA = new SmithWatermanAligner(); Result = SWA.AlignSimple(SimilarityMatrix, GapPenalty, Sequence1, Sequence2); if (Result.Count >= 1 && Result[0].PairwiseAlignedSequences.Count >= 1) { Result1 = Result[0].PairwiseAlignedSequences[0].FirstSequence; Result2 = Result[0].PairwiseAlignedSequences[0].SecondSequence; Consensus = Result[0].PairwiseAlignedSequences[0].Consensus; } return(ActivityExecutionStatus.Closed); }
public void SmithWatermanProteinSeqAffineGap() { string sequenceString1 = "HEAGAWGHEE"; string sequenceString2 = "PAWHEAE"; Sequence sequence1 = new Sequence(Alphabets.Protein, sequenceString1); Sequence sequence2 = new Sequence(Alphabets.Protein, sequenceString2); SimilarityMatrix sm = new SimilarityMatrix(SimilarityMatrix.StandardSimilarityMatrix.Blosum50); int gapPenalty = -8; SmithWatermanAligner sw = new SmithWatermanAligner(); sw.SimilarityMatrix = sm; sw.GapOpenCost = gapPenalty; sw.GapExtensionCost = -1; IList <IPairwiseSequenceAlignment> result = sw.Align(sequence1, sequence2); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "{0}, Affine; Matrix {1}; GapOpenCost {2}; GapExtenstionCost {3}", sw.Name, sw.SimilarityMatrix.Name, sw.GapOpenCost, sw.GapExtensionCost)); foreach (IPairwiseSequenceAlignment sequenceResult in result) { ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "score {0}", sequenceResult.PairwiseAlignedSequences[0].Score)); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "input 0 {0}", sequenceResult.FirstSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "input 1 {0}", sequenceResult.SecondSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "result 0 {0}", sequenceResult.PairwiseAlignedSequences[0].FirstSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "result 1 {0}", sequenceResult.PairwiseAlignedSequences[0].SecondSequence.ToString())); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "consesus {0}", sequenceResult.PairwiseAlignedSequences[0].Consensus.ToString())); } IList <IPairwiseSequenceAlignment> expectedOutput = new List <IPairwiseSequenceAlignment>(); IPairwiseSequenceAlignment align = new PairwiseSequenceAlignment(); PairwiseAlignedSequence alignedSeq = new PairwiseAlignedSequence(); alignedSeq.FirstSequence = new Sequence(Alphabets.Protein, "AWGHE"); alignedSeq.SecondSequence = new Sequence(Alphabets.Protein, "AW-HE"); alignedSeq.Consensus = new Sequence(Alphabets.Protein, "AWGHE"); alignedSeq.Score = 28; alignedSeq.FirstOffset = 0; alignedSeq.SecondOffset = 3; align.PairwiseAlignedSequences.Add(alignedSeq); expectedOutput.Add(align); Assert.IsTrue(CompareAlignment(result, expectedOutput)); }
public void SmithWatermanAlignerMultipleAlignments2() { IPairwiseSequenceAligner sw = new SmithWatermanAligner { SimilarityMatrix = new DiagonalSimilarityMatrix(5, -4), GapOpenCost = -5 }; ISequence sequence1 = new Sequence(Alphabets.DNA, "AAAAGGGGGGCCCC"); ISequence sequence2 = new Sequence(Alphabets.DNA, "AAAATTTTTTTCCCC"); IList <IPairwiseSequenceAlignment> result = sw.AlignSimple(sequence1, sequence2); AlignmentHelpers.LogResult(sw, result); IList <IPairwiseSequenceAlignment> expectedOutput = new List <IPairwiseSequenceAlignment>(); // First alignment IPairwiseSequenceAlignment align = new PairwiseSequenceAlignment(sequence1, sequence2); align.PairwiseAlignedSequences.Add(new PairwiseAlignedSequence { FirstSequence = new Sequence(Alphabets.DNA, "AAAA"), SecondSequence = new Sequence(Alphabets.DNA, "AAAA"), Consensus = new Sequence(Alphabets.DNA, "AAAA"), Score = 20, FirstOffset = 0, SecondOffset = 0 }); // Second alignment align.PairwiseAlignedSequences.Add(new PairwiseAlignedSequence { FirstSequence = new Sequence(Alphabets.DNA, "CCCC"), SecondSequence = new Sequence(Alphabets.DNA, "CCCC"), Consensus = new Sequence(Alphabets.DNA, "CCCC"), Score = 20, FirstOffset = 1, SecondOffset = 0 }); expectedOutput.Add(align); Assert.IsTrue(AlignmentHelpers.CompareAlignment(result, expectedOutput)); }
public void ValidateSequenceAlignersAll() { MUMmer mumobj = new MUMmer3(); Assert.AreEqual(mumobj.ToString(), SequenceAligners.MUMmer.ToString()); NeedlemanWunschAligner nwAlignerobj = new NeedlemanWunschAligner(); Assert.AreEqual(nwAlignerobj.ToString(), SequenceAligners.NeedlemanWunsch.ToString()); NUCmer nucobj = new NUCmer3(); Assert.AreEqual(nucobj.ToString(), SequenceAligners.NUCmer.ToString()); PairwiseOverlapAligner poAlignerobj = new PairwiseOverlapAligner(); Assert.AreEqual(poAlignerobj.ToString(), SequenceAligners.PairwiseOverlap.ToString()); SmithWatermanAligner swAlignerobj = new SmithWatermanAligner(); Assert.AreEqual(swAlignerobj.ToString(), SequenceAligners.SmithWaterman.ToString()); Assert.IsNotNull(SequenceAligners.All); Console.Write("Successfully created all the objects in Sequence Aligners"); ApplicationLog.Write("Successfully created all the objects in Sequence Aligners"); }
public void PerformSmithWatermanPerf() { // Get Sequence file path. string refPath = Utility._xmlUtil.GetTextValue(Constants.AlignmentAlgorithmNodeName, Constants.RefFilePathNode); string queryPath = Utility._xmlUtil.GetTextValue(Constants.AlignmentAlgorithmNodeName, Constants.QueryFilePathNode); string smFilePath = Utility._xmlUtil.GetTextValue(Constants.AlignmentAlgorithmNodeName, Constants.SMFilePathNode); // Create a List for input files. List <string> lstInputFiles = new List <string>(); lstInputFiles.Add(refPath); lstInputFiles.Add(queryPath); FastaParser parserObj = new FastaParser(); IList <ISequence> seqs1 = parserObj.Parse(refPath); parserObj = new FastaParser(); IList <ISequence> seqs2 = parserObj.Parse(queryPath); IAlphabet alphabet = Alphabets.DNA; ISequence originalSequence1 = seqs1[0]; ISequence originalSequence2 = seqs2[0]; ISequence aInput = new Sequence(alphabet, originalSequence1.ToString()); ISequence bInput = new Sequence(alphabet, originalSequence2.ToString()); SimilarityMatrix sm = new SimilarityMatrix(smFilePath); swObj = new SmithWatermanAligner(); swObj.GapOpenCost = -10; swObj.GapExtensionCost = -10; swObj.SimilarityMatrix = sm; _watchObj = new Stopwatch(); _watchObj.Reset(); _watchObj.Start(); long memoryStart = GC.GetTotalMemory(false); // Align sequences using smith water man algorithm. IList <IPairwiseSequenceAlignment> alignment = swObj.AlignSimple(aInput, bInput); _watchObj.Stop(); long memoryEnd = GC.GetTotalMemory(false); string memoryUsed = (memoryEnd - memoryStart).ToString(); // Display SmithWaterman perf test case execution details. DisplayTestCaseHeader(lstInputFiles, _watchObj, memoryUsed, "SmithWaterman"); Console.WriteLine(string.Format( "Smith Waterman AlignSimple() method, Alignment Score is : {0}", alignment[0].PairwiseAlignedSequences[0].Score.ToString())); // Dispose SmithWaterman object swObj = null; }
private void ValidateSmithWatermanAlignment(bool isTextFile, AlignmentParamType alignParam, AlignmentType alignType) { ISequence aInput, bInput; IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.AlphabetNameNode)); if (isTextFile) { // Read the xml file for getting both the files for aligning. string filePath1 = this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.FilePathNode1); string filePath2 = this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.FilePathNode2); // Parse the files and get the sequence. var parseObjectForFile1 = new FastAParser(); { parseObjectForFile1.Alphabet = alphabet; aInput = parseObjectForFile1.Parse(filePath1).First(); } var parseObjectForFile2 = new FastAParser(); { parseObjectForFile2.Alphabet = alphabet; bInput = parseObjectForFile2.Parse(filePath2).First(); } } else { // Read the xml file for getting both the files for aligning. string origSequence1 = this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.SequenceNode1); string origSequence2 = this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.SequenceNode2); aInput = new Sequence(alphabet, origSequence1); bInput = new Sequence(alphabet, origSequence2); } string blosumFilePath = this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.BlosumFilePathNode); var sm = new SimilarityMatrix(new StreamReader(blosumFilePath)); int gapOpenCost = int.Parse( this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.GapOpenCostNode), null); int gapExtensionCost = int.Parse( this.utilityObj.xmlUtil.GetTextValue(Constants.SmithWatermanAlignAlgorithmNodeName, Constants.GapExtensionCostNode), null); var smithWatermanObj = new SmithWatermanAligner(); if (AlignmentParamType.AllParam != alignParam) { smithWatermanObj.SimilarityMatrix = sm; smithWatermanObj.GapOpenCost = gapOpenCost; } IList <IPairwiseSequenceAlignment> result = null; switch (alignParam) { case AlignmentParamType.AlignList: switch (alignType) { case AlignmentType.Align: result = smithWatermanObj.Align(new List <ISequence> { aInput, bInput }); break; default: result = smithWatermanObj.AlignSimple(new List <ISequence> { aInput, bInput }); break; } break; case AlignmentParamType.AlignTwo: switch (alignType) { case AlignmentType.Align: result = smithWatermanObj.Align(aInput, bInput); break; default: result = smithWatermanObj.AlignSimple(aInput, bInput); break; } break; case AlignmentParamType.AllParam: switch (alignType) { case AlignmentType.Align: result = smithWatermanObj.Align(sm, gapOpenCost, gapExtensionCost, aInput, bInput); break; default: result = smithWatermanObj.AlignSimple(sm, gapOpenCost, aInput, bInput); break; } break; default: break; } // Read the xml file for getting both the files for aligning. string expectedSequence1, expectedSequence2, expectedScore; switch (alignType) { case AlignmentType.Align: expectedScore = this.utilityObj.xmlUtil.GetTextValue( Constants.SmithWatermanAlignAlgorithmNodeName, Constants.ExpectedGapExtensionScoreNode); expectedSequence1 = this.utilityObj.xmlUtil.GetTextValue( Constants.SmithWatermanAlignAlgorithmNodeName, Constants.ExpectedGapExtensionSequence1Node); expectedSequence2 = this.utilityObj.xmlUtil.GetTextValue( Constants.SmithWatermanAlignAlgorithmNodeName, Constants.ExpectedGapExtensionSequence2Node); break; default: expectedScore = this.utilityObj.xmlUtil.GetTextValue( Constants.SmithWatermanAlignAlgorithmNodeName, Constants.ExpectedScoreNode); expectedSequence1 = this.utilityObj.xmlUtil.GetTextValue( Constants.SmithWatermanAlignAlgorithmNodeName, Constants.ExpectedSequenceNode1); expectedSequence2 = this.utilityObj.xmlUtil.GetTextValue( Constants.SmithWatermanAlignAlgorithmNodeName, Constants.ExpectedSequenceNode2); break; } IList <IPairwiseSequenceAlignment> expectedOutput = new List <IPairwiseSequenceAlignment>(); IPairwiseSequenceAlignment align = new PairwiseSequenceAlignment(); var alignedSeq = new PairwiseAlignedSequence { FirstSequence = new Sequence(alphabet, expectedSequence1), SecondSequence = new Sequence(alphabet, expectedSequence2), Score = Convert.ToInt32(expectedScore, null), FirstOffset = Int32.MinValue, SecondOffset = Int32.MinValue, }; align.PairwiseAlignedSequences.Add(alignedSeq); expectedOutput.Add(align); ApplicationLog.WriteLine(string.Format(null, "SmithWatermanAligner BVT : Final Score '{0}'.", expectedScore)); ApplicationLog.WriteLine(string.Format(null, "SmithWatermanAligner BVT : Aligned First Sequence is '{0}'.", expectedSequence1)); ApplicationLog.WriteLine(string.Format(null, "SmithWatermanAligner BVT : Aligned Second Sequence is '{0}'.", expectedSequence2)); Assert.IsTrue(CompareAlignment(result, expectedOutput)); }
public SmithAlignerProvider(ISequenceProvider provider, SmithWatermanAligner aligner) { _provider = provider; _aligner = aligner; }