예제 #1
0
        private void btnLoad_Click(object sender, EventArgs e)
        {
            if (rawFile.Exists)
            {
                if (reader != null)
                {
                    reader.Close();
                }
                reader   = RawFileFactory.GetRawFileReader(rawFile.FullName);
                lastScan = reader.GetLastSpectrumNumber();
            }

            if (ms3MatchedFile.Exists)
            {
                items = (from line in File.ReadAllLines(ms3MatchedFile.FullName).Skip(1)
                         let parts = line.Split('\t')
                                     let pm = int.Parse(parts[6])
                                              where pm > 0
                                              select new MS3MatchItem()
                {
                    Category = parts[0],
                    Sequence1 = parts[1],
                    Scan1 = int.Parse(parts[2]),
                    Sequence2 = parts[3],
                    Scan2 = int.Parse(parts[4]),
                    MinMz = parts[5].StringAfter(">=").Trim(),
                    PrecursorMatched = pm,
                    MS3Matched = int.Parse(parts[7])
                }).ToList();

                gvPeptides.DataSource = items;
            }
        }
        public FileData3 ReadFromFile(string fileName)
        {
            FileData3 result = new FileData3();

            result.FileName = new FileInfo(fileName).Name;

            rawFile.Open(fileName);
            try
            {
                for (int scan = rawFile.GetFirstSpectrumNumber(); scan <= rawFile.GetLastSpectrumNumber(); scan++)
                {
                    PeakList <Peak> pkl = rawFile.GetPeakList(scan, minPeakMz - 1, maxPeakMz + 1);

                    result.AddPeaks(minPeakMz, maxPeakMz, scan, pkl);
                }
            }
            finally
            {
                rawFile.Close();
            }

            return(result);
        }
예제 #3
0
        private void btnLoad_Click(object sender, EventArgs e)
        {
            if (rawFile.Exists)
            {
                if (reader != null)
                {
                    reader.Close();
                }
                reader   = RawFileFactory.GetRawFileReader(rawFile.FullName);
                lastScan = reader.GetLastSpectrumNumber();
            }

            if (ms3xcorrFile.Exists)
            {
                items = (from line in File.ReadAllLines(ms3xcorrFile.FullName).Skip(1)
                         let parts = line.Split('\t')
                                     select new MS3XcorrItem()
                {
                    Category = parts[0],
                    Sequence1 = parts[1],
                    MS2Scan1 = int.Parse(parts[2]),
                    MS2Precursor1 = double.Parse(parts[3]),
                    MS3Scan1 = int.Parse(parts[4]),
                    MS3Precursor1 = double.Parse(parts[5]),
                    Sequence2 = parts[6],
                    MS2Scan2 = int.Parse(parts[7]),
                    MS2Precursor2 = double.Parse(parts[8]),
                    MS3Scan2 = int.Parse(parts[9]),
                    MS3Precursor2 = double.Parse(parts[10]),
                    Xcorr = double.Parse(parts[11])
                }).ToList();

                items.RemoveAll(m => m.MS3Precursor1 < 250);
                items = items.OrderBy(m => m.Category).ThenBy(m => m.Sequence1).ThenBy(m => m.MS3Precursor1).ToList();
                gvPeptides.DataSource = items;
            }
        }
        public override IEnumerable <string> Process(string fileName)
        {
            string resultFile = new FileInfo(targetDir + "\\" + FileUtils.ChangeExtension(new FileInfo(fileName).Name, ".txt")).FullName;

            reader.Open(fileName);
            try
            {
                using (StreamWriter sw = new StreamWriter(resultFile))
                {
                    sw.NewLine = "\n";
                    sw.WriteLine();
                    sw.WriteLine("FUNCTION 1");

                    int firstScan = reader.GetFirstSpectrumNumber();
                    int lastScan  = reader.GetLastSpectrumNumber();

                    for (int i = firstScan; i <= lastScan; i++)
                    {
                        var pkl = reader.GetPeakList(i);
                        sw.WriteLine("");
                        sw.WriteLine("Scan\t\t{0}", i);
                        sw.WriteLine("Retention Time\t{0:0.000}", reader.ScanToRetentionTime(i));
                        sw.WriteLine("");
                        foreach (var peak in pkl)
                        {
                            sw.WriteLine("{0:0.0000}\t{1:0}", peak.Mz, peak.Intensity);
                        }
                    }
                }
            }
            finally
            {
                reader.Close();
            }
            return(new string[] { resultFile });
        }
예제 #5
0
        private List <SrmScan> GetMRMScans(string directory)
        {
            var fileName = GetPeakFileName(directory);

            if (File.Exists(fileName))
            {
                SetProgressMessage("Reading scan from " + fileName + " ...");
                return(new SrmScanFileFormat().ReadFromFile(fileName));
            }
            else
            {
                List <PeakList <Peak> > pkls = new List <PeakList <Peak> >();

                SetProgressMessage("Reading scan from " + directory + " ...");
                IRawFile reader = RawFileFactory.GetRawFileReader(directory);
                try
                {
                    var firstCount = reader.GetFirstSpectrumNumber();
                    var lastCount  = reader.GetLastSpectrumNumber();

                    Progress.SetRange(firstCount, lastCount);
                    Progress.SetPosition(firstCount);
                    for (int i = firstCount; i <= lastCount; i++)
                    {
                        if (reader.GetMsLevel(i) != 2)
                        {
                            continue;
                        }

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

                        Progress.Increment(1);

                        var pkl       = reader.GetPeakList(i);
                        var precursor = reader.GetPrecursorPeak(i);
                        if (precursor != null)
                        {
                            pkl.PrecursorMZ     = precursor.Mz;
                            pkl.PrecursorCharge = precursor.Charge;
                        }
                        pkl.ScanTimes.Add(new ScanTime(i, reader.ScanToRetentionTime(i)));

                        pkls.Add(pkl);
                    }

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

                    pkls.ForEach(m => m.ForEach(n => result.Add(new SrmScan(m.PrecursorMZ, n.Mz, m.ScanTimes[0].RetentionTime, n.Intensity, true))));

                    new SrmScanFileFormat().WriteToFile(fileName, result);

                    SetProgressMessage("finished.");

                    return(result);
                }
                finally
                {
                    reader.Close();
                }
            }
        }
예제 #6
0
        public void Quantify(string rawFileName, List <IIdentifiedSpectrum> spectra, string detailDir)
        {
            if (!Directory.Exists(detailDir))
            {
                Directory.CreateDirectory(detailDir);
            }

            var experimental = RawFileFactory.GetExperimental(rawFileName);

            Dictionary <string, DifferentRetentionTimeEnvelopes> spectrumKeyMap = new Dictionary <string, DifferentRetentionTimeEnvelopes>();

            Dictionary <SilacEnvelopes, List <IIdentifiedSpectrum> > envelopeSpectrumGroup = new Dictionary <SilacEnvelopes, List <IIdentifiedSpectrum> >();

            double precursorPPM = GetPrecursorPPM(spectra);

            try
            {
                _rawReader.Open(rawFileName);

                int firstScanNumber = _rawReader.GetFirstSpectrumNumber();
                int lastScanNumber  = _rawReader.GetLastSpectrumNumber();

                Progress.SetRange(1, spectra.Count);
                int pepCount = 0;

                for (int s = 0; s < spectra.Count; s++)
                {
                    Console.WriteLine(s);
                    IIdentifiedSpectrum spectrum = spectra[s];

                    SilacQuantificationSummaryItem.ClearAnnotation(spectrum);

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

                    int startScan = spectrum.Query.FileScan.FirstScan;
                    if (startScan > lastScanNumber)
                    {
                        spectrum.GetOrCreateQuantificationItem().RatioStr = "OUT_OF_RANGE";
                        continue;
                    }

                    Progress.SetPosition(pepCount++);

                    IIdentifiedPeptide sp = spectrum.Peptide;

                    string seq = GetMatchSequence(spectrum);

                    IPeptideInfo peptideInfo = new IdentifiedPeptideInfo(seq, spectrum.TheoreticalMH, spectrum.Query.Charge);

                    SilacCompoundInfo sci = GetSilacCompoundInfo(peptideInfo);

                    //如果轻重离子理论质荷比一样,忽略
                    if (!sci.IsSilacData())
                    {
                        spectrum.GetOrCreateQuantificationItem().RatioStr = "NOT_SILAC";
                        continue;
                    }

                    //如果轻重离子理论质荷比与观测值不一致,忽略
                    if (!sci.IsMzEquals(spectrum.ObservedMz, MAX_DELTA_MZ))
                    {
                        ValidateModifications(seq);

                        spectrum.GetOrCreateQuantificationItem().RatioStr = "WRONG_IDENTIFICATION";
                        continue;
                    }

                    //如果没有找到相应的FullScan,忽略
                    int identifiedFullScan = _rawReader.FindPreviousFullScan(startScan, firstScanNumber);
                    if (-1 == identifiedFullScan)
                    {
                        spectrum.GetOrCreateQuantificationItem().RatioStr = "NO_PROFILE";
                        continue;
                    }

                    DifferentRetentionTimeEnvelopes pkls = FindEnvelopes(spectrumKeyMap, spectrum, sci);

                    SilacEnvelopes envelope = pkls.FindSilacEnvelope(identifiedFullScan);

                    //如果该scan被包含在已经被定量的结果中,忽略
                    if (envelope != null)
                    {
                        envelope.SetScanIdentified(identifiedFullScan, spectrum.IsExtendedIdentification());
                        envelopeSpectrumGroup[envelope].Add(spectrum);
                        continue;
                    }

                    //从原始文件中找出该spectrum的定量信息
                    int maxIndex = Math.Min(option.ProfileLength - 1, pkls.LightProfile.FindMaxIndex());

                    double mzTolerance = PrecursorUtils.ppm2mz(sci.Light.Mz, option.PPMTolerance);

                    //如果FullScan没有相应的离子,忽略。(鉴定错误或者扩展定量时候,会出现找不到pair的现象)
                    SilacPeakListPair splp = GetLightHeavyPeakList(_rawReader, sci, maxIndex, mzTolerance, identifiedFullScan);
                    if (null == splp)
                    {
                        spectrum.GetOrCreateQuantificationItem().RatioStr = "NO_PROFILE";
                        continue;
                    }

                    splp.IsIdentified             = true;
                    splp.IsExtendedIdentification = spectrum.IsExtendedIdentification();

                    SilacEnvelopes envelopes = new SilacEnvelopes();
                    envelopes.Add(splp);

                    //向前查找定量信息
                    int fullScan   = identifiedFullScan;
                    int scanNumber = 0;
                    while ((fullScan = _rawReader.FindPreviousFullScan(fullScan - 1, firstScanNumber)) != -1)
                    {
                        if (_rawReader.IsBadDataScan(fullScan))
                        {
                            continue;
                        }
                        scanNumber++;
                        var item = GetLightHeavyPeakList(_rawReader, sci, maxIndex, mzTolerance, fullScan, scanNumber <= MinScanNumber);
                        if (null == item)
                        {
                            break;
                        }

                        envelopes.Add(item);
                    }
                    envelopes.Reverse();

                    //向后查找定量信息
                    fullScan   = identifiedFullScan;
                    scanNumber = 0;
                    while ((fullScan = _rawReader.FindNextFullScan(fullScan + 1, lastScanNumber)) != -1)
                    {
                        if (_rawReader.IsBadDataScan(fullScan))
                        {
                            continue;
                        }
                        scanNumber++;
                        var item = GetLightHeavyPeakList(_rawReader, sci, maxIndex, mzTolerance, fullScan, scanNumber <= MinScanNumber);
                        if (null == item)
                        {
                            break;
                        }

                        envelopes.Add(item);
                    }

                    //对每个scan计算轻重的离子丰度
                    envelopes.ForEach(m => m.CalculateIntensity(pkls.LightProfile, pkls.HeavyProfile));

                    pkls.Add(envelopes);

                    envelopeSpectrumGroup.Add(envelopes, new List <IIdentifiedSpectrum>());
                    envelopeSpectrumGroup[envelopes].Add(spectrum);
                }
            }
            finally
            {
                _rawReader.Close();
            }

            foreach (string key in spectrumKeyMap.Keys)
            {
                DifferentRetentionTimeEnvelopes pkls = spectrumKeyMap[key];

                foreach (SilacEnvelopes envelopes in pkls)
                {
                    if (0 == envelopes.Count)
                    {
                        continue;
                    }

                    List <IIdentifiedSpectrum> mps = envelopeSpectrumGroup[envelopes];

                    double mzTolerance = PrecursorUtils.ppm2mz(mps[0].Query.ObservedMz, option.PPMTolerance);

                    string scanStr = GetScanRange(envelopes);

                    string resultFilename = detailDir + "\\" + mps[0].Query.FileScan.Experimental + "." + PeptideUtils.GetPureSequence(mps[0].Sequence) + "." + mps[0].Query.Charge + scanStr + ".silac";

                    IPeptideInfo      peptideInfo = new IdentifiedPeptideInfo(mps[0].GetMatchSequence(), mps[0].TheoreticalMH, mps[0].Query.Charge);
                    SilacCompoundInfo sci         = GetSilacCompoundInfo(peptideInfo);

                    SilacQuantificationSummaryItem item = new SilacQuantificationSummaryItem(sci.Light.IsSample);
                    item.RawFilename          = rawFileName;
                    item.SoftwareVersion      = this.SoftwareVersion;
                    item.PeptideSequence      = mps[0].Sequence;
                    item.Charge               = mps[0].Charge;
                    item.LightAtomComposition = sci.Light.Composition.ToString();
                    item.HeavyAtomComposition = sci.Heavy.Composition.ToString();
                    item.LightProfile         = pkls.LightProfile;
                    item.HeavyProfile         = pkls.HeavyProfile;
                    item.ObservedEnvelopes    = envelopes;

                    item.ValidateScans(sci, precursorPPM);

                    item.Smoothing();
                    item.CalculateRatio();

                    new SilacQuantificationSummaryItemXmlFormat().WriteToFile(resultFilename, item);

                    int maxScoreItemIndex = FindMaxScoreItemIndex(mps);

                    for (int i = 0; i < mps.Count; i++)
                    {
                        if (maxScoreItemIndex == i)
                        {
                            item.AssignToAnnotation(mps[i], resultFilename);
                        }
                        else
                        {
                            item.AssignDuplicationToAnnotation(mps[i], resultFilename);
                        }
                    }
                }
            }

            foreach (IIdentifiedSpectrum mph in spectra)
            {
                mph.InitializeRatioEnabled();
            }
        }
예제 #7
0
        public override IEnumerable <string> Process(string targetDir)
        {
            foreach (var raw in rawFiles)
            {
                List <SimplePeakChro> waitingPeaks = new List <SimplePeakChro>();
                foreach (var peak in targetPeaks)
                {
                    string file = GetTargetFile(targetDir, raw, peak);
                    if (force || !File.Exists(file))
                    {
                        waitingPeaks.Add(peak);
                    }
                    else
                    {
                        var p = new SimplePeakChroXmlFormat().ReadFromFile(file);
                        peak.MaxRetentionTime = p.MaxRetentionTime;
                        peak.Peaks            = p.Peaks;
                    }
                }

                if (waitingPeaks.Count == 0)
                {
                    continue;
                }

                rawReader.Open(raw);
                try
                {
                    int firstScan = rawReader.GetFirstSpectrumNumber();
                    int lastScan  = rawReader.GetLastSpectrumNumber();

                    var lastRt = rawReader.ScanToRetentionTime(lastScan);

                    waitingPeaks.ForEach(m =>
                    {
                        m.Peaks.Clear();
                        m.MaxRetentionTime = lastRt;
                    });

                    Progress.SetMessage("Processing chromotograph extracting...");
                    Progress.SetRange(firstScan, lastScan);
                    for (int scan = firstScan; scan <= lastScan; scan++)
                    {
                        if (rawReader.GetMsLevel(scan) != 1)
                        {
                            continue;
                        }
                        Progress.SetPosition(scan);

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

                        PeakList <Peak> pkl = rawReader.GetPeakList(scan);
                        double          rt  = rawReader.ScanToRetentionTime(scan);

                        foreach (var peak in waitingPeaks)
                        {
                            var env = pkl.FindPeak(peak.Mz, peak.MzTolerance);

                            Peak findPeak = new Peak(peak.Mz, 0.0, 0);
                            if (env.Count > 0)
                            {
                                if (env.Count == 1)
                                {
                                    findPeak = env[0];
                                }
                                else
                                {
                                    var charge = env.FindCharge(peak.Charge);
                                    if (charge.Count > 0)
                                    {
                                        if (charge.Count == 1)
                                        {
                                            findPeak = charge[0];
                                        }
                                        else
                                        {
                                            findPeak = charge.FindMaxIntensityPeak();
                                        }
                                    }
                                    else
                                    {
                                        findPeak = env.FindMaxIntensityPeak();
                                    }
                                }
                            }

                            peak.Peaks.Add(new ScanPeak()
                            {
                                Mz            = findPeak.Mz,
                                Intensity     = findPeak.Intensity,
                                Scan          = scan,
                                RetentionTime = rt,
                                Charge        = findPeak.Charge,
                                PPMDistance   = PrecursorUtils.mz2ppm(peak.Mz, findPeak.Mz - peak.Mz)
                            });
                        }
                    }

                    waitingPeaks.ForEach(m => m.TrimPeaks(minRetentionTime));
                }
                finally
                {
                    rawReader.Close();
                }

                Progress.SetMessage("Saving ... ");
                foreach (var peak in waitingPeaks)
                {
                    string file = GetTargetFile(targetDir, raw, peak);
                    new SimplePeakChroXmlFormat().WriteToFile(file, peak);
                }
                Progress.SetMessage("Finished.");
                Progress.End();
            }

            return(new string[] { targetDir });
        }
예제 #8
0
        public override IEnumerable <string> Process(string rawFilename)
        {
            string ms1Filename      = GetResultFilename(rawFilename);
            string ms1IndexFilename = ms1Filename + ".index";

            rawFile.Open(rawFilename);
            try
            {
                int firstScan = rawFile.GetFirstSpectrumNumber();
                int lastScan  = rawFile.GetLastSpectrumNumber();

                int firstFullScan = 0;
                for (firstFullScan = firstScan; firstFullScan < lastScan; firstFullScan++)
                {
                    if (rawFile.GetMsLevel(firstFullScan) == 1)
                    {
                        break;
                    }
                }

                if (firstFullScan >= lastScan)
                {
                    return(new List <string>());
                }

                Progress.SetRange(firstScan, lastScan);

                using (var sw = new StreamWriter(ms1Filename))
                {
                    //write header
                    sw.Write("H\tCreationDate\t{0:m/dd/yyyy HH:mm:ss}\n", DateTime.Now);
                    sw.Write("H\tExtractor\t{0}\n", GetProgramName());
                    sw.Write("H\tExtractorVersion\t{0}\n", GetProgramVersion());
                    sw.Write("H\tComments\t{0} written by Quanhu Sheng, 2008-2009\n", GetProgramName());
                    sw.Write("H\tExtractorOptions\tMS1\n");
                    sw.Write("H\tAcquisitionMethod\tData-Dependent\n");
                    sw.Write("H\tDataType\tCentriod\n");
                    sw.Write("H\tScanType\tMS1\n");
                    sw.Write("H\tFirstScan\t{0}\n", firstScan);
                    sw.Write("H\tLastScan\t{0}\n", lastScan);

                    using (var swIndex = new StreamWriter(ms1IndexFilename))
                    {
                        for (int scan = firstScan; scan <= lastScan; scan++)
                        {
                            if (Progress.IsCancellationPending())
                            {
                                throw new UserTerminatedException();
                            }

                            Progress.SetPosition(scan);

                            if (rawFile.GetMsLevel(scan) == 1)
                            {
                                sw.Flush();

                                swIndex.Write("{0}\t{1}\n", scan, sw.BaseStream.Position);

                                sw.Write("S\t{0}\t{0}\n", scan);
                                sw.Write("I\tRetTime\t{0:0.####}\n", rawFile.ScanToRetentionTime(scan));

                                PeakList <Peak> pkl = rawFile.GetPeakList(scan);
                                foreach (Peak p in pkl)
                                {
                                    sw.Write("{0:0.0000} {1:0.0} {2}\n", p.Mz, p.Intensity, p.Charge);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                rawFile.Close();
            }

            Progress.End();

            return(new[] { ms1Filename });
        }
 public void CloseFile()
 {
     reader.Close();
 }
        public override IEnumerable <string> Process(string targetDir)
        {
            foreach (var raw in rawFiles)
            {
                List <RetentionTimePeak> waitingPeaks = new List <RetentionTimePeak>();
                foreach (var peak in targetPeaks)
                {
                    string file = GetTargetFile(targetDir, raw, peak);
                    if (force || !File.Exists(file))
                    {
                        waitingPeaks.Add(peak);
                    }
                }

                if (waitingPeaks.Count == 0)
                {
                    continue;
                }

                rawReader.Open(raw);
                try
                {
                    int firstScan = rawReader.GetFirstSpectrumNumber();
                    int lastScan  = rawReader.GetLastSpectrumNumber();

                    waitingPeaks.ForEach(m => m.Chromotographs.Clear());

                    for (int scan = firstScan; scan <= lastScan; scan++)
                    {
                        if (rawReader.GetMsLevel(scan) != 1)
                        {
                            continue;
                        }

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

                        PeakList <Peak> pkl = rawReader.GetPeakList(scan);

                        double rt = rawReader.ScanToRetentionTime(scan);
                        var    st = new ScanTime(scan, rt);

                        foreach (var peak in waitingPeaks)
                        {
                            var env = pkl.FindEnvelopeDirectly(peak.PeakEnvelope, peak.MzTolerance, () => new Peak());
                            env.ScanTimes.Add(st);
                            peak.Chromotographs.Add(env);
                        }
                    }

                    waitingPeaks.ForEach(m => m.TrimPeaks());
                }
                finally
                {
                    rawReader.Close();
                }

                foreach (var peak in waitingPeaks)
                {
                    string file = GetTargetFile(targetDir, raw, peak);
                    new RetentionTimePeakXmlFormat().WriteToFile(file, peak);
                }
            }

            return(new string[] { targetDir });
        }
        public override void Update(object sender, UpdateQuantificationItemEventArgs e)
        {
            var summary = e.Item as O18QuantificationSummaryItem;

            if (summary == null)
            {
                throw new ArgumentNullException("UpdateQuantificationItemEventArgs.Item cannot be null");
            }

            panel.InitGraphPane(this.title, "m/z", "Intensity", true, 0.0);

            ZedGraphicExtension.ClearData(zgcGraph, false);
            try
            {
                var envelope = summary.ObservedEnvelopes.Find(m => m.IsSelected);
                if (envelope == null)
                {
                    return;
                }

                panel.InitGraphPane(this.title + ", Scan=" + envelope.Scan.ToString(), "m/z", "Intensity", true, 0.0);

                double minMz = envelope[0].Mz - 1.0;
                double maxMz = envelope[envelope.Count - 1].Mz + 1.0;

                zgcGraph.GraphPane.XAxis.Scale.Min = minMz;
                zgcGraph.GraphPane.XAxis.Scale.Max = maxMz;

                var ppl = new PointPairList();
                envelope.ForEach(p => { if (p.Intensity > 0)
                                        {
                                            ppl.Add(p.Mz, p.Intensity);
                                        }
                                 });
                panel.AddIndividualLine("Isotopic Envelope", ppl, Color.Red);
                panel.AddTextUp(ppl, 5, (m => m.X.ToString("0.0000")));

                var halfMax = (from env in envelope
                               select env.Intensity).Max() / 2;
                ppl.Clear();
                envelope.ForEach(p => { if (p.Intensity == 0)
                                        {
                                            ppl.Add(p.Mz, halfMax);
                                        }
                                 });
                panel.AddIndividualLine("", ppl, defaultColor: Color.Red, dStyle: DashStyle.Dash);
                panel.AddTextUp(ppl, 5, (m => m.X.ToString("0.0000")));

                if (File.Exists(summary.RawFilename))
                {
                    if (rawFile == null)
                    {
                        rawFile = RawFileFactory.GetRawFileReader(summary.RawFilename);
                    }
                    else if (!rawFile.FileName.Equals(summary.RawFilename))
                    {
                        rawFile.Close();
                        rawFile = RawFileFactory.GetRawFileReader(summary.RawFilename);
                    }

                    PeakList <Peak> pkl    = rawFile.GetPeakList(envelope.ScanTimes[0].Scan);
                    var             pplRaw = new PointPairList();
                    for (int i = 0; i < pkl.Count; i++)
                    {
                        if (pkl[i].Mz < minMz)
                        {
                            continue;
                        }
                        else if (pkl[i].Mz > maxMz)
                        {
                            break;
                        }
                        pplRaw.Add(pkl[i].Mz, -pkl[i].Intensity);
                    }

                    panel.AddIndividualLine("PeakList From RawFile", pplRaw, Color.Blue);
                    panel.AddTextDown(pplRaw, 5, (m => m.X.ToString("0.0000")));

                    /*
                     * foreach (var p in ppl)
                     * {
                     * if (p.Y == 0)
                     * {
                     *  double ppm = double.MaxValue;
                     *  double ppmAbs = Math.Abs(ppm);
                     *  foreach (var pp in pplRaw)
                     *  {
                     *    double ppmCur = PrecursorUtils.mz2ppm(pp.X, pp.X - p.X);
                     *    double ppmCurAbs = Math.Abs(ppmCur);
                     *    if (Math.Abs(ppmCur) < ppmAbs)
                     *    {
                     *      ppm = ppmCur;
                     *      ppmAbs = ppmCurAbs;
                     *    }
                     *
                     *    if (pp.X > p.X)
                     *    {
                     *      break;
                     *    }
                     *  }
                     *
                     *  p.Z = ppm;
                     * }
                     * }
                     */
                }
            }
            finally
            {
                ZedGraphicExtension.UpdateGraph(zgcGraph);
            }
        }