Пример #1
0
 private void AssertEqualSegmentations(GenomeSegmentationResults expected, GenomeSegmentationResults actual)
 {
     Assert.Equal(expected.SegmentByChr.Keys.ToHashSet(), actual.SegmentByChr.Keys.ToHashSet());
     foreach (var chr in expected.SegmentByChr.Keys)
     {
         IEqualityComparer <Segment> segmentComparer = new SegmentEqualityComparer();
         Assert.Equal(expected.SegmentByChr[chr], actual.SegmentByChr[chr], segmentComparer);
     }
 }
Пример #2
0
        public static void AddRelatedPairsRecursive <T>(IList <T> relatedPairs,
                                                        List <T> unhandledPairs)
            where T : ISegmentPair
        {
            var segmentEqualityComparer = new SegmentEqualityComparer();
            var relatedDictionary       =
                new Dictionary <SegmentProxy, SegmentProxy>(segmentEqualityComparer);

            foreach (T relatedPair in relatedPairs)
            {
                AddSegmentKeys(relatedDictionary, relatedPair);
            }

            bool     newAddedToRelated = true;
            List <T> candidates        = unhandledPairs;

            while (newAddedToRelated)
            {
                newAddedToRelated = false;

                var newlyUnhandledPairs = new List <T>(candidates.Count);

                foreach (T unhandledPair in candidates)
                {
                    if (relatedDictionary.ContainsKey(unhandledPair.BaseSegment))
                    {
                        newAddedToRelated |= AddSegmentKeys(relatedDictionary, unhandledPair);
                        relatedPairs.Add(unhandledPair);
                    }
                    else if (relatedDictionary.ContainsKey(unhandledPair.RelatedSegment))
                    {
                        newAddedToRelated |= AddSegmentKeys(relatedDictionary, unhandledPair);
                        relatedPairs.Add(unhandledPair);
                    }
                    else
                    {
                        newlyUnhandledPairs.Add(unhandledPair);
                    }
                }

                candidates = newlyUnhandledPairs;
            }

            unhandledPairs.Clear();
            unhandledPairs.AddRange(candidates);
        }