public static List <ProteinSpectrumMatchSet> GroupingByPrsm(int dataid, IEnumerable <ProteinSpectrumMatch> matches, INodeComparer <ProteinSpectrumMatch> prsmComparer) { var prsmSet = new NodeSet <ProteinSpectrumMatch>() { }; prsmSet.AddRange(matches); var groupList = prsmSet.ConnnectedComponents(prsmComparer); return(groupList.Select(@group => new ProteinSpectrumMatchSet(dataid, @group)).ToList()); }
public ProteinSpectrumMatchSet[][] GroupAcrossRuns(List <ProteinSpectrumMatchSet>[] prsmGroup, INodeComparer <ProteinSpectrumMatchSet> prsmGroupComparer) { var nDataset = prsmGroup.Length; var prsmSet = new NodeSet <ProteinSpectrumMatchSet>() { }; for (var i = 0; i < nDataset; i++) { var groupedPrsms = prsmGroup[i]; if (groupedPrsms == null) { continue; } prsmSet.AddRange(groupedPrsms); } var alignedPrsms = prsmSet.ConnnectedComponents(prsmGroupComparer); var alignedResult = new ProteinSpectrumMatchSet[alignedPrsms.Count][]; for (var i = 0; i < alignedResult.Length; i++) { alignedResult[i] = new ProteinSpectrumMatchSet[nDataset]; } for (var i = 0; i < alignedPrsms.Count; i++) { foreach (var set in alignedPrsms[i]) { if (alignedResult[i][set.DataId] != null) { alignedResult[i][set.DataId].Merge(set); //Console.WriteLine("[{4}] {0}-{1}...{2}-{3}", set.MinScanNum, set.MaxScanNum, alignedResult[i][set.DataId].MinScanNum, alignedResult[i][set.DataId].MaxScanNum, set.DataId); } else { alignedResult[i][set.DataId] = set; } } } return(alignedResult); }
private List <LcMsPeakCluster> MergeFeatures(LcMsPeakMatrix featureFinder, List <LcMsPeakCluster> features) { //foreach (var f in _featureList) f.ActivateAllPeaks(); var featureSet = new NodeSet <LcMsPeakCluster>(); featureSet.AddRange(features); var connectedFeatureSet = featureSet.ConnnectedComponents(_mergeComparer); var mergedFeatures = new List <LcMsPeakCluster>(); foreach (var fSet in connectedFeatureSet) { if (fSet.Count == 1) { mergedFeatures.Add(fSet[0]); } else { var maxScan = fSet.Max(f => f.MaxScanNum); var minScan = fSet.Min(f => f.MinScanNum); var maxCharge = fSet.Max(f => f.MaxCharge); var minCharge = fSet.Min(f => f.MinCharge); var maxScore = double.MinValue;//fSet.Max(f => f.Score); LcMsPeakCluster maxScoredClusterOriginal = null; LcMsPeakCluster maxScoredCluster = null; foreach (var f in fSet) { var newFeature = featureFinder.GetLcMsPeakCluster(f.RepresentativeMass, minCharge, maxCharge, minScan, maxScan); if (newFeature != null && (maxScoredCluster == null || newFeature.Score > maxScoredCluster.Score)) { maxScoredCluster = newFeature; } if (f.Score > maxScore) { maxScoredClusterOriginal = f; maxScore = f.Score; } } var feature = featureFinder.GetLcMsPeakCluster(fSet.Select(f => f.Mass).Mean(), minCharge, maxCharge, minScan, maxScan); if (feature != null && (maxScoredCluster == null || feature.Score > maxScoredCluster.Score)) { maxScoredCluster = feature; } //Console.WriteLine("------------- Merge -----------------"); //foreach (var f in fSet) Console.WriteLine("*\t{0}\t{1}\t{2}\t{3}", f.RepresentativeMass, f.MinScanNum, f.MaxScanNum, f.Score); //Console.WriteLine("**\t{0}\t{1}\t{2}\t{3}", maxScoredCluster.RepresentativeMass, maxScoredCluster.MinScanNum, maxScoredCluster.MaxScanNum, maxScoredCluster.Score); if (maxScoredCluster == null) { maxScoredCluster = maxScoredClusterOriginal; } if (maxScoredCluster.Score < maxScore) { maxScoredCluster.Score = maxScore; } mergedFeatures.Add(maxScoredCluster); } //if (selectedFeature != null) postFilteredSet.Add(selectedFeature); } //return postFilteredSet.OrderBy(f => f.RepresentativeMass); return(mergedFeatures); }