public void CalculateRatio(SrmOptions options)
        {
            if (this.IsPaired)
            {
                CalculateRatioAndArea(options.DeductBaseLine);

                if (options.RatioByArea)
                {
                    this.Ratio = this.LightArea / this.HeavyArea;
                }
            }
        }
示例#2
0
        protected override IFileProcessor GetFileProcessor()
        {
            SrmOptions options = new SrmOptions()
            {
                DistillerSoftware                  = this.Text,
                AskForSmooth                       = smooth.Checked,
                DeductBaseLine                     = deductBaseLine.Checked,
                RangeSelectionByNoise              = peakPickingByBaseline.Checked,
                ValidationMinSignalToNoise         = validateSignalToNoise.Value,
                ValidationMinRegressionCorrelation = validateCorrel.Value,
                MzTolerance            = mzTolerance.Value,
                MinValidTransitionPair = minValidTransactionPair.Value,
                //MinRetentionWindowInMinute = 0,
                MinEnabledScan = minEnabledScan.Value,
                HasDecoy       = hasDecoy.Checked,
                DecoyPattern   = decoyPattern.Text,
                RatioByArea    = cbRatioByArea.Checked,
                RefineData     = cbRefinePeakPicking.Checked
            };

            if (peakPickingByBaseline.Checked)
            {
                options.MinPeakPickingSignalToNoise = signalToNoise.Value;
                options.LowestPercentageForNoise    = baseLinePercentage.Value / 100;
            }
            else
            {
                options.PercentageOfHighestPeak = highestPeakPercentage.Value / 100;
            }

            if (clusterByPredefine.Checked)
            {
                options.DefinitionFile       = predefinedFile.FullName;
                options.DefinitionFileFormat = formats.SelectedItem.GetName();
            }
            else
            {
                options.PrecursorMassDistance          = ParseGaps();
                options.RetentionTimeToleranceInSecond = rtToleranceInSecond.Value;
            }

            options.RawFiles = dataDirs.SelectPathMap;
            options.ToXml(true).Save(this.GetOriginFile());

            return(new SrmDistiller());
        }
示例#3
0
 public SrmPairedResult()
 {
     Options  = new SrmOptions();
     Modified = false;
 }
示例#4
0
        public override IEnumerable <string> Process(string optionFile)
        {
            var targetDirectory = Path.GetDirectoryName(optionFile);

            options = new SrmOptions();
            options.FromXml(XElement.Load(optionFile));

            var keys = options.RawFiles.Keys.ToList();

            foreach (var key in keys)
            {
                if (string.IsNullOrEmpty(options.RawFiles[key]))
                {
                    this.options.RawFiles[key] = key;
                }
            }


            List <string> result = new List <string>();

            bool ignoreWarning = false;

            Dictionary <string, List <string> > map = GetGroupMap();

            int totalCount = options.RawFiles.Count;
            int curIndex   = 0;

            foreach (var groupKey in map.Keys)
            {
                var mrmFile = GetMrmFileName(targetDirectory, groupKey);

                SrmPairedResult taskResult = new SrmPairedResult()
                {
                    Options = this.options
                };

                var files = map[groupKey];
                foreach (var rawFile in files)
                {
                    curIndex++;
                    this.prefix = MyConvert.Format("Processing {0}/{1}", curIndex, totalCount);
                    SetProgressMessage(rawFile);

                    Console.WriteLine(rawFile);
                    if (Progress.IsCancellationPending())
                    {
                        throw new UserTerminatedException();
                    }

                    //读取所有scan信息
                    List <SrmScan> mrmIntensities = GetMRMScans(rawFile);

                    //mrmIntensities.RemoveAll(m => !( Math.Abs(m.PrecursorMz - 767.4) < 0.1 || Math.Abs(m.PrecursorMz - 770.9) < 0.1));

                    SetProgressMessage("building mrm groups ...");

                    var mrms = ScanToTransaction(mrmIntensities);

                    //将MRMPeptideItem转换为MRMPairedPeptideItem对象
                    SrmPairedResult mrmPairs;

                    if (File.Exists(options.DefinitionFile))
                    {
                        mrmPairs = BuildResultBasedOnDefinedFile(ref ignoreWarning, mrms);
                    }
                    else
                    {
                        mrmPairs = BuildResultBasedOnRealData(mrms);
                    }

                    mrmPairs.Options = this.options;
                    mrmPairs.PeakPicking();

                    //固定阈值筛选。
                    var filter = mrmPairs.Options.GetFilter();
                    mrmPairs.ForEach(m =>
                    {
                        m.ProductIonPairs.ForEach(n => n.Enabled = filter.Accept(n));
                    });

                    taskResult.AddRange(mrmPairs);
                }

                if (options.HasDecoy)
                {
                    //设置decoy标签
                    taskResult.AssignDecoy();

                    //是否有真实的decoy transition
                    var hasDecoy = taskResult.Any(m => m.ProductIonPairs.Any(n => n.IsDecoy));
                    if (hasDecoy)
                    {
                        //选取所有transition pairs,这些transition pairs有线性回归比值和回归系数
                        var pairs = (from m in taskResult
                                     from n in m.ProductIonPairs
                                     where n.IsPaired && n.Enabled
                                     orderby n.RegressionCorrelation descending
                                     select n).ToList();

                        //如果有这些pair,那么,那些不成pair的transition全部设置为disabled
                        if (pairs.Count > 0)
                        {
                            taskResult.ForEach(m => m.ProductIonPairs.ForEach(n => n.Enabled = n.Enabled && n.IsPaired));
                        }

                        //计算每个pair的qvalue
                        TargetFalseDiscoveryRateCalculator calc = new TargetFalseDiscoveryRateCalculator();
                        var decoyCount  = pairs.Count(m => m.IsDecoy);
                        var targetCount = pairs.Count - decoyCount;

                        for (int d = pairs.Count - 1; d >= 0; d--)
                        {
                            pairs[d].Qvalue = calc.Calculate(decoyCount, targetCount);
                            if (pairs[d].IsDecoy)
                            {
                                decoyCount--;
                            }
                            else
                            {
                                targetCount--;
                            }
                        }

                        //找到qvalue小于给定fdr的pair,qvalue大于该pair的全部设置为disable
                        for (int d = pairs.Count - 1; d >= 0; d--)
                        {
                            if (!pairs[d].IsDecoy && pairs[d].Qvalue <= options.TransitionFdr)
                            {
                                for (int d2 = d + 1; d2 < pairs.Count - 1; d2++)
                                {
                                    pairs[d2].Enabled = false;
                                }
                                break;
                            }
                        }
                    }
                }

                taskResult.ForEach(m =>
                {
                    m.CheckEnabled(this.options.OutlierEvalue, this.options.MinValidTransitionPair);
                });

                taskResult.CalculatePeptideRatio();

                taskResult.Sort((m1, m2) => m1.LightPrecursorMZ.CompareTo(m2.LightPrecursorMZ));

                new SrmPairedResultXmlFormat().WriteToFile(mrmFile, taskResult);
                result.Add(mrmFile);
            }

            Progress.End();

            return(result);
        }
示例#5
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);
        }
示例#6
0
 /// <summary>
 /// 计算每个离子对的轻重比及面积
 /// </summary>
 /// <param name="deductBaseLine">是否去除基线。当去除基线时,结果为Light = a * Heavy,过原点。否则为Light = a * Heavy + b,b为截距。</param>
 public void CalculateTransactionRatio(SrmOptions options)
 {
     this.ProductIonPairs.ForEach(m => m.CalculateRatio(options));
 }