public void PeakPicking(IRangeSelection peakPicking) { if (Light == null && Heavy == null) { return; } CheckAlignment(); //找到轻重标记中最高峰所在transaction SrmTransition maxTrans = null; SrmTransition another = null; if (Light == null) { maxTrans = Heavy; } else if (Heavy == null) { maxTrans = Light; } else if (LightMaxIntensity > HeavyMaxIntensity) { maxTrans = Light; another = Heavy; } else { maxTrans = Heavy; another = Light; } peakPicking.Select(maxTrans); //设置另外一半相对应的区域。 if (another != null) { for (int i = 0; i < maxTrans.Intensities.Count; i++) { another.Intensities[i].Enabled = maxTrans.Intensities[i].Enabled; } } }
/// <summary> /// 根据给定算法进行区间选择 /// </summary> /// <param name="peakPicking">区间选择算法</param> /// <param name="deductBaseLine">是否需要去除基线</param> public void PeakPicking(IRangeSelection peakPicking, SrmOptions options) { //首先,每个独立进行peakpicking。 foreach (var product in ProductIonPairs) { product.PeakPicking(peakPicking); product.CalculateRatio(options); product.Enabled = false; } if (options.RefineData && ProductIonPairs.Count > 1) { //如果所有scan都是false,直接返回。 if (!ProductIonPairs.Any(m => m.EnabledScanCount > 0)) { return; } int maxIndex; if (IsPaired) { //选择correlation最高的一个作为标准 var maxCorr = double.MinValue; maxIndex = -1; for (int i = 0; i < ProductIonPairs.Count; i++) { if (ProductIonPairs[i].EnabledScanCount == 0) { continue; } if (maxCorr < ProductIonPairs[i].RegressionCorrelation) { maxCorr = ProductIonPairs[i].RegressionCorrelation; maxIndex = i; } } } else//只有轻标结果 { var maxIntensity = 0.0; maxIndex = 0; for (int i = 0; i < ProductIonPairs.Count; i++) { var intensities = (from s in ProductIonPairs[i].Light.Intensities where s.Enabled select s.Intensity).ToList(); if (intensities.Count > 0) { var maxInt = intensities.Max(); if (maxIntensity < maxInt) { maxIntensity = maxInt; maxIndex = i; } } } } var rts = (from m in ProductIonPairs[maxIndex].Light.Intensities where m.Enabled orderby m.RetentionTime select m.RetentionTime).ToList(); this.SetEnabledRetentionTimeRange(rts.First(), rts.Last()); } this.CalculateTransactionRatio(options); }