module Bio::PDB::Utils

Utility methods for PDB data. The methods in this mixin should be applicalbe to all PDB objects.

Bio::PDB::Utils is included by Bio::PDB, Bio::PDB::Model, Bio::PDB::Chain, Bio::PDB::Residue, and Bio::PDB::Heterogen classes.

Constants

ElementMass

Returns the coords of the centre of gravity for any AtomFinder implementing object Blleurgh! - working out what element it is from the atom name is tricky - this'll work in most cases but not metals etc… a proper element field is included in some PDB files but not all.

Public Class Methods

acos(x) click to toggle source

acos

    # File lib/bio/db/pdb/utils.rb
168 def acos(x)
169   Math.atan2(Math.sqrt(1 - x**2),x)
170 end
calculatePlane(coord1, coord2, coord3) click to toggle source

calculates plane

    # File lib/bio/db/pdb/utils.rb
174 def calculatePlane(coord1, coord2, coord3)
175   a = coord1.y * (coord2.z - coord3.z) +
176       coord2.y * (coord3.z - coord1.z) + 
177       coord3.y * (coord1.z - coord2.z)
178   b = coord1.z * (coord2.x - coord3.x) +
179       coord2.z * (coord3.x - coord1.x) + 
180       coord3.z * (coord1.x - coord2.x)
181   c = coord1.x * (coord2.y - coord3.y) +
182       coord2.x * (coord3.y - coord1.y) + 
183       coord3.x * (coord1.y - coord2.y)
184   d = -1 *
185       (
186        (coord1.x * (coord2.y * coord3.z - coord3.y * coord2.z)) +
187        (coord2.x * (coord3.y * coord1.z - coord1.y * coord3.z)) +
188        (coord3.x * (coord1.y * coord2.z - coord2.y * coord1.z))
189        )
190 
191   return [a,b,c,d]
192 end
convert_to_xyz(obj) click to toggle source

Implicit conversion into Vector or Bio::PDB::Coordinate

    # File lib/bio/db/pdb/utils.rb
139 def convert_to_xyz(obj)
140   unless obj.is_a?(Vector)
141     begin
142       obj = obj.xyz
143     rescue NameError
144       obj = Vector.elements(obj.to_a)
145     end
146   end
147   obj
148 end
dihedral_angle(coord1, coord2, coord3, coord4) click to toggle source

Calculates dihedral angle.

    # File lib/bio/db/pdb/utils.rb
124 def dihedral_angle(coord1, coord2, coord3, coord4)
125   (a1,b1,c1,d) = calculatePlane(coord1,coord2,coord3)
126   (a2,b2,c2)   = calculatePlane(coord2,coord3,coord4)
127   
128   torsion = acos((a1*a2 + b1*b2 + c1*c2)/(Math.sqrt(a1**2 + b1**2 + c1**2) * Math.sqrt(a2**2 + b2**2 + c2**2)))
129   
130   if ((a1*coord4.x + b1*coord4.y + c1*coord4.z + d) < 0)
131     -torsion
132   else
133     torsion
134   end
135 end
distance(coord1, coord2) click to toggle source

Calculates distance between coord1 and coord2.

    # File lib/bio/db/pdb/utils.rb
116 def distance(coord1, coord2)
117   coord1 = convert_to_xyz(coord1)
118   coord2 = convert_to_xyz(coord2)
119   (coord1 - coord2).r
120 end
rad2deg(r) click to toggle source

radian to degree

    # File lib/bio/db/pdb/utils.rb
162 def rad2deg(r)
163   (r/Math::PI)*180
164 end
to_xyz(obj) click to toggle source

(Deprecated) alias of convert_to_xyz(obj)

    # File lib/bio/db/pdb/utils.rb
152 def self.to_xyz(obj)
153   convert_to_xyz(obj)
154 end

Public Instance Methods

centreOfGravity() click to toggle source

calculates centre of gravitiy

    # File lib/bio/db/pdb/utils.rb
 91 def centreOfGravity()
 92   x = y = z = total = 0
 93   
 94   self.each_atom{ |atom|
 95     element = atom.element[0,1]
 96     mass    = ElementMass[element]
 97     total += mass
 98     x += atom.x * mass
 99     y += atom.y * mass
100     z += atom.z * mass
101   }
102   
103   x = x / total
104   y = y / total
105   z = z / total
106   
107   Coordinate[x,y,z]
108 end
finder(findtype) { |obj| ... } click to toggle source

Every class in the heirarchy implements finder, this takes a class which determines which type of object to find, the associated block is then run in classic .find style.

The method might be deprecated. You'd better using find_XXX directly.

    # File lib/bio/db/pdb/utils.rb
201 def finder(findtype, &block) #:yields: obj
202   if findtype == Bio::PDB::Atom
203     return self.find_atom(&block)
204   elsif findtype == Bio::PDB::Residue
205     return self.find_residue(&block)
206   elsif findtype == Bio::PDB::Chain
207     return self.find_chain(&block)
208   elsif findtype == Bio::PDB::Model
209     return self.find_model(&block)
210   else
211     raise TypeError, "You can't find a #{findtype}"
212   end
213 end
geometricCentre(method = :each_atom) click to toggle source

Returns the coordinates of the geometric centre (average co-ord) of any AtomFinder (or .atoms) implementing object

If you want to get the geometric centre of hetatms, call geometricCentre(:each_hetatm).

   # File lib/bio/db/pdb/utils.rb
59 def geometricCentre(method = :each_atom)
60   x = y = z = count = 0
61   
62   self.__send__(method) do |atom|
63     x += atom.x
64     y += atom.y
65     z += atom.z
66     count += 1
67   end
68   
69   x = (x / count)
70   y = (y / count)
71   z = (z / count)
72  
73   Coordinate[x,y,z]
74 end