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 + ", "); } } }
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); }
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()); } }
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(); }
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(); } } }
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); }