private List <VeadGroup> AllocateReadsToClusters(List <VeadGroup> veadGroups, SetOfClusters clusters, int maxNumDisagreements)
        {
            var vgsRemaining = new List <VeadGroup>();

            foreach (var vg in veadGroups)
            {
                var bestFits = clusters.GetClusterFits(vg);

                if (bestFits.Count == 0)
                {
                    vgsRemaining.Add(vg);
                }
                else
                {
                    var bestCandidates = bestFits.Last().Value;
                    var bestcluster    = bestCandidates[0];

                    if (_options.AllowClusterMerging)
                    {
                        bestcluster = ClusterMerger.MergeAllBestCandidates(clusters, maxNumDisagreements, bestCandidates, vg);
                    }

                    bestcluster.Add(vg);
                }
            }

            return(vgsRemaining);
        }
Exemplo n.º 2
0
        public void MergeAllBestCandidates()
        {
            var setOfClusters = new SetOfClusters(new ClusteringParameters());
            var veadgroups    = ClusterTestHelpers.GetSampleVeadGroups(prefix: "Original");
            var cluster       = new Cluster("test", veadgroups);

            setOfClusters.AddCluster(cluster);

            var veadgroups2 = ClusterTestHelpers.GetSampleVeadGroups(prefix: "Second");
            var cluster2    = new Cluster("test2", veadgroups2);

            setOfClusters.AddCluster(cluster2);

            Assert.Equal(2, setOfClusters.NumClusters);
            var veadgroups3 = ClusterTestHelpers.GetSampleVeadGroups(1, 1, prefix: "Tester");

            // If can be merged, we should have 1 cluster.
            var bestCluster = ClusterMerger.MergeAllBestCandidates(setOfClusters, 0, new List <Cluster> {
                cluster, cluster2
            }, veadgroups3.First());

            Assert.Equal(1, setOfClusters.NumClusters);
        }