示例#1
0
        public virtual void Analyze()
        {
            if (product == null)
            {
                return;
            }

            product.MaxScore();
            ISpectrum        spectrum = product.GetSpectrum();
            HashSet <string> seen     = new HashSet <string>();

            foreach (IGlycoPeptideScore g in product.GetResults())
            {
                // remove redudant
                string structure = string.Join("_", g.GetGlycoPeptide().GetGlycan().GetStructure());
                string seq       = g.GetGlycoPeptide().GetPeptide().GetSequence();
                if (!seen.Contains(structure + seq))
                {
                    seen.Add(structure + seq);
                }
                else
                {
                    continue;
                }

                writer.Write(spectrum.GetScanNum().ToString() + ", ");
                writer.Write(seq + ", ");
                writer.Write(structure + ", ");
                writer.Write(g.GetScore().ToString() + ", ");
                writer.Write((spectrum as ISpectrumMSn).GetParentMZ().ToString() + ", ");
                writer.WriteLine((spectrum as ISpectrumMSn).GetParentCharge().ToString());
            }
        }
        public void Analyze()
        {
            if (product == null)
            {
                return;
            }

            ISpectrum spectrum = product.GetSpectrum();

            foreach (IAnnotatedPeak peak in product.GetResults())
            {
                HashSet <string> seen = new HashSet <string>();
                foreach (IGlycoPeptide g in peak.GetFragmentations())
                {
                    // remove redudant
                    string structure = string.Join("_", g.GetGlycan().GetStructure());
                    string seq       = g.GetPeptide().GetSequence();
                    if (!seen.Contains(structure + seq))
                    {
                        seen.Add(structure + seq);
                    }
                    else
                    {
                        continue;
                    }

                    writer.WriteLine(spectrum.GetScanNum().ToString() + ", ");
                    writer.WriteLine(peak.GetMZ().ToString() + ", ");
                    writer.WriteLine(peak.GetIntensity().ToString() + ", ");
                    writer.WriteLine(structure + ", ");
                    writer.WriteLine(seq + ", ");
                }
            }
        }
示例#3
0
        public void Add(ISpectrum spectrum, List <IScore> score)
        {
            int scan = spectrum.GetScanNum();

            spectrumTable[scan] = spectrum;
            scoreTable[scan]    = score;
        }
        public List <GUI> FindGlucoseUnits(ISpectrum spectrum)
        {
            List <GUI>   units = new List <GUI>();
            List <IPeak> peaks = spectrum.GetPeaks();
            int          scan  = spectrum.GetScanNum();

            for (int i = 0; i < Glucose.Length; i++)
            {
                double mass          = Glucose[i];
                double bestIntensity = 0;
                IPeak  bestPeak      = null;

                List <double> mzCandidates = Calculator.To.ComputeMZ(mass, maxCharge);
                foreach (double mz in mzCandidates)
                {
                    int idx = BinarySearchPoints(peaks, mz);
                    if (idx > 0 && peaks[idx].GetIntensity() > bestIntensity)
                    {
                        bestIntensity = peaks[idx].GetIntensity();
                        bestPeak      = peaks[idx];
                    }
                }

                if (bestPeak is null)
                {
                    continue;
                }
                units.Add(new GUI(i + 2, scan, bestPeak));
            }

            return(units);
        }
示例#5
0
        public List <IResult> Search(ISpectrum spectrum)
        {
            List <IResult> results = new();

            ISpectrum spec = spectrumProcessor.Process(spectrum);

            envelopeProcessor.Init(spec);

            foreach (IGlycanPeak glycan in glycans)
            {
                IResult result        = null;
                double  bestIntensity = 0;
                double  bestScore     = 0;
                for (int charge = 1; charge <= maxCharge; charge++)
                {
                    List <double> mzList = Calculator.To.ComputeMZ(glycan.HighestPeak(), charge);
                    foreach (double mz in mzList)
                    {
                        List <IPeak> targets = envelopeProcessor.Search(mz);
                        if (targets.Count == 0)
                        {
                            continue;
                        }

                        SortedDictionary <int, List <IPeak> > clusters =
                            envelopeProcessor.Cluster(mz, charge);

                        IResult temp      = monoisotopicSearcher.Match(glycan, clusters);
                        double  score     = temp.Score();
                        double  intensity = temp.Matches().Select(m => m.GetIntensity()).Sum();
                        if (score > cutoff)
                        {
                            if (intensity > bestIntensity)
                            {
                                bestIntensity = intensity;
                            }
                            else if (intensity == bestIntensity && score > bestScore)
                            {
                                bestScore = score;
                            }
                            else
                            {
                                continue;
                            }
                            result = temp;
                            result.SetMZ(mz);
                            result.SetRetention(spectrum.GetRetention());
                            result.SetCharge(charge);
                            result.SetScan(spectrum.GetScanNum());
                        }
                    }
                }
                if (result != null)
                {
                    results.Add(result);
                }
            }
            return(results);
        }
 public void Report(string location)
 {
     foreach (IGlycoPeptideScore g in glycoPeptideScores)
     {
         Console.Write(spectrum.GetScanNum().ToString() + ", ");
         Console.Write(g.GetGlycoPeptide().GetPeptide().GetSequence() + ", ");
         Console.Write(string.Join("_", g.GetGlycoPeptide().GetGlycan().GetStructure()) + ", ");
         Console.Write(g.GetScore().ToString() + ", ");
         Console.Write((spectrum as ISpectrumMSn).GetParentMZ().ToString() + ", ");
         Console.WriteLine((spectrum as ISpectrumMSn).GetParentCharge().ToString());
     }
 }
示例#7
0
 public void Report(string location)
 {
     Console.WriteLine(spectrum.GetScanNum());
     foreach (IAnnotatedPeak peak in peaks)
     {
         Console.WriteLine("mz: " + peak.GetMZ().ToString());
         Console.WriteLine("Intensity: " + peak.GetIntensity().ToString());
         //Console.WriteLine(peak.GetFragmentations());
         foreach (IGlycoPeptide g in peak.GetFragmentations())
         {
             Console.WriteLine(g.GetGlycan().GetName());
             Console.WriteLine(g.GetPeptide().GetSequence());
         }
         Console.WriteLine();
     }
     Console.WriteLine();
 }
示例#8
0
        public void ReportLines(ISpectrum spectrum, List <IScore> scores)
        {
            HashSet <string> seen = new HashSet <string>();


            Tuple <List <double[]>, double[]> predict = Predicting(scores);
            int idx = 0;

            foreach (IScore score in scores)
            {
                if (0 >= 0)
                {
                    // get glycan
                    IGlycoPeptide glycoPeptide = score.GetGlycoPeptide();

                    // remove redudant
                    string structure = string.Join("_", glycoPeptide.GetGlycan().GetStructure());
                    string seq       = glycoPeptide.GetPeptide().GetSequence();
                    if (!seen.Contains(structure + seq))
                    {
                        seen.Add(structure + seq);
                    }
                    else
                    {
                        continue;
                    }

                    writer.Write(spectrum.GetScanNum().ToString() + ", ");
                    writer.Write(seq + ", ");
                    writer.Write(structure + ", ");
                    writer.Write(score.GetScore(MassType.Core).ToString() + ", ");
                    writer.Write(score.GetScore(MassType.Branch).ToString() + ", ");
                    writer.Write(score.GetScore(MassType.Glycan).ToString() + ", ");
                    writer.Write(score.GetScore(MassType.Peptide).ToString() + ", ");
                    writer.Write((spectrum as ISpectrumMSn).GetParentMZ().ToString() + ", ");
                    writer.Write((spectrum as ISpectrumMSn).GetParentCharge().ToString() + ", ");
                    writer.Write(string.Join(".", predict.Item1[idx]) + ", ");
                    writer.Write(predict.Item2[idx].ToString() + ", ");
                    writer.WriteLine();
                }
                idx++;
            }
        }
        protected void ReportLines(ISpectrum spectrum, List <IScore> scores, double cutoff)
        {
            HashSet <string> seen = new HashSet <string>();

            foreach (IScore score in scores)
            {
                if (score.GetScore() > cutoff)
                {
                    // get glycan
                    IGlycoPeptide glycoPeptide = score.GetGlycoPeptide();

                    // remove redudant
                    string structure = string.Join("_", glycoPeptide.GetGlycan().GetStructure());
                    string seq       = glycoPeptide.GetPeptide().GetSequence();
                    if (!seen.Contains(structure + seq))
                    {
                        seen.Add(structure + seq);
                    }
                    else
                    {
                        continue;
                    }

                    writer.Write(spectrum.GetScanNum().ToString() + ", ");
                    writer.Write(seq + ", ");
                    writer.Write(structure + ", ");
                    writer.Write(score.GetScore(MassType.Branch).ToString() + ", ");
                    writer.Write(score.GetScore(MassType.Core).ToString() + ", ");
                    writer.Write(score.GetScore(MassType.Glycan).ToString() + ", ");
                    writer.Write(score.GetScore(MassType.Peptide).ToString() + ", ");
                    writer.Write((spectrum as ISpectrumMSn).GetParentMZ().ToString() + ", ");
                    writer.Write((spectrum as ISpectrumMSn).GetParentCharge().ToString() + ", ");

                    if (score is IFDRScoreProxy)
                    {
                        writer.Write((score as IFDRScoreProxy).IsDecoy());
                        writer.Write(", ");
                    }
                    writer.WriteLine();
                }
            }
        }
示例#10
0
        public void ParallelRun(string path, string outputDir, AveragineType type, ChargerType chargerType)
        {
            string file   = Path.GetFileNameWithoutExtension(path) + ".mgf";
            string output = Path.Combine(outputDir, file);

            ThermoRawSpectrumReader reader  = new ThermoRawSpectrumReader();
            LocalMaximaPicking      picking = new LocalMaximaPicking(ms1PrcisionPPM);

            reader.Init(path);

            Dictionary <int, List <int> > scanGroup = new Dictionary <int, List <int> >();
            int current = -1;
            int start   = reader.GetFirstScan();
            int end     = reader.GetLastScan();

            for (int i = start; i < end; i++)
            {
                if (reader.GetMSnOrder(i) == 1)
                {
                    current      = i;
                    scanGroup[i] = new List <int>();
                }
                else if (reader.GetMSnOrder(i) == 2)
                {
                    scanGroup[current].Add(i);
                }
            }

            List <MS2Info> ms2Infos = new List <MS2Info>();

            Parallel.ForEach(scanGroup, (scanPair) =>
            {
                if (scanPair.Value.Count > 0)
                {
                    ISpectrum ms1 = reader.GetSpectrum(scanPair.Key);
                    foreach (int i in scanPair.Value)
                    {
                        double mz             = reader.GetPrecursorMass(i, reader.GetMSnOrder(i));
                        List <IPeak> ms1Peaks = FilterPeaks(ms1.GetPeaks(), mz, searchRange);

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

                        // insert pseudo peaks for large gap
                        List <IPeak> peaks = new List <IPeak>();
                        double precision   = 0.02;
                        double last        = ms1Peaks.First().GetMZ();
                        foreach (IPeak peak in ms1Peaks)
                        {
                            if (peak.GetMZ() - last > precision)
                            {
                                peaks.Add(new GeneralPeak(last + precision / 2, 0));
                                peaks.Add(new GeneralPeak(peak.GetMZ() - precision / 2, 0));
                            }
                            peaks.Add(peak);
                            last = peak.GetMZ();
                        }
                        List <IPeak> majorPeaks = picking.Process(peaks);
                        ICharger charger        = new Patterson();
                        if (chargerType == ChargerType.Fourier)
                        {
                            charger = new Fourier();
                        }
                        else if (chargerType == ChargerType.Combined)
                        {
                            charger = new PattersonFourierCombine();
                        }
                        int charge = charger.Charge(peaks, mz - searchRange, mz + searchRange);

                        // find evelope cluster
                        EnvelopeProcess envelope = new EnvelopeProcess();
                        var cluster = envelope.Cluster(majorPeaks, mz, charge);
                        if (cluster.Count == 0)
                        {
                            continue;
                        }

                        // find monopeak
                        Averagine averagine           = new Averagine(type);
                        BrainCSharp braincs           = new BrainCSharp();
                        MonoisotopicSearcher searcher = new MonoisotopicSearcher(averagine, braincs);
                        MonoisotopicScore result      = searcher.Search(mz, charge, cluster);
                        double precursorMZ            = result.GetMZ();

                        // write mgf
                        ISpectrum ms2      = reader.GetSpectrum(i);
                        IProcess processer = new WeightedAveraging(new LocalNeighborPicking());
                        ms2 = processer.Process(ms2);

                        MS2Info ms2Info = new MS2Info
                        {
                            PrecursorMZ     = result.GetMZ(),
                            PrecursorCharge = charge,
                            Scan            = ms2.GetScanNum(),
                            Retention       = ms2.GetRetention(),
                            Peaks           = ms2.GetPeaks()
                        };
                        lock (resultLock)
                        {
                            ms2Infos.Add(ms2Info);
                        }
                    }
                }
                readingProgress.Add(scanGroup.Count);
            });

            ms2Infos = ms2Infos.OrderBy(m => m.Scan).ToList();
            using (FileStream ostrm = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write))
            {
                using (StreamWriter writer = new StreamWriter(ostrm))
                {
                    foreach (MS2Info ms2 in ms2Infos)
                    {
                        WriteMGF(writer, path + ",SCANS=" + ms2.Scan.ToString() + ",PRECURSOR=" + ms2.PrecursorMZ, ms2.PrecursorMZ, ms2.PrecursorCharge,
                                 ms2.Scan, ms2.Retention * 60, reader.GetActivation(ms2.Scan), ms2.Peaks);
                        writer.Flush();
                    }
                }
            }

            // update progress
            progress.Add();
        }
        void Search()
        {
            List <SearchResult> tempResults      = new List <SearchResult>();
            List <SearchResult> tempDecoyResults = new List <SearchResult>();

            ISearch <string> oneSearcher = new BucketSearch <string>(
                SearchingParameters.Access.MS1ToleranceBy, SearchingParameters.Access.MS1Tolerance);
            PrecursorMatch precursorMatcher = new PrecursorMatch(oneSearcher);

            precursorMatcher.Init(peptides, glycanBuilder.GlycanMaps());

            ISearch <string> twoSearcher = new BucketSearch <string>(
                SearchingParameters.Access.MS1ToleranceBy, SearchingParameters.Access.MS1Tolerance);
            PrecursorMatch decoyPrecursorMatcher = new PrecursorMatch(twoSearcher);

            decoyPrecursorMatcher.Init(decoyPeptides, glycanBuilder.GlycanMaps());

            ISearch <string> moreSearcher = new BucketSearch <string>(
                SearchingParameters.Access.MS2ToleranceBy, SearchingParameters.Access.MSMSTolerance);
            SequenceSearch sequenceSearcher = new SequenceSearch(moreSearcher);

            ISearch <int> extraSearcher = new BucketSearch <int>(
                SearchingParameters.Access.MS2ToleranceBy, SearchingParameters.Access.MSMSTolerance);
            GlycanSearch glycanSearcher = new GlycanSearch(extraSearcher, glycanBuilder.GlycanMaps(),
                                                           SearchingParameters.Access.ComplexInclude,
                                                           SearchingParameters.Access.HybridInclude,
                                                           SearchingParameters.Access.MannoseInclude);

            SearchAnalyzer searchAnalyzer = new SearchAnalyzer();

            SearchTask task;

            while ((task = TryGetTask()) != null)
            {
                ISpectrum spectrum = task.Spectrum;
                //precursor match
                var pre_results = precursorMatcher.Match(task.PrecursorMZ, task.Charge);
                if (pre_results.Count > 0)
                {
                    // spectrum search
                    var peptide_results = sequenceSearcher.Search(spectrum.GetPeaks(), task.Charge, pre_results);
                    if (peptide_results.Count > 0)
                    {
                        var glycan_results = glycanSearcher.Search(spectrum.GetPeaks(), task.Charge, pre_results);
                        if (glycan_results.Count > 0)
                        {
                            var targets = searchAnalyzer.Analyze(spectrum.GetScanNum(), spectrum.GetPeaks(), peptide_results, glycan_results);
                            targets = searchAnalyzer.Filter(targets, glycanBuilder.GlycanMaps(),
                                                            task.PrecursorMZ, task.Charge);
                            tempResults.AddRange(targets);
                        }
                    }
                }


                var decoy_results = decoyPrecursorMatcher.Match(task.PrecursorMZ, task.Charge);
                if (decoy_results.Count > 0)
                {
                    // spectrum search
                    var peptide_results = sequenceSearcher.Search(spectrum.GetPeaks(), task.Charge, decoy_results);
                    if (peptide_results.Count > 0)
                    {
                        var glycan_results = glycanSearcher.Search(spectrum.GetPeaks(), task.Charge, decoy_results);
                        if (glycan_results.Count > 0)
                        {
                            var decoys = searchAnalyzer.Analyze(spectrum.GetScanNum(), spectrum.GetPeaks(), peptide_results, glycan_results);
                            decoys = searchAnalyzer.Filter(decoys, glycanBuilder.GlycanMaps(),
                                                           task.PrecursorMZ, task.Charge);
                            tempDecoyResults.AddRange(decoys);
                        }
                    }
                }

                searchCounter.Add(taskSize);
            }

            UpdateTask(tempResults, tempDecoyResults);
        }