/// <summary> /// Pairwise alignment of two sequences using an affine gap penalty. The various algorithms in derived classes (NeedlemanWunsch, /// SmithWaterman, and PairwiseOverlap) all use this general engine for alignment with an affine gap penalty. /// </summary> /// <param name="localSimilarityMatrix">Scoring matrix.</param> /// <param name="gapOpenPenalty">Gap open penalty (by convention, use a negative number for this.).</param> /// <param name="gapExtensionPenalty">Gap extension penalty (by convention, use a negative number for this.).</param> /// <param name="inputA">First input sequence.</param> /// <param name="inputB">Second input sequence.</param> /// <returns>A list of sequence alignments.</returns> public IList <IPairwiseSequenceAlignment> Align( SimilarityMatrix localSimilarityMatrix, int gapOpenPenalty, int gapExtensionPenalty, ISequence inputA, ISequence inputB) { // Initialize and perform validations for alignment // In addition, initialize gap extension penalty. SimpleAlignPrimer(localSimilarityMatrix, gapOpenPenalty, inputA, inputB); GapExtensionCost = gapExtensionPenalty; DynamicProgrammingPairwiseAlignerJob alignerJob = this.CreateAffineAlignmentJob(inputA, inputB); IList <IPairwiseSequenceAlignment> result = alignerJob.Align(); foreach (IPairwiseSequenceAlignment alignment in result) { foreach (PairwiseAlignedSequence sequence in alignment.AlignedSequences) { AddSimpleConsensusToResult(sequence); } } return(result); }
/// <summary> /// Pairwise alignment of two sequences using a linear gap penalty. The various algorithms in derived classes (NeedlemanWunsch, /// SmithWaterman, and PairwiseOverlap) all use this general engine for alignment with a linear gap penalty. /// </summary> /// <param name="localSimilarityMatrix">Scoring matrix.</param> /// <param name="gapPenalty">Gap penalty (by convention, use a negative number for this.).</param> /// <param name="inputA">First input sequence.</param> /// <param name="inputB">Second input sequence.</param> /// <returns>A list of sequence alignments.</returns> public IList <IPairwiseSequenceAlignment> AlignSimple(SimilarityMatrix localSimilarityMatrix, int gapPenalty, ISequence inputA, ISequence inputB) { // Initialize and perform validations for simple alignment SimpleAlignPrimer(localSimilarityMatrix, gapPenalty, inputA, inputB); DynamicProgrammingPairwiseAlignerJob alignerJob = this.CreateSimpleAlignmentJob(inputA, inputB); IList <IPairwiseSequenceAlignment> result = alignerJob.Align(); foreach (IPairwiseSequenceAlignment alignment in result) { foreach (PairwiseAlignedSequence sequence in alignment.AlignedSequences) { AddSimpleConsensusToResult(sequence); } } return(result); }