Ejemplo n.º 1
0
        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();
                }
            }     */            


        }
Ejemplo n.º 2
0
        /// <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));
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
 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 }));
 }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
 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;
 }