Morpheus.AminoAcidPolymer.GetVariableModificationPatterns C# (CSharp) Method

GetVariableModificationPatterns() protected method

protected GetVariableModificationPatterns ( Dictionary possibleVariableModifications ) : Modification>>.IEnumerable
possibleVariableModifications Dictionary
return Modification>>.IEnumerable
        protected IEnumerable<Dictionary<int, Modification>> GetVariableModificationPatterns(Dictionary<int, List<Modification>> possibleVariableModifications)
        {
            if(possibleVariableModifications.Count == 0 && (KnownModifications == null || KnownModifications.Count == 0))
            {
                yield return null;
            }
            else
            {
                Dictionary<int, List<Modification>> possible_variable_modifications = new Dictionary<int, List<Modification>>(possibleVariableModifications);
                if(KnownModifications != null)
                {
                    foreach(KeyValuePair<int, List<Modification>> kvp in KnownModifications)
                    {
                        foreach(Modification modification in kvp.Value)
                        {
                            if(modification.AminoAcid != BaseSequence[kvp.Key - 2])
                            {
                                throw new Exception("Known modification amino acid mismatch in " + ((this is Peptide) ? ((Peptide)this).Parent.Description : ((Protein)this).Description));
                            }
                        }
                        List<Modification> modifications;
                        if(!possible_variable_modifications.TryGetValue(kvp.Key, out modifications))
                        {
                            modifications = kvp.Value;
                            possible_variable_modifications.Add(kvp.Key, modifications);
                        }
                        else
                        {
                            modifications.AddRange(kvp.Value);
                        }
                    }
                }
                int[] base_variable_modification_pattern = new int[Length + 4];
                for(int variable_modifications = 0; variable_modifications <= possible_variable_modifications.Count; variable_modifications++)
                {
                    foreach(int[] variable_modification_pattern in GetVariableModificationPatterns(new List<KeyValuePair<int, List<Modification>>>(possible_variable_modifications), possible_variable_modifications.Count - variable_modifications, base_variable_modification_pattern, 0))
                    {
                        yield return GetVariableModificationPattern(variable_modification_pattern, possible_variable_modifications);
                    }
                }
            }
        }

Same methods

AminoAcidPolymer::GetVariableModificationPatterns ( List possibleVariableModifications, int unmodifiedResiduesDesired, int variableModificationPattern, int index ) : IEnumerable