mailr11028 - in /1.3: generic_fns/structure/ test_suite/shared_data/diffusion_tensor/ test_suite/shared_data/structures/diff_ten...


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

Header


Content

Posted by edward on March 19, 2010 - 10:58:
Author: bugman
Date: Fri Mar 19 10:58:07 2010
New Revision: 11028

URL: http://svn.gna.org/viewcvs/relax?rev=11028&view=rev
Log:
Fix for the internal structural object PDB writing.

The PDB format was not being followed correctly!  The TER record comes after 
ATOM records but before
HETATM records.  It is not needed if there are no ATOM records.


Modified:
    1.3/generic_fns/structure/internal.py
    1.3/test_suite/shared_data/diffusion_tensor/uniform.pdb
    1.3/test_suite/shared_data/structures/diff_tensors/ellipsoid.pdb
    1.3/test_suite/shared_data/structures/diff_tensors/sphere.pdb
    1.3/test_suite/shared_data/structures/diff_tensors/spheroid.pdb

Modified: 1.3/generic_fns/structure/internal.py
URL: 
http://svn.gna.org/viewcvs/relax/1.3/generic_fns/structure/internal.py?rev=11028&r1=11027&r2=11028&view=diff
==============================================================================
--- 1.3/generic_fns/structure/internal.py (original)
+++ 1.3/generic_fns/structure/internal.py Fri Mar 19 10:58:07 2010
@@ -349,6 +349,41 @@
         # Check the other lengths.
         if len(struct.bonded) != num and len(struct.chain_id) != num and 
len(struct.element) != num and len(struct.pdb_record) != num and 
len(struct.res_name) != num and len(struct.res_num) != num and 
len(struct.seg_id) != num and len(struct.x) != num and len(struct.y) != num 
and len(struct.z) != num:
             raise RelaxError("The structural data is invalid.")
+
+
+    def _translate(self, data, format='str'):
+        """Convert the data into a format for writing to file.
+
+        @param data:        The data to convert to the required format.
+        @type data:         anything
+        @keyword format:    The format to convert to.  This can be 'str', 
'float', or 'int'.
+        @type format:       str
+        @return:            The converted version of the data.
+        @rtype:             str
+        """
+
+        # Conversion to string.
+        if format == 'str':
+            # None values.
+            if data == None:
+                data = ''
+    
+            # Force convert to string.
+            if not isinstance(data, str):
+                data = repr(data)
+    
+        # Conversion to float.
+        if format == 'float':
+            # None values.
+            if data == None:
+                data = 0.0
+    
+            # Force convert to float.
+            if not isinstance(data, float):
+                data = float(data)
+
+         # Return the converted data.
+        return data
 
 
     def atom_loop(self, atom_id=None, str_id=None, model_num_flag=False, 
mol_name_flag=False, res_num_flag=False, res_name_flag=False, 
atom_num_flag=False, atom_name_flag=False, element_flag=False, 
pos_flag=False, ave=False):
@@ -909,52 +944,25 @@
                 print("ATOM, HETATM, TER")
 
                 # Loop over the atomic data.
+                atom_record = False
                 for i in xrange(len(mol.atom_name)):
-                    # Aliases.
-                    atom_num = mol.atom_num[i]
-                    atom_name = mol.atom_name[i]
-                    res_name = mol.res_name[i]
-                    chain_id = mol.chain_id[i]
-                    res_num = mol.res_num[i]
-                    x = mol.x[i]
-                    y = mol.y[i]
-                    z = mol.z[i]
-                    seg_id = mol.seg_id[i]
-                    element = mol.element[i]
-
-                    # Replace None with ''.
-                    if atom_name == None:
-                        atom_name = ''
-                    if res_name == None:
-                        res_name = ''
-                    if chain_id == None:
-                        chain_id = ''
-                    if res_num == None:
-                        res_num = ''
-                    if x == None:
-                        x = ''
-                    if y == None:
-                        y = ''
-                    if z == None:
-                        z = ''
-                    if seg_id == None:
-                        seg_id = ''
-                    if element == None:
-                        element = ''
-
                     # Write the ATOM record.
                     if mol.pdb_record[i] == 'ATOM':
-                        file.write("%-6s%5s %4s%1s%3s %1s%4s%1s   
%8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s%2s\n" % ('ATOM', atom_num, atom_name, 
'', res_name, chain_id, res_num, '', x, y, z, 1.0, 0, seg_id, element, ''))
+                        atom_record = True
+                        file.write("%-6s%5s %4s%1s%3s %1s%4s%1s   
%8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s%2s\n" % ('ATOM', mol.atom_num[i], 
self._translate(mol.atom_name[i]), '', self._translate(mol.res_name[i]), 
self._translate(mol.chain_id[i]), self._translate(mol.res_num[i]), '', 
self._translate(mol.x[i], 'float'), self._translate(mol.y[i], 'float'), 
self._translate(mol.z[i], 'float'), 1.0, 0, self._translate(mol.seg_id[i]), 
self._translate(mol.element[i]), ''))
                         num_atom = num_atom + 1
 
+                # Finish the ATOM section with the TER record.
+                if atom_record:
+                    file.write("%-6s%5s      %3s %1s%4s%1s\n" % ('TER', 
num_atom+1, self._translate(mol.res_name[i]), 
self._translate(mol.chain_id[i]), self._translate(mol.res_num[i]), ''))
+                    num_ter = num_ter + 1
+
+                # Loop over the atomic data.
+                for i in xrange(len(mol.atom_name)):
                     # Write the HETATM record.
                     if mol.pdb_record[i] == 'HETATM':
-                        file.write("%-6s%5s %4s%1s%3s %1s%4s%1s   
%8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s%2s\n" % ('HETATM', atom_num, atom_name, 
'', res_name, chain_id, res_num, '', x, y, z, 1.0, 0, seg_id, element, ''))
+                        file.write("%-6s%5s %4s%1s%3s %1s%4s%1s   
%8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s%2s\n" % ('HETATM', mol.atom_num[i], 
self._translate(mol.atom_name[i]), '', self._translate(mol.res_name[i]), 
self._translate(mol.chain_id[i]), self._translate(mol.res_num[i]), '', 
self._translate(mol.x[i], 'float'), self._translate(mol.y[i], 'float'), 
self._translate(mol.z[i], 'float'), 1.0, 0, self._translate(mol.seg_id[i]), 
self._translate(mol.element[i]), ''))
                         num_hetatm = num_hetatm + 1
-
-                # Finish off with the TER record.
-                file.write("%-6s%5s      %3s %1s%4s%1s\n" % ('TER', 
atom_num+1, res_name, chain_id, res_num, ''))
-                num_ter = num_ter + 1
 
 
             # ENDMDL record, for multiple structures.

Modified: 1.3/test_suite/shared_data/diffusion_tensor/uniform.pdb
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/shared_data/diffusion_tensor/uniform.pdb?rev=11028&r1=11027&r2=11028&view=diff
==============================================================================
--- 1.3/test_suite/shared_data/diffusion_tensor/uniform.pdb (original)
+++ 1.3/test_suite/shared_data/diffusion_tensor/uniform.pdb Fri Mar 19 
10:58:07 2010
@@ -146,7 +146,6 @@
 HETATM   94    H  NH    47       0.390   0.256  -0.907  1.00  0.00           
H  
 HETATM   95    N  NH    48       0.000   0.000   0.000  1.00  0.00           
N  
 HETATM   96    H  NH    48       0.501   0.780  -0.424  1.00  0.00           
H  
-TER      97       NH    48 
 CONECT    1    2                                             
 CONECT    2    1                                             
 CONECT    3    4                                             
@@ -243,5 +242,5 @@
 CONECT   94   93                                             
 CONECT   95   96                                             
 CONECT   96   95                                             
-MASTER        0    0   48    0    0    0    0    0   96    1   96    0
+MASTER        0    0   48    0    0    0    0    0   96    0   96    0
 END

Modified: 1.3/test_suite/shared_data/structures/diff_tensors/ellipsoid.pdb
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/shared_data/structures/diff_tensors/ellipsoid.pdb?rev=11028&r1=11027&r2=11028&view=diff
==============================================================================
--- 1.3/test_suite/shared_data/structures/diff_tensors/ellipsoid.pdb 
(original)
+++ 1.3/test_suite/shared_data/structures/diff_tensors/ellipsoid.pdb Fri Mar 
19 10:58:07 2010
@@ -312,7 +312,6 @@
 HETATM  284   Dz SIM A  17      12.266  53.751 -21.178  1.00  0.00           
C  
 HETATM  285   Dz SIM A  18      -2.208 -43.113  12.070  1.00  0.00           
C  
 HETATM  286   Dz SIM A  18      11.473  54.226 -19.868  1.00  0.00           
C  
-TER     287      SIM A  18 
 CONECT    2    3   14  230                                   
 CONECT    3    2    4   15  231                              
 CONECT    4    3    5   16  232                              
@@ -598,5 +597,5 @@
 CONECT  284  272                                             
 CONECT  285  272                                             
 CONECT  286  272                                             
-MASTER        0    0   18    0    0    0    0    0  286    1  285    0
+MASTER        0    0   18    0    0    0    0    0  286    0  285    0
 END

Modified: 1.3/test_suite/shared_data/structures/diff_tensors/sphere.pdb
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/shared_data/structures/diff_tensors/sphere.pdb?rev=11028&r1=11027&r2=11028&view=diff
==============================================================================
--- 1.3/test_suite/shared_data/structures/diff_tensors/sphere.pdb (original)
+++ 1.3/test_suite/shared_data/structures/diff_tensors/sphere.pdb Fri Mar 19 
10:58:07 2010
@@ -247,7 +247,6 @@
 HETATM  239 H239 TNS A   2      25.008  -1.064  17.101  1.00  0.00           
H  
 HETATM  240 H240 TNS A   2      17.069   1.516  23.101  1.00  0.00           
H  
 HETATM  241 H241 TNS A   2       4.632   5.557  26.101  1.00  0.00           
H  
-TER     242      TNS A   2 
 CONECT    2    3   14  230                                   
 CONECT    3    2    4   15  231                              
 CONECT    4    3    5   16  232                              
@@ -488,5 +487,5 @@
 CONECT  239  238  227   11  240                              
 CONECT  240  239  228   12  241                              
 CONECT  241  240  229   13                                   
-MASTER        0    0    2    0    0    0    0    0  241    1  240    0
+MASTER        0    0    2    0    0    0    0    0  241    0  240    0
 END

Modified: 1.3/test_suite/shared_data/structures/diff_tensors/spheroid.pdb
URL: 
http://svn.gna.org/viewcvs/relax/1.3/test_suite/shared_data/structures/diff_tensors/spheroid.pdb?rev=11028&r1=11027&r2=11028&view=diff
==============================================================================
--- 1.3/test_suite/shared_data/structures/diff_tensors/spheroid.pdb (original)
+++ 1.3/test_suite/shared_data/structures/diff_tensors/spheroid.pdb Fri Mar 
19 10:58:07 2010
@@ -272,7 +272,6 @@
 HETATM  254 Dpar SIM A   7      46.793  -9.433  -4.830  1.00  0.00           
C  
 HETATM  255 Dpar SIM A   8     -36.166  15.610  -0.919  1.00  0.00           
C  
 HETATM  256 Dpar SIM A   8      45.431  -4.496  -6.879  1.00  0.00           
C  
-TER     257      SIM A   8 
 CONECT    2    3   14  230                                   
 CONECT    3    2    4   15  231                              
 CONECT    4    3    5   16  232                              
@@ -528,5 +527,5 @@
 CONECT  254  242                                             
 CONECT  255  242                                             
 CONECT  256  242                                             
-MASTER        0    0    8    0    0    0    0    0  256    1  255    0
+MASTER        0    0    8    0    0    0    0    0  256    0  255    0
 END




Related Messages


Powered by MHonArc, Updated Fri Mar 19 11:20:02 2010