Скрипт, создающий 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. Изображение, полученное с помощью модифицированного скрипта.