예제 #1
0
        public FindResult FindNext(BookmarkEnumerator bookmarkEnumerator)
        {
            var customMatches = new Dictionary <Bookmark, FindMatch>();

            foreach (var finder in FindOptions.CustomFinders)
            {
                var customEnumerator = new BookmarkEnumerator(bookmarkEnumerator);
                var nextMatch        = finder.NextMatch(customEnumerator);
                if (nextMatch == null || customMatches.ContainsKey(customEnumerator.Current))
                {
                    continue;
                }
                customMatches.Add(customEnumerator.Current, nextMatch);
            }
            do
            {
                bookmarkEnumerator.MoveNext();
                FindMatch findMatch;
                if (customMatches.TryGetValue(bookmarkEnumerator.Current, out findMatch))
                {
                    return(new FindResult(this, bookmarkEnumerator, findMatch));
                }
                findMatch = MatchInternal(bookmarkEnumerator);
                if (findMatch != null)
                {
                    return(new FindResult(this, bookmarkEnumerator, findMatch));
                }
            } while (!bookmarkEnumerator.AtStart);
            return(null);
        }
예제 #2
0
 public BookmarkEnumerator(BookmarkEnumerator bookmarkEnumerator)
 {
     Document = bookmarkEnumerator.Document;
     Start    = bookmarkEnumerator.Start;
     Current  = bookmarkEnumerator.Current;
     Forward  = bookmarkEnumerator.Forward;
 }
예제 #3
0
 FindMatch MatchCustom(BookmarkEnumerator bookmarkEnumerator)
 {
     foreach (var finder in FindOptions.CustomFinders)
     {
         var findMatch = finder.Match(bookmarkEnumerator);
         if (findMatch != null)
         {
             return(findMatch);
         }
     }
     return(null);
 }
예제 #4
0
 public virtual FindMatch NextMatch(BookmarkEnumerator bookmarkEnumerator)
 {
     do
     {
         bookmarkEnumerator.MoveNext();
         var findMatch = Match(bookmarkEnumerator);
         if (findMatch != null)
         {
             return(findMatch);
         }
     } while (!bookmarkEnumerator.AtStart);
     return(null);
 }
예제 #5
0
        public override FindMatch Match(BookmarkEnumerator bookmarkEnumerator)
        {
            var transitionChromInfo = bookmarkEnumerator.CurrentChromInfo as TransitionChromInfo;

            if (transitionChromInfo == null)
            {
                return(null);
            }
            if (transitionChromInfo.IsEmpty)
            {
                return(new FindMatch(Resources.UnintegratedTransitionFinder_Match_Unintegrated_transition));
            }
            return(null);
        }
예제 #6
0
        public IEnumerable <FindResult> FindAll(ILongWaitBroker longWaitBroker, SrmDocument document)
        {
            longWaitBroker.Message = Resources.FindPredicate_FindAll_Found_0_matches;
            var customMatches = new HashSet <Bookmark> [FindOptions.CustomFinders.Count];

            for (int iFinder = 0; iFinder < FindOptions.CustomFinders.Count; iFinder++)
            {
                var customFinder = FindOptions.CustomFinders[iFinder];
                var bookmarkSet  = new HashSet <Bookmark>();
                longWaitBroker.Message = string.Format(Resources.FindPredicate_FindAll_Searching_for__0__, customFinder.DisplayName);
                foreach (var bookmark in customFinder.FindAll(document))
                {
                    if (longWaitBroker.IsCanceled)
                    {
                        yield break;
                    }
                    bookmarkSet.Add(bookmark);
                }
                customMatches[iFinder] = bookmarkSet;
            }
            var bookmarkEnumerator = new BookmarkEnumerator(document);
            int matchCount         = 0;

            do
            {
                bookmarkEnumerator.MoveNext();
                if (longWaitBroker.IsCanceled)
                {
                    yield break;
                }
                FindMatch findMatch = null;
                for (int iFinder = 0; iFinder < FindOptions.CustomFinders.Count; iFinder++)
                {
                    if (customMatches[iFinder].Contains(bookmarkEnumerator.Current))
                    {
                        findMatch = FindOptions.CustomFinders[iFinder].Match(bookmarkEnumerator);
                    }
                }
                findMatch = findMatch ?? MatchInternal(bookmarkEnumerator);
                if (findMatch != null)
                {
                    matchCount++;
                    longWaitBroker.Message = matchCount == 1
                                                 ? Resources.FindPredicate_FindAll_Found_1_match
                                                 : string.Format(Resources.FindPredicate_FindAll_Found__0__matches, matchCount);
                    yield return(new FindResult(this, bookmarkEnumerator, findMatch));
                }
            } while (!bookmarkEnumerator.AtStart);
        }
예제 #7
0
        public IEnumerator <Bookmark> GetEnumerator()
        {
            var enumerator = new BookmarkEnumerator(this);

            while (true)
            {
                enumerator.MoveNext();
                yield return(enumerator.Current);

                if (enumerator.AtStart)
                {
                    break;
                }
            }
        }
예제 #8
0
        public override FindMatch Match(BookmarkEnumerator bookmarkEnumerator)
        {
            var transitionChromInfo = bookmarkEnumerator.CurrentChromInfo as TransitionChromInfo;

            if (transitionChromInfo == null)
            {
                return(null);
            }
            bool integrateAll = bookmarkEnumerator.Document.Settings.TransitionSettings.Integration.IsIntegrateAll;

            if (!transitionChromInfo.IsGoodPeak(integrateAll))
            {
                return(new FindMatch(Resources.UnintegratedTransitionFinder_Match_Unintegrated_transition));
            }
            return(null);
        }
        public FindMatch Match(BookmarkEnumerator bookmarkEnumerator)
        {
            var transitionGroupChromInfo = bookmarkEnumerator.CurrentChromInfo as TransitionGroupChromInfo;

            if (transitionGroupChromInfo != null)
            {
                return(MatchTransitionGroup(transitionGroupChromInfo));
            }
            var transitionChromInfo = bookmarkEnumerator.CurrentChromInfo as TransitionChromInfo;

            if (transitionChromInfo != null)
            {
                return(MatchTransition(transitionChromInfo));
            }
            return(null);
        }
예제 #10
0
        public virtual IEnumerable <Bookmark> FindAll(SrmDocument document)
        {
            var bookmarkEnumerator = new BookmarkEnumerator(document);

            while (true)
            {
                bookmarkEnumerator.MoveNext();
                if (Match(bookmarkEnumerator) != null)
                {
                    yield return(bookmarkEnumerator.Current);
                }
                if (bookmarkEnumerator.AtStart)
                {
                    yield break;
                }
            }
        }
예제 #11
0
        private FindMatch MatchInternal(BookmarkEnumerator bookmarkEnumerator)
        {
            if (string.IsNullOrEmpty(FindOptions.Text))
            {
                return(null);
            }
            var chromInfo = bookmarkEnumerator.CurrentChromInfo;

            if (chromInfo != null)
            {
                return(MatchAnnotations(GetAnnotations(chromInfo)));
            }
            var docNode = bookmarkEnumerator.CurrentDocNode;

            if (docNode == null)
            {
                return(null);
            }
            return(MatchText(docNode.GetDisplayText(DisplaySettings))
                   ?? MatchAnnotations(docNode.Annotations));
        }
예제 #12
0
        public override FindMatch Match(BookmarkEnumerator bookmarkEnumerator)
        {
            var nodePep = bookmarkEnumerator.CurrentDocNode as PeptideDocNode;

            if (nodePep == null)
            {
                return(null);
            }
            if (bookmarkEnumerator.CurrentChromInfo == null)
            {
                _isLastNodeMatch = IsMatch(nodePep);
                if (_isLastNodeMatch)
                {
                    return(new FindMatch(string.Format(Resources.MissingScoresFinder_Match__0__missing_from_peptide, _calculatorName)));
                }
            }
            else if (IsMatch(bookmarkEnumerator.CurrentChromInfo, nodePep) && !_isLastNodeMatch)
            {
                return(new FindMatch(string.Format(Resources.MissingScoresFinder_Match__0__missing_from_chromatogram_peak, _calculatorName)));
            }
            return(null);
        }
        public FindMatch NextMatch(BookmarkEnumerator bookmarkEnumerator)
        {
            var allBookmarks = new HashSet <Bookmark>(FindAll(bookmarkEnumerator.Document));

            if (allBookmarks.Count == 0)
            {
                return(null);
            }
            do
            {
                bookmarkEnumerator.MoveNext();
                if (allBookmarks.Contains(bookmarkEnumerator.Current))
                {
                    var findMatch = Match(bookmarkEnumerator);
                    if (findMatch != null)
                    {
                        return(findMatch);
                    }
                }
            } while (!bookmarkEnumerator.AtStart);
            return(null);
        }
예제 #14
0
 public FindMatch Match(BookmarkEnumerator bookmarkEnumerator)
 {
     return(MatchCustom(bookmarkEnumerator) ?? MatchInternal(bookmarkEnumerator));
 }
예제 #15
0
 public abstract FindMatch Match(BookmarkEnumerator bookmarkEnumerator);