File size: 3,217 Bytes
a3f3d91 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
#!/usr/bin/env python
import sys
import pymol
from pymol import cmd, stored, util
pymol_mode = sys.argv[1]
pdb_file = sys.argv[2]
output_file = sys.argv[3]
try:
pdb_code = pdb_file.split('/')[1].split('.')[0]
except IndexError:
pdb_code = pdb_file.split('.')[0]
if pymol_mode == "s":
pymol.pymol_argv = ['pymol','-qc'] # PyMol quiet launch without GUI
out_folder = sys.argv[4]
fh = open(output_file, "r")
lines = fh.readlines()
pymol.finish_launching()
cmd.load(pdb_file)
#cmd.remove("HET")
cmd.set_name(pdb_code, pdb_code+'_A3D')
cmd.hide("all")
cmd.show("surface", "all")
cmd.color("white", "all")
#define the reds
cmd.set_color( "red1", [1, 0, 0 ] ) # most intense red
cmd.set_color( "red2", [1, 0.2, 0.2] )
cmd.set_color( "red3", [1, 0.4, 0.4] )
cmd.set_color( "red4", [1, 0.6, 0.6] )
cmd.set_color( "red5", [1, 0.8, 0.8] ) # lightest red
#define the blues
cmd.set_color( "blue1", [0, 0, 1] ) # most intense blue
cmd.set_color( "blue2", [0.2, 0.2, 1] )
cmd.set_color( "blue3", [0.4, 0.4, 1] )
cmd.set_color( "blue4", [0.6, 0.6, 1] )
cmd.set_color( "blue5", [0.8, 0.8, 1] ) # lightest blue
high_score=0
high_res = -1500100900
for line in lines[1:]:
if not (line == "\n" or line.startswith('#')):
line_params = line.strip().replace('//', '').split(" ")
score = float(line_params[3])
chain = line_params[0]
if chain == '-':
my_res = "resi " + line_params[1]
else:
my_res = "chain " + line_params[0] + " and resi " + line_params[1]
if score > 0: # residues with a value above 0 will be colored red
if score < 0.5:
cmd.color("red4", my_res)
elif score < 1:
cmd.color("red3", my_res)
elif score < 1.5:
cmd.color("red2", my_res)
else:
cmd.color("red1", my_res)
if score > high_score:
high_score = score
high_res = my_res
elif score < -0.5: # residues with a value below -0.5 will be colored blue
if score > -1:
cmd.color("blue5", my_res)
elif score > -1.5:
cmd.color("blue4", my_res)
elif score > -2:
cmd.color("blue3", my_res)
elif score > -2.5:
cmd.color("blue2", my_res)
else:
cmd.color("blue1", my_res)
# create an object for the high score hot spot of the protein
if high_res != -1500100900:
cmd.create("hot_spot", "("+high_res+",byres "+high_res+" around 5 and not HET \
and not color white and not color blue1 and not color blue2 and not color blue3 \
and not color blue4 and not color blue5)")
stored.neighbours=[]
cmd.iterate("(hot_spot & n. ca)","stored.neighbours.append((resi,resn))")
cmd.reset()
# Save PyMol session
if pymol_mode == "s":
cmd.viewport("640","480")
cmd.origin()
cmd.set("field_of_view",30)
cmd.set("surface_quality", "1")
cmd.set("ray_trace_mode", "1")
cmd.bg_color("white")
cmd.set("antialias", "2")
for xx in range(1,19):
cmd.rotate("y",20)
cmd.ray("640","480")
cmd.png("mov%05d.png" %(xx))
cmd.quit()
|