public static void XlTestGenerateIntensityRanks() { double[] intensity = new double[] { 1.1, 1.1, 0.5, 3.2, 0.5, 6.0 }; int[] rank = PsmCross.GenerateIntensityRanks(intensity); int[] Rank = new int[] { 4, 3, 6, 2, 5, 1 }; Assert.AreEqual(rank, Rank); }
private void UpdateModel(int x) { Ms2ScanWithSpecificMass msScanForDraw = arrayOfMs2ScansSortedByMass.Where(p => p.OneBasedScanNumber == x).First(); //mainViewModel.UpdateScanModel(msScanForDraw); PsmCross psmCross = PSMs.Where(p => p.ScanNumber == x).First(); var lp = new List <ProductType> { ProductType.BnoB1ions, ProductType.Y }; Tolerance productMassTolerance = new PpmTolerance(20); var pmm = PsmCross.XlCalculateTotalProductMassesForSingle(psmCross, lp, false); var matchedIonMassesListPositiveIsMatch = new MatchedIonInfo(pmm.ProductMz.Length); double pmmScore = PsmCross.XlMatchIons(msScanForDraw.TheScan, productMassTolerance, pmm.ProductMz, pmm.ProductName, matchedIonMassesListPositiveIsMatch); matchedIonMassesListPositiveIsMatch.PredictedIonName = psmCross.ProductMassesMightHaveDuplicatesAndNaNs(lp).ProductName; matchedIonMassesListPositiveIsMatch.PredictedIonMZ = psmCross.ProductMassesMightHaveDuplicatesAndNaNs(lp).ProductMz; matchedIonMassesListPositiveIsMatch.PredictedIonIntensity = predictedIntensities[psmCross.ScanNumber]; psmCross.MatchedIonInfo = matchedIonMassesListPositiveIsMatch; mainViewModel.UpdateCrosslinkModelForSingle(msScanForDraw, psmCross); pdeepModelView.UpdataModelForPdeep(psmCross); }
//Calculate the FDR of crosslinked peptide (D - 2DD) / T private static List <PsmCross> CrosslinkFDRAnalysis(List <PsmCross> items) { var ids = new List <PsmCross>(); foreach (var item in items) { ids.Add(item); } int cumulative_target = 0; int cumulative_decoy = 0; int cumulative_decoy_decoy = 0; for (int i = 0; i < ids.Count; i++) { var item1 = ids[i]; var item2 = ids[i].BetaPsmCross; var isDecoy1 = item1.IsDecoy; var isDecoy2 = item2.IsDecoy; if (isDecoy1 || isDecoy2) { cumulative_decoy++; } else { cumulative_target++; } if (isDecoy1 && isDecoy2) { cumulative_decoy_decoy++; } double temp_q_value = (double)(cumulative_decoy - 2 * cumulative_decoy_decoy) / (cumulative_target + cumulative_decoy); item1.SetFdrValues(cumulative_target, cumulative_decoy, temp_q_value, 0, 0, 0, 0, 0, 0, false); // item2.SetFdrValues(cumulative_target, cumulative_decoy, temp_q_value, 0, 0, 0); } double min_q_value = double.PositiveInfinity; for (int i = ids.Count - 1; i >= 0; i--) { PsmCross id = ids[i]; if (id.FdrInfo.QValue < 0) { id.FdrInfo.QValue = 0; } if (id.FdrInfo.QValue > min_q_value) { id.FdrInfo.QValue = min_q_value; } else if (id.FdrInfo.QValue < min_q_value) { min_q_value = id.FdrInfo.QValue; } } return(ids); }
public static void XlTestXlPosCal() { var prot = new Protein("MNNNKQQQQ", null); Protease protease = new Protease("New Custom Protease", new List <Tuple <string, TerminusType> > { new Tuple <string, TerminusType>("K", TerminusType.C) }, new List <Tuple <string, TerminusType> >(), CleavageSpecificity.Full, null, null, null); ProteaseDictionary.Dictionary.Add(protease.Name, protease); DigestionParams digestionParams = new DigestionParams(protease: protease.Name, minPeptideLength: 1, initiatorMethionineBehavior: InitiatorMethionineBehavior.Retain); List <ModificationWithMass> variableModifications = new List <ModificationWithMass>(); var ye = prot.Digest(digestionParams, new List <ModificationWithMass>(), variableModifications).ToList(); var pep = ye[0]; Assert.AreEqual(pep.BaseSequence, "MNNNK"); CrosslinkerTypeClass crosslinker = new CrosslinkerTypeClass(); crosslinker.SelectCrosslinker(CrosslinkerType.DSS); Assert.AreEqual(crosslinker.CrosslinkerModSites, "K"); Assert.AreEqual(Residue.GetResidue(crosslinker.CrosslinkerModSites).MonoisotopicMass, 128.09496301518999, 1e-9); var n = pep.CompactPeptide(TerminusType.None).NTerminalMasses; var c = pep.CompactPeptide(TerminusType.None).CTerminalMasses; Assert.AreEqual(n.Count(), 4); Assert.AreEqual(c.Count(), 4); Assert.AreEqual(c[0], 128.09496301518999, 1e-6); var x = PsmCross.XlPosCal(pep.CompactPeptide(TerminusType.None), crosslinker.CrosslinkerModSites).ToArray(); Assert.AreEqual(x[0], 4); var pep2 = ye[2]; Assert.AreEqual("MNNNKQQQQ", pep2.BaseSequence); var n2 = pep2.CompactPeptide(TerminusType.None).NTerminalMasses; var c2 = pep2.CompactPeptide(TerminusType.None).CTerminalMasses; Assert.AreEqual(n2.Count(), 8); Assert.AreEqual(c2.Count(), 8); Assert.AreEqual(n2[4] - n2[3], 128.09496301518999, 1e-6); var x2 = PsmCross.XlPosCal(pep2.CompactPeptide(TerminusType.None), crosslinker.CrosslinkerModSites).ToArray(); Assert.AreEqual(x2[0], 4); //Test crosslinker with multiple types of mod var protSTC = new Protein("GASTACK", null); var peps = protSTC.Digest(digestionParams, new List <ModificationWithMass>(), variableModifications).ToList(); var pepSTC = peps[0]; Assert.AreEqual(pepSTC.BaseSequence, "GASTACK"); CrosslinkerTypeClass crosslinker2 = new CrosslinkerTypeClass("ST", "C", "crosslinkerSTC", false, -18.01056, 0, 0, 0, 0, 0, 0); string crosslinkerModSitesAll = new string((crosslinker2.CrosslinkerModSites + crosslinker2.CrosslinkerModSites2).ToCharArray().Distinct().ToArray()); Assert.AreEqual(crosslinkerModSitesAll, "STC"); }
public static void XlTestXlPosCal() { var prot = new Protein("MNNNKQQQQ", null); var protease = new Protease("Custom Protease", new List <string> { "K" }, new List <string>(), TerminusType.C, CleavageSpecificity.Full, null, null, null); DigestionParams digestionParams = new DigestionParams { InitiatorMethionineBehavior = InitiatorMethionineBehavior.Retain, MaxMissedCleavages = 2, Protease = protease, MinPeptideLength = 1 }; List <ModificationWithMass> variableModifications = new List <ModificationWithMass>(); var ye = prot.Digest(digestionParams, new List <ModificationWithMass>(), variableModifications).ToList(); var pep = ye[0]; Assert.AreEqual(pep.BaseSequence, "MNNNK"); CrosslinkerTypeClass crosslinker = new CrosslinkerTypeClass(); crosslinker.SelectCrosslinker(CrosslinkerType.DSS); Assert.AreEqual(crosslinker.CrosslinkerModSite, 'K'); Assert.AreEqual(Residue.GetResidue(crosslinker.CrosslinkerModSite).MonoisotopicMass, 128.09496301518999, 1e-9); var n = pep.CompactPeptide(TerminusType.None).NTerminalMasses; var c = pep.CompactPeptide(TerminusType.None).CTerminalMasses; Assert.AreEqual(n.Count(), 4); Assert.AreEqual(c.Count(), 4); Assert.AreEqual(c[0], 128.09496301518999, 1e-6); var x = PsmCross.XlPosCal(pep.CompactPeptide(TerminusType.None), crosslinker).ToArray(); Assert.AreEqual(x[0], 4); var pep2 = ye[2]; Assert.AreEqual("MNNNKQQQQ", pep2.BaseSequence); var n2 = pep2.CompactPeptide(TerminusType.None).NTerminalMasses; var c2 = pep2.CompactPeptide(TerminusType.None).CTerminalMasses; Assert.AreEqual(n2.Count(), 8); Assert.AreEqual(c2.Count(), 8); Assert.AreEqual(n2[4] - n2[3], 128.09496301518999, 1e-6); var x2 = PsmCross.XlPosCal(pep2.CompactPeptide(TerminusType.None), crosslinker).ToArray(); Assert.AreEqual(x2[0], 4); }
//Calculate the FDR of single peptide FP/TP private static List <PsmCross> SingleFDRAnalysis(List <PsmCross> items) { var ids = new List <PsmCross>(); foreach (var item in items) { ids.Add(item); } int cumulative_target = 0; int cumulative_decoy = 0; for (int i = 0; i < ids.Count; i++) { var item1 = ids[i]; var isDecoy1 = item1.IsDecoy; if (isDecoy1) { cumulative_decoy++; } else { cumulative_target++; } double temp_q_value = (double)cumulative_decoy / cumulative_target; item1.SetFdrValues(cumulative_target, cumulative_decoy, temp_q_value, 0, 0, 0, 0, 0, 0, false); } double min_q_value = double.PositiveInfinity; for (int i = ids.Count - 1; i >= 0; i--) { PsmCross id = ids[i]; if (id.FdrInfo.QValue > min_q_value) { id.FdrInfo.QValue = min_q_value; } else if (id.FdrInfo.QValue < min_q_value) { min_q_value = id.FdrInfo.QValue; } } return(ids); }
public void TestMods() { PsmCross PSM = new PsmCross(); PSM.BaseSequence = "DMHGDSEYNIMFGPDICGPGTK"; PSM.FullSequence = "DM[Common Variable:Oxidation of M]HGDSEYNIM[Common Variable:Oxidation of M]FGPDIC[Common Fixed:Carbamidomethyl of C]GPGTK"; PSM.PeptideMonisotopicMass = 2472.0032; var mods = TsvResultReader.GetMods(PSM); Dictionary <int, ModificationWithMass> allModsOneIsNterminus = new Dictionary <int, ModificationWithMass>(); foreach (var item in mods) { ModificationMotif.TryGetMotif(item.Value, out ModificationMotif modificationMotif); ModificationWithMass mod = new ModificationWithMass("mod", null, modificationMotif, TerminusLocalization.Any, 10); allModsOneIsNterminus.Add(item.Key, mod); } PepWithSetModForCompactPep pepWithSetModForCompactPep = new PepWithSetModForCompactPep(); pepWithSetModForCompactPep.allModsOneIsNterminus = allModsOneIsNterminus; pepWithSetModForCompactPep.BaseSequence = PSM.BaseSequence; pepWithSetModForCompactPep.Length = PSM.BaseSequence.Length; pepWithSetModForCompactPep.MonoisotopicMass = (double)PSM.PeptideMonisotopicMass; var compactPeptide = new CompactPeptide(pepWithSetModForCompactPep, TerminusType.None); PSM.CompactPeptide = compactPeptide; var lp = new List <ProductType> { ProductType.BnoB1ions, ProductType.Y }; Tolerance productMassTolerance = new PpmTolerance(10); var pmm = PsmCross.XlCalculateTotalProductMassesForSingle(PSM, lp, false); var matchedIonMassesListPositiveIsMatch = new MatchedIonInfo(pmm.ProductMz.Length); //double pmmScore = PsmCross.XlMatchIons(theScan.TheScan, productMassTolerance, pmm.ProductMz, pmm.ProductName, matchedIonMassesListPositiveIsMatch); }
public static void XlTest_BSA_DSSO() { //Generate parameters var commonParameters = new CommonParameters(doPrecursorDeconvolution: false, cIons: true, zDotIons: true, scoreCutoff: 2, digestionParams: new DigestionParams(minPeptideLength: 5)); var xlSearchParameters = new XlSearchParameters { XlCharge_2_3_PrimeFragment = true }; //Create databases contain two protein. var proteinList = new List <Protein> { new Protein("EKVLTSSAR", "Fake01"), new Protein("LSQKFPK", "Fake02") }; ModificationMotif.TryGetMotif("M", out ModificationMotif motif1); ModificationWithMass mod1 = new ModificationWithMass("Oxidation of M", "Common Variable", motif1, TerminusLocalization.Any, 15.99491461957); ModificationMotif.TryGetMotif("C", out ModificationMotif motif2); ModificationWithMass mod2 = new ModificationWithMass("Carbamidomethyl of C", "Common Fixed", motif2, TerminusLocalization.Any, 57.02146372068994); var variableModifications = new List <ModificationWithMass>() { mod1 }; var fixedModifications = new List <ModificationWithMass>() { mod2 }; var localizeableModifications = new List <ModificationWithMass>(); var lp = new List <ProductType> { ProductType.BnoB1ions, ProductType.Y, ProductType.C, ProductType.Zdot }; Dictionary <ModificationWithMass, ushort> modsDictionary = new Dictionary <ModificationWithMass, ushort>(); foreach (var mod in fixedModifications) { modsDictionary.Add(mod, 0); } int i = 1; foreach (var mod in variableModifications) { modsDictionary.Add(mod, (ushort)i); i++; } foreach (var mod in localizeableModifications) { modsDictionary.Add(mod, (ushort)i); i++; } //Generate digested peptide lists. List <PeptideWithSetModifications> digestedList = new List <PeptideWithSetModifications>(); foreach (var item in proteinList) { var digested = item.Digest(commonParameters.DigestionParams, fixedModifications, variableModifications).ToList(); digestedList.AddRange(digested); } foreach (var fdfd in digestedList) { fdfd.CompactPeptide(TerminusType.None); } //Run index engine var indexEngine = new IndexingEngine(proteinList, variableModifications, fixedModifications, lp, 1, DecoyType.Reverse, new List <DigestionParams> { commonParameters.DigestionParams }, commonParameters, 30000, new List <string>()); var indexResults = (IndexingResults)indexEngine.Run(); var fragmentIndexCount = indexResults.FragmentIndex.Count(p => p != null); var fragmentIndexAll = indexResults.FragmentIndex.Select((s, j) => new { j, s }).Where(p => p.s != null).Select(t => t.j).ToList(); Assert.IsTrue(fragmentIndexAll.Count() > 0); //Get MS2 scans. var myMsDataFile = new XLTestDataFile(); var listOfSortedms2Scans = MetaMorpheusTask.GetMs2Scans(myMsDataFile, null, commonParameters.DoPrecursorDeconvolution, commonParameters.UseProvidedPrecursorInfo, commonParameters.DeconvolutionIntensityRatio, commonParameters.DeconvolutionMaxAssumedChargeState, commonParameters.DeconvolutionMassTolerance).OrderBy(b => b.PrecursorMass).ToArray(); //Generate crosslinker, which is DSSO here. CrosslinkerTypeClass crosslinker = new CrosslinkerTypeClass(); crosslinker.SelectCrosslinker(xlSearchParameters.CrosslinkerType); //TwoPassCrosslinkSearchEngine.Run(). List <PsmCross> newPsms = new List <PsmCross>(); new TwoPassCrosslinkSearchEngine(newPsms, listOfSortedms2Scans, indexResults.PeptideIndex, indexResults.FragmentIndex, lp, 0, commonParameters, false, xlSearchParameters.XlPrecusorMsTl, crosslinker, xlSearchParameters.CrosslinkSearchTop, xlSearchParameters.CrosslinkSearchTopNum, xlSearchParameters.XlQuench_H2O, xlSearchParameters.XlQuench_NH2, xlSearchParameters.XlQuench_Tris, xlSearchParameters.XlCharge_2_3, xlSearchParameters.XlCharge_2_3_PrimeFragment, new List <string> { }).Run(); var compactPeptideToProteinPeptideMatch = new Dictionary <CompactPeptideBase, HashSet <PeptideWithSetModifications> >(); new CrosslinkAnalysisEngine(newPsms, compactPeptideToProteinPeptideMatch, proteinList, variableModifications, fixedModifications, lp, null, crosslinker, TerminusType.None, commonParameters, new List <string> { }).Run(); foreach (var item in newPsms) { item.SetFdrValues(0, 0, 0, 0, 0, 0, 0, 0, 0, false); } //Test newPsms Assert.AreEqual(newPsms.Count(), 3); //Test Output var task = new XLSearchTask(); task.WriteAllToTsv(newPsms, TestContext.CurrentContext.TestDirectory, "allPsms", new List <string> { }); task.WritePepXML_xl(newPsms, proteinList, null, variableModifications, fixedModifications, null, TestContext.CurrentContext.TestDirectory, "pep.XML", new List <string> { }); task.WriteSingleToTsv(newPsms.Where(p => p.CrossType == PsmCrossType.Singe).ToList(), TestContext.CurrentContext.TestDirectory, "singlePsms", new List <string> { }); //Test PsmCross.XlCalculateTotalProductMasses. var psmCrossAlpha = new PsmCross(digestedList[1].CompactPeptide(TerminusType.None), 0, 0, i, listOfSortedms2Scans[0], commonParameters.DigestionParams); var psmCrossBeta = new PsmCross(digestedList[2].CompactPeptide(TerminusType.None), 0, 0, i, listOfSortedms2Scans[0], commonParameters.DigestionParams); var linkPos = PsmCross.XlPosCal(psmCrossAlpha.compactPeptide, crosslinker.CrosslinkerModSites); var productMassesAlphaList = PsmCross.XlCalculateTotalProductMasses(psmCrossAlpha, psmCrossBeta.compactPeptide.MonoisotopicMassIncludingFixedMods + crosslinker.TotalMass, crosslinker, lp, true, false, linkPos); Assert.AreEqual(productMassesAlphaList[0].ProductMz.Length, 99); }
public void UpdateCrosslinkModelForSingle(Ms2ScanWithSpecificMass MsScanForDraw, PsmCross psmParentsForDraw) { var x = MsScanForDraw.TheScan.MassSpectrum.XArray; var y = MsScanForDraw.TheScan.MassSpectrum.YArray; string scanNum = psmParentsForDraw.ScanNumber.ToString(); string sequence1 = psmParentsForDraw.FullSequence; var matchedIonDic1 = psmParentsForDraw.MatchedIonInfo; PlotModel model = new PlotModel { Title = "Spectrum anotation of Scan " + scanNum + " for Crosslinked Peptide", DefaultFontSize = 15 }; model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Title = "m/z", Minimum = 0, Maximum = x.Max() * 1.02 }); model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Title = "Intensity(counts)", Minimum = 0, Maximum = y.Max() * 1.2 }); var textAnnoSeq1 = new TextAnnotation() { }; textAnnoSeq1.FontSize = 9; textAnnoSeq1.TextColor = OxyColors.Red; textAnnoSeq1.StrokeThickness = 0; textAnnoSeq1.TextPosition = new DataPoint(x.Max() / 2, y.Max() * 1.15); textAnnoSeq1.Text = sequence1; model.Annotations.Add(textAnnoSeq1); LineSeries[] s0 = new LineSeries[x.Length]; LineSeries[] s1 = new LineSeries[x.Length]; //Draw the ms/ms scan peaks for (int i = 0; i < x.Length; i++) { s0[i] = new LineSeries(); s0[i].Color = OxyColors.DimGray; s0[i].StrokeThickness = 0.15; s0[i].Points.Add(new DataPoint(x[i], 0)); s0[i].Points.Add(new DataPoint(x[i], y[i])); model.Series.Add(s0[i]); } //Draw the ms/ms scan matched peaks for (int i = 0; i < matchedIonDic1.MatchedIonMz.Length; i++) { OxyColor ionColor = OxyColors.Red; if (matchedIonDic1.MatchedIonMz[i] > 0) { s1[i] = new LineSeries(); s1[i].Color = ionColor; s1[i].StrokeThickness = 0.2; s1[i].Points.Add(new DataPoint(matchedIonDic1.MatchedIonMz[i] + 1.007277, 0)); s1[i].Points.Add(new DataPoint(matchedIonDic1.MatchedIonMz[i] + 1.007277, matchedIonDic1.MatchedIonIntensity[i])); var textAnno1 = new TextAnnotation(); textAnno1.FontSize = 6; textAnno1.TextColor = ionColor; textAnno1.StrokeThickness = 0; textAnno1.TextPosition = s1[i].Points[1]; textAnno1.Text = matchedIonDic1.MatchedIonMz[i].ToString("f3"); var textAnno2 = new TextAnnotation(); textAnno2.FontSize = 6; textAnno2.TextColor = ionColor; textAnno2.StrokeThickness = 0; textAnno2.TextPosition = new DataPoint(s1[i].Points[1].X, s1[i].Points[1].Y + y.Max() * 0.02); textAnno2.Text = matchedIonDic1.MatchedIonName[i]; model.Annotations.Add(textAnno1); model.Annotations.Add(textAnno2); model.Series.Add(s1[i]); } } // Axes are created automatically if they are not defined // Set the Model property, the INotifyPropertyChanged event will make the WPF Plot control update its content this.Model = model; }
public static List <PsmCross> ReadTsv(string filePath) { List <PsmCross> PSMs = new List <PsmCross>(); Dictionary <string, int> ids = new Dictionary <string, int>(); //Empty array. Is this correct? string[][] resultArray = new string[][] { }; try { resultArray = File.ReadLines(filePath).Select(p => p.Split('\t')).ToArray(); } catch (Exception) { MessageBox.Show("Please check the file."); return(null); } for (int i = 0; i < resultArray[0].Length; i++) { ids.Add(resultArray[0][i], i); } for (int i = 1; i < resultArray.Length; i++) { PsmCross PSM = new PsmCross(); PSM.ScanNumber = Convert.ToInt32(resultArray[i][ids["Scan Number"]]); var baseSeq = resultArray[i][ids["Base Sequence"]]; var chargeState = resultArray[i][ids["Precursor Charge"]]; var fullSeq = resultArray[i][ids["Full Sequence"]]; if (baseSeq.Contains("|")) { baseSeq = baseSeq.Split('|').First(); fullSeq = fullSeq.Split('|').First(); } PSM.BaseSequence = baseSeq; PSM.ScanPrecursorCharge = Convert.ToInt32(chargeState); PSM.FullSequence = fullSeq; PSM.IsDecoy = (resultArray[i][ids["Decoy"]] == "N" ? false :true); PSM.PeptideMonisotopicMass = Convert.ToDouble(resultArray[i][ids["Precursor Mass"]]); var mods = GetMods(PSM); Dictionary <int, ModificationWithMass> allModsOneIsNterminus = new Dictionary <int, ModificationWithMass>(); foreach (var item in mods) { //I don't really know why use as here. var theMod = GlobalVariables.AllModsKnown.Where(p => p.id == item.Value).First() as ModificationWithMass; allModsOneIsNterminus.Add(item.Key, theMod); } PepWithSetModForCompactPep pepWithSetModForCompactPep = new PepWithSetModForCompactPep(); pepWithSetModForCompactPep.allModsOneIsNterminus = allModsOneIsNterminus; pepWithSetModForCompactPep.BaseSequence = PSM.BaseSequence; pepWithSetModForCompactPep.Length = PSM.BaseSequence.Length; pepWithSetModForCompactPep.MonoisotopicMass = (double)PSM.PeptideMonisotopicMass; var compactPeptide = new CompactPeptide(pepWithSetModForCompactPep, TerminusType.None); PSM.CompactPeptide = compactPeptide; PSMs.Add(PSM); } return(PSMs); }
// TODO: Draw to pdf file public void XLDrawMSMatchToPdf(Ms2ScanWithSpecificMass MsScanForDraw, PsmCross psmParentsForDraw, int order, string OutputFolder) { var x = MsScanForDraw.TheScan.MassSpectrum.XArray; var y = MsScanForDraw.TheScan.MassSpectrum.YArray; string scanNum = psmParentsForDraw.ScanNumber.ToString(); string sequence1 = psmParentsForDraw.FullSequence + "-" + psmParentsForDraw.XlPos.ToString(); string sequence2 = psmParentsForDraw.BetaPsmCross.FullSequence + "-" + psmParentsForDraw.BetaPsmCross.XlPos.ToString(); var matchedIonDic1 = psmParentsForDraw.MatchedIonInfo; var matchedIonDic2 = psmParentsForDraw.BetaPsmCross.MatchedIonInfo; PlotModel model = new PlotModel { Title = "Spectrum anotation of Scan " + scanNum + " for Crosslinked Peptide", DefaultFontSize = 15 }; model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Title = "m/z", Minimum = 0, Maximum = x.Max() * 1.02, AbsoluteMinimum = 0 }); model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Title = "Intensity(counts)", Minimum = 0, Maximum = y.Max() * 1.2, AbsoluteMinimum = 0 }); var textAnnoSeq1 = new TextAnnotation() { }; //textAnnoSeq1.TextRotation=90; textAnnoSeq1.FontSize = 12; textAnnoSeq1.TextColor = OxyColors.Red; textAnnoSeq1.StrokeThickness = 0; textAnnoSeq1.TextPosition = new DataPoint(x.Max() / 2, y.Max() * 1.15); textAnnoSeq1.Text = sequence1; var textAnnoSeq2 = new TextAnnotation() { }; //textAnnoSeq2.TextRotation=90; textAnnoSeq2.FontSize = 12; textAnnoSeq2.TextColor = OxyColors.Blue; textAnnoSeq2.StrokeThickness = 0; textAnnoSeq2.TextPosition = new DataPoint(x.Max() / 2, y.Max() * 1.1); textAnnoSeq2.Text = sequence2; model.Annotations.Add(textAnnoSeq1); model.Annotations.Add(textAnnoSeq2); LineSeries[] s0 = new LineSeries[x.Length]; LineSeries[] s1 = new LineSeries[x.Length]; LineSeries[] s2 = new LineSeries[x.Length]; //Draw the ms/ms scan peaks for (int i = 0; i < x.Length; i++) { s0[i] = new LineSeries(); s0[i].Color = OxyColors.DimGray; s0[i].StrokeThickness = STROKE_THICKNESS_UNANNOTATED; s0[i].Points.Add(new DataPoint(x[i], 0)); s0[i].Points.Add(new DataPoint(x[i], y[i])); model.Series.Add(s0[i]); } //Draw the ms/ms scan matched peaks for (int i = 0; i < matchedIonDic1.MatchedIonMz.Length; i++) { OxyColor ionColor = OxyColors.Red; if (matchedIonDic1.MatchedIonMz[i] > 0) { s1[i] = new LineSeries(); s1[i].Color = ionColor; s1[i].StrokeThickness = STROKE_THICKNESS_ANNOTATED; s1[i].Points.Add(new DataPoint(matchedIonDic1.MatchedIonMz[i] + 1.007277, 0)); s1[i].Points.Add(new DataPoint(matchedIonDic1.MatchedIonMz[i] + 1.007277, matchedIonDic1.MatchedIonIntensity[i])); var textAnno1 = new TextAnnotation(); //textAnno1.TextRotation=90; textAnno1.FontSize = 12; textAnno1.TextColor = ionColor; textAnno1.StrokeThickness = 0; textAnno1.TextPosition = s1[i].Points[1]; textAnno1.Text = matchedIonDic1.MatchedIonMz[i].ToString("f3"); var textAnno2 = new TextAnnotation(); //textAnno2.TextRotation=90; textAnno2.FontSize = 12; textAnno2.TextColor = ionColor; textAnno2.StrokeThickness = 0; textAnno2.TextPosition = new DataPoint(s1[i].Points[1].X, s1[i].Points[1].Y + y.Max() * 0.02); textAnno2.Text = matchedIonDic1.MatchedIonName[i]; model.Annotations.Add(textAnno1); model.Annotations.Add(textAnno2); model.Series.Add(s1[i]); } } for (int i = 0; i < matchedIonDic2.MatchedIonMz.Length; i++) { OxyColor ionColor = OxyColors.Blue; if (matchedIonDic2.MatchedIonMz[i] > 0) { s2[i] = new LineSeries(); s2[i].Color = ionColor; s2[i].StrokeThickness = STROKE_THICKNESS_ANNOTATED; s2[i].Points.Add(new DataPoint(matchedIonDic2.MatchedIonMz[i] + 1.007277, 0)); s2[i].Points.Add(new DataPoint(matchedIonDic2.MatchedIonMz[i] + 1.007277, matchedIonDic2.MatchedIonIntensity[i])); var textAnno1 = new TextAnnotation(); //textAnno1.TextRotation=90; textAnno1.FontSize = 12; textAnno1.TextColor = ionColor; textAnno1.StrokeThickness = 0; textAnno1.TextPosition = s2[i].Points[1]; textAnno1.Text = matchedIonDic2.MatchedIonMz[i].ToString("f3"); var textAnno2 = new TextAnnotation(); //textAnno2.TextRotation=90; textAnno2.FontSize = 12; textAnno2.TextColor = ionColor; textAnno2.StrokeThickness = 0; textAnno2.TextPosition = new DataPoint(s2[i].Points[1].X, s2[i].Points[1].Y + y.Max() * 0.02); textAnno2.Text = matchedIonDic2.MatchedIonName[i]; model.Annotations.Add(textAnno1); model.Annotations.Add(textAnno2); model.Series.Add(s2[i]); } } using (var stream = File.Create(OutputFolder + "\\" + order.ToString() + "_Scan" + scanNum + ".pdf")) { PdfExporter pdf = new PdfExporter { Width = 500, Height = 210 }; pdf.Export(model, stream); } }
public static void XlTestLocalization() { var CommonParameters = new CommonParameters(); var proteinList = new List <Protein> { new Protein("CASIQKFGERLCVLHEKTPVSEK", null) }; ModificationMotif.TryGetMotif("M", out ModificationMotif motif1); ModificationWithMass mod1 = new ModificationWithMass("Oxidation of M", "Common Variable", motif1, TerminusLocalization.Any, 15.99491461957); ModificationMotif.TryGetMotif("C", out ModificationMotif motif2); ModificationWithMass mod2 = new ModificationWithMass("Carbamidomethyl of C", "Common Fixed", motif2, TerminusLocalization.Any, 57.02146372068994); var variableModifications = new List <ModificationWithMass>() { mod1 }; var fixedModifications = new List <ModificationWithMass>() { mod2 }; var localizeableModifications = new List <ModificationWithMass>(); var lp = new List <ProductType> { ProductType.BnoB1ions, ProductType.Y }; Dictionary <ModificationWithMass, ushort> modsDictionary = new Dictionary <ModificationWithMass, ushort>(); foreach (var mod in fixedModifications) { modsDictionary.Add(mod, 0); } int i = 1; foreach (var mod in variableModifications) { modsDictionary.Add(mod, (ushort)i); i++; } foreach (var mod in localizeableModifications) { modsDictionary.Add(mod, (ushort)i); i++; } var engine = new IndexingEngine(proteinList, variableModifications, fixedModifications, lp, 1, DecoyType.Reverse, new List <IDigestionParams> { CommonParameters.DigestionParams }, CommonParameters, 30000, new List <string>()); var results = (IndexingResults)engine.Run(); var digestedList = proteinList[0].Digest(CommonParameters.DigestionParams, fixedModifications, variableModifications).ToList(); foreach (var fdfd in digestedList) { fdfd.CompactPeptide(TerminusType.None); //Assert.Contains(fdfd.CompactPeptide(TerminusType.None), results.PeptideIndex); } var productMasses = digestedList[3].CompactPeptide(TerminusType.None).ProductMassesMightHaveDuplicatesAndNaNs(new List <ProductType> { ProductType.B, ProductType.Y }); CrosslinkerTypeClass crosslinker = new CrosslinkerTypeClass(); crosslinker.SelectCrosslinker(CrosslinkerType.DSS); var x = PsmCross.XlPosCal(digestedList[3].CompactPeptide(TerminusType.None), crosslinker).ToArray(); Assert.AreEqual(x[0], 5); var myMsDataFile = new XLTestDataFile(); var listOfSortedms2Scans = MetaMorpheusTask.GetMs2Scans(myMsDataFile, null, CommonParameters.DoPrecursorDeconvolution, CommonParameters.UseProvidedPrecursorInfo, CommonParameters.DeconvolutionIntensityRatio, CommonParameters.DeconvolutionMaxAssumedChargeState, CommonParameters.DeconvolutionMassTolerance).OrderBy(b => b.PrecursorMass).ToArray(); var psmCrossAlpha = new PsmCross(digestedList[3].CompactPeptide(TerminusType.None), 0, 0, i, listOfSortedms2Scans[0]); var psmCrossBeta = new PsmCross(digestedList[5].CompactPeptide(TerminusType.None), 0, 0, i, listOfSortedms2Scans[0]); var modMassAlpha1 = psmCrossBeta.compactPeptide.MonoisotopicMassIncludingFixedMods + crosslinker.TotalMass; //Another method to calculate modification mass of cross-linked peptides //var modMassAlpha2 = listOfSortedms2Scans[0].PrecursorMass - psmCrossAlpha.compactPeptide.MonoisotopicMassIncludingFixedMods; var linkPos = PsmCross.XlPosCal(psmCrossAlpha.compactPeptide, crosslinker); var productMassesAlphaList = PsmCross.XlCalculateTotalProductMasses(psmCrossAlpha, modMassAlpha1, crosslinker, lp, true, false, linkPos); Assert.AreEqual(productMassesAlphaList[0].ProductMz.Length, 35); Assert.AreEqual(productMassesAlphaList[0].ProductMz[26], 2312.21985342336); }
public void UpdataModelForPdeep(PsmCross psmParentsForDraw) { var x = psmParentsForDraw.MatchedIonInfo.PredictedIonMZ; var y = psmParentsForDraw.MatchedIonInfo.PredictedIonIntensity; var xM = psmParentsForDraw.MatchedIonInfo.MatchedIonMz; var yM = psmParentsForDraw.MatchedIonInfo.MatchedIonIntensity; string scanNum = psmParentsForDraw.ScanNumber.ToString(); string sequence1 = psmParentsForDraw.FullSequence + "-" + psmParentsForDraw.XlPos.ToString(); PlotModel model = new PlotModel { Title = "pDeep Spectrum anotation of Scan " + scanNum + " for Peptide", DefaultFontSize = 15 }; model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Title = "m/z", Minimum = 0, Maximum = x.Max() * 1.02 }); model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Title = "Intensity(counts)", Minimum = -y.Max() * 1.2, Maximum = y.Max() * 1.2 }); var textAnnoSeq1 = new TextAnnotation() { }; textAnnoSeq1.FontSize = 12; textAnnoSeq1.TextColor = OxyColors.Red; textAnnoSeq1.StrokeThickness = 0; textAnnoSeq1.TextPosition = new DataPoint(x.Max() / 2, y.Max() * 1.15); textAnnoSeq1.Text = sequence1; model.Annotations.Add(textAnnoSeq1); LineSeries s0 = new LineSeries(); s0.Color = OxyColors.Black; s0.StrokeThickness = 1; s0.Points.Add(new DataPoint(0, 0)); s0.Points.Add(new DataPoint(x.Max(), 0)); model.Series.Add(s0); LineSeries[] s1 = new LineSeries[x.Length]; for (int i = 0; i < x.Length; i++) { OxyColor ionColor = OxyColors.Red; if (x[i] > 0) { s1[i] = new LineSeries(); s1[i].Color = ionColor; s1[i].StrokeThickness = 0.75; s1[i].Points.Add(new DataPoint(x[i] + 1.007277, 0)); s1[i].Points.Add(new DataPoint(x[i] + 1.007277, y[i])); var textAnno1 = new TextAnnotation(); textAnno1.FontSize = 9; textAnno1.TextColor = ionColor; textAnno1.StrokeThickness = 0; textAnno1.TextPosition = s1[i].Points[1]; textAnno1.Text = x[i].ToString("f3"); var textAnno2 = new TextAnnotation(); textAnno2.FontSize = 9; textAnno2.TextColor = ionColor; textAnno2.StrokeThickness = 0; textAnno2.TextPosition = new DataPoint(s1[i].Points[1].X, s1[i].Points[1].Y + y.Max() * 0.02); textAnno2.Text = psmParentsForDraw.MatchedIonInfo.PredictedIonName[i]; model.Annotations.Add(textAnno1); model.Annotations.Add(textAnno2); model.Series.Add(s1[i]); } } //Matched fragment ions LineSeries[] s2 = new LineSeries[xM.Length]; for (int i = 0; i < xM.Length; i++) { OxyColor ionColor = OxyColors.Blue; if (xM[i] > 0) { s2[i] = new LineSeries(); s2[i].Color = ionColor; s2[i].StrokeThickness = 0.75; s2[i].Points.Add(new DataPoint(xM[i] + 1.007277, 0)); s2[i].Points.Add(new DataPoint(xM[i] + 1.007277, -yM[i] / yM.Max())); var textAnno1 = new TextAnnotation(); textAnno1.FontSize = 9; textAnno1.TextColor = ionColor; textAnno1.StrokeThickness = 0; textAnno1.TextPosition = s2[i].Points[1]; textAnno1.Text = xM[i].ToString("f3"); var textAnno2 = new TextAnnotation(); textAnno2.FontSize = 9; textAnno2.TextColor = ionColor; textAnno2.StrokeThickness = 0; textAnno2.TextPosition = new DataPoint(s2[i].Points[1].X, s2[i].Points[1].Y - yM.Max() / yM.Max() * 0.02); textAnno2.Text = psmParentsForDraw.MatchedIonInfo.PredictedIonName[i]; model.Annotations.Add(textAnno1); model.Annotations.Add(textAnno2); model.Series.Add(s2[i]); } } // Axes are created automatically if they are not defined // Set the Model property, the INotifyPropertyChanged event will make the WPF Plot control update its content this.PdeepModel = model; }