#pragma css /css/2023.css <<BI>> = Указания к практикуму 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 строку:<<BR>> `DE RecName: Full=GSX1 {ECO:0000303|PubMed:7768864};`<<BR>> то пишите в качестве названия белка "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", например:<<BR>> `ENO_BACSU or ENO_ECOLI or ENO_MYCTU or ENO_HAEIN`<<BR>> и запустите поиск (то же самое можно сделать без "or" через ID mapping, разберитесь сами). Отметьте галочками все правильные находки и нажмите кнопку Align. Когда появится выравнивание, нажмите кнопку Download (сразу над словом "Alignment"). Выберите формат FASTA, отметьте Uncompressed и сохраните файл.