Example #1
0
        public void TestDistances()
        {
            var dist = new WeightedEuclideanDistance <UMCClusterLight>();


            var clusterA = CreateCluster(500, .2, 27);
            var clusterB = CreateCluster(500, .2, 27);

            var N         = 50;
            var stepMass  = .5;
            var stepNET   = .001;
            var stepDrift = .01;


            Console.WriteLine("Walk in drift time");
            for (var i = 0; i < N; i++)
            {
                clusterB.DriftTime += stepDrift;
                var distance = dist.EuclideanDistance(clusterA, clusterB);
                Console.WriteLine("{0}, {1}, {3}, {2}", clusterB.DriftTime, clusterB.DriftTime, distance, clusterB.DriftTime - clusterA.DriftTime);
            }

            Console.WriteLine();
            Console.WriteLine("Walk in net ");
            clusterB.DriftTime = 27;

            for (var i = 0; i < N; i++)
            {
                clusterB.Net += stepNET;
                var distance = dist.EuclideanDistance(clusterA, clusterB);
                Console.WriteLine("{0}, {1}, {3}, {2}", clusterB.Net, clusterB.Net, distance, clusterB.Net - clusterA.Net);
            }


            Console.WriteLine();
            Console.WriteLine("Walk in mass ");
            clusterB.Net = .2;
            for (var i = 0; i < N; i++)
            {
                var d = FeatureLight.ComputeDaDifferenceFromPPM(clusterA.MassMonoisotopic, stepMass * i);
                clusterB.MassMonoisotopic = d;
                var distance = dist.EuclideanDistance(clusterA, clusterB);
                Console.WriteLine("{0}, {1}, {3}, {2}", clusterB.MassMonoisotopic,
                                  clusterB.MassMonoisotopic,
                                  distance,
                                  FeatureLight.ComputeMassPPMDifference(clusterA.MassMonoisotopic, clusterB.MassMonoisotopic));
            }
        }
Example #2
0
        //[TestCase(@"ClusterData\clusterData-merged-nodelin.txt")]
        public void TestWeightedAverageLinkage(string path)
        {
            Console.WriteLine("Test: " + path);
            var features = GetClusterData(Path.Combine(TestPaths.TestFilesDirectory, path));

            Assert.IsNotEmpty(features);

            var cluster = new UMCClusterLight();

            cluster.Id = features[0].Id;
            features.ForEach(x => cluster.AddChildFeature(x));

            var maps = new Dictionary <int, UMCClusterLight>();

            var average = new UMCAverageLinkageClusterer <UMCLight, UMCClusterLight>();

            average.Parameters = new FeatureClusterParameters <UMCLight>();
            average.Parameters.CentroidRepresentation = ClusterCentroidRepresentation.Mean;
            average.Parameters.Tolerances             = new Algorithms.FeatureTolerances();

            var distance = new WeightedEuclideanDistance <UMCLight>();

            average.Parameters.DistanceFunction = distance.EuclideanDistance;
            var clusters = average.Cluster(features);

            Console.WriteLine("dataset\tfeature\tmass\tnet\tdrift");
            foreach (var newCluster in clusters)
            {
                foreach (var feature in newCluster.Features)
                {
                    Console.WriteLine("{0},{1},{2},{3},{4}", feature.GroupId,
                                      feature.Id,
                                      feature.Net,
                                      feature.MassMonoisotopicAligned,
                                      feature.DriftTime);
                }
            }
        }
Example #3
0
        //[TestCase(@"ClusterData\clusterData-single-1500.txt")]
        public void TestAverageLinkage(string path)
        {
            Console.WriteLine("Average Linkage Test: " + path);
            var features = GetClusterData(Path.Combine(TestPaths.TestFilesDirectory, path));

            Assert.IsNotEmpty(features);

            var cluster = new UMCClusterLight();

            cluster.Id = features[0].Id;
            features.ForEach(x => cluster.AddChildFeature(x));

            var maps = new Dictionary <int, UMCClusterLight>();

            var average = new UMCAverageLinkageClusterer <UMCLight, UMCClusterLight>();

            average.Parameters = new FeatureClusterParameters <UMCLight>();
            average.Parameters.CentroidRepresentation = ClusterCentroidRepresentation.Median;
            average.Parameters.Tolerances             = new Algorithms.FeatureTolerances();
            average.Parameters.Tolerances.Net         = .02;
            average.Parameters.Tolerances.Mass        = 6;
            average.Parameters.Tolerances.DriftTime   = .3;

            var distance = new WeightedEuclideanDistance <UMCLight>();

            average.Parameters.DistanceFunction = distance.EuclideanDistance;
            var euclid = new EuclideanDistanceMetric <UMCLight>();

            average.Parameters.DistanceFunction = euclid.EuclideanDistance;
            var clusters = average.Cluster(features);

            Console.WriteLine("Clusters = {0}", clusters.Count);
            var id = 1;

            foreach (var testCluster in clusters)
            {
                testCluster.CalculateStatistics(ClusterCentroidRepresentation.Mean);
                var distances = new List <double>();

                // Show a sampling of 5 results
                var threshold = (int)(testCluster.Features.Count / (double)5);
                if (threshold < 1)
                {
                    threshold = 1;
                }

                testCluster.Id = id++;
                var featureID = 0;

                foreach (var feature in testCluster.Features)
                {
                    featureID++;
                    if (featureID % threshold == 0)
                    {
                        Console.WriteLine("{0},{1},{2},{3}",
                                          feature.Net,
                                          feature.MassMonoisotopicAligned,
                                          feature.DriftTime,
                                          testCluster.Id);
                    }

                    var newDistance = distance.EuclideanDistance(feature, testCluster);
                    distances.Add(newDistance);
                }
                //Console.WriteLine();
                //Console.WriteLine("Distances");
                //distances.ForEach(x => Console.WriteLine(x));
                //Console.WriteLine();
            }
        }
Example #4
0
        //[TestCase(@"ClusterData\clusterData-single-1500.txt", 4)]
        //[TestCase(@"ClusterData\clusterData-single-1500-two.txt", 4)]
        public void TestPrimsWeighted(string path, double sigma)
        {
            sigma = 1;

            Console.WriteLine();
            Console.WriteLine("Tests: " + path);
            Console.WriteLine("Sigma Cutoff: {0}", sigma);
            var features = GetClusterData(Path.Combine(TestPathSingleton.TestDirectory, path));

            Assert.IsNotEmpty(features);

            var cluster = new UMCClusterLight();

            cluster.Id = features[0].Id;
            features.ForEach(x => cluster.AddChildFeature(x));

            var maps = new Dictionary <int, UMCClusterLight>();


            var prims = new UMCPrimsClustering <UMCLight, UMCClusterLight>(sigma);

            prims.Parameters = new FeatureClusterParameters <UMCLight>();
            prims.Parameters.CentroidRepresentation      = ClusterCentroidRepresentation.Mean;
            prims.Parameters.Tolerances                  = new FeatureTolerances();
            prims.Parameters.OnlyClusterSameChargeStates = false;
            prims.Parameters.Tolerances.DriftTime        = .3;
            prims.Parameters.Tolerances.Mass             = 15;
            prims.Parameters.Tolerances.Net              = .02;
            prims.DumpLinearRelationship                 = false;

            var distance = new WeightedEuclideanDistance <UMCLight>();

            prims.Parameters.DistanceFunction = distance.EuclideanDistance;
            var clusters = prims.Cluster(features);


            Console.WriteLine();
            Console.WriteLine("Clusters = {0}", clusters.Count);

            var id = 1;

            foreach (var testCluster in clusters)
            {
                testCluster.CalculateStatistics(ClusterCentroidRepresentation.Mean);

                var distances = new List <double>();

                // Show a sampling of 15 results
                var threshold = (int)(testCluster.Features.Count / (double)15);
                if (threshold < 1)
                {
                    threshold = 1;
                }

                testCluster.Id = id++;
                var featureID = 0;

                foreach (var feature in testCluster.Features)
                {
                    featureID++;
                    if (featureID % threshold == 0)
                    {
                        Console.WriteLine("{0},{1},{2},{3}",
                                          feature.Net,
                                          feature.MassMonoisotopicAligned,
                                          feature.DriftTime,
                                          testCluster.Id);
                    }

                    var newDistance = distance.EuclideanDistance(feature, testCluster);
                    distances.Add(newDistance);
                }
                //Console.WriteLine();
                //Console.WriteLine("Distances");
                //distances.ForEach(x => Console.WriteLine(x));
                //Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine("Test Done:");
            Console.WriteLine();
        }