Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }