NAMD Wiki: charmm2namd
#!/usr/bin/python # This script converts a CHARMm psf file to a NAMD (= XPLOR) psf file. # USAGE: charmm2namd psf-file rtf-file # # EPF 04-04-2000 # import sys,struct,os,time if len(sys.argv) < 3: sys.stderr.write ("USAGE: charmm2namd psf-file rtf-file > psf-file\n") sys.stderr.write (" The rtf-file must contain the correct MASS entries for all\n") sys.stderr.write (" atom types present in the psf-file.\n") os._exit(0) psffile = sys.argv[1] rtffile = sys.argv[2] # Read the MASS entries from the rtf-file. f=open(rtffile) buffer = " " potentials = [] while buffer != "": buffer = f.readline() if buffer != "": if buffer[0:4] == "MASS": potentials.append(buffer.split(None,4)) f.close() # Now open the psf file and do the conversion of the potential types. f=open(psffile) buffer = f.readline() # search for the line stating number of title lines while buffer != "" and "!NTITLE" not in buffer: sys.stdout.write(buffer) buffer = f.readline() titlelines = int(buffer[:buffer.find("!NTITLE")]) print '%8d !NTITLE' % (titlelines+1) # The title lines for i in range(titlelines): buffer = f.readline() sys.stdout.write(buffer) # add extra title line print '* Converted to NAMD format using '+rtffile+' on '+time.ctime(time.time()) # search for the line stating number of atoms while buffer != "" and "!NATOM" not in buffer: buffer = f.readline() sys.stdout.write(buffer) numofatoms = float(buffer[:buffer.find("!NATOM")]) j = 0; while buffer != "": buffer = f.readline() if buffer != "" and j < numofatoms: line = buffer.split(None) # now search through potential list oldpot = line[5] for p in potentials: if p[1] == line[5]: line[5] = p[2]
if oldpot == line[5]: sys.stderr.write('\nFatal error: no potential for atom type '+oldpot+'\n\n') os._exit(0) linetuple=(int(line[0]),line[1],line[2],line[3],line[4],line[5],float(line[6]),float(line[7]),int(line[8])) psfline = ' %5d %-4s %-4s %-4s %-4s %4s %9.6f %8.4f %d' % linetuple print psfline j += 1 else: sys.stdout.write(buffer) f.close() sys.stderr.write('\nConverted '+str(j)+' atoms.\n\n')