Учебная страница курса биоинформатики,
год поступления 2023
Указания к практикуму 9
Как написать программу на Python, берущую данные из командной строки?
Если в начале скрипта на Python поместить строку "from sys import argv", то при запуске программы образуется список с именем argv, куда попадут все аргументы командной строки, включая само название файла со скриптом. Например, вот такая программа:
from sys import argv a = int(argv[1]) b = int(argv[2]) print(a + b)
при запуске напечатает сумму чисел, которые будут приведены после её имени:
python sum.py 15 28 43
(если имя файла с программой — "sum.py"). Если же аргументов будет меньше двух или хотя бы один из них не интерпретируется как целое число, будет выдана ошибка (советую попробовать все варианты).
В вашем случае вам нужно будет открыть на чтение файл с именем argv[1], предполагая, что при запуске он будет приведён после имени программы и будет содержать выдачу needle или water.
Как получить списки идентификаторов Swiss-Prot с заданной мнемоникой организма?
Два варианта:
На kodomo программой infoseq. Например, чтобы получить в файле human.txt список идентификаторов человеческих белков, можно выполнить команду (может занять пару минут):
infoseq 'sw:*_human' -only -name -nohead -out human.txt
На сайте UniProt, используя поиск по Organism [OS] (сначала войдите в расширенный – "Advanced" – поиск). Начните набирать латинское название организма, в какой-то момент появится список продолжений, щёлкните по нужному. После получения таблицы с результатами поиска нужно оставить только записи Swiss-Prot, ткнув в слово "Reviewed" (слева), затем сохранить таблицу: Download → Format: Tab-separated или Excel.
Как определить пары с совпадающими мнемониками функции?
Несколько вариантов:
- Средствами электронных таблиц (поможет разбиение столбца на два по символу подчёркивания и функция VLOOKUP/ВПР)
- С помощью Python
Объединить списки и отсортировать: ID с одинаковым началом окажутся рядом. Чтобы сразу получить список мнемоник, имеющихся в обоих списках, можно воспользоваться стандартными консольными программами GNU/Linux: cut, sort, uniq.
cut -f 1 -d '_' ecoli.txt human.txt | sort | uniq -d > common_mnems.txt
Прежде чем использовать, почитайте man! Особенно man uniq.
Как определить рекомендуемое полное имя белка?
В полной записи Swiss-Prot ищите поле DE. Можно использовать конвейер из entret в grep:
entret sw:eno_bacsu -filter | grep '^DE'
Там ищите слова "RecName: Full=", название белка — после знака равенства. Например, если вы видите в поле DE строку:
DE RecName: Full=GSX1 {ECO:0000303|PubMed:7768864};
то пишите в качестве названия белка "GSX1".
Как запустить needle и water с параметрами по умолчанию?
В программах EMBOSS опция -auto задаёт значения по умолчанию для всех параметров, для которых это возможно. Имейте в виду, что у выходного файла тоже есть имя по умолчанию, но как раз его лучше задать явно. Например, если ваша пара — ENO_ECOLI и ENO_BACSU, то можно использовать строку вида
needle sw:eno_ecoli sw:eno_bacsu eno.needle -auto
выравнивание появится в файле с именем eno.needle.
Как определить характеристики выравнивания?
В выдаче needle и water (если не задавать другой формат) имеются следующие характеристики: число и процент колонок с идентичными буквами, число и процент колонок с близкими буквами (т.е. теми, для которых значение матрицы замен положительно), число и процент гэпов, вес выравнивания. Число инделей посчитаете своей программой; не забывайте, что один индель может присутствовать в двух "блоках" выравнивания (то есть начинаться на одной строке, продолжаться на другой).
Чтобы посчитать процент покрытия локальным выравниванием для каждой последовательности, нужно определить длину участка, попавшего в выравнивание (по координатам начала и конца) и разделить эту длину на полную длину последовательности. Полные длины есть в выдаче needle (в конце выравнивания), кроме того, длину выдаёт программа infoseq. Покрытием считаем именно долю всего участка, а не только тех букв, для которых нашлось сопоставление в другой последовательности.
Как заставить программу needle выдать выравнивание в fasta-формате?
Добавить параметр -aformat fasta.
Как построить множественное выравнивание?
Есть много способов сделать это, ниже описаны три.
Первый — на kodomo программой muscle. Пусть у вас есть идентификаторы записей в Swiss-Prot, например ENO_BACSU, ENO_ECOLI, ENO_MYCTU, ENO_HAEIN. Создайте списочный файл (скажем, eno.txt) со строками:
sw:eno_bacsu sw:eno_ecoli sw:eno_myctu sw:eno_haein
Затем создайте файл в fasta-формате:
seqret @eno.txt eno.fasta
После этого запустите muscle:
muscle -in eno.fasta -out eno_alignment.fasta
Второй способ. Запустите Jalview. В меню File выберите Fetch sequences. Отметьте Uniprot и нажмите OK. В меню слева выберите Entry name, в окошко справа внесите ID белков, разделённых точкой с запятой ";". Дождитесь появления списка находок. Отметьте НЕУСТАРЕВШИЕ находки (у них "нормальные" поля Protein names и Gene names, без ссылок на другие записи) и нажмите OK. Если всё нормально, появится окошко "Retreived from Uniprot" с последовательностями белков. Теперь надо их выровнять, для этого в меню Web service выберите Alignment и там — любую программу "with Defaults", например "Muscle with Defaults". Через некоторое время появится окошко с выравниванием. Можно "скрестить" этот способ с предыдущим: последовательности добыть seqret'ом, потом невыровнеными импортировать в Jalview и из Jalview запустить выравнивание.
Третий способ. На сайте Uniprot внесите в окно поиска идентификаторы, разделённые словом "or", например:
ENO_BACSU or ENO_ECOLI or ENO_MYCTU or ENO_HAEIN
и запустите поиск (то же самое можно сделать без "or" через ID mapping, разберитесь сами). Отметьте галочками все правильные находки и нажмите кнопку Align. Когда появится выравнивание, нажмите кнопку Download (сразу над словом "Alignment"). Выберите формат FASTA, отметьте Uncompressed и сохраните файл.