示例#1
0
        private bool setPositionsBasedOnAlignment(GenomeSlice slice)
        {
            Sequence s     = new Sequence(DnaAlphabet.Instance, slice.Node.Sequence, false);
            var      delts = assemblyAligner.GetDeltaAlignments(s).SelectMany(x => x).ToList();

            if (delts.Count > 0)
            {
                //check if reversed
                if (delts[0].IsReverseQueryDirection)
                {
                    slice.Node.ReversePath();
                    s     = new Sequence(DnaAlphabet.Instance, slice.Node.Sequence, false);
                    delts = assemblyAligner.GetDeltaAlignments(s).SelectMany(x => x).ToList();
                }
                if (delts.Count == 1)
                {
                    slice.SuggestedLeftSidePosition  = delts[0].FirstSequenceStart;
                    slice.SuggestedRightSidePosition = delts[0].FirstSequenceEnd;
                }
                else if (delts.Count == 2) //split, happens in event of wrap around
                {
                    slice.SuggestedLeftSidePosition  = delts.MaxBy(x => x.FirstSequenceStart).FirstSequenceStart;
                    slice.SuggestedRightSidePosition = delts.MinBy(x => x.FirstSequenceEnd).FirstSequenceEnd;
                }
                else
                {
                    return(false);
                }
                return(true);
            }
            return(false);
        }
 public static IEnumerable <IEnumerable <DeltaAlignment> > GetDeltaAlignments(ISequence querySequence)
 {
     return(nucmer.GetDeltaAlignments(querySequence));
 }