Eritis sicut Deus, scientes bonum et malum

Сайт студента ФББ Пензара Дмитрия

Скрипт, вычисляющий значения выражений Скрипт, создающий Jmol-скрипт, красящий белок Скрипт, красящий отдельные аминокислоты по входным данным пользователя Скрипт, находящий водяные мостики в белке

Скрипт, создающий Jmol-скрипт, показывающий начало и конец длинного белка наглядно с помощью использования перехода цветов.

Скачать разобранный ниже скрипт можно по этой ссылке

После создания предыдущего скрипта Ирина Хвень нашла команду color monomer, выполняющий ту же задачу несколько по-другому. Перейти к этому варианту с сохранением некоторых преимуществ(за три минуты можно изменить диапазон цветов) можно простым добавлением параметра k, на который изменяется цвет и который вычисляется следующим образом: k=(диапазон цветов)/(количество аминокислотных остатков). Кроме того, его можно делать другой константой, просто отличной от единицы или задавать другие правила его вычисления.

Вариант скрипта, который заранее определенный диапазон цветов "надевает" на определенное количество аминокислот, можно скачать по этой ссылке

Условие, предложенное на занятии:

Написать скрипт на языке Python, который на вход получает PDB-файл и код интересующей цепи, читает в нем отвечающий вторичной структуре раздел и печатает скрипт Jmol, красящий в цвета спектра (или другим удобным способом) этот белок.

Решение этой задачи состоит из двух частей. Первая - найти в файле pdb информацию о первой кислоте и последней. Вторая - используя полученные данные создать скрипт Jmol.

Первую часть я решил так - информацию о номере первой аминокислоты скрипт читает из первой строчки со атомом, входящим в белок. О номере последней аминокислотного остатка можно прочитать из строчки, начинающейся c "TER"(возможно, существует способ проще, но я его не нашел).

input=open(input_name,'r')
bol=False
for line in input:
    if (str(line[0:4])=='ATOM') and (bol==False):
        a=line[24:].split(' ',1)	
        start=int(a[0])		
        bol=True
    if str(line[0:3])=='TER' :
        a=line[23:].split(' ',1)
        end=int(a[0])

Со второй частью решение было такое - фиксировать две цифры RGB кода, а третий начинать изменять от 0 до 255. Затем от получившегося цвета идти к другому, отличающимуся тоже на одну цифру. При этом на каждом шаге цикл записывает в выходной файл команду выбрать соответсвующую кислоту и покрасить в цвет. Если отбросить часть с циклом - то останется именно останется программа, способная покрасить бело, состоящий из 1529 аминокислотных остатков в разные цвета(cомневаюсь, что понадобится красить подобным образом белок с длиной >1500 аминокислотных остатков). Так как прописывать все цвета(а еще проверять,сливаются ли они с фоном - довольно долго), то если такой белок все-таки попадется, его просто начнет красить по циклу. Чтобы при этом полностью исключить возможность неправильного истолкования, первая и последняя кислота отмечаются с помощью команды "label %n%r", при этом подпись первой имеет красный цвет, последней -синий(команда "color label").

output.write('select *.C and '+str(start)+'\n')
output.write('label %n%r\n')
output.write('color label red\n')
output.write('set fontsize 15\n')
output.write('select *.N and '+str(end)+'\n')
output.write('label %n%r\n')
output.write('color label blue\n')
output.write('set fontsize 15\n')
#Red(255,0,0)
#Yellow(255,255,0)
#Green(0,255,0)
#Azure(0,255,255)
#Blue(0,0,255)
#Violet(255,0,255)
##########
while a_dzeta>0 :
    factor+=1530
    while (i-factor-start<=1529) and (i(255+factor)) and \
		(n<(511+factor)):#Azure(0,255,255)
            output.write('select '+str(i)+'\n')
            output.write('color \
		[0'+','+str(510-n+factor)+','+'255'+']\n')#254 0
        if (n>(510+factor)) and (n<(766+factor)):#Blue(0,0,255)
            output.write('select '+str(i)+'\n')
            output.write('color ['+str(n-510-factor)+ \ 
			','+'0'+','+'255'+']\n')#1 255 
        if (n>(765+factor)) and \ 
		(n<(1021+factor)):#Violet(255,0,255)
            output.write('select '+str(i)+'\n')
            output.write('color [255'+','+'0'+','+ \ 
			str(1020-n+factor)+']\n')#254 0 
        if (n>(1020+factor)) and (n<(1276+factor)):#Red(255,0,0)
            output.write('select '+str(i)+'\n')
            output.write('color [255'+','+\ 
			str(n-1020-factor)+','+'0]\n')# 1 255
        if (n>(1275+factor)) and \
		(n<(1530+factor)):#Yellow(255,255,0)
            output.write('select '+str(i)+'\n')
            output.write('color \ 
			['+str(1530-n+factor)+','+\
			'255'+','+'0]\n')# 254 1 
            #Green(0,255,0)
        i+=1			
    a_dzeta-=1529

Результат работы разобранного выше скрипта на моем белке(β-порфираназа, файл 4ATE.pdb) можно увидеть на рис. 1.

Результат работы модифицированного скрипта на моем белке(β-порфираназа, файл 4ATE.pdb) можно увидеть на рис. 2.

Результат работы разобранного скрипта

Рис. 1. Изображение, полученное с помощью скрипта, разобранного выше.

Результат работы модифицированного скрипта

Рис. 2. Изображение, полученное с помощью модифицированного скрипта.

Последняя дата изменения: 02.03.2014
Все материалы разрешается использовать только при извещении правообладателя.
© Penzar Dmitry. All rights reserved.
Flag Counter Valid HTML 4.01 Strict Valid CSS!