public void TestParsingManyMods() { const string modFilePath = @"\\protoapps\UserData\Jungkap\Lewy\db\Mods.txt"; var aaSet = new AminoAcidSet(modFilePath); //aaSet.Display(); //SequenceLocation.ProteinNTerm var residue = AminoAcid.ProteinNTerm.Residue; var location = SequenceLocation.ProteinNTerm; var aa = aaSet.GetAminoAcid(residue, location); Console.Write("{0}\t{1}\t{2}", residue, aa.Mass, aa.Composition); foreach (var modIndex in aaSet.GetModificationIndices(residue, location)) { var modification = aaSet.GetModificationParams().GetModification(modIndex); Console.WriteLine(modification.Mass); //Console.Write("\t" + _modificationParams.GetModification(modIndex)); } Console.WriteLine(); residue = AminoAcid.ProteinCTerm.Residue; location = SequenceLocation.ProteinCTerm; aa = aaSet.GetAminoAcid(residue, location); Console.Write("{0}\t{1}\t{2}", residue, aa.Mass, aa.Composition); foreach (var modIndex in aaSet.GetModificationIndices(residue, location)) { var modification = aaSet.GetModificationParams().GetModification(modIndex); Console.WriteLine(modification.Mass); //Console.Write("\t" + _modificationParams.GetModification(modIndex)); } //foreach (var aa in AminoAcid.StandardAminoAcidArr) /* var keys = _locationSpecificResidueMap[location].Keys.ToArray(); Array.Sort(keys); foreach (var residue in keys) { var aa = GetAminoAcid(residue, location); Console.Write("{0}\t{1}\t{2}", residue, aa.Mass, aa.Composition); foreach (var modIndex in GetModificationIndices(residue, location)) { Console.Write("\t" + _modificationParams.GetModification(modIndex)); } Console.WriteLine(); } } */ }
/// <summary> /// Create a sequence using the supplied character sequence, modifications, and amino acid set /// </summary> /// <param name="sequence"></param> /// <param name="modStr">E.g. Acetyl 0,Oxidation 1,Oxidation 20,Oxidation 27</param> /// <param name="aminoAcidSet"></param> /// <returns></returns> public static Sequence CreateSequence(string sequence, string modStr, AminoAcidSet aminoAcidSet) { if (string.IsNullOrEmpty(modStr)) { return(new Sequence(sequence, aminoAcidSet)); } var indexModMap = new Dictionary <int, Modification>(); foreach (var modIns in modStr.Split(',')) { var token = modIns.Split(' '); if (token.Length != 2) { return(null); // invalid modStr } var mod = Modification.Get(token[0]); if (mod == null) { return(null); } var index = Convert.ToInt32(token[1]) - 1; indexModMap.Add(index, mod); } var aaList = new List <AminoAcid>(); for (var i = 0; i < sequence.Length; i++) { var residue = sequence[i]; var aa = aminoAcidSet.GetAminoAcid(residue); if (i == 0 && indexModMap.ContainsKey(-1)) // N-term modification { var nTermMod = indexModMap[-1]; aa = new ModifiedAminoAcid(aa, nTermMod); } if (indexModMap.TryGetValue(i, out var mod)) { var modifiedAa = new ModifiedAminoAcid(aa, mod); aaList.Add(modifiedAa); } else { aaList.Add(aa); } } return(new Sequence(aaList)); }
/// <summary> /// Add an amino acid residue to this generator. /// </summary> /// <param name="index">index to add the amino acid. 0 is C-term. 1 is the C-term amino acid.</param> /// <param name="residue">amino acid residue to add.</param> /// <returns>true if residue is a valid amino acid; false otherwise.</returns> private bool PutAminoAcid(int index, char residue) { _index = index + 1; SequenceLocation?location = null; if (_index == 1) // C-term residue { if (residue == AminoAcid.PeptideCTerm.Residue) { location = SequenceLocation.PeptideCTerm; } else if (residue == AminoAcid.ProteinCTerm.Residue) { location = SequenceLocation.ProteinCTerm; } } else if (_index == _aminoAcidSequence.Length - 1 - NumNTermCleavages) // N-term residue { if (residue == AminoAcid.PeptideNTerm.Residue) { location = SequenceLocation.PeptideNTerm; } else if (residue == AminoAcid.ProteinNTerm.Residue) { location = SequenceLocation.ProteinNTerm; } } else if (_index == 2) // Amino acid at the C-term { if (_aminoAcidSequence[1] == AminoAcid.PeptideCTerm) { location = SequenceLocation.PeptideCTerm; } else if (_aminoAcidSequence[1] == AminoAcid.ProteinCTerm) { location = SequenceLocation.ProteinCTerm; } } else if (_index == _aminoAcidSequence.Length - 2 - NumNTermCleavages) // Amino acid at the N-term { if (_aminoAcidSequence[_aminoAcidSequence.Length - 1] == AminoAcid.PeptideNTerm) { location = SequenceLocation.PeptideNTerm; } else if (_aminoAcidSequence[_aminoAcidSequence.Length - 1] == AminoAcid.ProteinNTerm) { location = SequenceLocation.ProteinNTerm; } } else { location = SequenceLocation.Everywhere; } if (location == null) { return(false); } var loc = (SequenceLocation)location; var aminoAcid = AminoAcidSet.GetAminoAcid(residue, loc); if (aminoAcid == null) // residue is not valid { return(false); } _aminoAcidSequence[_index] = aminoAcid; _suffixComposition[_index] = _suffixComposition[_index - 1] + aminoAcid.Composition; var modIndices = AminoAcidSet.GetModificationIndices(residue, loc); if (!modIndices.Any()) // No modification { _graph[_index] = new Node[_graph[_index - 1].Length]; for (var i = 0; i < _graph[_index - 1].Length; i++) { _graph[_index][i] = new Node(_graph[_index - 1][i].ModificationCombinationIndex, i); } } else { var modCombIndexToNodeMap = new Dictionary <int, Node>(); for (var i = 0; i < _graph[_index - 1].Length; i++) { var prevNodeIndex = i; var prevNode = _graph[_index - 1][i]; var prevModCombIndex = prevNode.ModificationCombinationIndex; // unmodified edge if (modCombIndexToNodeMap.TryGetValue(prevModCombIndex, out var unmodifiedEdgeNode)) { unmodifiedEdgeNode.AddPrevNodeIndex(prevNodeIndex); } else { modCombIndexToNodeMap.Add(prevModCombIndex, new Node(prevModCombIndex, prevNodeIndex)); } // modified edge foreach (var modIndex in modIndices) { var modCombIndex = ModificationParams.GetModificationCombinationIndex( prevNode.ModificationCombinationIndex, modIndex); if (modCombIndex < 0) // too many modifications { continue; } if (modCombIndexToNodeMap.TryGetValue(modCombIndex, out var modifiedEdgeNode)) { modifiedEdgeNode.AddPrevNodeIndex(prevNodeIndex); } else { modCombIndexToNodeMap.Add(modCombIndex, new Node(modCombIndex, prevNodeIndex)); } } _graph[_index] = modCombIndexToNodeMap.Values.ToArray(); } } return(true); }
static MgfSequenceReader() { StandardAminoAcidSet = new AminoAcidSet(Modification.Carbamidomethylation); Modifications = new Dictionary<string, Tuple<AminoAcid, List<Modification>>>(); Modifications.Add("99.032", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('G'), new List<Modification> { Modification.Acetylation })); Modifications.Add("113.048", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('A'), new List<Modification> { Modification.Acetylation })); Modifications.Add("129.043", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('S'), new List<Modification> { Modification.Acetylation })); Modifications.Add("141.079", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('V'), new List<Modification> { Modification.Acetylation })); Modifications.Add("143.059", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('T'), new List<Modification> { Modification.Acetylation })); Modifications.Add("147.035", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('M'), new List<Modification> { Modification.Oxidation })); Modifications.Add("157.038", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('D'), new List<Modification> { Modification.Acetylation })); Modifications.Add("160.03", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('C'), new List<Modification> { Modification.Carbamidomethylation })); Modifications.Add("171.054", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('E'), new List<Modification> { Modification.Acetylation })); Modifications.Add("173.051", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('M'), new List<Modification> { Modification.Acetylation })); Modifications.Add("189.046", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('F'), new List<Modification> { Modification.Acetylation })); Modifications.Add("202.041", new Tuple<AminoAcid, List<Modification>>(StandardAminoAcidSet.GetAminoAcid('C'), new List<Modification> { Modification.Carbamidomethylation, Modification.Acetylation })); }
/// <summary> /// Add an amino acid residue to this generator. /// </summary> /// <param name="index">index to add the amino acid. 0 is C-term. 1 is the C-term amino acid.</param> /// <param name="residue">amino acid residue to add.</param> /// <param name="loc">location of the residue</param> /// <returns>true if residue is a valid amino acid; false otherwise.</returns> private bool PutAminoAcid(int index, char residue, SequenceLocation loc) { _index = index + 1; var aminoAcid = AminoAcidSet.GetAminoAcid(residue, loc); if (aminoAcid == null) // residue is not valid { return(false); } var fragmentComposition = _fragmentComposition[_index - 1] + aminoAcid.Composition; if (fragmentComposition.Mass > _maxSequenceMass) { return(false); } _aminoAcidSequence[_index] = aminoAcid; _fragmentComposition[_index] = fragmentComposition; var modIndices = AminoAcidSet.GetModificationIndices(residue, loc); if (!modIndices.Any()) // No modification { _graph[_index] = new Node[_graph[_index - 1].Length]; for (var i = 0; i < _graph[_index - 1].Length; i++) { _graph[_index][i] = new Node(_graph[_index - 1][i].ModificationCombinationIndex, i); } } else { var modCombIndexToNodeMap = new Dictionary <int, Node>(); for (var i = 0; i < _graph[_index - 1].Length; i++) { var prevNodeIndex = i; var prevNode = _graph[_index - 1][i]; var prevModCombIndex = prevNode.ModificationCombinationIndex; // unmodified edge if (modCombIndexToNodeMap.TryGetValue(prevModCombIndex, out var unmodifiedEdgeNode)) { unmodifiedEdgeNode.AddPrevNodeIndex(prevNodeIndex); } else { modCombIndexToNodeMap.Add(prevModCombIndex, new Node(prevModCombIndex, prevNodeIndex)); } // modified edge foreach (var modIndex in modIndices) { var modCombIndex = ModificationParams.GetModificationCombinationIndex( prevNode.ModificationCombinationIndex, modIndex); if (modCombIndex < 0) // too many modifications { continue; } if (modCombIndexToNodeMap.TryGetValue(modCombIndex, out var modifiedEdgeNode)) { modifiedEdgeNode.AddPrevNodeIndex(prevNodeIndex); } else { modCombIndexToNodeMap.Add(modCombIndex, new Node(modCombIndex, prevNodeIndex)); } } _graph[_index] = modCombIndexToNodeMap.Values.ToArray(); } } return(true); }
private int GetNominalMass(AminoAcidSet aaSet, string peptide) { var nominalMass = 0; StringBuilder buf = null; var curNominalMass = 0; foreach (var c in peptide) { if (char.IsUpper(c)) { curNominalMass = aaSet.GetAminoAcid(c).GetNominalMass(); nominalMass += curNominalMass; } else if (c == '[') buf = new StringBuilder(); else if (char.IsNumber(c) && buf != null) buf.Append(c); else if (c == ']' && buf != null) nominalMass += Convert.ToInt32(buf.ToString()) - curNominalMass; } return nominalMass; }