Beispiel #1
0
        /// <summary>
        /// Method which performs the alignment work.
        /// </summary>
        /// <param name="sequence1">First sequence</param>
        /// <param name="sequence2">Second sequence</param>
        /// <param name="useAffineGapModel">True to use affine gap model (separate open vs. extension cost)</param>
        /// <returns></returns>
        private IList <IPairwiseSequenceAlignment> DoAlign(ISequence sequence1, ISequence sequence2, bool useAffineGapModel)
        {
            usingAffineGapModel = useAffineGapModel;
            if (sequence1 == null)
            {
                throw new ArgumentNullException("sequence1");
            }
            if (sequence2 == null)
            {
                throw new ArgumentNullException("sequence2");
            }

            if (!Alphabets.CheckIsFromSameBase(sequence1.Alphabet, sequence2.Alphabet))
            {
                Trace.Report(Properties.Resource.InputAlphabetsMismatch);
                throw new ArgumentException(Properties.Resource.InputAlphabetsMismatch);
            }

            if (SimilarityMatrix == null)
            {
                Trace.Report(Properties.Resource.SimilarityMatrixCannotBeNull);
                throw new ArgumentException(Properties.Resource.SimilarityMatrixCannotBeNull);
            }

            if (!SimilarityMatrix.ValidateSequence(sequence1))
            {
                Trace.Report(Properties.Resource.FirstInputSequenceMismatchSimilarityMatrix);
                throw new ArgumentException(Properties.Resource.FirstInputSequenceMismatchSimilarityMatrix);
            }

            if (!SimilarityMatrix.ValidateSequence(sequence2))
            {
                Trace.Report(Properties.Resource.SecondInputSequenceMismatchSimilarityMatrix);
                throw new ArgumentException(Properties.Resource.SecondInputSequenceMismatchSimilarityMatrix);
            }


            if (GapOpenCost > GapExtensionCost)
            {
                Trace.Report(Properties.Resource.GapOpenGreaterThanGapExtension);
                throw new ArgumentException(Properties.Resource.GapOpenGreaterThanGapExtension);
            }

            _sequence1 = sequence1;
            _sequence2 = sequence2;
            _gap       = Alphabets.CheckIsFromSameBase(Alphabets.Protein, sequence1.Alphabet) ? Alphabets.Protein.Gap : Alphabets.DNA.Gap;

            ReferenceSequence = GetByteArrayFromSequence(_sequence1);
            QuerySequence     = GetByteArrayFromSequence(_sequence2);

            // Assign consensus resolver if it was not assigned already.
            IAlphabet alphabet = sequence1.Alphabet;

            if (ConsensusResolver == null)
            {
                ConsensusResolver = new SimpleConsensusResolver(alphabet.HasAmbiguity ? alphabet : Alphabets.AmbiguousAlphabetMap[sequence1.Alphabet]);
            }
            else
            {
                ConsensusResolver.SequenceAlphabet = alphabet.HasAmbiguity ? alphabet : Alphabets.AmbiguousAlphabetMap[sequence1.Alphabet];
            }

            return(new List <IPairwiseSequenceAlignment> {
                Process()
            });
        }
        /// <summary>
        /// Method which performs the alignment work.
        /// </summary>
        /// <param name="sequence1">First sequence</param>
        /// <param name="sequence2">Second sequence</param>
        /// <param name="useAffineGapModel">True to use affine gap model (separate open vs. extension cost)</param>
        /// <returns></returns>
        private IList<IPairwiseSequenceAlignment> DoAlign(ISequence sequence1, ISequence sequence2, bool useAffineGapModel)
        {
            usingAffineGapModel = useAffineGapModel;
            if (sequence1 == null)
                throw new ArgumentNullException("sequence1");
            if (sequence2 == null)
                throw new ArgumentNullException("sequence2");

            if (!Alphabets.CheckIsFromSameBase(sequence1.Alphabet, sequence2.Alphabet))
            {
                Trace.Report(Properties.Resource.InputAlphabetsMismatch);
                throw new ArgumentException(Properties.Resource.InputAlphabetsMismatch);
            }

            if (SimilarityMatrix == null)
            {
                Trace.Report(Properties.Resource.SimilarityMatrixCannotBeNull);
                throw new ArgumentException(Properties.Resource.SimilarityMatrixCannotBeNull);
            }

            if (!SimilarityMatrix.ValidateSequence(sequence1))
            {
                Trace.Report(Properties.Resource.FirstInputSequenceMismatchSimilarityMatrix);
                throw new ArgumentException(Properties.Resource.FirstInputSequenceMismatchSimilarityMatrix);
            }

            if (!SimilarityMatrix.ValidateSequence(sequence2))
            {
                Trace.Report(Properties.Resource.SecondInputSequenceMismatchSimilarityMatrix);
                throw new ArgumentException(Properties.Resource.SecondInputSequenceMismatchSimilarityMatrix);
            }           


            if (GapOpenCost > GapExtensionCost)
            {
                Trace.Report(Properties.Resource.GapOpenGreaterThanGapExtension);               
                throw new ArgumentException(Properties.Resource.GapOpenGreaterThanGapExtension);
            }

            _sequence1 = sequence1;
            _sequence2 = sequence2;
            _gap = Alphabets.CheckIsFromSameBase(Alphabets.Protein, sequence1.Alphabet) ? Alphabets.Protein.Gap : Alphabets.DNA.Gap;

            ReferenceSequence = GetByteArrayFromSequence(_sequence1);
            QuerySequence = GetByteArrayFromSequence(_sequence2);

            // Assign consensus resolver if it was not assigned already.
            IAlphabet alphabet = sequence1.Alphabet;
            if (ConsensusResolver == null)
                ConsensusResolver = new SimpleConsensusResolver(alphabet.HasAmbiguity ? alphabet : Alphabets.AmbiguousAlphabetMap[sequence1.Alphabet]);
            else
                ConsensusResolver.SequenceAlphabet = alphabet.HasAmbiguity ? alphabet : Alphabets.AmbiguousAlphabetMap[sequence1.Alphabet];

            return new List<IPairwiseSequenceAlignment> { Process() };
        }