#!/usr/bin/python import sys file = sys.argv[-1] d = dict() l = list() f = open(file, 'r') a = f.readlines() for i in a: if i[0] != '#' and i[0] != ' ' and len(i) > 1: l.append(i[:-1]) for j in l: list = j.split() if not list[0] in d: d[list[0]] = list[2] else: a = d.get(list[0]) + list[2] d[list[0]] = a total_q = 0 for key, value in d.items(): q = 0 for e in range(0, len(value)-1): if value[e] == '-' and value[e+1] != '-': q += 1 if value[-1] == '-': q += 1 print(key, q) total_q +=q print('Total', total_q) f.close()
получение списка ID
infoseq 'sw:*_ECOLI' -only -name -nohead -out ecoli.txt
infoseq 'sw:*_BACSU' -only -name -nohead -out bacsu.txt
получение мнемоники из ID
awk '{print $1}' FS='[_]' ecoli.txt > id_ecoli.txt
awk '{print $1}' FS='[_]' bacsu.txt > id_bacsu.txt
отбор одинаковых мнемоник
sort id_ecoli.txt id_bacsu.txt | awk 'dup[$0]++ == 1' | less
глобальное парное выравнивание (пример)
needle sw:UXUA_ECOLI sw:UXUA__BACSU uxua.needle -auto
water sw:UXUA_ECOLI sw:UXUA_BACSU uxua.water -auto
Подсчет покрытия (coverage) проводился вручную с использованием команды infoseq для получения полной длины белка и с учетом того, что длина последовательности, для которой указан первый и последний элемент, считается как:
N(last)-N(first)+1
Применение команд needle и water аналогично пунктам 2 и 3.
Поисковой запрос:
uxua AND (reviewed:true)
Файл и команды для построения множественного выравнивания
sw:uxua_bruc2 sw:uxua_yerpe sw:uxua_strp7 sw:uxua_cros8 sw:uxua_lacla sw:uxua_ecoli sw:uxua_bacsu
seqret @uxua.txt uxua.fasta
muscle -in uxua.fasta -out uxua_alignment.fasta