public async Task <string> OptimizeProteinSequence(string proteinSequence, string organismId) { if (string.IsNullOrWhiteSpace(proteinSequence) || string.IsNullOrWhiteSpace(organismId)) { throw new ArgumentNullException(); } string optimizedDNASequence = ""; var allAminoAcids = await unitOfWork.GetAll <AminoAcid>().Include(x => x.Codons).ToListAsync(); var organism = unitOfWork.GetById <Organism>(organismId); foreach (Char aminoCode in proteinSequence) { string aminoAcidCode = aminoCode.ToString(); AminoAcid aminoAcid = allAminoAcids.Single(x => x.Code == aminoAcidCode); List <CodonUsage> codonUsages = new List <CodonUsage>(); foreach (Codon codon in aminoAcid.Codons) { CodonUsage codonUsage = organism.CodonUsages.SingleOrDefault(x => x.Codon.Triplet == codon.Triplet); if (codonUsage != null) { codonUsages.Add(codonUsage); } } var maxFrequency = codonUsages.Max(x => x.Frequency); CodonUsage maxCodonUsage = codonUsages.First(x => x.Frequency == maxFrequency); optimizedDNASequence += maxCodonUsage.Codon.Triplet; } return(optimizedDNASequence); }
public CodonUsage CreateCodonUsage() { var codonUsage = new CodonUsage() { Codon = CreateCodon(), Frequency = 0.57f }; return(GetOrCreate(() => codonUsage)); }