NAMD Wiki: dsv-crd2pdb

  You are encouraged to improve NamdWiki by adding content, correcting errors, or removing spam.

#!/usr/bin/python

# This script converts a Discovery Studio crd file to a PDB file. 
#
# EPF 25-09-2007
#

import sys,struct,os

if len(sys.argv) < 2:
  print "usage: crd2pdb crd-file > pdb-file"
  os._exit(0)

crdfile = sys.argv[1]


f=open(crdfile) 


print 'REMARK   Converted from '+crdfile

buffer = f.readline()
while buffer[0:1] == "*":
  buffer = f.readline()  
 
numofatoms = float(buffer[0:11])
j = 0
m = 0
atomnr = 0

while buffer != "":
  buffer = f.readline()
  if buffer != "":
    atomnr   = int(buffer[0:m+10]) 
    resnr    = int(buffer[m+11:m+20]) 
    residue  = buffer[m+22:m+26] 
    atom     = buffer[m+32:m+36] 
    x        = float(buffer[m+45:m+60]) 
    y        = float(buffer[m+65:m+80]) 
    z        = float(buffer[m+80:m+100]) 
    segment  = buffer[m+102:m+106]
    reschain = buffer[m+108:m+113]         
    bfactor  = float(buffer[m+126:m+140])  

    if reschain[0:1].isalpha():
      chain = reschain[0:1]
    else:
      chain = " "

    if resnr<10000:
      atomdata =(atomnr,atom,residue,chain,resnr,x,y,z,0.0,bfactor) 
      pdbline = 'ATOM %6i  %3s%4s%c%4i    %8.3f%8.3f%8.3f%6.2f%6.2f' % atomdata 
    else:
      atomdata =(atomnr,atom,residue,resnr,x,y,z,0.0,bfactor) 
      pdbline = 'ATOM %6i  %3s%4s%5i    %8.3f%8.3f%8.3f%6.2f%6.2f' % atomdata 

    print pdbline

    j += 1

    if atomnr == 99999:
      m = 1  


print "REMARK There are %s atoms in this file" % j
if j != numofatoms:
   print "REMARK Actual number of atoms does not match the number given in crd file (%s)" % numofatoms