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;
                }
            }
        }
Exemple #2
0
        /// <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);
        }