Учебная страница курса биоинформатики,
год поступления 2020
Все файлы со скриптами сохраняйте в папку ~/term1/block2/sem9, название скрипта – <название_задания>.py
Если в заданиях не оговорено иначе, то считается, что пользователь всегда передает вам верные аргументы.
1. count_n_fasta
Программа принимает в качестве аргумента командной строки название файла с одной нуклеотидной последовательностью в формате fasta (последовательность может занимать несколько строк). Программа печатает на стандартный поток вывода количество каждого типа нуклеотидов (A, T, G, C) в последовательности
Пример запуска программы
python3 count_n_fasta.py /nfs/srv/www/htdocs/FBB/year_20/examples/nucl_single.fasta
Пример вывода
A 10 T 4 C 0 G 3
Пример входного файла:
>seq desc AAAATTTTGAGGA AAAA
2. uniq_reads
Программа принимает в качестве аргумента командной строки название файла с набором нуклеотидных последовательностей в формате fasta. Гарантируется, что каждая последовательность в файле записана ровно на одной строке (за исключением строки с описанием). Выведите все уникальные последовательности в файле (порядок вывода произволен).
Пример запуска программы
python3 uniq_reads.py /nfs/srv/www/htdocs/FBB/year_20/examples/single_line.fasta
Пример вывода
ATGATGATAG ATGAAGATAG CCGATGATAG ATGATGATTT
Пример входного файла:
>seq1 s ATGATGATAG >seq2 d ATGAAGATAG >seq3 e ATGATGATTT >seq4 ATGATGATAG >seq5 CCGATGATAG >seq6 ATGATGATAG >seq7 CCGATGATAG
3. count_reads_sorted
Программа принимает в качестве аргумента командной строки название файла с набором нуклеотидных последовательностей в формате fasta. Гарантируется, что каждая последовательность в файле записана ровно на одной строке (за исключением строки с описанием). Для каждой последовательности выведите, сколько раз она встретилась. Последовательности выводить в порядке лексикографического возрастания (то есть в алфавитном порядке).
Пример запуска программы
python3 count_reads_sorted.py /nfs/srv/www/htdocs/FBB/year_20/examples/single_line.fasta
Пример вывода
ATGAAGATAG 1 ATGATGATAG 3 ATGATGATTT 1 CCGATGATAG 2
Пример входного файла:
>seq1 s ATGATGATAG >seq2 d ATGAAGATAG >seq3 e ATGATGATTT >seq4 ATGATGATAG >seq5 CCGATGATAG >seq6 ATGATGATAG >seq7 CCGATGATAG
4. fetch_pdb
Программа принимает в командной строке pdb-код (четыре символа) и создаёт файл с именем <код>.pdb, содержащий запись pdb, находящуюся по адресу https://files.rcsb.org/view/<код>.pdb (например, если pdb-код — это 1xyz, то по адресу https://files.rcsb.org/view/1xyz.pdb, создаваемый файл в этом случае должен называться 1xyz.pdb).
Примеры валидных pdb-кодов: 10mh, 1crm, 1ab1, 4ate.
Пример запуска программы
python3 fetch_pdb.py 4ATE
5. split_pdb
Программа принимает в командной строке pdb-код (четыре символа) и записывает два файла:
1) atom.pdb - содержащий только строки, содержащую информацию об атомах (начинаются с ATOM) 2) hetatm.pdb - содержащий только строки, содержащую информацию о лигандах (начинаются с HETATM)
Пример запуска программы
python3 split_pdb.py 4ATE
6. cut_pdb
Программа принимает в командной строке 7 аргументов:
- pdb-код
- x1
- y1
- z1
- x2
- y2
- z2
и записывает файл out.pdb, в который записаны только те атомы из строк ATOM, для которых координаты x, y, z удолетворяют следующим условиям:
x1 < x < x2
y1 < y < y2
z1 < z < z2
Пример запуска программы
python3 cut_pdb.py 4ATE 0 0 0 20.5 50.0 100
7. new_user
Программа принимает на вход два аргумента командной строки: 1) файл, содержащий по одному слову в строке ("имена пользователей") 2) слово ("имя нового пользователя").
Если имени нового пользователя нет в файле, то программа выводит OK. Если же такое имя пользователя есть в файле, то программа пишет на первой строке NO, а затем выводит "предложение имени" — имя, которого нет в списке.
Предложение имени должно генерироваться по следующему алгоритму. Оно должно получаться присоединением к первоначально заданному слову какого-либо натурального числа (например, задано "abc", выдаётся "abc1" или "abc9"). При этом "предложение имени" не должно присутствовать в списке (быть новым), а присоединяемое число должно быть наименьшим из возможных при условии новизны.
Пример запуска программы
python3 new_user.py /nfs/srv/www/htdocs/FBB/year_20/examples/existed.txt miaso
Пример вывода
NO miaso2
Пример входного файла:
serge01 urfin miaso miaso1 kesha
8. count_multi_fasta
Программа принимает на вход файл с множеством последовательностей в формате fasta. Программа печатает имя каждой последовательности и ее длину
Пример запуска программы
python3 new_user.py /nfs/srv/www/htdocs/FBB/year_20/examples/multiline.fasta
Пример вывода
seq1 10 seq2 16 seq3 26 seq4 10 seq5 12
Пример входного файла:
>seq1 s ATGATGATAG >seq2 d ATGAAGATAG AAATGC >seq3 simple_description ATGATGATTT ATGCCCCATT AAACCC >seq4 OK ATGATGATAG >seq5 CCGATGATAG CC
9. select_pdb_field
Программа принимает на вход один или два аргумента: 1) файл с множеством последовательностей в формате fasta; 2) выходной файл (опционально).
Часть последовательностей в своем описании содержат подстроки вида PDB_CODE:<pdb_code>
Программа пишет в выходной файл, если он передан, а иначе на стандартный поток вывода, коды PDB (в верхнем регистре), которые содержатся в описании последовательностей.
Пример запуска программы:
python3 select_pdb_field.py /nfs/srv/www/htdocs/FBB/year_20/examples/fasta_wh_pdb.fasta
Пример вывода:
4ATE 98YH 10MH
Пример входного файла:
>seq1 PDB_CODE:4ATE ATGATGATAG >seq2 PDB_CODE:98YH ATGAAGATAG AAATGC >seq3 no_info AAATAAGTGC >seq4 PDB_CODE:10MH ATGATGATTT ATGCCCCATT AAACCC
10. pipe_download
Ваша программа со стандартного потока ввода принимает файл, в котором на каждой строчке записан код PDB. Если PDB-структура с таким кодом существует, то программа скачивает ее и сохраняет в файл <код>.pdb Если же такой структуры не существует, то программа на стандартный поток ошибок пишет "Error, pdb with code: <code> doesn't exist"
Пример запуска программы на выдаче программы из предыдущего задания
python3 select_pdb_field.py /nfs/srv/www/htdocs/FBB/year_20/examples/fasta_wh_pdb.fasta | python3 pipe_download.py
Пример вывода (стандартный поток ошибок)
Error, pdb with code: 98YH doesn't exist
Пример входного файла:
>seq1 PDB_CODE:4ATE ATGATGATAG >seq2 PDB_CODE:98YH ATGAAGATAG AAATGC >seq3 no_info AAATAAGTGC >seq4 PDB_CODE:10MH ATGATGATTT ATGCCCCATT