Упражнения по EMBOSS
Выполненные задания лежат в директории ~/term3/block2/pr9_emboss.txt (адрес относительно домашней папки). Но для
удобства продублировал в public_html:
Ссылка
Скрипт для решения задачи
Я выбрал третью задачу:
Найти частоты динуклеотидов в геноме бактерии, сравнить их с ожидаемыми и определить динуклеотид, частота которого
наиболее отклоняется от наблюдаемой. Подсказка: ожидаемая частота XY = (наблюдаемая частота X) * (наблюдаемая частота Y)
Ссылка на скрипт
Пример выполнения:
dimabosov@kodomo:~/public_html/term3$ ./script.bash test.fasta
Count and extract unique words in molecular sequence(s)
Count and extract unique words in molecular sequence(s)
31220
1647 2762 1294 -2063 -2262 -23 598 -1388 -1475 -604 3630 -595 21 -676 -90 -771
-2262 -2063 -1475 -1388 -771 -676 -604 -595 -90 -23 21 598 1294 1647 2762 3630
CG
Описание его работы:
Изначально необходимо ввести имя файла, для которого необходимо выполнить задачу
После для этого файла выполняются 2 команды из EMBOSS, которые записывают количество
динуклеотидов и нуклеотидов в 2 файла:
wordcount $filename testt.txt -wordsize=2
wordcount $filename testtt.txt -wordsize=1
Для каждого нуклеотида была выполнена следующая команда:
A=$(($(grep 'A' testtt.txt|awk '{print$2}')+(0)))
$A равняется числу нуклеотидов каждого типа. Если в файле не было данного нуклеотида, то $A не приравнивалось
к нулю, а было равно пустому множеству и с ним нельзя было проводить арифметические операции. Именно поэтому я добавлял ноль.
Потом извлекалось число динуклеотидов.
AT=$(($(grep 'TA' testt.txt|awk '{print$2}')+0))
И теперь считаю их "осклонение" от среднего:
AT1=$((((($A)*($T)*100000/$((($summ3)))/($summ2)))-((($AT)*100000/($dinucl)))))
Домножаю на 100000 из-за того, что bash не умеет работать с дробными числами. Я попытался найти способ работы с
дробными числами и он достаточно запутанный. Посчитал этот метод гораздо удобнее, ибо если я увеличу отклонение
от ожидаемого у каждого динуклеотида на одно и тоже число, то самое большое значение всё ещё будет самым большим,
и я его не потеряю.
При подсчёте частоты динуклетидов у второго нуклеотида частота выражается как: "число нуклеотидов/общее число нуклетиодов", а
общее число нуклеотидов на 1 меньше, так как мы уже знаем первый. При больших последовательностях это почти не ощущается, но
если запустить, например, последовательность из 10 букв, то становится заметно.
otcl=($AT1 $TA1 $AC1 $CA1 $AG1 $GA1 $GT1 $TG1 $CT1 $TC1 $CG1 $GC1 $GG1 $AA1 $CC1 $TT1)
otcl1=(AT TA AC CA AG GA GT TG CT TC CG GC GG AA CC TT)
Вводим 2 массива: значения отклонений и динуклеотиды, так чтобы они соотносились между собой(k-тому отклонению первого массива
соответствовал k-тый динуклеотид.)
IFS=$'\n' sorted=($(sort -n <<<"${otcl[*]}")); unset IFS
Сортируем список из всех отклонений.
И теперь находим наибольшое и наименьшее отклонение. Домножаем наименьшее на -1 и сравниваем их, при этом определив
их положние в неотсортированном списке с отклонениями. Мы ищем его положение в неотсортированном списке из-за того, что
при сортировке теряется соответсвие динуклеотид- его частота. И найдя самое большое значение, выводим динуклотид их списка.
rm testt.txt
rm testtt.txt
Удалим 2 файла, полученные в процессе. При тестированнии программы заметил, что если ввести несуществующий файл, то
скрипт выдаст, что он его не нашёл, но при этом выдаст вполне полноценный результат(динуклетид). Это было из-за того, что раньше эти 2 файла сохранялись
и ей было с чем работать, даже если его не перезаписывали. Теперь же она выдаст ошибку и даст явно понять, что введен несуществующий файл. Можно было бы
подсчёт всех частот и сумму завести под цикл, но при применении скрипта на последовательности длиной 50-100 тысяч основании, результат выдается моментально,
поэтому посчитал, что можно оставить так.
BLAST+
Необходимо было найти гомологи белка в неаннотированной сборке генома
Amoeboaphelidium protococcarum. Так как это гриб (вернее родственник) было решено
провести сравнение с белками хорошо изученного
Saccharomyces cerevisiae. Скачаем несколько белков из uniprot c помощью команды:
seqret sw:AC_PROTEIN NAME_PROTEIN.fasta
Аконитаза
Актин
Гексокиназа-2
Создадим локальную базу данных:
dimabosov@kodomo:~/public_html/term3/pr9$ makeblastdb -in X5.fasta -dbtype nucl
Building a new DB, current time: 11/09/2020 15:53:45
New DB name: X5.fasta
New DB title: X5.fasta
Sequence type: Nucleotide
Keep Linkouts: T
Keep MBits: T
Maximum file size: 1000000000B
BLAST options error: File X5.fasta does not exist
Ну и теперь выполним сравнение белков с геномом, использовав при этом tblastn:
tblastn -query NAME_PROTEIN.fasta -db X5.fasta > NAME_PROTEIN.txt
Файлы, полученные этим методом:
Аконитаза
Актин
Гексокиназа-2
Чтобы сделать вывод о том, что эти белки являются гомологами,
достаточно можно посмотреть на их E-value.
0.0 , 0.0 и 1e-96 для трёх белков соответственно.Помимо этого нужно ещё посмотреть на процент идентичных аминокислот: 68, 89 и 40 соответственно.
Достаточно сложно сказать о готологичности у гексокиназы-2, но всё же, столь большой e-value и то, что похожих по свойствам аминокислот при выравнивании
(параметр Positives) равен 60% может говорить о том, что этот белок у
Amoeboaphelidium protococcarum претерпел большое количество мутаций и есть шанс, что
он является гомологом. Про остальные 2 белка. Думается, что они могут иметь гомологи в геноме
Amoeboaphelidium protococcarum с большой вероятностью. К тому же у всех 3 белков выранивание
происходило почти по всей длине,а это очень хорошо.