public override string ToString() { string position = ""; switch (CrossType) { case PsmCrossType.Single: break; case PsmCrossType.Loop: position = "(" + LinkPositions[0].ToString() + "-" + LinkPositions[1].ToString() + ")"; break; default: position = "(" + LinkPositions[0].ToString() + ")"; break; } var sb = new StringBuilder(); sb.Append(FullFilePath + "\t"); sb.Append(ScanNumber + "\t"); sb.Append(PrecursorScanNumber + "\t"); sb.Append(ScanPrecursorMonoisotopicPeakMz + "\t"); sb.Append(ScanPrecursorCharge + "\t"); sb.Append(ScanPrecursorMass + "\t"); sb.Append(CrossType.ToString() + "\t"); if (LinkPositions != null) { if (CrossType == PsmCrossType.Loop) { sb.Append(BaseSequence[LinkPositions[0] - 1] + ";" + BaseSequence[LinkPositions[1] - 1] + "\t"); } else if (CrossType == PsmCrossType.Inter || CrossType == PsmCrossType.Intra) { sb.Append(BaseSequence[LinkPositions[0] - 1] + ";" + BetaPeptide.BaseSequence[BetaPeptide.LinkPositions[0] - 1] + "\t"); } else { // deadend sb.Append(BaseSequence[LinkPositions[0] - 1] + "\t"); } } else { sb.Append("\t"); } sb.Append("\t"); List <PeptideWithSetModifications> pepsWithMods = BestMatchingPeptides.Select(p => p.Peptide).ToList(); var proteinAccessionString = ProteinAccession != null ? ProteinAccession : PsmTsvWriter.Resolve(pepsWithMods.Select(b => b.Protein.Accession), FullSequence).ResolvedString; sb.Append(proteinAccessionString + "\t"); sb.Append(XlProteinPos + (XlProteinPosLoop.HasValue? "~" + XlProteinPosLoop.Value : null) + "\t"); sb.Append(BaseSequence + "\t"); sb.Append(FullSequence + position + "\t"); sb.Append((PeptideMonisotopicMass.HasValue ? PeptideMonisotopicMass.Value.ToString() : "---")); sb.Append("\t"); sb.Append(Score + "\t"); sb.Append(XlRank[0] + "\t"); if (ChildMatchedFragmentIons == null) { foreach (var mid in MatchedIonDataDictionary(this.MatchedFragmentIons)) { sb.Append(mid.Value); sb.Append("\t"); } } else { StringBuilder[] scanFragmentStringbuilder = new StringBuilder[6]; int i = 0; foreach (var mid in MatchedIonDataDictionary(this.MatchedFragmentIons)) { scanFragmentStringbuilder[i] = new StringBuilder(); scanFragmentStringbuilder[i].Append("{" + ScanNumber + "@" + mid.Value + "}"); i++; } foreach (var childScan in ChildMatchedFragmentIons) { int j = 0; int oneBasedScan = childScan.Key; foreach (var mid in MatchedIonDataDictionary(childScan.Value)) { scanFragmentStringbuilder[j].Append("{" + oneBasedScan + "@" + mid.Value + "}"); j++; } } foreach (var s in scanFragmentStringbuilder) { sb.Append(s.ToString() + "\t"); } } if (BetaPeptide != null) { sb.Append("\t"); List <PeptideWithSetModifications> betaPepsWithMods = BetaPeptide.BestMatchingPeptides.Select(p => p.Peptide).ToList(); var betaProteinAccessionString = BetaPeptide.ProteinAccession != null ? BetaPeptide.ProteinAccession : PsmTsvWriter.Resolve(betaPepsWithMods.Select(b => b.Protein.Accession), FullSequence).ResolvedString; sb.Append(betaProteinAccessionString + "\t"); sb.Append(BetaPeptide.XlProteinPos + "\t"); sb.Append(BetaPeptide.BaseSequence + "\t"); sb.Append(BetaPeptide.FullSequence + "(" + BetaPeptide.LinkPositions[0].ToString() + ")" + "\t"); sb.Append(BetaPeptide.PeptideMonisotopicMass.ToString() + "\t"); sb.Append(BetaPeptide.Score + "\t"); sb.Append(XlRank[1] + "\t"); if (BetaPeptide.ChildMatchedFragmentIons == null) { foreach (var betamid in MatchedIonDataDictionary(this.BetaPeptide.MatchedFragmentIons)) { sb.Append(betamid.Value); sb.Append("\t"); } } else { StringBuilder[] scanFragmentStringbuilder = new StringBuilder[6]; int i = 0; foreach (var betamid in MatchedIonDataDictionary(this.BetaPeptide.MatchedFragmentIons)) { scanFragmentStringbuilder[i] = new StringBuilder(); scanFragmentStringbuilder[i].Append("{" + ScanNumber + "@" + betamid.Value + "}"); i++; } foreach (var betaChildScan in BetaPeptide.ChildMatchedFragmentIons) { int j = 0; int betaOneBasedScan = betaChildScan.Key; foreach (var betamid in MatchedIonDataDictionary(betaChildScan.Value)) { scanFragmentStringbuilder[j].Append("{" + betaOneBasedScan + "@" + betamid.Value + "}"); j++; } } foreach (var s in scanFragmentStringbuilder) { sb.Append(s.ToString() + "\t"); } } sb.Append("\t"); sb.Append(XLTotalScore + "\t"); // mass of crosslinker sb.Append(((PeptideMonisotopicMass.HasValue) ? (ScanPrecursorMass - BetaPeptide.PeptideMonisotopicMass - PeptideMonisotopicMass.Value).ToString() : "---")); sb.Append("\t"); int alphaNumParentIons = MatchedFragmentIons.Count(p => p.NeutralTheoreticalProduct.ProductType == ProductType.M); int betaNumParentIons = BetaPeptide.MatchedFragmentIons.Count(p => p.NeutralTheoreticalProduct.ProductType == ProductType.M); sb.Append(alphaNumParentIons + ";" + betaNumParentIons + "\t"); sb.Append(alphaNumParentIons + betaNumParentIons + "\t"); sb.Append(((ParentIonMaxIntensityRanks != null) && (ParentIonMaxIntensityRanks.Any()) ? ParentIonMaxIntensityRanks.Min().ToString() : "-")); sb.Append("\t"); } if (BetaPeptide == null) { sb.Append((IsDecoy) ? "D" : (IsContaminant) ? "C" : "T"); sb.Append("\t"); } else { sb.Append((IsDecoy || BetaPeptide.IsDecoy) ? "D" : (IsContaminant || BetaPeptide.IsContaminant) ? "C" : "T"); sb.Append("\t"); } sb.Append(FdrInfo.QValue.ToString()); sb.Append("\t"); return(sb.ToString()); }
public override string ToString() { string position = ""; switch (CrossType) { case PsmCrossType.Single: break; case PsmCrossType.Loop: position = "(" + LinkPositions[0].ToString() + "-" + LinkPositions[1].ToString() + ")"; break; default: position = "(" + LinkPositions[0].ToString() + ")"; break; } var sb = new StringBuilder(); sb.Append(FullFilePath + "\t"); sb.Append(ScanNumber + "\t"); sb.Append(PrecursorScanNumber + "\t"); sb.Append(ScanPrecursorMonoisotopicPeakMz + "\t"); sb.Append(ScanPrecursorCharge + "\t"); sb.Append(ScanPrecursorMass + "\t"); sb.Append(CrossType.ToString() + "\t"); if (LinkPositions != null) { if (CrossType == PsmCrossType.Loop) { sb.Append(BaseSequence[LinkPositions[0] - 1] + ";" + BaseSequence[LinkPositions[1] - 1] + "\t"); } else if (CrossType == PsmCrossType.Inter || CrossType == PsmCrossType.Intra) { sb.Append(BaseSequence[LinkPositions[0] - 1] + ";" + BetaPeptide.BaseSequence[BetaPeptide.LinkPositions[0] - 1] + "\t"); } else { // deadend sb.Append(BaseSequence[LinkPositions[0] - 1] + "\t"); } } else { sb.Append("\t"); } sb.Append("\t"); sb.Append(ProteinAccession + "\t"); sb.Append(XlProteinPos + "\t"); sb.Append(BaseSequence + "\t"); sb.Append(FullSequence + position + "\t"); sb.Append((PeptideMonisotopicMass.HasValue ? PeptideMonisotopicMass.Value.ToString() : "---")); sb.Append("\t"); sb.Append(Score + "\t"); sb.Append(XlRank[0] + "\t"); foreach (var mid in MatchedIonDataDictionary(this.MatchedFragmentIons)) { sb.Append(mid.Value); sb.Append("\t"); } StringBuilder childScanFragmentStringbuilder = new StringBuilder(); if (ChildMatchedFragmentIons != null) { foreach (var childScan in ChildMatchedFragmentIons) { int oneBasedScan = childScan.Key; var matchedIonsDict = MatchedIonDataDictionary(childScan.Value); childScanFragmentStringbuilder.Append("{" + oneBasedScan + "|" + matchedIonsDict[PsmTsvHeader.MatchedIonMzRatios] + "}"); } } sb.Append(childScanFragmentStringbuilder.ToString() + "\t"); if (BetaPeptide != null) { sb.Append("\t"); sb.Append(BetaPeptide.ProteinAccession + "\t"); sb.Append(BetaPeptide.XlProteinPos + "\t"); sb.Append(BetaPeptide.BaseSequence + "\t"); sb.Append(BetaPeptide.FullSequence + "(" + BetaPeptide.LinkPositions[0].ToString() + ")" + "\t"); sb.Append(BetaPeptide.PeptideMonisotopicMass.ToString() + "\t"); sb.Append(BetaPeptide.Score + "\t"); sb.Append(XlRank[1] + "\t"); foreach (var betamid in MatchedIonDataDictionary(this.BetaPeptide.MatchedFragmentIons)) { sb.Append(betamid.Value); sb.Append("\t"); } StringBuilder childScanFragmentStringbuilderBeta = new StringBuilder(); if (BetaPeptide.ChildMatchedFragmentIons != null) { foreach (var childScan in BetaPeptide.ChildMatchedFragmentIons) { int oneBasedScan = childScan.Key; var matchedIonsDict = MatchedIonDataDictionary(childScan.Value); childScanFragmentStringbuilderBeta.Append("{" + oneBasedScan + "|" + matchedIonsDict[PsmTsvHeader.MatchedIonMzRatios] + "}"); } } sb.Append(childScanFragmentStringbuilderBeta.ToString() + "\t"); sb.Append("\t"); sb.Append(XLTotalScore + "\t"); // mass of crosslinker sb.Append(((PeptideMonisotopicMass.HasValue) ? (ScanPrecursorMass - BetaPeptide.PeptideMonisotopicMass - PeptideMonisotopicMass.Value).ToString() : "---")); sb.Append("\t"); int alphaNumParentIons = MatchedFragmentIons.Count(p => p.NeutralTheoreticalProduct.ProductType == ProductType.M); int betaNumParentIons = BetaPeptide.MatchedFragmentIons.Count(p => p.NeutralTheoreticalProduct.ProductType == ProductType.M); sb.Append(alphaNumParentIons + ";" + betaNumParentIons + "\t"); sb.Append(alphaNumParentIons + betaNumParentIons + "\t"); sb.Append(((ParentIonMaxIntensityRanks != null) && (ParentIonMaxIntensityRanks.Any()) ? ParentIonMaxIntensityRanks.Min().ToString() : "-")); sb.Append("\t"); } if (BetaPeptide == null) { sb.Append((IsDecoy) ? "D" : (IsContaminant) ? "C" : "T"); sb.Append("\t"); } else { sb.Append((IsDecoy || BetaPeptide.IsDecoy) ? "D" : (IsContaminant || BetaPeptide.IsContaminant) ? "C" : "T"); sb.Append("\t"); } sb.Append(FdrInfo.QValue.ToString()); sb.Append("\t"); return(sb.ToString()); }