/// <summary> /// Resolve MS-GF+, MSPathFinder, or TopPIC mods with mod definitions /// </summary> /// <param name="modList"></param> /// <param name="peptideMods"></param> public void ResolveMSGFPlusModsWithModDefinitions(List <ModInfo> modList, PeptideModificationContainer peptideMods) { if (modList == null) { return; } for (var index = 0; index <= modList.Count - 1; index++) { var udtModInfo = modList[index]; int resIndexStart; int resIndexEnd; if (udtModInfo.Residues.Length > 0) { resIndexStart = 0; resIndexEnd = udtModInfo.Residues.Length - 1; } else { resIndexStart = -1; resIndexEnd = -1; } for (var residueIndex = resIndexStart; residueIndex <= resIndexEnd; residueIndex++) { char chTargetResidue; if (residueIndex >= 0) { chTargetResidue = udtModInfo.Residues[residueIndex]; if (chTargetResidue == '*') { // This is a terminal mod, and MSGFDB lists the target residue as * for terminal mods // This program requires that chTargetResidue be Nothing chTargetResidue = default; } } else { chTargetResidue = default; } var modType = ModificationDefinition.ResidueModificationType.DynamicMod; AminoAcidModInfo.ResidueTerminusState residueTerminusState; if (udtModInfo.ModType == MSGFPlusModType.DynNTermPeptide) { residueTerminusState = AminoAcidModInfo.ResidueTerminusState.PeptideNTerminus; } else if (udtModInfo.ModType == MSGFPlusModType.DynCTermPeptide) { residueTerminusState = AminoAcidModInfo.ResidueTerminusState.PeptideCTerminus; } else if (udtModInfo.ModType == MSGFPlusModType.DynNTermProtein) { residueTerminusState = AminoAcidModInfo.ResidueTerminusState.ProteinNTerminus; } else if (udtModInfo.ModType == MSGFPlusModType.DynCTermProtein) { residueTerminusState = AminoAcidModInfo.ResidueTerminusState.ProteinCTerminus; } else { switch (chTargetResidue) { case AminoAcidModInfo.N_TERMINAL_PEPTIDE_SYMBOL_DMS: residueTerminusState = AminoAcidModInfo.ResidueTerminusState.PeptideNTerminus; if (udtModInfo.ModType == MSGFPlusModType.StaticMod) { modType = ModificationDefinition.ResidueModificationType.TerminalPeptideStaticMod; } break; case AminoAcidModInfo.C_TERMINAL_PEPTIDE_SYMBOL_DMS: residueTerminusState = AminoAcidModInfo.ResidueTerminusState.PeptideCTerminus; if (udtModInfo.ModType == MSGFPlusModType.StaticMod) { modType = ModificationDefinition.ResidueModificationType.TerminalPeptideStaticMod; } break; case AminoAcidModInfo.N_TERMINAL_PROTEIN_SYMBOL_DMS: residueTerminusState = AminoAcidModInfo.ResidueTerminusState.ProteinNTerminus; if (udtModInfo.ModType == MSGFPlusModType.StaticMod) { modType = ModificationDefinition.ResidueModificationType.ProteinTerminusStaticMod; } break; case AminoAcidModInfo.C_TERMINAL_PROTEIN_SYMBOL_DMS: residueTerminusState = AminoAcidModInfo.ResidueTerminusState.ProteinCTerminus; if (udtModInfo.ModType == MSGFPlusModType.StaticMod) { modType = ModificationDefinition.ResidueModificationType.ProteinTerminusStaticMod; } break; default: residueTerminusState = AminoAcidModInfo.ResidueTerminusState.None; if (udtModInfo.ModType == MSGFPlusModType.StaticMod) { modType = ModificationDefinition.ResidueModificationType.StaticMod; } break; } } var modificationDefinition = peptideMods.LookupModificationDefinitionByMassAndModType( udtModInfo.ModMassVal, modType, chTargetResidue, residueTerminusState, out _, true); if (residueIndex == resIndexStart) { // Update the Mod Symbol udtModInfo.ModSymbol = modificationDefinition.ModificationSymbol; } } modList[index] = udtModInfo; } }
/// <summary> /// Constructor /// </summary> /// <remarks> /// The base class constructor calls InitializeLocalVariables, /// which calls both the base class's Clear method and this class's Clear method /// </remarks> /// <param name="peptideMods"></param> /// <param name="peptideSeqMassCalculator"></param> public MODaResults(PeptideModificationContainer peptideMods, PeptideMassCalculator peptideSeqMassCalculator) : base(peptideMods, peptideSeqMassCalculator) { }