[cctbxbb] Phi-Psi Angles

Oleg Sobolev osobolev at lbl.gov
Mon Sep 21 09:49:02 PDT 2015


Hi Nicholas,

First, the most basic way to calculate torsion (dihedral) angle for 4 given
atoms is:
from scitbx.math import dihedral_angle
angle = dihedral_angle(sites=[(1,0,0), (0,0,0), (0,1,0), (1,1,0)], deg=True)
where 'sites' contain atom coordinates.

Second, here is more high-level way to get phi-psi angles:
  from mmtbx.conformation_dependent_library import generate_protein_threes
  pdb_h = iotbx.pdb.hierarchy.input(file_name=args[0]).hierarchy
  sites_cart = pdb_h.atoms().extract_xyz()
  # Note that this is a generator
  for three in generate_protein_threes(
          hierarchy=pdb_h,
          geometry=None):
    proxies = three.get_dummy_dihedral_proxies()
    for p in proxies:
      print "angle=", dihedral_angle(
          sites=[sites_cart[x] for x in p.i_seqs],
          deg=True)

Third, to get all proxies, use this function with hierarchy:
  from mmtbx.geometry_restraints.torsion_restraints.utils import \
      get_complete_dihedral_proxies
  dih_proxies = get_complete_dihedral_proxies(
      pdb_hierarchy=pdb_h)

Hope this helps, full script is below and attached (run with pdb file as
the only argument).

Best regards,
Oleg Sobolev.

import sys
from scitbx.math import dihedral_angle
import iotbx.pdb
import os.path

def basics():
  print "Basics:"
  angle = dihedral_angle(sites=[(1,0,0), (0,0,0), (0,1,0), (1,1,0)],
deg=True)
  print "Angle:", angle
  angle = dihedral_angle(sites=[(2,1,1), (0,0,0), (0,1,0), (1,1,0)],
deg=True)
  print "Angle in degrees:", angle
  angle = dihedral_angle(sites=[(2,1,1), (0,0,0), (0,1,0), (1,1,0)],
deg=False)
  print "Angle in radians:", angle
  print "="*50

def advanced(args):
  print "Advanced phi-psi:"
  if len(args) != 1 or not os.path.isfile(args[0]):
    print "Bad argument"
    return

  # phi-psi angles
  from mmtbx.conformation_dependent_library import generate_protein_threes
  pdb_h = iotbx.pdb.hierarchy.input(file_name=args[0]).hierarchy
  sites_cart = pdb_h.atoms().extract_xyz()
  n_proxies = 0
  # Note that this is a generator
  for three in generate_protein_threes(
          hierarchy=pdb_h,
          geometry=None):
    proxies = three.get_dummy_dihedral_proxies()
    for p in proxies:
      for i_seq in p.i_seqs:
        print pdb_h.atoms()[i_seq].id_str(),
      print "angle=", dihedral_angle(
          sites=[sites_cart[x] for x in p.i_seqs],
          deg=True)
      n_proxies += 1
  print "Total angles:", n_proxies


def all_dihedral_proxies(args):
  print "Advanced all:"
  if len(args) != 1 or not os.path.isfile(args[0]):
    print "Bad argument"
    return
  # all angles:
  from mmtbx.geometry_restraints.torsion_restraints.utils import \
      get_complete_dihedral_proxies

  pdb_h = iotbx.pdb.hierarchy.input(file_name=args[0]).hierarchy
  sites_cart = pdb_h.atoms().extract_xyz()
  dih_proxies = get_complete_dihedral_proxies(
      pdb_hierarchy=pdb_h)
  for p in dih_proxies:
    for i_seq in p.i_seqs:
      print pdb_h.atoms()[i_seq].id_str(),
    print "angle=", dihedral_angle(
        sites=[sites_cart[x] for x in p.i_seqs],
        deg=True)
  print "Total angles:", dih_proxies.size()

def run(args):
  basics()
  advanced(args)
  all_dihedral_proxies(args)

if (__name__ == "__main__"):
  run(sys.argv[1:])



On Sun, Sep 20, 2015 at 3:30 PM, Nicholas Pearce <
nicholas.pearce at stx.ox.ac.uk> wrote:

> Hi Everyone,
>
> Phenomenally stupid question, but is there an easy way to calculate
> phi-psi angles for a protein using cctbx? And, following on from that,
> Chi-1, Chi-2 etc angles?
>
> I’ve had a poke around, but couldn’t find any obvious (at least to me) way
> that worked…
>
> I presume this must be implemented rigorously somewhere, and I didn’t want
> to waste time reimplementing the wheel.
>
> Thanks,
> Nick
> _______________________________________________
> cctbxbb mailing list
> cctbxbb at phenix-online.org
> http://phenix-online.org/mailman/listinfo/cctbxbb
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://phenix-online.org/pipermail/cctbxbb/attachments/20150921/72fca10b/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dihedral_examples.py
Type: text/x-python-script
Size: 2068 bytes
Desc: not available
URL: <http://phenix-online.org/pipermail/cctbxbb/attachments/20150921/72fca10b/attachment.bin>


More information about the cctbxbb mailing list