private List <ScanNETPair> PrepareNetAlignmentDataForLoessSmoothing() { var scanNetDictionary = new SortedDictionary <decimal, double>(); foreach (var iqResult in IqResultsForNetAlignment) { decimal lcScan; if (iqResult.ChromPeakSelected == null) { lcScan = iqResult.LcScanObs; } else { lcScan = (decimal)Math.Round(iqResult.ChromPeakSelected.XValue, 2); } var yval = iqResult.Target.ElutionTimeTheor; if (!scanNetDictionary.ContainsKey(lcScan)) { scanNetDictionary.Add(lcScan, yval); } } var scanNETPairs = new List <ScanNETPair>(); foreach (var pair in scanNetDictionary) { var scanNETPair = new ScanNETPair((double)pair.Key, pair.Value); scanNETPairs.Add(scanNETPair); } return(scanNETPairs); }
public NetAlignmentInfo DoNetAlignment(bool recollectResultsIfAlreadyPresent = false) { var needToProcessResults = (recollectResultsIfAlreadyPresent || (IqResultsForAlignment == null || IqResultsForAlignment.Count == 0)); if (needToProcessResults) { Execute(Targets); IqResultsForAlignment = FilterAlignmentResults(); } IqResultsForNetAlignment = UpdateMsgfTargetsWithDatabaseNetValues(IqResultsForAlignment); IqLogger.Log.Info("Applying Loess smoothing to NET alignment data. LoessBandwidth= " + LoessBandwidthNetAlignment); var netAlignmentDataForLoess = PrepareNetAlignmentDataForLoessSmoothing(); var iterationsForNetAlignment = 2; var loessInterpolatorForNetAlignment = new LoessInterpolator(LoessBandwidthNetAlignment, iterationsForNetAlignment); var loessSmoothedData = new XYData(); loessSmoothedData.Xvalues = netAlignmentDataForLoess.Select(p => p.Scan).ToArray(); loessSmoothedData.Yvalues = loessInterpolatorForNetAlignment.Smooth(netAlignmentDataForLoess.Select(p => p.Scan).ToArray(), netAlignmentDataForLoess.Select(p => p.NET).ToArray()); var scanToNetVals = new List <ScanNETPair>(); for (var i = 0; i < loessSmoothedData.Xvalues.Length; i++) { var xval = loessSmoothedData.Xvalues[i]; var yval = loessSmoothedData.Yvalues[i]; if (!double.IsNaN(yval)) { var scanNETPair = new ScanNETPair(xval, yval); scanToNetVals.Add(scanNETPair); } } var netAlignmentInfo = new NetAlignmentInfoBasic(Run.MinLCScan, Run.MaxLCScan); netAlignmentInfo.SetScanToNETAlignmentData(scanToNetVals); IqLogger.Log.Info("NET alignment complete using " + scanToNetVals.Count + " data points."); NetAlignmentInfo = netAlignmentInfo; return(netAlignmentInfo); }