/// <summary> /// Finds LCMS Features using the PNNL Omics linkage clustering algorithms. /// </summary> public List <UMCLight> FindFeatures(List <MSFeatureLight> rawMsFeatures, LCMSFeatureFindingOptions options, ISpectraProvider provider) { const ClusterCentroidRepresentation centroidType = ClusterCentroidRepresentation.Mean; List <UMCLight> features = null; m_options = options; m_minScan = int.MaxValue; m_maxScan = int.MinValue; foreach (var feature in rawMsFeatures) { m_minScan = Math.Min(feature.Scan, m_minScan); m_maxScan = Math.Max(feature.Scan, m_maxScan); } var finder = new MSFeatureSingleLinkageClustering <MSFeatureLight, UMCLight> { Parameters = { DistanceFunction = WeightedNETDistanceFunction, RangeFunction = WithinRange, Tolerances = { Mass = options.ConstraintMonoMass, RetentionTime = 100, DriftTime = 100 } } }; finder.Parameters.CentroidRepresentation = centroidType; m_maxDistance = options.MaxDistance; features = finder.Cluster(rawMsFeatures); // Remove the short UMC's. features.RemoveAll(x => (x.ScanEnd - x.ScanStart + 1) < options.MinUMCLength); var id = 0; foreach (var feature in features) { feature.NET = Convert.ToDouble(feature.Scan - m_minScan) / Convert.ToDouble(m_maxScan - m_minScan); feature.RetentionTime = feature.NET; feature.ID = id++; } return(features); }
/// <summary> /// Finds LCMS Features using the PNNL Omics linkage clustering algorithms. /// </summary> public List<UMCLight> FindFeatures( List<MSFeatureLight> rawMsFeatures, LCMSFeatureFindingOptions options, ISpectraProvider provider) { const ClusterCentroidRepresentation centroidType = ClusterCentroidRepresentation.Mean; List<UMCLight> features = null; m_options = options; m_minScan = int.MaxValue; m_maxScan = int.MinValue; foreach (var feature in rawMsFeatures) { m_minScan = Math.Min(feature.Scan, m_minScan); m_maxScan = Math.Max(feature.Scan, m_maxScan); } var finder = new MSFeatureSingleLinkageClustering<MSFeatureLight, UMCLight> { Parameters = { DistanceFunction = WeightedNETDistanceFunction, RangeFunction = WithinRange, Tolerances = {Mass = options.ConstraintMonoMass, RetentionTime = 100, DriftTime = 100} } }; finder.Parameters.CentroidRepresentation = centroidType; m_maxDistance = options.MaxDistance; features = finder.Cluster(rawMsFeatures); // Remove the short UMC's. features.RemoveAll(x => (x.ScanEnd - x.ScanStart + 1) < options.MinUMCLength); var id = 0; foreach (var feature in features) { feature.NET = Convert.ToDouble(feature.Scan - m_minScan) / Convert.ToDouble(m_maxScan - m_minScan); feature.RetentionTime = feature.NET; feature.ID = id++; } return features; }