Exemplo n.º 1
0
def torsions_from_atoms(atoms):
    """ Calculate and return phi and psi torsions for each residue. """

    import vector
    import collections

    # The torsions list has the following structure:
    #     torsions = [(phi, psi, residue), ...]

    torsions = []
    RamaInfo = collections.namedtuple('RamaInfo', 'phi psi residue')
    num_residues = len(atoms) // 3 - 2

    try:
        for i in range(1, num_residues):
            v1 = atoms[3 * i - 1].xyz
            v2 = atoms[3 * i + 0].xyz
            v3 = atoms[3 * i + 1].xyz
            v4 = atoms[3 * i + 2].xyz
            v5 = atoms[3 * i + 3].xyz

            phi = vector.torsion(v1, v2, v3, v4)
            psi = vector.torsion(v2, v3, v4, v5)
            residue = atoms[3 * i].residue

            rama_info = RamaInfo(phi, psi, residue)
            torsions.append(rama_info)

    except ZeroDivisionError:
        return []
    
    else:
        return torsions
Exemplo n.º 2
0
#!/usr/bin/env python2

import vector
import math

v1 = [36.886, 53.177, 21.887]
v2 = [38.323, 52.817, 21.996]
v3 = [38.493, 51.553, 22.830]
v4 = [39.483, 50.748, 22.463]

n1 = vector.normalize(v1)
n2 = vector.normalize(v2)

v1 = n1 = 1,2,3
v2 = n2 = 3,4,5

print vector.add(v1, v2)
print vector.subtract(v1, v2)
print vector.normalize(v1)
print vector.dot(n1, n2)
print vector.cross(n1, n2)
print vector.torsion(v1, v2, v3, v4)
Exemplo n.º 3
0
                coordinate = x, y, z
                coordinates.append(coordinate)

# Calculate all the phi and psi torsions.

num_residues = len(coordinates) // 3 - 2

for i in range(1, num_residues):
    v1 = coordinates[3 * i - 1]
    v2 = coordinates[3 * i + 0]
    v3 = coordinates[3 * i + 1]
    v4 = coordinates[3 * i + 2]
    v5 = coordinates[3 * i + 3]

    phi = vector.torsion(v1, v2, v3, v4)
    psi = vector.torsion(v2, v3, v4, v5)

    phis.append(phi)
    psis.append(psi)

# Generate the Ramachandran plot.

pylab.plot(phis, psis, '.')
pylab.xlabel('Phi')
pylab.ylabel('Psi')
pylab.xlim(-180, 180)
pylab.ylim(-180, 180)
pylab.xticks(range(-180, 181, 90))
pylab.yticks(range(-180, 181, 90))
pylab.grid(True)