Displaying Biochemical Properties
Selecting secondary structures
A few examples:
select helix, (ss h)
select sheet, (ss s)
select loop, (ss l+'')
Manually Assigning Secondary Structure
You can manually assign secondary stuctures to your protein by
alter 96-103/, ss='S' alter 96-103/, ss='H' alter 96-103/, ss='L'
to set residues 96-103 to beta Strand, alpha Helix, and Loop respectively.
See Also
FAQ Displaying Biochemical Properties
Color by atom type from a script
See Color for this.
Displaying double bonds
You can go into the lines mode and turning on the valence display:
hide
show lines
set valence, 0.1
A higher value for valence spreads things out more. I don't know of a way to get the dotted notation.
Calculating dihedral angles
The get_dihedral function requires four single-atom selections to work:
get_dihedral prot1///9/C, prot1///10/N, prot1///10/CA, prot1///10/C
Adding hydrogen bonds
Regarding H-bonds. There isn't a built-in function yet, but you can show H-bonds between two objects using atom selections so long as hydrogens are present in both molecules. If you don't have hydrogens, you can use Cmd h_add on the proteins, or provide ligands with valence information and then use h_add.
Two examples are below. For clarity, they draw dashes between the heavy atoms and hide the hydrogens.
# EXAMPLE 1: Show hydrogen bonds between protein
# and docked ligands (which must have hydrogens)
load target.pdb,prot
load docked_ligs.sdf,lig
# add hydrogens to protein
h_add prot
select don, (elem n,o and (neighbor hydro))
select acc, (elem o or (elem n and not (neighbor hydro)))
dist HBA, (lig and acc),(prot and don), 3.2
dist HBD, (lig and don),(prot and acc), 3.2
delete don
delete acc
hide (hydro)
hide labels,HBA
hide labels,HBD
# EXAMPLE 2
# Show hydrogen bonds between two proteins
load prot1.pdb
load prot2.pdb
h_add prot1
h_add prot2
select don, (elem n,o and (neighbor hydro))
select acc, (elem o or (elem n and not (neighbor hydro)))
dist HBA, (prot1 and acc),(prot2 and don), 3.2
dist HBD, (prot1 and don),(prot2 and acc), 3.2
delete don
delete acc
hide (hydro)
hide labels,HBA
hide labels,HBD
# NOTE: that you could also use this approach between two
# non-overlapping selections within a single object.
There is also a script drawing nice hydrogen bonds from Gareth Stockwell
Assign color by B-factor
See section Color for this.
Polar surface area
For a solvent accessible PSA approximation:
set dot_density, 3
remove hydro
remove solvent
show dots
set dot_solvent, on
get_area elem N+O
get_area elem C+S
get_area all
For molecular PSA approximation
set dot_density, 3
remove hydro
remove solvent
set dot_solvent, off
get_area elem N+O
get_area elem C+S
get_area all
Showing dots isn't mandatory, but it's a good idea to confirm that you're getting the value for the atom dot surface you think you're using. Please realize that the resulting numbers are only approximate, reflecting the sum of partial surface areas for all the dots you see. To increase accuracy, set dot_density to 4, but be prepared to wait...
Display solvent accessible surface
Using the surface display mode, PyMOL doesn't show the solvent accessible surface, rather it shows the solvent/protein contact surface. The solvent accessible surface area is usually defined as the surface traced out by the center of a water sphere, having a radius of about 1.4 angstroms, rolled over the protein atoms. The contact surface is the surface traced out by the vdw surfaces of the water atoms when in contact with the protein.
PyMOL can only show solvent accessible surfaces using the dot or sphere representations:
for dots:
show dots
set dot_mode,1
set dot_density,3
for spheres:
alter all,vdw=vdw+1.4
show spheres
Displaying the C-Alpha trace of proteins
hide
show ribbon
set ribbon_sampling,1
And if your model only contains CA atoms, you'll also need to issue:
set ribbon_trace,1
Displaying the Phosphate backbone of nucleic acids
Should you ever want to show the phosphate trace of a nucleic acid molecule:
def p_trace(selection="(all)"):
s = str(selection)
cmd.hide('lines',"("+s+")")
cmd.hide('spheres',"("+s+")")
cmd.hide('sticks',"("+s+")")
cmd.hide('ribbon',"("+s+")")
cmd.show('cartoon',"("+s+")")
cmd.set('cartoon_sampling',1,"("+s+")")
cmd.set('cartoon_tube_radius',0.5,"("+s+")")
cmd.extend('p_trace',p_trace)
and then:
p_trace (selection)
Align proteins with CA fit
If two proteins have significant homology, you can use the Cmd align command:
align prot1////ca,prot2
which will perform a sequence alignment of prot1 against prot2, and then an optimizing fit using the CA positions. I'm not sure if the help text for align got into 0.82, but the next version will definitely have it.