public bool AnyAminoAcidInCommon(SimpleAminoAcidSet aaCollection2) { foreach (string aminoAcid1 in Positives) { if (aaCollection2.Contains(aminoAcid1)) { return(true); } } return(false); }
public bool AminoAcidSetEqual(SimpleAminoAcidSet aminoAcidCollection2) { if (PositiveCount != aminoAcidCollection2.PositiveCount) { return(false); } foreach (string sAminoAcid1 in Positives) { if (!aminoAcidCollection2.Contains(sAminoAcid1)) { return(false); } } return(true); }
/// <summary> /// '-' means delete and must be part of "---" /// ' ' means missing and is treated just like 'N' /// null means that it could be anything /// </summary> public SimpleAminoAcidSet GenticCode(int ifCodeHasBeenReviewedAndWorksOKWithDeleteAndSpaceAndDashAsMissingSetTo22, string codon, bool dashAsMissing) { SpecialFunctions.CheckCondition(ifCodeHasBeenReviewedAndWorksOKWithDeleteAndSpaceAndDashAsMissingSetTo22 == 22, "Need to review code to be sure that it is OK to treat '---' as the amino acid DELETE"); if (codon.Contains("X") || codon.Contains("*")) { return(null); } if (codon.Contains("-")) { if (dashAsMissing) { return(null); } else { codon = "---"; } } //if (codon.Contains(" ")) //{ // if (1==1) // { // Console.WriteLine("Warning: changing codon '{0}' to aa '?'", codon); // return null; // } // string codon2 = codon.Replace(' ', 'N'); // Console.WriteLine("Warning: changing codon '{0}' to '{1}'", codon, codon2); // codon = codon2; //} //Get the set of values SimpleAminoAcidSet aminoAcidCollection = SimpleAminoAcidSet.GetInstance(); GenticCode(codon, ref aminoAcidCollection); if (aminoAcidCollection.PositiveCount == 21) { return(null); } return(aminoAcidCollection); }
public void GenticCode(string codon, ref SimpleAminoAcidSet aminoAcidCollection) { SpecialFunctions.CheckCondition(codon.Length == 3); //!!!raise error Debug.Assert(aminoAcidCollection != null); //real assert //If unambiguous, look it up and return it if (CodonToAminoAcid.ContainsKey(codon)) { GeneticCodeMapping aGeneticCodeMapping = (GeneticCodeMapping)CodonToAminoAcid[codon]; string sAminoAcid = aGeneticCodeMapping.AminoAcid; aminoAcidCollection.AddOrCheck(sAminoAcid); return; } //If ambiguous, try every possiblity for this 1st ambiguity and see if the results are the same (this is recursive) int iFirstAmbiguity = 0; char c = char.MinValue; for (; iFirstAmbiguity < codon.Length; ++iFirstAmbiguity) { c = codon[iFirstAmbiguity]; if (Ambiguous1LetterNucCodeToChoices.ContainsKey(c)) { break; } SpecialFunctions.CheckCondition("ATCG".Contains(c.ToString()), string.Format("Illegal nucleotide of '{0}'", c)); } SpecialFunctions.CheckCondition(iFirstAmbiguity < codon.Length); //!!!raise error - Is CodonToAminoAcid table missing a value? foreach (char cNucleotide in (string)Ambiguous1LetterNucCodeToChoices[c]) { string sNewCodon = string.Format("{0}{1}{2}", codon.Substring(0, iFirstAmbiguity), cNucleotide, codon.Substring(iFirstAmbiguity + 1)); Debug.Assert(sNewCodon.Length == 3); //real assert Debug.Assert(sNewCodon != codon); // real assert GenticCode(sNewCodon, ref aminoAcidCollection); } }