Kodomo

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

Учебная страница курса биоинформатики,
год поступления 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. Применение словарей (в протокол)

В каких заданиях прошлых практикумов можно было бы удачно применить словарь?