mailr8485 - /branches/multi_structure/generic_fns/structure/internal.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on January 15, 2009 - 18:30:
Author: bugman
Date: Thu Jan 15 18:30:08 2009
New Revision: 8485

URL: http://svn.gna.org/viewcvs/relax?rev=8485&view=rev
Log:
The internal PDB reader now has rudimentary support for element determination 
if that column is missing.


Modified:
    branches/multi_structure/generic_fns/structure/internal.py

Modified: branches/multi_structure/generic_fns/structure/internal.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_structure/generic_fns/structure/internal.py?rev=8485&r1=8484&r2=8485&view=diff
==============================================================================
--- branches/multi_structure/generic_fns/structure/internal.py (original)
+++ branches/multi_structure/generic_fns/structure/internal.py Thu Jan 15 
18:30:08 2009
@@ -28,7 +28,7 @@
 import os
 from os import F_OK, access
 from re import search
-from string import split, strip, upper
+from string import digits, split, strip, upper
 from warnings import warn
 
 # relax module imports.
@@ -1321,6 +1321,29 @@
             self.bonded[index2].append(index1)
 
 
+    def __det_pdb_element(self, atom_name):
+        """Try to determine the element from the PDB atom name.
+
+        @param atom_name:   The PDB atom name.
+        @type atom_name:    str
+        @return:            The element name, or None if unsuccessful.
+        @rtype:             str or None
+        """
+
+        # Strip away atom numbering, from the front and end.
+        element = strip(atom_name, digits)
+
+        # Allowed element list.
+        elements = ['H', 'C', 'N', 'O', 'F', 'P']
+
+        # Return the element, if in the list.
+        if element in elements:
+            return element
+
+        # Else, throw a warning.
+        warn(RelaxWarning("Cannot determine the element associated with atom 
'%s'." % atom_name))
+
+
     def fill_object_from_pdb(self, records):
         """Method for generating a complete Structure_container object from 
the given PDB records.
 
@@ -1339,7 +1362,13 @@
 
             # Add the atom.
             if record[0] == 'ATOM' or record[0] == 'HETATM':
-                self.atom_add(pdb_record=record[0], atom_num=record[1], 
atom_name=record[2], res_name=record[4], chain_id=record[5], 
res_num=record[6], pos=[record[8], record[9], record[10]], 
segment_id=record[13], element=record[14])
+                # Attempt at determining the element, if missing.
+                element = record[14]
+                if not element:
+                    element = self.__det_pdb_element(record[2])
+
+                # Add.
+                self.atom_add(pdb_record=record[0], atom_num=record[1], 
atom_name=record[2], res_name=record[4], chain_id=record[5], 
res_num=record[6], pos=[record[8], record[9], record[10]], 
segment_id=record[13], element=element)
 
             # Connect atoms.
             if record[0] == 'CONECT':




Related Messages


Powered by MHonArc, Updated Thu Jan 15 19:00:03 2009