Учебная страница курса биоинформатики,
год поступления 2014
Индивидуальные зачётные задания
Каждому студенту выдано два задания на дом. На итоговой контрольной необходимо будет решить похожее задание в течение занятия.
Правила представления заданий такие же, как в предыдущих заданиях.
Если Вы не знаете, какие задания Вам достались, пишите письмо на bnagaev@gmail.com.
Зачёт с минимальными баллами проставляется за любое одно выполненное задание, т.е. программу, выдающую требуемые результаты. Выполнение двух заданий поможет лучше подготовится к контрольной.
Дополнительные баллы присуждаются за
- выполнение двух заданий
- написание и использование разумных функций
- понятные названия переменных и других объектов, комментарии (после #) там, где они помогут "читать" код - их не должно быть много!
- хороший код
Пригодится функция, принимающая объект-файл (или список строк файла) и возвращающая список объектов "Последовательность".
Полезна также обратная функция, принимающая список объектов "Последовательность" и открытый на запись выходной файл (или его имя) и записывающая эти объекты в файл.
Определения и вспомогательные материалы
сдвиг рамки считывания - сдвиг начала кодонов относительно последовательности (0, 1, 2). Если кодоны ложатся на исходную последовательность без сдвига, то сдвиг равен 0. Если кодоны сдвинуты вправо на 1 нуклеотид относительно последовательности, то сдвиг равен 1. Если кодоны сдвинуты вправо на 2 нуклеотида относительно последовательности, то сдвиг равен 2.
открытая рамка считывания начинается со старт-кодона ATG, первого от начала или первого посоле стоп-кодона в данной рамке; завершается одним из стоп-кодонов (TGA, TAA, TAG)
палиндромная последовательность ДНК - это последовательность, комплементарная самой себе. Пример: AATT
консенсус группы последовательностей одной длины - это такая последовательность, у которой в каждой позиции находится самая частая буква на этой позиции в исходном наборе последовательностей. Если частоты аминокислот в колонке одинаковы, выводить аминокислоту, которая кодируется буквой, расположенной ближе к началу алфавита.
Однобуквенное обозначение групп нуклеотидов
( Cornish-Bowden, 1984 )
+---------------------------------------------------+ |Номер|Одно- | Группа | Интерпретация | | |букв.код| нуклеотидов | | |-----+--------+---------------+--------------------| | 1 | A | A | аденин | | 2 | T | T | тимидин | | 3 | G | G | гуанин | | 4 | C | C | цитозин | | 5 | R | G или A | пурины (большие) | | 6 | Y | T или C | пиримидины (малые) | | 7 | M | A или C | амино (полож.заряд)| | 8 | K | G или T |кето (отриц.заряд) | | 9 | W | A или T |слабые взаимодейств.| | 10 | S | G или C |сильные взаимодейст.| | 11 | B | T или G или C | | | 12 | V | A или G или C | | | 13 | H | A или T или C | | | 14 | D | A или T или G | | | 15 | N | любой | | +---------------------------------------------------+
Массы аминокислот (словарь)
1 {
2 'G': 57.02147, 'A': 71.03712, 'S': 87.03203, 'P': 97.05277,
3 'V': 99.06842, 'T': 101.04768, 'C': 103.00919, 'I': 113.08407,
4 'L': 113.08407, 'N': 114.04293, 'D': 115.02695, 'Q': 128.05858,
5 'K': 128.09497, 'E': 129.04260, 'M': 131.04049, 'H': 137.05891,
6 'F': 147.06842, 'R': 156.10112, 'Y': 163.06333, 'W': 186.07932,
7 }
Словарь из аминокислот в список кодонов
1 {
2 "A": ["GCT","GCA","GCG","GCC"],
3 "C": ["TGT","TGC"],
4 "E": ["GAA","GAG"],
5 "D": ["GAC","GAT"],
6 "G": ["GGG","GGC","GGA","GGT"],
7 "F": ["TTC","TTT"],
8 "I": ["ATT","ATC","ATA"],
9 "H": ["CAT","CAC"],
10 "K": ["AAG","AAA"],
11 "M": ["ATG"],
12 "L": ["TTA","TTG","CTG","CTC","CTA","CTT"],
13 "N": ["AAC","AAT"],
14 "Q": ["CAA","CAG"],
15 "P": ["CCG","CCC","CCA","CCT"],
16 "S": ["TCT","AGC","AGT","TCC","TCG","TCA"],
17 "R": ["AGG","AGA","CGG","CGC","CGA","CGT"],
18 "T": ["ACG","ACA","ACC","ACT"],
19 "W": ["TGG"],
20 "V": ["GTG","GTA","GTT","GTC"],
21 "Y": ["TAT","TAC"],
22 "STOP": ["TAG","TGA","TAA"]
23 }
Словарь из кодонов в аминокислоты
1 {
2 "AAA" : "K", "AAC" : "N", "AAG" : "K", "AAT" : "N",
3 "ACA" : "T", "ACC" : "T", "ACG" : "T", "ACT" : "T",
4 "AGA" : "R", "AGC" : "S", "AGG" : "R", "AGT" : "S",
5 "ATA" : "I", "ATC" : "I", "ATG" : "M", "ATT" : "I",
6 "CAA" : "Q", "CAC" : "H", "CAG" : "Q", "CAT" : "H",
7 "CCA" : "P", "CCC" : "P", "CCG" : "P", "CCT" : "P",
8 "CGA" : "R", "CGC" : "R", "CGG" : "R", "CGT" : "R",
9 "CTA" : "L", "CTC" : "L", "CTG" : "L", "CTT" : "L",
10 "GAA" : "E", "GAC" : "D", "GAG" : "E", "GAT" : "D",
11 "GCA" : "A", "GCC" : "A", "GCG" : "A", "GCT" : "A",
12 "GGA" : "G", "GGC" : "G", "GGG" : "G", "GGT" : "G",
13 "GTA" : "V", "GTC" : "V", "GTG" : "V", "GTT" : "V",
14 "TAA" : "*", "TAC" : "Y", "TAG" : "*", "TAT" : "Y",
15 "TCA" : "S", "TCC" : "S", "TCG" : "S", "TCT" : "S",
16 "TGA" : "*", "TGC" : "C", "TGG" : "W", "TGT" : "C",
17 "TTA" : "L", "TTC" : "F", "TTG" : "L", "TTT" : "F",
18 }
Задания
find-orfs-in-frame
Найти все ORF на прямой цепи с определенным сдвигом.
Программа получает через аргумент командной строки имя fasta-файла, в котором находится единственная последовательность. Вторым аргументом получает сдвиг (0, 1 или 2). Третим аргументом получает минимальную допустимую длину ORF в основаниях.
Результат записывается в файл output.fasta. Если у открытой рамки есть несколько альтернативных стартов, выбрать только самый длинный вариант. Имена последовательностей в выходном файле получаются дописыванием "_i" к идентификатору исходной последовательности, где i - порядковый номер ORF в последовательности, начиная с 1. Порядок последовательностей в выходном файле должен совпадать с порядком их встречи в исходной последовательности (и с порядком нумерации названий). Описания последовательностей в выходном файле оставить пустыми.
find-fixed-palindromes
Найти все палиндромы определенной длины
Первым аргументом командной строки подаётся имя fasta-файла с единственной последовательностью. Вторым аргументом командной строки подаётся длина палиндромов - чётное натуральное число.
Программа ищет все палиндромы в последовательности ДНК. Если палиндром встречается несколько раз, считать надо все экземпляры.
Найденные палиндромы записываются в файл output.fasta в порядке их встречи во входной последовательности. Имена последовательностей в выходном файле такие: pal_i, где i - номер встреченного палиндрома, начиная с 1. Описания последовательностей в выходном файле оставить пустыми.
Если палиндромов не нашлось, файл output.fasta должен быть пустым.
filter-palindromes
На вход подаются короткие последовательности, отобрать среди них палиндромы
Первым аргументом командной строки подаётся имя fasta-файла с последовательностями.
Оставить только последовательности-палиндромы.
Найденные палиндромомы в том же порядке записываются в выходной файл output.fasta. Имена и описания последовательностей берутся из исходного файла.
Если палиндромов не нашлось, файл output.fasta должен быть пустым.
Пример входа (содержимое входного фаста-файла, имя которого указал пользователь):
>test1 description 1 TTTGCACA >test2 description 2 TTTAAA >test3 description 3 TAAT
Пример выхода (содержимое output.fasta):
>test2 description 2 TTTAAA
count-stop-codones
На вход подаются открытые рамки, надо рассчитать, сколько раз встретились различные стоп-кодоны
Первым аргументом командной строки подаётся имя fasta-файла с последовательностями (ORF).
Программа получает для каждого стоп-кодона число ORF-ов, которые завершаются этим стоп-кодоном. Печатает числа строго в следующем порядке: TGA, TAA, TAG. Если какой-то стоп-кодон не встретился, для него печатает 0.
Пример выхода:
TGA 5 TAA 10 TAG 0
filter-orfs
На вход подаются различные последовательности. Надо отобрать среди них только те, которые являются открытыми рамками.
Первым аргументом командной строки подаётся имя fasta-файла с последовательностями. Вторым аргументом командной строки подаётся минимальная допустимая длина ORF в нуклеотидах, включая стоп-код.
Найденные ORF-ы в том же порядке записываются в выходной файл output.fasta. Имена и описания последовательностей берутся из исходного файла.
Если открытых рамок не нашлось, файл output.fasta должен быть пустым.
Пример входа (содержимое входного фаста-файла, имя которого указал пользователь):
>orf_8_100 xxx ATGATCCCGGATACTGGTTTTCTACTAGCTGATATGATCCCGGACAGACGTAAGTTCCAA AGGGAAAACGTGTTCCTGAGGCATAACGTATGA >orf_41_100 yyy ATGATCCCGGACAGACGTAAGTTCCAAAGGGAAAACGTGTTCCTGAGGCATAACGTATGA >orf_91_32 zzz ATGCCTCAGGAACACGTTTTCCCTTTGGAACTTACGTCTGTCCGGGATCATATCAGCTAG
Пусть пользователь выбрал минимальную длину ORF равной 66 нуклеотидам.
Пример выхода (содержимое output.fasta):
>orf_8_100 xxx ATGATCCCGGATACTGGTTTTCTACTAGCTGATATGATCCCGGACAGACGTAAGTTCCAA AGGGAAAACGTGTTCCTGAGGCATAACGTATGA
dna-consensus
На вход набор последовательностей ДНК одинаковой длины. Выдать последовательность-консенсус согласно правилам.
Правила выведения обозначения группы нуклеотидов см. выше.
Первым аргументом командной строки подаётся имя fasta-файла с последовательностями.
Программа создаёт последовательность-консенсус и пишет её в файл consensus.fasta Имя последовательности в файле - consensus. Описание выходной последовательности отсутствует.
Пример входа (содержимое входного фаста-файла, имя которого указал пользователь):
>seq1 ATGCCTCAG >seq2 TAGCCTCAG >seq3 AGGCCTCAG
Пример выхода (содержимое consensus.fasta):
>consensus WHGCCTCAG
protein-consensus
На вход набор последовательностей белка одинаковой длины. Вывести консенсус (см. выше, что это).
Первым аргументом командной строки подаётся имя fasta-файла с последовательностями.
Программа создаёт последовательность-консенсус и пишет её в файл consensus.fasta Имя последовательности в файле - consensus. Описание выходной последовательности отсутствует.
Пример входа (содержимое входного фаста-файла, имя которого указал пользователь):
>seq1 MPQEHAFPLE >seq2 MPQEHVFPVE >seq3 MPQEHVFPVE
Пример выхода (содержимое consensus.fasta):
>consensus MPQEHVFPVE
reorigin
Дана последовательность короткой кольцевой ДНК. Создать аналогичную кольцевую последовательность, начинающуюся с данного места.
Первым аргументом командной строки подаётся имя fasta-файла с единственной последовательностью. Вторым аргументом командной строки подаётся число - индекс нуклеотида исходной последовательности, с которого должна начинаться новая последовательность. ("Индексы" в отличие от "номеров", начинаются с 0.)
Программа создаёт новую последовательность и пишет её в файл output.fasta. Имя и описание последовательности сохраняется.
Пример входа (содержимое входного фаста-файла, имя которого указал пользователь):
>seq1 x y q e r t ATGCCTCAG
Пусть пользователь задал значение сдвига 3
Пример выхода (содержимое output.fasta):
>seq1 x y q e r t CCTCAGATG
translation-cmp
Даны две открытые рамки. Определить, кодируют ли они один и тот же белок
Первым аргументом командной строки подаётся имя fasta-файла с двумя ORF-ами.
Если эти ORF-ы кодируют один и тот же белок, программа печатает "YES", иначе печатает "NO".
find-matrix
Дан набор последовательностей и последовательность белка (стоп кодон обозначен *). Найти среди последовательностей открытую рамку, которая кодирует данный белок.
Первым аргументом командной строки подаётся имя fasta-файла с ДНК. Вторым аргументом командной строки подаётся имя fasta-файла с белком.
Программа печатает имя того ORF-а, который транслируется в данный белок (такой ORF будет один).
translate-orf
Дана открытая рамка. Транслировать с неё белки с учётом возможных множественных старт-кодонов в рамке считывания
Первым аргументом командной строки подаётся имя fasta-файла с одним ORF, в котором возможны альтернативные старт-кодоны. Стоп-кодон обозначать *.
Программа выдаёт последовательности белков в файл output.fasta Имена последовательностейтакие: prot_i, где i - номер начиная с 1. Описания последовательностей в выходном файле отсутствуют.
untranslate
Дана последовательность белка. Сгенерировать случайную последовательность открытой рамки, которая бы транслировалась в этот белок.
Первым аргументом командной строки подаётся имя fasta-файла с одним белком. Результат программа записывает в output.fasta с тем же именем и описанием.
find-substrings
Есть набор белковых последовательностей. Отобрать среди них только те, которые входят хотя бы в две другие последовательности в исходном наборе. “Входить” - значит дословно совпадать с частью последовательности или всей последовательностью.
Первым аргументом командной строки подаётся имя fasta-файла с белками. Программа выводит часть из них в файл output.fasta в том же порядке, с теми же названиями и описаниями.
Если подходящих последовательностей не нашлось, файл output.fasta должен быть пустым.
find-repeats
Найти в последовательности ДНК точные повторы определенной длины
Первым аргументом командной строки подаётся имя fasta-файла с единственной последовательностью. Вторым аргументом командной строки подаётся длина повторов.
Программа находит повторы данной длины и выводит их в output.fasta. Повторяющихся последовательностей в выходном файле быть не должно. Порядок последовательностей - согласно первой встрече повтора. Имена присвоить такие: rep_i, где i - номер, начиная с 1. Описания последовательностей должны быть пустыми. Вхождения повторов могут пересекаться.
Если подходящих последовательностей не нашлось, файл output.fasta должен быть пустым.
filter-non-polar
Есть набор белков. Отобрать те, в которых преобладают неполярные аминокислоты (C, V, I, L, M, F, Y, W, A), то есть их половина или больше.
Первым аргументом командной строки подаётся имя fasta-файла с последовательностями.
Отобранные последовательности в том же порядке записываются в выходной файл output.fasta. Имена и описания последовательностей берутся из исходного файла.
Если подходящих последовательностей не нашлось, файл output.fasta должен быть пустым.
Пример входа (содержимое входного фаста-файла, имя которого указал пользователь):
>seq1 xxx MPALAVFILELTAVWDCIF >seq2 yyy MKHLGKDGKG
Пример выхода (содержимое output.fasta):
>seq1 xxx MPALAVFILELTAVWDCIF
calc-mass
Рассчитать массу белка по его последовательности (выдаётся словарь масс аминокислот, см. выше)
Первым аргументом командной строки подаётся имя fasta-файла с единственной последовательностью.
Результат (число) программа просто печатает.
Не забудьте, что масса белка - это не просто сумма масс аминокислот. Надо ещё вычесть массу воды, высвобожденной при образовании пептидной связи. Число пептидных связей равно числу аминокислот минус 1.
word-frequency
На вход открытая рамка и одна из аминокислот. Рассчитать частоты кодонов (количество раз, которое эта аминокислота была закодирована данным кодоном).
Первым аргументом командной строки подаётся имя fasta-файла с единственной последовательностью. Вторым аргументом командной строки подаётся однобуквенный код аминокислоты.
Программа печатает таблицу частот кодонов в произвольном порядке. Если какой-то кодон не встретился, для него печатайте 0. Подумайте, почему такая ситуация (избегание одних кодонов и предпочтение других кодонов) может встретиться в природе.
Пусть пользователь решил изучить частоты изолейцина (I):
Пример выхода:
ATT 30 ATC 41 ATA 0
Словарь из аминокислоты в список кодонов см. выше.
Полезным может быть класс "последовательность", так как все задания включают чтение FASTA-файлов. Некоторые также включают запись в FASTA-файл. У объектов этого класса могут быть поля: (1) последовательность как таковая; (2) название; (3) описание. В классе "Последовательность" полезно сделать метод "записать эту последовательность в (открытый) файл", который принимает файл как аргумент. Другие методы могут быть связаны с конкретными задачами.