Задание: Найти все открытые рамки длиной более 60 аминокислотных остатков в бактериальной хромосоме и посчитать статистику совпадений с аннотированными кодирующими последовательностями белков (CDS). Считать, что предсказание совпадает с аннотацией, если совпадают координаты стоп-кодонов на одной и той же цепи ДНК (ошибки в определении инициаторного кодона часты даже в аннотациях). Формат выдачи на ваше усмотрение.
код на питоне python task_1.py -i staphylo_ann.gb -o output.txt
-help тоже работает
Пример выдачи для обработки
генома стафилококка
В столбце 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