简体   繁体   English

计算蛋白质序列的所有可能的 RNA 密码子组合

[英]calculate all possible combinations of RNA codons for a protein sequence

i have a protein sequence:我有一个蛋白质序列:

sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'

and a tRNA codon table for every protein:以及每种蛋白质的 tRNA 密码子表:

codon_table = {
'A': ('GCT', 'GCC', 'GCA', 'GCG'),
'C': ('TGT', 'TGC'),
'D': ('GAT', 'GAC'),
'E': ('GAA', 'GAG'),
'F': ('TTT', 'TTC'),
'G': ('GGT', 'GGC', 'GGA', 'GGG'),
'H': ('CAT', 'CAC'),
'I': ('ATT', 'ATC', 'ATA'),
'K': ('AAA', 'AAG'),
'L': ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
'M': ('ATG',),
'N': ('AAT', 'AAC'),
'P': ('CCT', 'CCC', 'CCA', 'CCG'),
'Q': ('CAA', 'CAG'),
'R': ('CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
'S': ('TCT', 'TCC', 'TCA', 'TCG', 'AGT', 'AGC'),
'T': ('ACT', 'ACC', 'ACA', 'ACG'),
'V': ('GTT', 'GTC', 'GTA', 'GTG'),
'W': ('TGG',),
'Y': ('TAT', 'TAC'),}

i then wrote a function that would give a tuple with the possible codons for every protein:然后我写了一个 function 它将给出一个元组,其中包含每种蛋白质的可能密码子:

tRNA = []
for i in sequence_protein:
    for residue in i:
        tRNA.append(codon_table[residue])

which gave this output:这给了这个 output:

[('ATT', 'ATC', 'ATA'),
 ('GAA', 'GAG'),
 ('GAA', 'GAG'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CAT', 'CAC'),
 ('ATG',),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CCT', 'CCC', 'CCA', 'CCG'),
 ('TGT', 'TGC'),
 ('TAT', 'TAC'),
 ('GAA', 'GAG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CAT', 'CAC'),
 ('GGT', 'GGC', 'GGA', 'GGG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
 ('TGG',),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('CAA', 'CAG'),
 ('ATT', 'ATC', 'ATA'),
 ('CAA', 'CAG'),
 ('GAT', 'GAC'),
 ('TAT', 'TAC'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ATT', 'ATC', 'ATA'),
 ('AAT', 'AAC'),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('ATG',),
 ('CAA', 'CAG'),
 ('TGT', 'TGC'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG')]

is there a way to compute all possible codon combinations for the sequence (basically calculate the products for all the seperate elements in the tuple)?有没有办法计算序列的所有可能的密码子组合(基本上计算元组中所有单独元素的乘积)? and also count the amount of products there would be without generating the sequences first?并且还要计算在不首先生成序列的情况下会有多少产品?

i tried using the product function but that crashed my notebook:s我尝试使用产品 function 但这使我的笔记本崩溃:s

combs = []
for a in product(*tRNA):
    combs.append(a)
print(a)

To calculate the total number of combinations:要计算组合的总数:

sequence_protein = 'IEEATHMTPCYELHGLRWVQIQDYAINVMQCL'
total_number_combinations = np.prod([ len(codon_table[aa]) for aa in sequence_protein ])

To generate all possible combinations:要生成所有可能的组合:

The most elegant is itertools:最优雅的是itertools:

from itertools import product

tRNA = [codon_table[aa] for aa in sequence_protein]
for i in product(*tRNA):
    #...do whatever you have to do with these combinations.

but you can use a custom function.但您可以使用自定义 function。 Just use yield so that you don't generate all sequences at once and avoid memory problems.只需使用yield这样您就不会一次生成所有序列并避免 memory 问题。

import itertools

list_codons = [('ATT', 'ATC', 'ATA'),
 ('GAA', 'GAG'),
 ('GAA', 'GAG'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CAT', 'CAC'),
 ('ATG',),
 ('ACT', 'ACC', 'ACA', 'ACG'),
 ('CCT', 'CCC', 'CCA', 'CCG'),
 ('TGT', 'TGC'),
 ('TAT', 'TAC'),
 ('GAA', 'GAG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CAT', 'CAC'),
 ('GGT', 'GGC', 'GGA', 'GGG'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG'),
 ('CGT', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
 ('TGG',),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('CAA', 'CAG'),
 ('ATT', 'ATC', 'ATA'),
 ('CAA', 'CAG'),
 ('GAT', 'GAC'),
 ('TAT', 'TAC'),
 ('GCT', 'GCC', 'GCA', 'GCG'),
 ('ATT', 'ATC', 'ATA'),
 ('AAT', 'AAC'),
 ('GTT', 'GTC', 'GTA', 'GTG'),
 ('ATG',),
 ('CAA', 'CAG'),
 ('TGT', 'TGC'),
 ('TTA', 'TTG', 'CTT', 'CTC', 'CTA', 'CTG')]

counter = 0; max_proc = 1000000; list_seq = []

for x in itertools.product(*list_codons):
    counter += 1
    if counter % max_proc == 0:
        #Do your stuff by slice and clear the list
        list_seq = []
    list_seq.append(x)
    print (counter)
    print (x)

And that's it, no more RAM problem就是这样,没有更多的RAM问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM