Практикум 9

Задание 2.

Задание: Найти все открытые рамки длиной более 60 аминокислотных остатков в бактериальной хромосоме и посчитать статистику совпадений с аннотированными кодирующими последовательностями белков (CDS). Считать, что предсказание совпадает с аннотацией, если совпадают координаты стоп-кодонов на одной и той же цепи ДНК (ошибки в определении инициаторного кодона часты даже в аннотациях). Формат выдачи на ваше усмотрение.

код на питоне

Пример запуска

python task_1.py -i staphylo_ann.gb -o output.txt
-help тоже работает

Описание выдачи

Пример выдачи для обработки генома стафилококка
image

В столбце count отображается количество записей, в столбце length - средняя длина в нукеотидах, вычисленная просто как суммарная длина рамок деленная на количество найденных рамок.
Строка annotated соответствует тем данным, которые приведены в gb файле - для того, чтобы их достать использовалась программа featcopy пакета EMBOSS. Строка predicted соответствует данным из программы getorf пакета EMBOSS. Строка intersected повествует о совпавших предсказанных рамках. Псоле всех правок, получилось, что вложение аннотированных в предсказанные, по крайней мере на смоем геноме - вообще полное. Но зато много лишнего)

Временные файлы и использованные программы

использовались:
featcopy (создается файл в текущей директории 'temp.gff')
getorf (создается файл в текущей директории 'temp.orf')

Комментарии

в ответ на:
0) какая версия питона?
1) optparse - это хорошо, но он устарел, используйте argparse
2) cmd = 'getorf ' + gbfilename + ' -minsize 60 temp.orf' -- конкатенация строк -- плохо, в таком случае используйте форматирование
3) if 'CDS' in line -- мало ли по какой причине в строке может где-то содержаться CDS. gff -- это почти нормальный tsv. Пропускаете строки, которые с # начинаются, и сплитите по табу, а потом проверяете нужные поля, не так уж это сложно, зато гораздо меньше ошибок наловите.
4) Вы на обратной цепи сравниваете положение стартов со стопами, еще бы они совпадали!
5) stop_coord = int(line.split()[3][:-1]) math.fabs(int(line.split()[3][:-1]) math.fabs(int(line.split()[3][:-1]) А может стоит один раз получить координаты, сохранить их в переменные, а потом использовать?!
6) табы лучше передавать в write в виде \t, их так гораздо лучше видно
Скажу по секрету, у функции print есть прекрасные именованные аргументы file, sep и end. Используя их, гораздо удобнее писать текст в файлы. Например, print(a, b, c, d, sep="\t", file=sys.stderr

Так, ну у меня установлена и пишу я для 3.5

  1. С argparse вроде разобралась! Спасибо!
  2. А вот с форматированием строк так и не сообразила, что имеется в виду... И, интересно, почему не очень хорошо с помощью "+" конкатенировать?
  3. Угу, поправила
  4. Мда, оказывается надо осторожно смотреть файл - в итоге две программы по разному выдают для reverse - и поэтому я действительно сначала для комплементраной сравнивала координаты стартов из gff
  5. Я в итоге функции написала, не знаю, насколько по данному пункту удовлетворительно?
  6. Сделала! И то правда)