Kodomo

Пользователь

Задание 1

Escherichia coli str. K-12 substr. MG1655

ATG - 3890

GTG - 338

TTG - 80

ATT - 4

CTG - 2

TTC - 1

Candidatus Gracilibacteria bacterium 28_42_T64

ATG - 1129

GTG - 41

TTG - 23

ACA - 1

TCA - 1

TCT - 1

Mycoplasma pneumoniae M29

ATG - 627

GTG - 60

TTG - 49

ATT - 7

CTC - 3

ATA - 3

CTG - 2

TCC - 2

TTA - 1

ATC - 1

CAC - 1

TCT - 1

GAA - 1

AAA - 1

TTC - 1

CAA - 1

TGA - 1

ACT - 1

ACA - 1

CTA - 1

GTT - 1

Чаще всего встречается старт-кодон ATG, второй по частоте - GTG, третий - TTG, остальные встречаются довольно редко. GTG часто является старт-кодоном у прокариот. Причина, по который в качестве старт-кодона может использоваться не только ATG, может заключаться, например в случайных точечных мутациях (GTG и TTG отличаются от ATG всего одним первым нуклеотидом). При этом у прокариот они могут распознаваться белками, регулирующими транскрипцию. Кодоны, значительно отличающиеся от ATG являются старт-кодонами в основном в псевдогенах, которые не экспрессируются.

Результаты получены с помощью следующего кода:

dt = dict()
f = input()
line = ''
start = ''
with open (f, mode='r') as a:
    for l in a:
        if l[0] != '>':
            l = l.strip()
            line = line + l
            start = line[0:3]
        else:
            if start in dt:
                dt[start]+=1
            elif start not in dt and start != '':
                dt[start] = 1
            line = ''
start = line[0:3]
if start in dt:
    dt[start]+=1
else:
    dt[start] = 1
st = ''
sortdt = dict(sorted(dt.items()))
for i in sortdt:
    st = st + str(i) + '\t' + str(sortdt[i]) + '\n'
output = open('out.txt', 'w')
output.write(st)
output.close()
with open ('out.txt', mode = 'r') as out:
    for line in out:
        print(line)

Задание 2

lcl|U00096.3_cds_b4587_250 [gene=insN] [locus_tag=b4587] [db_xref=ASAP:ABE-0285253,ECOCYC:G6130] [protein=IS911A regulator fragment] [pseudo=true] [location=join(270278..270540,271764..272190)] [gbkey=CDS]

lcl|U00096.3_cds_AAD13438.1_1459 [gene=fdnG] [locus_tag=b1474] [db_xref=UniProtKB/Swiss-Prot:P24183] [protein=formate dehydrogenase N subunit alpha] [transl_except=(pos:586..588,aa:Sec)] [protein_id=AAD13438.1] [location=1547401..1550448] [gbkey=CDS]

lcl|U00096.3_cds_AAD13456.1_3824 [gene=fdoG] [locus_tag=b3894] [db_xref=UniProtKB/Swiss-Prot:P32176] [protein=formate dehydrogenase O subunit alpha] [transl_except=(pos:586..588,aa:Sec)] [protein_id=AAD13456.1] [location=complement(4082772..4085822)] [gbkey=CDS]

lcl|U00096.3_cds_AAD13462.1_3997 [gene=fdhF] [locus_tag=b4079] [db_xref=UniProtKB/Swiss-Prot:P07658] [protein=formate dehydrogenase H] [transl_except=(pos:418..420,aa:Sec)] [protein_id=AAD13462.1] [location=complement(4297219..4299366)] [gbkey=CDS]

Из описания первого гена видно, что это псевдоген, он не экспрессируется, а значит, не имеет значения, где и сколько раз в нём встречаются стоп-кодоны. Остальные гены кодируют формиатдегидрогеназы. В них после кодона TGA, обычно воспринимающегося как стоп-кодон, идёт особая последовательность, позволяющая считывать кодон TGA как кодирующий аминокислоту селеноцистеин

Результаты получены с помощью следующего кода:

f = input()
line = ''
seq = []
st = ''
with open (f, mode='r') as a:
    for l in a:
        if l[0] != '>':
            l = l.strip()
            line = line + l
        else:
            if line != '':
                seq.append(line)
            if seq != []:
                b = seq[1][0:-3]
                for i in range(0, len(b)-2, 3):
                    stop1 = b.find('TAA',i,i+3)
                    stop2 = b.find('TAG',i,i+3)
                    stop3 = b.find('TGA',i,i+3)
                    if stop1 != -1 or stop2 != -1 or stop3 != -1:
                        st = st + seq[0][1::] + '\n'
                        break
            seq = []
            line = ''
            seq.append(l)
seq.append(line)
b = seq[1][0:-3]
for i in range(0, len(b)-2, 3):
    stop1 = b.find('TAA',i,i+3)
    stop2 = b.find('TAG',i,i+3)
    stop3 = b.find('TGA',i,i+3)
    if stop1 != -1 or stop2 != -1 or stop3 != -1:
        st = st + seq[0][1::] + '\n'
        break
output = open('out.txt', 'w')
output.write(st)
output.close()
with open ('out.txt', mode = 'r') as out:
    for line in out:
        print(line)

Задание 3

Escherichia coli str. K-12 substr. MG1655

TGA - 1246

TAA - 2761

TAG - 306

Candidatus Gracilibacteria bacterium 28_42_T64

TGA - 1

TAA - 1000

TAG - 188

Mycoplasma pneumoniae M29

TGA - 0

TAA - 526

TAG - 220

У второй и третьей бактерии пропавшим стоп-кодоном является TGA. Однако в кодирующих последовательностях он встречается гораздо чаще. Это может говорить о том, что у этих бактерий он кодирует какую-то аминокислоту.

В научной литературе есть подтверждение тому, что у Candidatus Gracilibacteria bacterium TGA кодирует аминокислоту лейцин: "Both in silico analysis and proteomics showed very strong evidence for the use of an alternate genetic code by this bacterial division. As was previously described for the related division SR1 and Gracilibacteria, the opal stop codon, UGA, was found to be translated as glycine (Campbell et al., 2013; Rinke et al., 2013)." (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4032931/)

А у Mycoplasma pneumoniae TGA кодирует аминокислоту триптофан (https://pubmed.ncbi.nlm.nih.gov/2104612/)

Результаты были получены с помощью следующего кода:

dt = {'TGA': 0,
      'TAA': 0,
      'TAG': 0}
f = input()
line = ''
stop = ''
with open (f, mode='r') as a:
    for l in a:
        if l[0] != '>':
            l = l.strip()
            line = line + l
        else:
            stop = line[-3::]
            if stop in dt:
                dt[stop]+=1
            line = ''
stop = line[-3::]
if stop in dt:
    dt[stop]+=1
st = ''
sortdt = dict(sorted(dt.items()))
for i in sortdt:
    st = st + str(i) + '\t' + str(sortdt[i]) + '\n'
output = open('out.txt', 'w')
output.write(st)
output.close()
with open ('out.txt', mode = 'r') as out:
    for line in out:
        print(line)

Задание 4

Escherichia coli str. K-12 substr. MG1655

CTT - 14728

CTC - 14952

CTA - 5203

CTG - 71305

TTA - 18505

TTG - 18301

Candidatus Gracilibacteria bacterium 28_42_T64

CTT - 9333

CTC - 3968

CTA - 3357

CTG - 1714

TTA - 14767

TTG - 3237

Mycoplasma pneumoniae M29

CTT - 2782

CTC - 3158

CTA - 2826

CTG - 2470

TTA - 10295

TTG - 5571

У одной и той же бактерии значительно различаются частоты синонимичных кодонов, так же как и частоты одних и тех же кодонов у разных бактерий. Одно из возможных объяснений этого явления заключается в том, что наиболее часто встречающиеся кодоны узнаются наиболее часто встречаемыми тРНК. Также наиболее часто встречающиеся кодоны могут реже подвергаться мутациям. Это может зависеть от GC-состава. Например, можно заметить, что у второй и третьей бактерии чаще встречается кодон TTA, который не содержит нуклеотидов G и С.

Результаты были получены с помощью следующего кода:

f = input()
line = ''
tta = 0
ttg = 0
ctt = 0
ctc = 0
cta = 0
ctg = 0
with open (f, mode='r') as a:
    for l in a:
        if l[0] != '>':
            l = l.strip()
            line = line + l
        else:
            for i in range(0, len(line)-2, 3):
                leu1 = line.find('CTT',i,i+3)
                if leu1 != -1:
                    ctt+=1
                leu2 = line.find('CTC',i,i+3)
                if leu2 != -1:
                    ctc+=1
                leu3 = line.find('CTA',i,i+3)
                if leu3 != -1:
                    cta+=1
                leu4 = line.find('CTG',i,i+3)
                if leu4 != -1:
                    ctg +=1
                leu5 = line.find('TTA',i,i+3)
                if leu5 != -1:
                    tta +=1
                leu6 = line.find('TTG',i,i+3)
                if leu6 != -1:
                    ttg+=1
            line = ''
for i in range(0, len(line)-2, 3):
    leu1 = line.find('CTT',i,i+3)
    if leu1 != -1:
        ctt+=1
    leu2 = line.find('CTC',i,i+3)
    if leu2!= -1:
        ctc +=1
    leu3 = line.find('CTA',i,i+3)
    if leu3 != -1:
        cta+=1
    leu4 = line.find('CTG',i,i+3)
    if leu4 != -1:
        ctg +=1
    leu5 = line.find('TTA',i,i+3)
    if leu5 != -1:
        tta +=1
    leu6 = line.find('TTG',i,i+3)
    if leu6 != -1:
        ttg+=1
print('CTT', '\t', ctt,  '\n' 'CTC', '\t', ctc, '\n' 'CTA', '\t', cta, '\n' 'CTG', '\t', ctg, '\n' 'TTA', '\t', tta, '\n' 'TTG', '\t', ttg)

Задание 5

Ссылка на график: https://drive.google.com/file/d/1U6eUKMnRO3lUGtobEl7Gx9j8DMf67ooT/view?usp=sharing

Минимальное значение: -28,328 на позиции 3870000

Максимальное значение: 47,733 на позиции 1513000

Позиция с минимальным cumulative GC-skew соответствует месту начала репликации (oriC), а с максимальным - месту окончания репликации (ter)

oriC расположен на позиции 3925744..3925975, что примерно соответствует расчёту

Результаты получены с помощью следующего кода:

f = input()
window = int(input())
step = int(input())
cumulative = 0
st = ''
g = 0
c = 0
line = ''
with open (f, mode='r') as a:
    for l in a:
        if l[0] != '>':
            l = l.strip()
            line = line + l
for i in range (0, len(line)-max(step, window)+1, step):
    g = 0
    c = 0
    for s in range (i, i+window):
        if line[s] == 'C':
            c+=1
        if line[s] == 'G':
            g+=1
    if (g + c) != 0:
        gcskew = (g - c)/(g + c)
    else:
        gcskew = 0
    cumulative += gcskew
    st = st + str(i) + '\t' + f'{gcskew:.03f}' + '\t' + f'{cumulative:.03f}' + '\n'
output = open('out.txt', 'w')
output.write(st)
output.close()
with open ('out.txt', mode = 'r') as out:
    for line in out:
        print(line)

Задание 6

Наиболее часто встречающиеся 6-меры для E.coli:

AAGGAG

269

TAAGGA

232

AGGAGA

175

CAGGAG

129

AAAGGA

214

AAGGAA

211

Скорее всего, данные 6-меры соответствуют последовательности Шайна-Дальгарно. Это сайт связывания рибосом на молекуле мРНК прокариот, и обычно эта последовательность находится на расстоянии примерно 10 нуклеотидов до старт кодона. Для E.coli стандартной последовательностью Шайна-Дальгарно является AGGAGGТ, что похоже на полученные 6-меры.

def inverse_compl(seq):
    ans = ''
    compl = {'a': 't',
             't': 'a',
             'g': 'c',
             'c': 'g'}
    for k in seq:
        ans+=compl[k]
    return ans[::-1]

name = 'data.txt'
genes = open(name, 'r').readlines()
start = 0
for i in range(len(genes)):
    if 'ORIGIN' in genes[i]:
        start = i
        break
seq = ''
for i in range(start+1, len(genes)-1):
    for s in genes[i]:
        if s in ['a', 't', 'g', 'c']:
            seq+=s
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']

indexes, reverse = [], []
for i in range(len(genes)):
    if ' CDS ' in genes[i]:
        if 'complement' in genes[i]:
            if 'join' not in genes[i]:
                index = int(genes[i][genes[i].find('..')+2:genes[i].find(')')])
                indexes.append(index)
                reverse.append(True)           
                
        else:
            if 'join' not in genes[i]:
                index = int(genes[i][21:genes[i].find('.')])
                indexes.append(index)
                reverse.append(False)

twenty_list = []
for i in range(0, len(indexes)):
    if reverse[i]:
        twenty_nucleotides = inverse_compl(seq[indexes[i]+1:indexes[i]+21][::-1])
        twenty_list.append(twenty_nucleotides)
    else:
        twenty_nucleotides = seq[indexes[i]-21:indexes[i]-1]
        twenty_list.append(twenty_nucleotides)

kmers = set()
for twenty in twenty_list:
    for i in range(0, 15):
        kmers.add(twenty[i:i+6])
kmers = sorted(list(kmers))

kmers_count = [0 for i in range(len(kmers))]
for i in range(len(kmers)):
    for twenty in twenty_list:
        kmers_count[i] += twenty.count(kmers[i])

result = open("6mers.txt", "w")
for i in range(len(kmers)):
    result.write(kmers[i] + "\t" + kmers_count[i].str() + "\n")
result.close()

Users/muzalevskaya/pr13 (последним исправлял пользователь muzalevskaya 2022-12-20 20:59:41)