/// <summary> /// Aligns fragments observed Mz values /// </summary> /// <param name="result"></param> /// <param name="allPSMs"></param> public static void AlignProductsByDiff(Result result, PeptideSpectrumMatches allPSMs) { List <double> observedDiff = new List <double>(); List <double> observedMz = new List <double>(); //Precursors and Tracks foreach (Precursor precursor in result.matchedPrecursors)//.ComputeAtFDR(result.dbOptions.maximumFalseDiscoveryRate, false)) { PeptideSpectrumMatch psm = precursor.OptimizedBestPsm(); if (psm.Target) { foreach (ProductMatch fragment in psm.AllProductMatches) { observedMz.Add(fragment.obsMz); observedDiff.Add(fragment.mass_diff); } } } PolynominalRegression pr = new PolynominalRegression(observedMz, observedDiff, 2); foreach (PeptideSpectrumMatch psm in allPSMs) { foreach (ProductMatch match in psm.AllProductMatches) { match.obsMz += pr.Calculate(match.obsMz); match.mass_diff = match.theoMz - match.obsMz; } psm.Initialize(result.dbOptions, psm.AllProductMatches); foreach (MsMsPeak peak in psm.Query.spectrum.Peaks) { peak.MZ += pr.Calculate(peak.MZ); } } }
/// <summary> /// Aligns precursors observed Mz values /// </summary> /// <param name="result"></param> /// <param name="allPSMs"></param> public static void AlignPrecursorsByDiff(Result result, PeptideSpectrumMatches allPSMs) { List <double> observedDiff = new List <double>(); List <double> observedMz = new List <double>(); //Precursors and Tracks foreach (Precursor precursor in result.matchedPrecursors)//.ComputeAtFDR(result.dbOptions.maximumFalseDiscoveryRate, false)) { PeptideSpectrumMatch psm = precursor.OptimizedBestPsm(); if (psm.Target) { observedMz.Add(precursor.Track.MZ); observedDiff.Add(Numerics.MZFromMass(psm.Peptide.MonoisotopicMass, precursor.Charge) - precursor.Track.MZ); } } PolynominalRegression pr = new PolynominalRegression(observedMz, observedDiff, 2); foreach (Query query in result.queries) { query.precursor.Track.MZ += pr.Calculate(query.precursor.Track.MZ); query.precursor.Mass = Numerics.MassFromMZ(query.precursor.Track.MZ, query.precursor.Charge); foreach (Precursor precursor in query.precursor.Isotopes) { precursor.Track.MZ += pr.Calculate(precursor.Track.MZ); precursor.Mass = Numerics.MassFromMZ(precursor.Track.MZ, precursor.Charge); } foreach (Precursor precursor in query.precursor.OtherCharges) { precursor.Track.MZ += pr.Calculate(precursor.Track.MZ); precursor.Mass = Numerics.MassFromMZ(precursor.Track.MZ, precursor.Charge); } query.spectrum.PrecursorMZ += pr.Calculate(query.spectrum.PrecursorMZ); query.spectrum.PrecursorMass = Numerics.MassFromMZ(query.spectrum.PrecursorMZ, query.spectrum.PrecursorCharge); } foreach (PeptideSpectrumMatch psm in allPSMs) { psm.UpdatePrecursor(result.dbOptions); } }
private void Draw(int iterationCount, double[] yData, string methodName, GraphPane graphPane, Color color) { double[] xData = Enumerable.Range(0, iterationCount).Select(iter => (double)iter).ToArray(); if (cbPrecise.Checked) { graphPane.AddCurve(methodName, xData, yData, color, ZedGraph.SymbolType.None); } if (cbApprox.Checked) { var regression = new PolynominalRegression(yData, (int)udApproxPolygonPow.Value); var curve = graphPane.AddCurve(methodName + " (approx)", xData, xData.Select(x => regression.Calculate(x)).ToArray(), color, ZedGraph.SymbolType.None); curve.Line.Width = 3; } }