BatchFdrOptimizer.Peptide.Peptide C# (CSharp) Method

Peptide() public method

public Peptide ( string sequence, IEnumerable fixedModifications, string dynamicModifications ) : System
sequence string
fixedModifications IEnumerable
dynamicModifications string
return System
        public Peptide(string sequence, IEnumerable<Modification> fixedModifications, string dynamicModifications)
        {
            aminoAcidSequence = new List<AminoAcid>(sequence.Length);
            StringBuilder sequence_sb = new StringBuilder(sequence.Length);
            foreach(char c in sequence.ToUpper())
            {
                if(AMINO_ACIDS.ContainsKey(c))
                {
                    aminoAcidSequence.Add(AMINO_ACIDS[c]);
                    sequence_sb.Append(c);
                    mass += AMINO_ACIDS[c].Mass;
                }
            }
            this.sequence = sequence_sb.ToString();

            // fixed modifications
            foreach(Modification modification in fixedModifications)
            {
                switch(modification.ModificationType)
                {
                    case ModificationType.AminoAcidResidue:
                        foreach(char amino_acid_residue in modification.AminoAcidResidues)
                        {
                            foreach(char c in sequence.ToUpper())
                            {
                                if(c == amino_acid_residue)
                                {
                                    mass += modification.MonoisotopicMassShift;
                                }
                            }
                        }
                        break;
                    case ModificationType.ProteinNTerminus:
                        throw new NotSupportedException("Fixed modifications of protein N-terminii are not currently supported.");
                    case ModificationType.ProteinNTerminusAminoAcidResidue:
                        throw new NotSupportedException("Fixed modifications of protein N-terminii at specific amino acid residues are not currently supported.");
                    case ModificationType.ProteinCTerminus:
                        throw new NotSupportedException("Fixed modifications of protein C-terminii are not currently supported.");
                    case ModificationType.ProteinCTerminusAminoAcidResidue:
                        throw new NotSupportedException("Fixed modifications of protein C-terminii at specific amino acid residues are not currently supported.");
                    case ModificationType.PeptideNTerminus:
                        mass += modification.MonoisotopicMassShift;
                        break;
                    case ModificationType.PeptideNTerminusAminoAcidResidue:
                        throw new NotSupportedException("Fixed modifications of peptide N-terminii at specific amino acid residues are not currently supported.");
                    case ModificationType.PeptideCTerminus:
                        mass += modification.MonoisotopicMassShift;
                        break;
                    case ModificationType.PeptideCTerminusAminoAcidResidue:
                        foreach (char amino_acid_residue in modification.AminoAcidResidues)
                        {
                            if (sequence.ToUpper()[sequence.Length - 1] == amino_acid_residue)
                            {
                                mass += modification.MonoisotopicMassShift;
                            }
                        }
                        break;
                        //throw new NotSupportedException("Fixed modifications of peptide C-terminii at specific amino acid residues are not currently supported.");
                }
            }

            // dynamic modifications
            string[] dynamic_modifications = dynamicModifications.Replace("\"", string.Empty).Split(',');
            foreach(string dynamic_modification in dynamic_modifications)
            {
                int index = dynamic_modification.IndexOf(':');
                if(index >= 0)
                {
                    string modification_name = dynamic_modification.Substring(0, index);
                    if(dynamic_modification.Substring(2).StartsWith("substitution for"))
                    {
                        char c = dynamic_modification[0];
                        if(AMINO_ACIDS.ContainsKey(c))
                        {
                            mass += AMINO_ACIDS[c].Mass;
                        }
                        else
                        {
                            throw new Exception("Unknown amino acid '" + c + "'");
                        }
                    }
                    else
                    {
                        if(!MODIFICATIONS.ContainsKey(modification_name))
                        {
                            throw new Exception("Mass of modification \"" + modification_name + "\" not found");
                        }
                        else
                        {
                            mass += MODIFICATIONS[modification_name].MonoisotopicMassShift;
                        }
                    }
                }
                else if(dynamic_modification.Contains("mutation"))
                {
                    char c1 = dynamic_modification[0];
                    char c2 = dynamic_modification[5];
                    if(AMINO_ACIDS.ContainsKey(c1) && AMINO_ACIDS.ContainsKey(c2))
                    {
                        mass += AMINO_ACIDS[c2].Mass - AMINO_ACIDS[c1].Mass;
                    }
                }
            }
        }