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()