Учебная страница курса биоинформатики,
год поступления 2014
(*) - дополнительное задание
Всем заданиям присвоены мнемоники, указанные после названий. Мнемоники заданий подчеркнуты. Решение кладите в файл ~/term1/block3/credits/ВашаФамилия_практикум_мнемоника.py где ~ - ваша домашняя папка (не путать с папкой public_html!), ВашаФамилия - ваша фамилия латинскими буквами с большой буквы, а мнемоника - мнемоника, указанная в задании. Пример: ~/term1/block3/credits/Pupkine_pr10_one2tree.py
Протокол ~/term1/block3/credits/Pupkine_pr10_protocol.txt нужен для ответов на дополнительные задания
Регистр букв в имени файла, как в задании. Не ошибайтесь с именем файла, иначе мы не увидим решение!
Практикум 10. Словари, файлы и манипуляция со строками. Задания
Памятка частично покрывает материал занятия.
Мы ведём обновляемый список типичных ошибок. Прочитайте, чтобы не повторять их в новом задании.
Система самопроверки домашних заданий поможет самостоятельно проверить домашнее задание до сдачи. Внимание! Эта форма не запоминает результатов. Не забудьте в срок разместить файл в правильном месте.
Упражнения для самостоятельной работы.
Эти упражнения не проверяются. Они для того, чтобы помочь вам освоить новые понятия.
1. Обозначения аминокислот. Мнемоника: one2three
Программа получает на вход однобуквенный код аминокислоты и печатает трёхбуквенный. Однобуквенный код вводится заглавной или строчной буквой, а в трёхбуквенном печатается заглавным только первая буква (Ser).
Кстати, чтобы в питоне сделать в слове заглавной только первую букву, используется метод строки .capitalize(): 'zAsDfF'.capitalize() выдаст 'Zasdff'.
Методы .upper() и .lower() делают следующее:
'Ser'.upper() выдаст 'SER',
'Ser'.lower() выдаст 'ser'
Пример входа:
S
Пример выхода:
Ser
Чтобы не набирать вручную сопоставления названий всех аминокислот, вы можете воспользоваться готовым словарем, переводящим однобуквенный код в трёхбуквенный.
2. Обозначения аминокислот 2. Мнемоника: three-and-one
Программа получает на вход трёхбуквенный или однобуквенный код аминокислоты. Если получает однобуквенный код, то печатает трёхбуквенный, и наоборот. Однобуквенный код вводится и печатается заглавными буквами, а в трёхбуквенном вводится и печатается заглавным только первая буква (Ser).
У Вас в прошлом задании был словарь, переводящий однобуквенный код в трёхбуквенный. В этом задании вы используете этот словарь, а также обратный словарь, переводящий трёхбуквенный код в однобуквенный. Программа должна генерировать обратный словарь автоматически из первого словаря.
Пример входа 1:
Ser
Пример выхода 1:
S
Пример входа 2:
S
Пример выхода 2:
Ser
Если выполните это задание, то освобождаетесь от выполнения задания one2three без потери рейтинга. Подумайте, как сделать из него обратный словарь (однобуквенный в трёхбуквенный), это поможет при выполнении этого задания.
3. Координатные четверти. Мнемоника: quadrants
Дан файл input.txt со списком координат точек на координатной плоскости. Для каждой точки определить и сохранить в файле output.txt номер квадранта (подсказка). Если точка лежит на оси координат, записать в файл название этой оси ("OX" или "OY"). Если точка лежит в начале координат, распечатать число 0.
В файле input.txt содержится список точек. Каждая точка задается как 2 числа (X и Y) на отдельной строке. Лишней информации печататься не должно (формат как в примере).
Пример входа (X и Y точек в файле input.txt):
-3 2 3 -2.5 3 0 0 3 0 0
Пример выхода (так выглядит файл output.txt после прогона программы):
2 4 OX OY 0
4. Список последовательностей. Мнемоника: sequences
Программа читает последовательности из фаста-файла input.fasta и выводит список идентификаторов в произвольном порядке.
Пример входа (input.fasta):
>I916 peptide chain release factor 2 ATGCGCGCGGAAATCGAGACGCTGGTTGACGAAATCCAGCAGGCCATAAGCCTGCTGAGG AGGCATTAA >A0925 hypothetical protein ATGACCAAACGTGATACGACTATACTAGGGCCTGTCTGCATTCAAGGATTCCCTTTTGCA TGA
Пример выхода:
I916 A0925
5. Длины последовательностей. Мнемоника: sequence-len
Программа читает последовательности из фаста-файла input.fasta и выводит таблицу "идентификатор - длина последовательности" в порядке следования идентификаторов в fasta-файле.
Пример входа (input.fasta):
>I916 peptide chain release factor 2 ATGCGCGCGGAAATCGAGACGCTGGTTGACGAAATCCAGCAGGCCATAAGCCTGCTGAGG AGGCATTAA >A0925 hypothetical protein ATGACCAAACGTGATACGACTATACTAGGGCCTGTCTGCATTCAAGGATTCCCTTTTGCA TGA
Пример выхода:
I916 69 A0925 63
6. Трансляция. Мнемоника: translation
Каждую последовательность нуклеотидов из файла input.fasta программа транслирует в аминокислотную последовательность и записывает в файл output.fasta в порядке следования последовательностей в fasta-файле. Трансляция начинается с первого кодона. Стоп-кодон заменяется звёздочкой "*". Программа должна сохранять порядок последовательностей и описания последовательностей, а к названию дописывать "_protein" (см. пример). Входные последовательности не содержат никаких символов, кроме A, T, G, C. Все буквы в последовательностях в выходном файле должны быть заглавными.
Пример входа (input.fasta):
>I916 peptide chain release factor 2 ATGCGCGCGGAAATCGAGACGCTGGTTGACGAAATCCAGCAGGCCATAAGCCTGCTGAGG AGGCATTAAATGCGC >A0925 hypothetical protein ACCAAACGTGATACGACTATACTAGGGCCTGTCTGCATTCAAGGATTCCCTTTTGCA
Пример выхода (output.fasta):
>I916_protein peptide chain release factor 2 MRAEIETLVDEIQQAISLLRRH*MR >A0925_protein hypothetical protein TKRDTTILGPVCIQGFPFA
Чтобы не набирать вручную весь генетический словарь, вы можете воспользоваться готовым словарем, переводящим однобуквенный код в список кодонов. Подумайте, как из него приготовить желаемый словарь (переводящий кодон в однобуквенный код). Это поможет решить задачу. Помните о существовании стоп-кодонов.
Длина входной последовательности делится на 3.
Дополнительные задания
* 7. Трансляция в определенной рамке. Мнемоника: translation-in-frame
Расширим предыдущее задание. Пользователь задает рамку считывания (0, 1, 2) и минимальную длину белка в аминокислотных остатках. Программа находит максимальные по длине открытые рамки в данной рамке считывания, транслирует каждую, и если она подходящей длины, то записывает в выходной файл. К имени последовательности добавляется _protein_i где i - номер выводимой аминокислотной последовательности для данной нуклеотидной последовательности, начиная с 1. Последовательности в выходном файле должны быть записаны в порядке следования исходных последовательностей во входном файле. Если из одной входной последовательности получается несколько открытых рамок, то порядок записи открытых рамок должен совпадать с порядком их следования в исходной последовательности. Последовательности выходного FASTA-файла не должны содержать описания.
Открытая рамка начинается со старт-кодона ATG и завершается одним из стоп-кодонов (TGA, TAA, TAG). Количество оснований внутри рамки кратно 3 и она не содержит стоп-кодонов в рамке считывания (то есть, со сдвигом, кратным 3, относительно старт-кодона). Если у открытой рамки существует несколько альтернативных старт-кодонов (пример: CATGССCATGCCC), то программа должна выбрать ту из них, длина которой больше.
Стоп-кодон отмечается в выходе "*", но не входит в учёт длины белка. Если открытая рамка обрывается без стоп-кодона, то такая открытая рамка отбрасывается (и открытой рамкой не считается, если уж об этом зашла речь).
Пример входа (input.fasta):
>I46D GATGCCTCAGGAACACGTTTTCCCTTTGGAACTTACGTCTGTCCGGGATCATATCAGCTA GCCCCAAAATTTTTGGAAC
Пусть пользователь выбрал сканирование в рамке 1 и минимальный размер белка 5.
Пример выхода (output.fasta):
>I46D_protein_1 MPQEHVFPLELTSVRDHIS*
* 8. Является ли последовательность палиндромом? Мнемоника: filter-palindrome
Программа спрашивает у пользователя имя входного фаста-файла.
Оставить только последовательности, у которых последовательность прямой цепи совпадает с последовательностью обратной цепи (такие последовательности называют палиндромами).
Найденные палиндромомы в любом порядке записываются в выходной файл, имя которого вводит пользователь. Имена и описания последовательностей берутся из исходного файла. В выходном файле не должно быть повторяющихся последовательностей.
Пример входа (содержимое входного фаста-файла, имя которого ввёл пользователь):
>test1 description 1 TTTGCACA >test2 description 2 TTTAAA >test3 description 3 TAAT
Пример выхода (содержимое выходного фаста-файла, имя которого затем ввёл пользователь):
>test2 description 2 TTTAAA
(*) Какая питонская функция принимает на вход строку или список и возвращает его в обратном порядке? Ответ в протокол.
** 9. Концентрические кольца. Мнемоника: circles
(Задача для любителей математики.)
В школьной тетради нарисовали черным маркером концентрические кольца. Число колец N. Размер клеточки тетради 5мм х 5мм.
Определить закрашенную площадь, используя только ввод, вывод и операции над числами. В частности, запрещается применять цикл.
Программа получает на вход число концентрических колец N. Программа печатает площадь закрашенной части в квадратных сантиметрах.
Пример входа:
1
Пример выхода:
2.356194490192345
(***) Объём вложенных сфер, расположенных по той же схеме. (Предыдущая задача представляет собой срез такой объёмной фигуры.) Подсказка: метод неопределенных коэффициентов. Решение в протокол.
** 10. Поиск открытых рамок считывания. Мнемоника: find-orfs
Программа спрашивает у пользователя имя фаста-файла. В этом фаста-файле хранятся последовательности ДНК. Программа спрашивает пользователя имя интересующей последовательности и дальше работает с этой последовательностью.
Задача: найти открытые рамки считывания на прямой и обратной цепях. Напомню на всякий случай, что последовательность обратной цепи содержит комплементарные основания в обратном порядке. Открытая рамка начинается со старт-кодона ATG и завершается одним из стоп-кодонов (TGA, TAA, TAG). Количество оснований внутри рамки кратно 3 и она не содержит стоп-кодонов в рамке считывания (то есть, со сдвигом, кратным 3, относительно старт-кодона). Не будем искать слишком короткие рамки (длина которых, включая старт- и стоп-кодон составляет меньше 60 нуклеотидов). Если у открытой рамки существует несколько альтернативных старт-кодонов (пример: CATGССCATGCCC), то программа должна найти все.
Как было сказано выше, программа находит все открытые рамки на обеих цепых. Найденные рамки могут пересекаться. Найденные рамки записываются в фаста-файл, имя которого тоже спрашивается у пользователя. Имена последовательностей в выходном файле должны быть в следующем формате: orf_старт_стоп, где старт и стоп - номера в последовательности первого нуклеотида старт-кодона и последнего нуклеотида стоп-кодона соответственно, нумерация нуклеотидов с 1. В выходной файл пишется последовательность в ориентации открытой рамки, то есть, если открытая рамка на обратной цепи, то в файл пишется материал с обратной цепи. Простая проверка: все последовательности в выходном файле должны начинаться с ATG.
Программа не должна работать долго (больше нескольких секунд).
Пример входа (содержимое входного фаста-файла, имя которого ввёл пользователь):
>test1 TTTGCACAAGGATTCCCTTTTGCATGAAAA >test2 TGCTGATATGATCCCGGATACTGGTTTTCTACTAGCTGATATGATCCCGGACAGACGTAA GTTCCAAAGGGAAAACGTGTTCCTGAGGCATAACGTATGATTTT >test3 TTTGCACAAGGATTCCCTTTTGCATGAAAA
Допустим, пользователь вводит "test2", он хочет найти открытые рамки в этой последовательности.
Пример выхода (содержимое выходного фаста-файла, имя которого затем ввёл пользователь):
>orf_8_100 ATGATCCCGGATACTGGTTTTCTACTAGCTGATATGATCCCGGACAGACGTAAGTTCCAA AGGGAAAACGTGTTCCTGAGGCATAACGTATGA >orf_41_100 ATGATCCCGGACAGACGTAAGTTCCAAAGGGAAAACGTGTTCCTGAGGCATAACGTATGA >orf_91_32 ATGCCTCAGGAACACGTTTTCCCTTTGGAACTTACGTCTGTCCGGGATCATATCAGCTAG
Порядок ORF'ов в выходном файле не имеет значения. Строки в выходном файле должны быть не длиннее 70 символов. Последовательности выходного FASTA-файла не должны содержать описания.
(***) Применить к своему вирусу и бактерии. Привести примеры совпадения и несовпадения с аннотацией генов. Результат записать в протокол.
NCBI предоставляет сервис, который ищет ORF'ы: ORF Finder. Его описание гласит, что минимальный размер ORF'а можно выбрать, но где это делается, непонятно. Из-за этого данный инструмент находит в нашем примере только один из двух ORF'ов.
Другой сервис с таким же названием предоставляет bioinformatics.org. В нём можно забивать минимальную длину ORF'а в кодонах (а нам нужно в основаниях!). Этим сервисом можно в нашем примере найти оба ORF'а, но нужно произвести 2*3 = 6 запусков, так как за один запуск он ищет только на одной цепи и только в одной рамке (из 3 возможных).
* 11. Применение словарей (в протокол)
В каких заданиях прошлых практикумов можно было бы удачно применить словарь?
Линукс. Взять обратную цепь: tac | rev | tr 'ATGC' 'TACG' Найти все рамки: egrep 'ATG([T]..|T[GA].|TG[A]|TA[AG]){18,}(TGA|TAA|TAG)'