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 CrosslinkAnalysisEngine(List <PsmCross> newPsms, Dictionary <CompactPeptideBase, HashSet <PeptideWithSetModifications> > compactPeptideToProteinPeptideMatching, List <Protein> proteinList, List <ModificationWithMass> variableModifications, List <ModificationWithMass> fixedModifications, List <ProductType> lp, string outputFolder, CrosslinkerTypeClass crosslinker, TerminusType terminusType, CommonParameters commonParameters, List <string> nestedIds) : base(commonParameters, nestedIds) { NewPsms = newPsms; CompactPeptideToProteinPeptideMatching = compactPeptideToProteinPeptideMatching; ProteinList = proteinList; VariableModifications = variableModifications; FixedModifications = fixedModifications; ProductTypes = lp; OutputFolder = outputFolder; Crosslinker = crosslinker; TerminusType = terminusType; }
public CrosslinkAnalysisEngine(List <PsmCross> newPsms, Dictionary <CompactPeptideBase, HashSet <PeptideWithSetModifications> > compactPeptideToProteinPeptideMatching, List <Protein> proteinList, List <ModificationWithMass> variableModifications, List <ModificationWithMass> fixedModifications, List <ProductType> lp, string OutputFolder, CrosslinkerTypeClass crosslinker, TerminusType terminusType, ICommonParameters CommonParameters, List <string> nestedIds) : base(nestedIds) { this.newPsms = newPsms; this.compactPeptideToProteinPeptideMatching = compactPeptideToProteinPeptideMatching; this.proteinList = proteinList; this.variableModifications = variableModifications; this.fixedModifications = fixedModifications; this.lp = lp; this.OutputFolder = OutputFolder; this.crosslinker = crosslinker; this.terminusType = terminusType; this.CommonParameters = CommonParameters; }
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); }
//Generate user defined crosslinker public static CrosslinkerTypeClass GenerateUserDefinedCrosslinker(XlSearchParameters xlSearchParameters) { var crosslinker = new CrosslinkerTypeClass( xlSearchParameters.UdXLkerResidues, xlSearchParameters.UdXLkerResidues2, xlSearchParameters.UdXLkerName, xlSearchParameters.UdXLkerCleavable, (xlSearchParameters.UdXLkerTotalMass.HasValue ? (double)xlSearchParameters.UdXLkerTotalMass : 9999), (xlSearchParameters.UdXLkerShortMass.HasValue ? (double)xlSearchParameters.UdXLkerShortMass : 9999), (xlSearchParameters.UdXLkerLongMass.HasValue ? (double)xlSearchParameters.UdXLkerLongMass : 9999), (xlSearchParameters.UdXLkerLoopMass.HasValue ? (double)xlSearchParameters.UdXLkerLoopMass : 9999), (xlSearchParameters.UdXLkerDeadendMassH2O.HasValue ? (double)xlSearchParameters.UdXLkerDeadendMassH2O : 9999), (xlSearchParameters.UdXLkerDeadendMassNH2.HasValue ? (double)xlSearchParameters.UdXLkerDeadendMassNH2 : 9999), (xlSearchParameters.UdXLkerDeadendMassTris.HasValue ? (double)xlSearchParameters.UdXLkerDeadendMassTris : 9999) ); return(crosslinker); }
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); }
protected override MyTaskResults RunSpecific(string OutputFolder, List <DbForTask> dbFilenameList, List <string> currentRawFileList, string taskId, FileSpecificParameters[] fileSettingsList) { MyTaskResults = new MyTaskResults(this); List <PsmCross> allPsms = new List <PsmCross>(); var compactPeptideToProteinPeptideMatch = new Dictionary <CompactPeptideBase, HashSet <PeptideWithSetModifications> >(); Status("Loading modifications...", taskId); List <ModificationWithMass> variableModifications = GlobalVariables.AllModsKnown.OfType <ModificationWithMass>().Where(b => CommonParameters.ListOfModsVariable.Contains((b.modificationType, b.id))).ToList(); List <ModificationWithMass> fixedModifications = GlobalVariables.AllModsKnown.OfType <ModificationWithMass>().Where(b => CommonParameters.ListOfModsFixed.Contains((b.modificationType, b.id))).ToList(); List <string> localizeableModificationTypes = GlobalVariables.AllModTypesKnown.ToList(); // load proteins List <Protein> proteinList = LoadProteins(taskId, dbFilenameList, true, XlSearchParameters.DecoyType, localizeableModificationTypes, CommonParameters); List <ProductType> ionTypes = new List <ProductType>(); if (CommonParameters.BIons) { ionTypes.Add(ProductType.BnoB1ions); } if (CommonParameters.YIons) { ionTypes.Add(ProductType.Y); } if (CommonParameters.ZdotIons) { ionTypes.Add(ProductType.Zdot); } if (CommonParameters.CIons) { ionTypes.Add(ProductType.C); } TerminusType terminusType = ProductTypeMethods.IdentifyTerminusType(ionTypes); var crosslinker = new CrosslinkerTypeClass(); crosslinker.SelectCrosslinker(XlSearchParameters.CrosslinkerType); if (XlSearchParameters.CrosslinkerType == CrosslinkerType.UserDefined) { crosslinker = GenerateUserDefinedCrosslinker(XlSearchParameters); } MyFileManager myFileManager = new MyFileManager(XlSearchParameters.DisposeOfFileWhenDone); var fileSpecificCommonParams = fileSettingsList.Select(b => SetAllFileSpecificCommonParams(CommonParameters, b)); HashSet <DigestionParams> ListOfDigestionParams = new HashSet <DigestionParams>(fileSpecificCommonParams.Select(p => p.DigestionParams)); int completedFiles = 0; object indexLock = new object(); object psmLock = new object(); Status("Searching files...", taskId); ProseCreatedWhileRunning.Append("The following crosslink discovery were used: "); ProseCreatedWhileRunning.Append("crosslinker name = " + crosslinker.CrosslinkerName + "; "); ProseCreatedWhileRunning.Append("crosslinker type = " + crosslinker.Cleavable + "; "); ProseCreatedWhileRunning.Append("crosslinker mass = " + crosslinker.TotalMass + "; "); ProseCreatedWhileRunning.Append("crosslinker modification site(s) = " + crosslinker.CrosslinkerModSites + "; "); ProseCreatedWhileRunning.Append("protease = " + CommonParameters.DigestionParams.Protease + "; "); ProseCreatedWhileRunning.Append("maximum missed cleavages = " + CommonParameters.DigestionParams.MaxMissedCleavages + "; "); ProseCreatedWhileRunning.Append("minimum peptide length = " + CommonParameters.DigestionParams.MinPeptideLength + "; "); ProseCreatedWhileRunning.Append(CommonParameters.DigestionParams.MaxPeptideLength == int.MaxValue ? "maximum peptide length = unspecified; " : "maximum peptide length = " + CommonParameters.DigestionParams.MaxPeptideLength + "; "); ProseCreatedWhileRunning.Append("initiator methionine behavior = " + CommonParameters.DigestionParams.InitiatorMethionineBehavior + "; "); ProseCreatedWhileRunning.Append("max modification isoforms = " + CommonParameters.DigestionParams.MaxModificationIsoforms + "; "); ProseCreatedWhileRunning.Append("fixed modifications = " + string.Join(", ", fixedModifications.Select(m => m.id)) + "; "); ProseCreatedWhileRunning.Append("variable modifications = " + string.Join(", ", variableModifications.Select(m => m.id)) + "; "); ProseCreatedWhileRunning.Append("parent mass tolerance(s) = " + XlSearchParameters.XlPrecusorMsTl + "; "); ProseCreatedWhileRunning.Append("product mass tolerance = " + CommonParameters.ProductMassTolerance + "; "); ProseCreatedWhileRunning.Append("The combined search database contained " + proteinList.Count + " total entries including " + proteinList.Where(p => p.IsContaminant).Count() + " contaminant sequences. "); for (int spectraFileIndex = 0; spectraFileIndex < currentRawFileList.Count; spectraFileIndex++) { if (GlobalVariables.StopLoops) { break; } var origDataFile = currentRawFileList[spectraFileIndex]; CommonParameters combinedParams = SetAllFileSpecificCommonParams(CommonParameters, fileSettingsList[spectraFileIndex]); List <PsmCross> newPsms = new List <PsmCross>(); var thisId = new List <string> { taskId, "Individual Spectra Files", origDataFile }; NewCollection(Path.GetFileName(origDataFile), thisId); Status("Loading spectra file...", thisId); MsDataFile myMsDataFile = myFileManager.LoadFile(origDataFile, combinedParams.TopNpeaks, combinedParams.MinRatio, combinedParams.TrimMs1Peaks, combinedParams.TrimMsMsPeaks, combinedParams); Status("Getting ms2 scans...", thisId); Ms2ScanWithSpecificMass[] arrayOfMs2ScansSortedByMass = GetMs2Scans(myMsDataFile, origDataFile, combinedParams.DoPrecursorDeconvolution, combinedParams.UseProvidedPrecursorInfo, combinedParams.DeconvolutionIntensityRatio, combinedParams.DeconvolutionMaxAssumedChargeState, combinedParams.DeconvolutionMassTolerance).OrderBy(b => b.PrecursorMass).ToArray(); for (int currentPartition = 0; currentPartition < CommonParameters.TotalPartitions; currentPartition++) { List <CompactPeptide> peptideIndex = null; List <Protein> proteinListSubset = proteinList.GetRange(currentPartition * proteinList.Count() / combinedParams.TotalPartitions, ((currentPartition + 1) * proteinList.Count() / combinedParams.TotalPartitions) - (currentPartition * proteinList.Count() / combinedParams.TotalPartitions)); Status("Getting fragment dictionary...", new List <string> { taskId }); var indexEngine = new IndexingEngine(proteinListSubset, variableModifications, fixedModifications, ionTypes, currentPartition, UsefulProteomicsDatabases.DecoyType.Reverse, ListOfDigestionParams, combinedParams, 30000.0, new List <string> { taskId }); List <int>[] fragmentIndex = null; lock (indexLock) GenerateIndexes(indexEngine, dbFilenameList, ref peptideIndex, ref fragmentIndex, taskId); Status("Searching files...", taskId); new TwoPassCrosslinkSearchEngine(newPsms, arrayOfMs2ScansSortedByMass, peptideIndex, fragmentIndex, ionTypes, currentPartition, combinedParams, 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, thisId).Run(); ReportProgress(new ProgressEventArgs(100, "Done with search " + (currentPartition + 1) + "/" + CommonParameters.TotalPartitions + "!", thisId)); } lock (psmLock) { allPsms.AddRange(newPsms.Where(p => p != null)); } completedFiles++; ReportProgress(new ProgressEventArgs(completedFiles / currentRawFileList.Count, "Searching...", new List <string> { taskId, "Individual Spectra Files" })); } ReportProgress(new ProgressEventArgs(100, "Done with all searches!", new List <string> { taskId, "Individual Spectra Files" })); Status("Crosslink analysis engine", taskId); MetaMorpheusEngineResults allcrosslinkanalysisResults; allcrosslinkanalysisResults = new CrosslinkAnalysisEngine(allPsms, compactPeptideToProteinPeptideMatch, proteinList, variableModifications, fixedModifications, ionTypes, OutputFolder, crosslinker, terminusType, CommonParameters, new List <string> { taskId }).Run(); allPsms = allPsms.ToList(); if (XlSearchParameters.XlOutAll) { try { WriteAllToTsv(allPsms, OutputFolder, "allPsms", new List <string> { taskId }); } catch (Exception) { throw; } } var allPsmsXL = allPsms.Where(p => p.CrossType == PsmCrossType.Cross).Where(p => p.XLBestScore >= CommonParameters.ScoreCutoff && p.BetaPsmCross.XLBestScore >= CommonParameters.ScoreCutoff).ToList(); foreach (var item in allPsmsXL) { if (item.OneBasedStartResidueInProtein.HasValue) { item.XlProteinPos = item.OneBasedStartResidueInProtein.Value + item.XlPos - 1; } if (item.BetaPsmCross.OneBasedStartResidueInProtein.HasValue) { item.BetaPsmCross.XlProteinPos = item.BetaPsmCross.OneBasedStartResidueInProtein.Value + item.BetaPsmCross.XlPos - 1; } } //Write Inter Psms FDR var interPsmsXL = allPsmsXL.Where(p => !p.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First().Contains(p.BetaPsmCross.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First()) && !p.BetaPsmCross.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First().Contains(p.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First())).OrderByDescending(p => p.XLQvalueTotalScore).ToList(); foreach (var item in interPsmsXL) { item.CrossType = PsmCrossType.Inter; } var interPsmsXLFDR = CrosslinkDoFalseDiscoveryRateAnalysis(interPsmsXL).ToList(); //var interPsmsXLFDR = CrosslinkFDRAnalysis(interPsmsXL).ToList(); if (XlSearchParameters.XlOutCrosslink) { WriteCrosslinkToTsv(interPsmsXLFDR, OutputFolder, "xl_inter_fdr", new List <string> { taskId }); } if (XlSearchParameters.XlOutPercolator) { try { var interPsmsXLPercolator = interPsmsXL.Where(p => p.XLBestScore >= 2 && p.BetaPsmCross.XLBestScore >= 2).OrderBy(p => p.ScanNumber).ToList(); WriteCrosslinkToTxtForPercolator(interPsmsXLPercolator, OutputFolder, "xl_inter_perc", crosslinker, new List <string> { taskId }); } catch (Exception) { throw; } } //Write Intra Psms FDR var intraPsmsXL = allPsmsXL.Where(p => p.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First() == p.BetaPsmCross.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First() || p.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First().Contains(p.BetaPsmCross.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First()) || p.BetaPsmCross.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First().Contains(p.CompactPeptides.First().Value.Item2.Select(b => b.Protein.Accession).First())).OrderByDescending(p => p.XLQvalueTotalScore).ToList(); foreach (var item in intraPsmsXL) { item.CrossType = PsmCrossType.Intra; } var intraPsmsXLFDR = CrosslinkDoFalseDiscoveryRateAnalysis(intraPsmsXL).ToList(); //var intraPsmsXLFDR = CrosslinkFDRAnalysis(intraPsmsXL).ToList(); if (XlSearchParameters.XlOutCrosslink) { WriteCrosslinkToTsv(intraPsmsXLFDR, OutputFolder, "xl_intra_fdr", new List <string> { taskId }); } if (XlSearchParameters.XlOutPercolator) { try { var intraPsmsXLPercolator = intraPsmsXL.Where(p => p.XLBestScore >= 2 && p.BetaPsmCross.XLBestScore >= 2).OrderBy(p => p.ScanNumber).ToList(); WriteCrosslinkToTxtForPercolator(intraPsmsXLPercolator, OutputFolder, "xl_intra_perc", crosslinker, new List <string> { taskId }); } catch (Exception) { throw; } } var singlePsms = allPsms.Where(p => p.CrossType == PsmCrossType.Singe && p.FullSequence != null && !p.FullSequence.Contains("Crosslink")).OrderByDescending(p => p.Score).ToList(); var singlePsmsFDR = SingleFDRAnalysis(singlePsms).ToList(); if (XlSearchParameters.XlOutAll) { WriteSingleToTsv(singlePsmsFDR, OutputFolder, "single_fdr", new List <string> { taskId }); } var loopPsms = allPsms.Where(p => p.CrossType == PsmCrossType.Loop).OrderByDescending(p => p.XLTotalScore).ToList(); var loopPsmsFDR = SingleFDRAnalysis(loopPsms).ToList(); if (XlSearchParameters.XlOutAll) { WriteSingleToTsv(loopPsmsFDR, OutputFolder, "loop_fdr", new List <string> { taskId }); } var deadendPsms = allPsms.Where(p => p.CrossType == PsmCrossType.DeadEnd || p.CrossType == PsmCrossType.DeadEndH2O || p.CrossType == PsmCrossType.DeadEndNH2 || p.CrossType == PsmCrossType.DeadEndTris).OrderByDescending(p => p.XLTotalScore).ToList(); deadendPsms.AddRange(allPsms.Where(p => p.CrossType == PsmCrossType.Singe && p.FullSequence != null && p.FullSequence.Contains("Crosslink")).ToList()); var deadendPsmsFDR = SingleFDRAnalysis(deadendPsms).ToList(); if (XlSearchParameters.XlOutAll) { WriteSingleToTsv(deadendPsmsFDR, OutputFolder, "deadend_fdr", new List <string> { taskId }); } if (XlSearchParameters.XlOutPepXML) { List <PsmCross> allPsmsFDR = new List <PsmCross>(); allPsmsFDR.AddRange(intraPsmsXLFDR.Where(p => p.IsDecoy != true && p.BetaPsmCross.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); allPsmsFDR.AddRange(interPsmsXLFDR.Where(p => p.IsDecoy != true && p.BetaPsmCross.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); allPsmsFDR.AddRange(singlePsmsFDR.Where(p => p.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); allPsmsFDR.AddRange(loopPsmsFDR.Where(p => p.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); allPsmsFDR.AddRange(deadendPsmsFDR.Where(p => p.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); allPsmsFDR = allPsmsFDR.OrderBy(p => p.ScanNumber).ToList(); foreach (var fullFilePath in currentRawFileList) { string fileNameNoExtension = Path.GetFileNameWithoutExtension(fullFilePath); WritePepXML_xl(allPsmsFDR.Where(p => p.FullFilePath == fullFilePath).ToList(), proteinList, dbFilenameList[0].FilePath, variableModifications, fixedModifications, localizeableModificationTypes, OutputFolder, fileNameNoExtension, new List <string> { taskId }); } } if (XlSearchParameters.XlOutAll) { List <PsmCross> allPsmsXLFDR = new List <PsmCross>(); allPsmsXLFDR.AddRange(intraPsmsXLFDR.Where(p => p.IsDecoy != true && p.BetaPsmCross.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); allPsmsXLFDR.AddRange(interPsmsXLFDR.Where(p => p.IsDecoy != true && p.BetaPsmCross.IsDecoy != true && p.FdrInfo.QValue <= 0.05).ToList()); try { allPsmsXLFDR = allPsmsXLFDR.OrderByDescending(p => p.XLQvalueTotalScore).ToList(); var allPsmsXLFDRGroup = FindCrosslinks(allPsmsXLFDR); WriteCrosslinkToTsv(allPsmsXLFDRGroup, OutputFolder, "allPsmsXLFDRGroup", new List <string> { taskId }); } catch (Exception) { throw; } } return(MyTaskResults); }
private void WritePepXML_xl(List <PsmCross> items, List <DbForTask> dbFilenameList, List <ModificationWithMass> variableModifications, List <ModificationWithMass> fixedModifications, List <string> localizeableModificationTypes, string outputFolder, string fileName, List <string> nestedIds) { XmlSerializer _indexedSerializer = new XmlSerializer(typeof(pepXML.Generated.msms_pipeline_analysis)); var _pepxml = new pepXML.Generated.msms_pipeline_analysis(); #region Add element to pepXML _pepxml.date = DateTime.Now; _pepxml.summary_xml = items[0].FullFilePath + ".pep.xml"; string proteaseC = ""; string proteaseNC = ""; foreach (var x in CommonParameters.DigestionParams.Protease.SequencesInducingCleavage) { proteaseC += x; } foreach (var x in CommonParameters.DigestionParams.Protease.SequencesPreventingCleavage) { proteaseNC += x; } CrosslinkerTypeClass crosslinker = new CrosslinkerTypeClass().SelectCrosslinker(XlSearchParameters.CrosslinkerType); var proteinList = dbFilenameList.SelectMany(b => LoadProteinDb(b.FilePath, true, XlSearchParameters.DecoyType, localizeableModificationTypes, b.IsContaminant, out Dictionary <string, Modification> unknownModifications)).ToList(); uint proteinTot = Convert.ToUInt32(proteinList.Count); string fileNameNoExtension = Path.GetFileNameWithoutExtension(items[0].FullFilePath); string filePathNoExtension = Path.ChangeExtension(items[0].FullFilePath, null); var para = new List <pepXML.Generated.nameValueType>(); { para.Add(new pepXML.Generated.nameValueType { name = "threads", value = "" }); para.Add(new pepXML.Generated.nameValueType { name = "database", value = dbFilenameList[0].FilePath }); para.Add(new pepXML.Generated.nameValueType { name = "MS_data_file", value = items[0].FullFilePath }); para.Add(new pepXML.Generated.nameValueType { name = "Search with All Possible Beta Peptides", value = XlSearchParameters.CrosslinkSearchWithAllBeta.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-link Precusor Mass Tolence", value = XlSearchParameters.XlPrecusorMsTl.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-linker Type", value = crosslinker.CrosslinkerName }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-linker mass", value = crosslinker.TotalMass.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-linker cleavable", value = crosslinker.Cleavable.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-linker cleavable long mass", value = crosslinker.CleaveMassLong.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-linker cleavable short mass", value = crosslinker.CleaveMassShort.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Cross-linker xl site", value = crosslinker.CrosslinkerModSite.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Generate decoy proteins", value = XlSearchParameters.DecoyType.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "MaxMissed Cleavages", value = CommonParameters.DigestionParams.MaxMissedCleavages.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Protease", value = CommonParameters.DigestionParams.Protease.Name }); para.Add(new pepXML.Generated.nameValueType { name = "Initiator Methionine", value = CommonParameters.DigestionParams.InitiatorMethionineBehavior.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Max Modification Isoforms", value = CommonParameters.DigestionParams.MaxModificationIsoforms.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Min Peptide Len", value = CommonParameters.DigestionParams.MinPeptideLength.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Max Peptide Len", value = CommonParameters.DigestionParams.MaxPeptideLength.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Product Mass Tolerance", value = CommonParameters.ProductMassTolerance.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Ions to search", value = "B " + CommonParameters.BIons.ToString() + " Y " + CommonParameters.YIons.ToString() + " C " + CommonParameters.CIons.ToString() + " Z " + CommonParameters.ZdotIons.ToString() }); para.Add(new pepXML.Generated.nameValueType { name = "Allowed Beta Precusor Mass Difference", value = XlSearchParameters.XlBetaPrecusorMsTl.ToString() }); foreach (var item in fixedModifications) { para.Add(new pepXML.Generated.nameValueType { name = "Fixed Modifications: " + item.id, value = item.monoisotopicMass.ToString() }); } foreach (var item in variableModifications) { para.Add(new pepXML.Generated.nameValueType { name = "Variable Modifications: " + item.id, value = item.monoisotopicMass.ToString() }); } para.Add(new pepXML.Generated.nameValueType { name = "Localize All Modifications", value = CommonParameters.LocalizeAll.ToString() }); } _pepxml.msms_run_summary = new pepXML.Generated.msms_pipeline_analysisMsms_run_summary[1] { new pepXML.Generated.msms_pipeline_analysisMsms_run_summary { base_name = filePathNoExtension, raw_data_type = "raw", raw_data = ".mzML", sample_enzyme = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySample_enzyme() { name = CommonParameters.DigestionParams.Protease.Name, specificity = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySample_enzymeSpecificity[1] { new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySample_enzymeSpecificity { cut = proteaseC, no_cut = proteaseNC, } } }, search_summary = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySearch_summary[1] { new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySearch_summary { base_name = filePathNoExtension, //search_engine = pepXML.Generated.engineType.Kojak, search_engine_version = GlobalVariables.MetaMorpheusVersion, precursor_mass_type = pepXML.Generated.massType.monoisotopic, fragment_mass_type = pepXML.Generated.massType.monoisotopic, search_id = 1, search_database = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySearch_summarySearch_database { local_path = dbFilenameList[0].FilePath, type = pepXML.Generated.msms_pipeline_analysisMsms_run_summarySearch_summarySearch_databaseType.AA, }, enzymatic_search_constraint = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySearch_summaryEnzymatic_search_constraint { enzyme = CommonParameters.DigestionParams.Protease.Name, max_num_internal_cleavages = CommonParameters.DigestionParams.MaxMissedCleavages.ToString(), //min_number_termini = "2" }, parameter = para.ToArray() } }, } }; _pepxml.msms_run_summary[0].spectrum_query = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_query[items.Count]; var searchHits = new List <pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hit>(); for (int i = 0; i < items.Count; i++) { int modsFixedNum = items[i].CompactPeptides.First().Value.Item2.First().allModsOneIsNterminus.Count; var mods = new List <pepXML.Generated.modInfoDataTypeMod_aminoacid_mass> (); for (int j = 0; j < modsFixedNum; j++) { var mod = new pepXML.Generated.modInfoDataTypeMod_aminoacid_mass { mass = items[i].CompactPeptides.First().Value.Item2.First().allModsOneIsNterminus.Values.Select(p => p.monoisotopicMass).ToList()[j], position = items[i].CompactPeptides.First().Value.Item2.First().allModsOneIsNterminus.Keys.ToList()[j].ToString() }; mods.Add(mod); } if (items[i].CrossType == PsmCrossType.Singe) { var searchHit = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hit { hit_rank = 1, peptide = items[i].BaseSequence, peptide_prev_aa = items[i].CompactPeptides.First().Value.Item2.First().PreviousAminoAcid.ToString(), peptide_next_aa = items[i].CompactPeptides.First().Value.Item2.First().NextAminoAcid.ToString(), protein = items[i].CompactPeptides.First().Value.Item2.First().Protein.Accession, num_tot_proteins = 1, calc_neutral_pep_mass = (float)items[i].ScanPrecursorMonoisotopicPeakMz * items[i].ScanPrecursorCharge, massdiff = (items[i].ScanPrecursorMass - items[i].PeptideMonisotopicMass.Value).ToString(), xlink_typeSpecified = true, xlink_type = pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlink_type.na, modification_info = new pepXML.Generated.modInfoDataType { mod_aminoacid_mass = mods.ToArray() }, search_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "xlTotalScore", value = items[i].XLTotalScore.ToString() }, new pepXML.Generated.nameValueType { name = "Qvalue", value = items[i].FdrInfo.QValue.ToString() } }, }; searchHits.Add(searchHit); } if (items[i].CrossType == PsmCrossType.DeadEnd || items[i].CrossType == PsmCrossType.DeadEndH2O || items[i].CrossType == PsmCrossType.DeadEndNH2 || items[i].CrossType == PsmCrossType.DeadEndTris) { double crosslinkerDeadEndMass = 0; switch (items[i].CrossType) { case PsmCrossType.DeadEndNH2: crosslinkerDeadEndMass = crosslinker.DeadendMassNH2; break; case PsmCrossType.DeadEndTris: crosslinkerDeadEndMass = crosslinker.DeadendMassTris; break; default: crosslinkerDeadEndMass = crosslinker.DeadendMassH2O; break; } var mod = new pepXML.Generated.modInfoDataTypeMod_aminoacid_mass { mass = crosslinkerDeadEndMass, position = items[i].XlPos.ToString() }; mods.Add(mod); var searchHit = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hit { hit_rank = 1, peptide = items[i].BaseSequence, peptide_prev_aa = items[i].CompactPeptides.First().Value.Item2.First().PreviousAminoAcid.ToString(), peptide_next_aa = items[i].CompactPeptides.First().Value.Item2.First().NextAminoAcid.ToString(), protein = items[i].CompactPeptides.First().Value.Item2.First().Protein.Accession, num_tot_proteins = 1, calc_neutral_pep_mass = (float)items[i].ScanPrecursorMonoisotopicPeakMz * items[i].ScanPrecursorCharge, massdiff = (items[i].ScanPrecursorMass - items[i].PeptideMonisotopicMass.Value - crosslinkerDeadEndMass).ToString(), xlink_typeSpecified = true, xlink_type = pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlink_type.na, modification_info = new pepXML.Generated.modInfoDataType { mod_aminoacid_mass = mods.ToArray() }, search_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "xlTotalScore", value = items[i].XLTotalScore.ToString() }, new pepXML.Generated.nameValueType { name = "Qvalue", value = items[i].FdrInfo.QValue.ToString() } }, }; searchHits.Add(searchHit); } if (items[i].CrossType == PsmCrossType.Inter || items[i].CrossType == PsmCrossType.Intra || items[i].CrossType == PsmCrossType.Cross) { int modsFixedNumBeta = items[i].BetaPsmCross.CompactPeptides.First().Value.Item2.First().allModsOneIsNterminus.Count; var modsBeta = new List <pepXML.Generated.modInfoDataTypeMod_aminoacid_mass>(); for (int j = 0; j < modsFixedNumBeta; j++) { var modBeta = new pepXML.Generated.modInfoDataTypeMod_aminoacid_mass { mass = items[i].BetaPsmCross.CompactPeptides.First().Value.Item2.First().allModsOneIsNterminus.Values.Select(p => p.monoisotopicMass).ToList()[j], position = items[i].BetaPsmCross.CompactPeptides.First().Value.Item2.First().allModsOneIsNterminus.Keys.ToList()[j].ToString() }; modsBeta.Add(modBeta); } var alpha = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlinkLinked_peptide { peptide = items[i].BaseSequence, peptide_prev_aa = items[i].CompactPeptides.First().Value.Item2.First().PreviousAminoAcid.ToString(), peptide_next_aa = items[i].CompactPeptides.First().Value.Item2.First().NextAminoAcid.ToString(), protein = items[i].CompactPeptides.First().Value.Item2.First().Protein.Accession, num_tot_proteins = 1, calc_neutral_pep_mass = (float)items[i].PeptideMonisotopicMass.Value, complement_mass = (float)(items[i].ScanPrecursorMass - items[i].PeptideMonisotopicMass.Value), designation = "alpha", modification_info = new pepXML.Generated.modInfoDataType { mod_aminoacid_mass = mods.ToArray() }, xlink_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "xlscore", value = items[i].XLBestScore.ToString() }, new pepXML.Generated.nameValueType { name = "link", value = items[i].XlPos.ToString() }, } }; var beta = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlinkLinked_peptide { peptide = items[i].BetaPsmCross.BaseSequence, peptide_prev_aa = items[i].BetaPsmCross.CompactPeptides.First().Value.Item2.First().PreviousAminoAcid.ToString(), peptide_next_aa = items[i].BetaPsmCross.CompactPeptides.First().Value.Item2.First().NextAminoAcid.ToString(), protein = items[i].BetaPsmCross.CompactPeptides.First().Value.Item2.First().Protein.Accession, num_tot_proteins = 1, calc_neutral_pep_mass = (float)items[i].BetaPsmCross.PeptideMonisotopicMass.Value, complement_mass = (float)(items[i].ScanPrecursorMass - items[i].PeptideMonisotopicMass.Value), designation = "beta", modification_info = new pepXML.Generated.modInfoDataType { mod_aminoacid_mass = modsBeta.ToArray() }, xlink_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "xlscore", value = items[i].BetaPsmCross.XLBestScore.ToString() }, new pepXML.Generated.nameValueType { name = "link", value = items[i].BetaPsmCross.XlPos.ToString() }, } }; var cross = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlinkLinked_peptide[2] { alpha, beta }; var searchHit = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hit { hit_rank = 1, peptide = "-", peptide_prev_aa = "-", peptide_next_aa = "-", protein = "-", num_tot_proteins = 1, calc_neutral_pep_mass = (float)items[i].ScanPrecursorMonoisotopicPeakMz * items[i].ScanPrecursorCharge, massdiff = (items[i].ScanPrecursorMass - items[i].BetaPsmCross.PeptideMonisotopicMass.Value - items[i].PeptideMonisotopicMass.Value - crosslinker.TotalMass).ToString(), xlink_typeSpecified = true, xlink_type = pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlink_type.xl, xlink = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlink { identifier = crosslinker.CrosslinkerName, mass = (float)crosslinker.TotalMass, linked_peptide = cross }, search_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "xlTotalScore", value = items[i].XLTotalScore.ToString() }, new pepXML.Generated.nameValueType { name = "Qvalue", value = items[i].FdrInfo.QValue.ToString() } } }; searchHits.Add(searchHit); } if (items[i].CrossType == PsmCrossType.Loop) { var thePeptide = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlinkLinked_peptide { xlink_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "link", value = items[i].XlPos.ToString() }, new pepXML.Generated.nameValueType { name = "link", value = items[i].XlPos2.ToString() } } }; var cross = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlinkLinked_peptide[1] { thePeptide }; var searchHit = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hit { hit_rank = 1, peptide = items[i].BaseSequence, peptide_prev_aa = items[i].CompactPeptides.First().Value.Item2.First().PreviousAminoAcid.ToString(), peptide_next_aa = items[i].CompactPeptides.First().Value.Item2.First().NextAminoAcid.ToString(), protein = items[i].CompactPeptides.First().Value.Item2.First().Protein.Accession, num_tot_proteins = 1, calc_neutral_pep_mass = (float)items[i].ScanPrecursorMonoisotopicPeakMz * items[i].ScanPrecursorCharge, massdiff = (items[i].ScanPrecursorMass - items[i].PeptideMonisotopicMass.Value - crosslinker.LoopMass).ToString(), xlink_typeSpecified = true, xlink_type = pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlink_type.loop, modification_info = new pepXML.Generated.modInfoDataType { mod_aminoacid_mass = mods.ToArray() }, xlink = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hitXlink { identifier = crosslinker.CrosslinkerName, mass = (float)crosslinker.TotalMass, linked_peptide = cross }, search_score = new pepXML.Generated.nameValueType[] { new pepXML.Generated.nameValueType { name = "xlTotalScore", value = items[i].XLTotalScore.ToString() }, new pepXML.Generated.nameValueType { name = "Qvalue", value = items[i].FdrInfo.QValue.ToString() } } }; searchHits.Add(searchHit); } } for (int i = 0; i < items.Count; i++) { _pepxml.msms_run_summary[0].spectrum_query[i] = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_query() { spectrum = fileNameNoExtension + "." + items[i].ScanNumber.ToString(), start_scan = Convert.ToUInt32(items[i].ScanNumber), end_scan = Convert.ToUInt32(items[i].ScanNumber), precursor_neutral_mass = (float)items[i].ScanPrecursorMonoisotopicPeakMz * items[i].ScanPrecursorCharge, assumed_charge = items[i].ScanPrecursorCharge.ToString(), index = Convert.ToUInt32(i + 1), retention_time_sec = (float)items[i].ScanRetentionTime, search_result = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_result[1] { new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_result { search_hit = new pepXML.Generated.msms_pipeline_analysisMsms_run_summarySpectrum_querySearch_resultSearch_hit[1] { searchHits[i] } } } }; } #endregion Add element to pepXML TextWriter writer = new StreamWriter(Path.Combine(outputFolder, fileName + ".pep.xml")); _indexedSerializer.Serialize(writer, _pepxml); writer.Close(); SucessfullyFinishedWritingFile(Path.Combine(outputFolder, fileName + ".pep.xml"), nestedIds); }
private void WriteCrosslinkToTxtForPercolator(List <PsmCross> items, string outputFolder, string fileName, CrosslinkerTypeClass crosslinker, List <string> nestedIds) { var writtenFile = Path.Combine(outputFolder, fileName + ".txt"); using (StreamWriter output = new StreamWriter(writtenFile)) { output.WriteLine("SpecId\tLabel\tScannr\tScore\tdScore\tNormRank\tCharge\tMass\tPPM\tLenShort\tLenLong\tLenSum" + "\tPeptide\tProtein"); foreach (var item in items) { if (item.BaseSequence != null && item.BetaPsmCross.BaseSequence != null && item.ProteinAccesion != null && item.BetaPsmCross.ProteinAccesion != null) { string x = "T"; int label = 1; if (item.IsDecoy || item.BetaPsmCross.IsDecoy) { x = "D"; label = -1; } output.WriteLine( x + "-" + item.ScanNumber.ToString(CultureInfo.InvariantCulture) + "-" + item.ScanRetentionTime.ToString(CultureInfo.InvariantCulture) + "\t" + label.ToString(CultureInfo.InvariantCulture) + "\t" + item.ScanNumber.ToString(CultureInfo.InvariantCulture) + "\t" + item.XLTotalScore.ToString(CultureInfo.InvariantCulture) + "\t" + item.DScore.ToString(CultureInfo.InvariantCulture) + "\t" + (item.XlRank[0] + item.XlRank[1]).ToString(CultureInfo.InvariantCulture) + "\t" + item.ScanPrecursorCharge.ToString(CultureInfo.InvariantCulture) + "\t" + item.ScanPrecursorMass.ToString(CultureInfo.InvariantCulture) + "\t" + ((item.PeptideMonisotopicMass.HasValue && item.BetaPsmCross.PeptideMonisotopicMass.HasValue) ? ((item.ScanPrecursorMass - item.BetaPsmCross.PeptideMonisotopicMass.Value - item.PeptideMonisotopicMass.Value - crosslinker.TotalMass) / item.ScanPrecursorMass * 1E6).ToString(CultureInfo.InvariantCulture) : "---") + "\t" + item.BetaPsmCross.BaseSequence.Length.ToString(CultureInfo.InvariantCulture) + "\t" + item.BaseSequence.Length.ToString(CultureInfo.InvariantCulture) + "\t" + (item.BetaPsmCross.BaseSequence.Length + item.BaseSequence.Length).ToString(CultureInfo.InvariantCulture) + "\t" + "-." + item.BaseSequence + item.XlPos.ToString(CultureInfo.InvariantCulture) + "--" + item.BetaPsmCross.BaseSequence + item.BetaPsmCross.XlPos.ToString(CultureInfo.InvariantCulture) + ".-" + "\t" + item.CompactPeptides.First().Value.Item2.Select(p => p.Protein.Accession).First().ToString(CultureInfo.InvariantCulture) + "(" + item.XlProteinPos.ToString(CultureInfo.InvariantCulture) + ")" + "\t" + item.BetaPsmCross.CompactPeptides.First().Value.Item2.Select(p => p.Protein.Accession).First().ToString(CultureInfo.InvariantCulture) + "(" + item.BetaPsmCross.XlProteinPos.ToString(CultureInfo.InvariantCulture) + ")" ); } } } SucessfullyFinishedWritingFile(writtenFile, nestedIds); }
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); }