public void TestRestrictiveBoxMethod(string path, DistanceMetric dist, bool useBoxMethod) { var features = ReadFeatures(path); var clusterer = new UMCAverageLinkageClusterer <UMCLight, UMCClusterLight> { ShouldTestClustersWithinTolerance = useBoxMethod, Parameters = { CentroidRepresentation = ClusterCentroidRepresentation.Mean, DistanceFunction = DistanceFactory <UMCLight> .CreateDistanceFunction(dist), OnlyClusterSameChargeStates = true, Tolerances = { Mass = 10, DriftTime = .3, Net = .03 } } }; var clusters = clusterer.Cluster(features); var i = 0; clusters.ForEach(x => x.Id = i++); WriteClusters(clusters); }
public void TestDistanceDistributions(string path, DistanceMetric dist) { var features = ReadFeatures(path); var clusterer = new UMCAverageLinkageClusterer <UMCLight, UMCClusterLight> { ShouldTestClustersWithinTolerance = false, Parameters = { CentroidRepresentation = ClusterCentroidRepresentation.Mean, DistanceFunction = DistanceFactory <UMCLight> .CreateDistanceFunction(dist), OnlyClusterSameChargeStates = true, Tolerances = { Mass = 10, DriftTime = .3, Net = .03 } } }; var clusters = clusterer.Cluster(features); var distances = new List <double>(); foreach (var cluster in clusters) { var centroid = new UMCLight(); centroid.MassMonoisotopicAligned = cluster.MassMonoisotopic; centroid.Net = cluster.Net; centroid.DriftTime = cluster.DriftTime; var func = clusterer.Parameters.DistanceFunction; foreach (var feature in cluster.Features) { var distance = func(feature, centroid); distances.Add(distance); } distances.Sort(); var sum = 0; foreach (var distance in distances) { sum++; Console.WriteLine("{0},{1}", distance, sum); } } }
//[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); } } }
//[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(); } }
public void TestRestrictiveBoxMethod(string path, DistanceMetric dist, bool useBoxMethod) { var features = ReadFeatures(path); var clusterer = new UMCAverageLinkageClusterer<UMCLight, UMCClusterLight> { ShouldTestClustersWithinTolerance = useBoxMethod, Parameters = { CentroidRepresentation = ClusterCentroidRepresentation.Mean, DistanceFunction = DistanceFactory<UMCLight>.CreateDistanceFunction(dist), OnlyClusterSameChargeStates = true, Tolerances = { Mass = 10, DriftTime = .3, Net = .03 } } }; var clusters = clusterer.Cluster(features); var i = 0; clusters.ForEach(x => x.Id = i++); WriteClusters(clusters); }
public void TestDistanceDistributions(string path, DistanceMetric dist) { var features = ReadFeatures(path); var clusterer = new UMCAverageLinkageClusterer<UMCLight, UMCClusterLight> { ShouldTestClustersWithinTolerance = false, Parameters = { CentroidRepresentation = ClusterCentroidRepresentation.Mean, DistanceFunction = DistanceFactory<UMCLight>.CreateDistanceFunction(dist), OnlyClusterSameChargeStates = true, Tolerances = { Mass = 10, DriftTime = .3, Net = .03 } } }; var clusters = clusterer.Cluster(features); var distances = new List<double>(); foreach (var cluster in clusters) { var centroid = new UMCLight(); centroid.MassMonoisotopicAligned = cluster.MassMonoisotopic; centroid.Net = cluster.Net; centroid.DriftTime = cluster.DriftTime; var func = clusterer.Parameters.DistanceFunction; foreach (var feature in cluster.Features) { var distance = func(feature, centroid); distances.Add(distance); } distances.Sort(); var sum = 0; foreach (var distance in distances) { sum++; Console.WriteLine("{0},{1}", distance, sum); } } }