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)); } }
//[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(); } }
//[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(); }