Ejemplo n.º 1
0
        /// <summary>
        /// Gets the Delta for list of query sequences.
        /// </summary>
        /// <param name="referenceSequence">The reference sequence.</param>
        /// <param name="originalQuerySequences">The query sequence.</param>
        /// <returns>Returns list of IEnumerable Delta Alignment.</returns>
        private IEnumerable <IEnumerable <DeltaAlignment> > GetDelta(IEnumerable <ISequence> referenceSequence, IEnumerable <ISequence> originalQuerySequences)
        {
            IEnumerable <ISequence> querySequences =
                Forward ? originalQuerySequences
                : (Reverse
                    ? ReverseComplementSequenceList(originalQuerySequences)
                    : AddReverseComplementsToSequenceList(originalQuerySequences));

            foreach (ISequence refSeq in referenceSequence)
            {
                NUCmer nucmer = new NUCmer(refSeq)
                {
                    FixedSeparation   = FixedSeparation,
                    BreakLength       = BreakLength,
                    LengthOfMUM       = MinMatch,
                    MaximumSeparation = MaxGap,
                    MinimumScore      = MinCluster,
                    SeparationFactor  = (float)DiagFactor
                };

                foreach (ISequence qs in querySequences)
                {
                    _queryCount++;
                    yield return(nucmer.GetDeltaAlignments(qs, !MaxMatch, qs.IsMarkedAsReverseComplement()));
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the Delta for list of query sequences.
        /// </summary>
        /// <param name="referenceSequence">The reference sequence.</param>
        /// <param name="querySequence">The query sequence.</param>
        /// <returns>Returns list of IEnumerable Delta Alignment.</returns>
        private IList<List<IEnumerable<DeltaAlignment>>> GetDelta(IEnumerable<ISequence> referenceSequence, IEnumerable<ISequence> querySequence)
        {
            IList<List<IEnumerable<DeltaAlignment>>> delta;
            if (this.MaxMatch)
            {
                delta = referenceSequence.AsParallel().Select(sequence =>
                {
                    NUCmer nucmer = new NUCmer();
                    nucmer.BreakLength = BreakLength;
                    nucmer.LengthOfMUM = MinMatch;
                    nucmer.MaximumSeparation = MaxGap;
                    nucmer.MinimumScore = MinCluster;
                    nucmer.SeparationFactor = (float)DiagFactor;
                    return nucmer.GetDeltaAlignments(new List<ISequence> { sequence }, GetSequence(querySequence), false);
                }).ToList();
            }
            else
            {
                delta = referenceSequence.AsParallel().Select(sequence =>
                {
                    NUCmer nucmer = new NUCmer();
                    nucmer.BreakLength = BreakLength;
                    nucmer.LengthOfMUM = MinMatch;
                    nucmer.MaximumSeparation = MaxGap;
                    nucmer.MinimumScore = MinCluster;
                    nucmer.SeparationFactor = (float)DiagFactor;
                    return nucmer.GetDeltaAlignments(new List<ISequence> { sequence }, GetSequence(querySequence));
                }).ToList();
            }

            return delta;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Aligns reads to reference genome using NUCmer.
        /// </summary>
        /// <param name="referenceSequence">Sequence of reference genome.</param>
        /// <param name="reads">List of sequence reads.</param>
        /// <returns>Delta alignments after read alignment.</returns>
        private IList <IEnumerable <DeltaAlignment> > ReadAlignment(IEnumerable <ISequence> referenceSequence, IEnumerable <ISequence> reads)
        {
            IList <List <IEnumerable <DeltaAlignment> > > delta;
            List <IEnumerable <DeltaAlignment> >          deltaAlignments = new List <IEnumerable <DeltaAlignment> >();

            delta = referenceSequence.AsParallel().Select(sequence =>
            {
                NUCmer nucmer = new NUCmer();

                // TODO: Update these hardcoded values with the onces used in AMOSS while validating functionality with real data.
                nucmer.FixedSeparation   = 0;
                nucmer.MinimumScore      = 1;
                nucmer.SeparationFactor  = 0;
                nucmer.MaximumSeparation = 0;
                nucmer.BreakLength       = BreakLength;
                nucmer.LengthOfMUM       = LengthOfMum;
                return(nucmer.GetDeltaAlignments(new List <ISequence> {
                    sequence
                }, reads, false));
            }).ToList();

            foreach (var alignment in delta)
            {
                foreach (var align in alignment)
                {
                    deltaAlignments.Add(align);
                }
            }
            return(deltaAlignments);
        }
Ejemplo n.º 4
0
        public IEnumerable <IEnumerable <DeltaAlignment> > GetDeltaAlignments(ISequence querySequence)
        {
            IEnumerable <ISequence> querySequences = AddReverseComplementsToSequenceList(querySequence);

            foreach (ISequence qs in querySequences)
            {
                yield return(nucmer.GetDeltaAlignments(qs, !MaxMatch, qs.IsMarkedAsReverseComplement()));
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Gets the Delta for list of query sequences.
        /// </summary>
        /// <param name="referenceSequence">The reference sequence.</param>
        /// <param name="querySequence">The query sequence.</param>
        /// <returns>Returns list of IEnumerable Delta Alignment.</returns>
        private IEnumerable <IEnumerable <DeltaAlignment> > GetDelta(IEnumerable <ISequence> referenceSequence, IEnumerable <ISequence> querySequence)
        {
            if (this.MaxMatch)
            {
                foreach (ISequence refSeq in referenceSequence)
                {
                    NUCmer nucmer = new NUCmer((Sequence)refSeq);
                    nucmer.FixedSeparation   = FixedSeparation;
                    nucmer.BreakLength       = BreakLength;
                    nucmer.LengthOfMUM       = MinMatch;
                    nucmer.MaximumSeparation = MaxGap;
                    nucmer.MinimumScore      = MinCluster;
                    nucmer.SeparationFactor  = (float)DiagFactor;

                    foreach (ISequence qrySequence in querySequence)
                    {
                        queryCount++;
                        yield return(nucmer.GetDeltaAlignments(qrySequence, false));
                    }
                }
            }
            else
            {
                foreach (ISequence refSeq in referenceSequence)
                {
                    NUCmer nucmer = new NUCmer((Sequence)refSeq);
                    nucmer.FixedSeparation   = FixedSeparation;
                    nucmer.BreakLength       = BreakLength;
                    nucmer.LengthOfMUM       = MinMatch;
                    nucmer.MaximumSeparation = MaxGap;
                    nucmer.MinimumScore      = MinCluster;
                    nucmer.SeparationFactor  = (float)DiagFactor;

                    foreach (ISequence qrySequence in querySequence)
                    {
                        queryCount++;
                        yield return(nucmer.GetDeltaAlignments(qrySequence));
                    }
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Aligns reads to reference genome using NUCmer.
        /// </summary>
        /// <param name="referenceSequence">Sequence of reference genome.</param>
        /// <param name="reads">List of sequence reads.</param>
        /// <returns>Delta alignments after read alignment.</returns>
        private IEnumerable <DeltaAlignment> ReadAlignment(IEnumerable <ISequence> referenceSequence, IEnumerable <ISequence> reads)
        {
            foreach (ISequence sequence in referenceSequence)
            {
                NUCmer nucmer = new NUCmer((Sequence)sequence);

                nucmer.FixedSeparation   = this.FixedSeparation;
                nucmer.MinimumScore      = this.MinimumScore;
                nucmer.SeparationFactor  = this.SeparationFactor;
                nucmer.MaximumSeparation = this.MaximumSeparation;
                nucmer.BreakLength       = this.BreakLength;
                nucmer.LengthOfMUM       = this.LengthOfMum;

                foreach (ISequence qrySequence in reads)
                {
                    foreach (DeltaAlignment delta in nucmer.GetDeltaAlignments(qrySequence, false))
                    {
                        yield return(delta);
                    }
                }
            }
        }