def get_origin_translation(asu_prmtop_file_name, asu_rst7_file_name): rst7 = raf.rst7(asu_rst7_file_name) coords = rst7.Get_Coords() UCbox = rst7.Get_Box() u,invu = raf.CompXfrm(UCbox) masses = raf.prmtop(asu_prmtop_file_name).Get_Masses() com = raf.COM(coords,masses) frac_com = dot(u, com) origin_translation = array([0.5, 0.5, 0.5]) - frac_com return u, origin_translation
def get_origin_translation(asu_prmtop_file_name, asu_rst7_file_name): rst7 = raf.rst7(asu_rst7_file_name) coords = rst7.Get_Coords() UCbox = rst7.Get_Box() u, invu = raf.CompXfrm(UCbox) masses = raf.prmtop(asu_prmtop_file_name).Get_Masses() com = raf.COM(coords, masses) frac_com = dot(u, com) origin_translation = array([0.5, 0.5, 0.5]) - frac_com return u, origin_translation
def center_frac_coords(frac_crds, parm, s, e): coords = frac_crds[s:e, :] masses = parm.parm_data['MASS'][s:e] com = raf.COM(coords, masses) shift = array([0.5, 0.5, 0.5]) - com cntred_frac_crds = frac_crds + shift return cntred_frac_crds
def run(nmodes, ipdb_name, ievecs_name, ofile_name): #Get info from pdb ipdb=raf.pdb(ipdb_name) name=ipdb_name.rstrip('.pdb') atomnames=ipdb.Get_AtomNames() resnames=ipdb.Get_ResidueNames() resids=ipdb.Get_ResidueNumbers() bfactors=ipdb.Get_Bfactors() coordinates=ipdb.Get_Coords() #Write info from pdb to nmd file ofile=open(ofile_name, 'w') ofile.write('nmwiz_load %s\n' %ofile_name) print('name %s' %name, file=ofile) print('atomnames ', end="",file=ofile) print (*atomnames, file=ofile) print('resnames ', end="",file=ofile) print (*resnames, file=ofile) print('resids ', end="",file=ofile) print (*resids, file=ofile) print('bfactors ', end="",file=ofile) print (*bfactors, file=ofile) print('coordinates ', end="", file=ofile) print(*["%8.3f " %xyz for atom in coordinates for xyz in atom], end="", file=ofile) #This would've been the python2.x way of doing it: #~ for atom in coordinates: #~ for coordinate in atom: #~ ofile.write("%8.3f " %coordinate) print ('', file=ofile) #Get modes from evecs file and write to nmd file vecfile=open(ievecs_name, 'r') line='' while line[0:5]!=' ****': line=vecfile.readline() for i in range(nmodes): mode_number, freq=vecfile.readline().strip().split() assert int(mode_number)== i+1 mode=[] line=vecfile.readline() while line[0:5]!=' ****': for i in line.strip().split(): mode.append(float(i)) line=vecfile.readline() amplitude=(1/float(freq)) print('mode %2d %12.10f ' %(int(mode_number), amplitude), end="", file=ofile) print(*["%12.5f " %fluc for fluc in mode], end="", file=ofile) print ('', file=ofile) vecfile.close()
#! /usr/bin/python import ReadAmberFiles as raf apdb=raf.pdb('vAla3_minimized.pdb') box=apdb.Get_Box() coords=apdb.Get_Coords() natoms=natoms= len(apdb.ATOMlines) raf.printrst7(coords, box, natoms, 'vAla3_minimized.rst7', comment='rst7 written by pawel')
Rf = zeros((numops, 3, 3)) Tf = zeros((numops, 3)) op = 0 for line in symops.splitlines(): line = line.split('\'')[-1].split() for i in range(3): for j in range(3): Rf[op][i][j] = line[i * 3 + j + 1] try: Tf[op][i] = float(line[((i * 2) - 1 + 11)]) / float(line[( (i * 2) + 11)]) except ZeroDivisionError: Tf[op][i] = 0.0 op += 1 pdbf = raf.pdb(pdbfile) box = pdbf.Get_Box() u, invu = raf.CompXfrm(box) print "================================" Tc = zeros(shape(Tf)) for i in range(numops): Tc[i] = dot(invu, Tf[i]).astype(float32) #~ print Tc print "================================" Rc = zeros(shape(Rf)) for i in range(numops): Rc[i] = dot(dot(invu, Rf[i]), u) #~ print Rc print "================================"
#! /usr/bin/env python import ReadAmberFiles as raf iprmtop=raf.prmtop('/net/casegroup2/u2/pjanowsk/Case/4lzt/4lzt_ff12SB/4lztSh_new.prmtop') masses=iprmtop.Get_Masses() totalmass=sum(masses) irst7=raf.rst7('/net/casegroup2/u2/pjanowsk/Case/4lzt/4lzt_ff12SB/4lztSh.rst7') box=irst7.Get_Box() volume=raf.Get_volume(box) density= totalmass/volume*10/6.022 print "density: %8.3f g/cm^3" %density
numops=len(symops.splitlines()) Rf=zeros((numops,3,3)) Tf=zeros((numops,3)) op=0 for line in symops.splitlines(): line=line.split('\'')[-1].split() for i in range(3): for j in range(3): Rf[op][i][j]=line[i*3+j+1] try: Tf[op][i]=float(line[((i*2)-1+11)])/float(line[((i*2)+11)]) except ZeroDivisionError: Tf[op][i]=0.0 op+=1 pdbf=raf.pdb(pdbfile) box=pdbf.Get_Box() print box, type(box) u,invu=raf.CompXfrm(box) print "================================" Tc=zeros(shape(Tf)) for i in range(numops): Tc[i]=dot(invu,Tf[i]).astype(float32) #~ print Tc print "================================" Rc=zeros(shape(Rf)) for i in range(numops): Rc[i]=dot(dot(invu,Rf[i]),u)
def NAsu(pdbfile_name): pdbfile = RAF.pdb(pdbfile_name) smtry, tr = pdbfile.Get_SMTRY() n_asu = len(smtry) return n_asu
#mass-weighted covariance matrix is already calculated cv=genfromtxt('mwcvmat.dat') l,v=linalg.eig(cv) s=argsort(l)[::-1] #convert eigenvalues to frequencies in cm-1 f=zeros((nmodes)) for i in range(len(l)): if l[i]<0: f[i]= -108.587*sqrt(-0.6/l[i]) elif l[i]>0: f[i]= 108.587*sqrt(0.6/l[i]) else: f[i]=0 l[s] v[:,s] #sort columns #get masses and un-mass weigh the modes m=raf.prmtop("na.prmtop").Get_Masses() m=[[i]*3 for i in m] m=[item for sublist in m for item in sublist] for vec in range(v.shape[1]): v[:,vec]=v[:,vec]/sqrt(m) #calculate rmsf fluctuations along modes CNST=2.776904e-11 #tkbc2*avogadro's CONT=1.591549e+07 #(ang/cm / 2pi) for atom in range(natoms): sum, sumx, sumy, sumz=0,0,0,0 for mode in range(nmodes):
#~ if line.strip(): #~ fails.append( line.strip().split('/')[0] ) fails=['1a21', '1a8v', '1ba7', '1c03', '1dvm', '1ezs', '1f3u', '1fc3', '1fh5', '1jxo', '1ofp', '1oy3', '1q32', '1q4o', '1r19', '1r1z', '1r52', '1rzi', '1t0j', '1tee', '1tks', '1tw9', '1tzo', '1vh0', '1vr4', '1w3b', '1wp7', '1wp8', '1x13'] dirs=[ name for name in os.listdir('.') if os.path.isdir(name) and name[0]=='1' ] bad=[] good=[] for dir in dirs: if dir in fails: print dir trst=raf.rst7('%s/%s.rst7' %(dir,dir)) box=trst.Get_Box() bad.append( raf.Get_volume(box) ) else: print dir trst=raf.rst7('%s/%s.rst7' %(dir,dir)) box=trst.Get_Box() good.append( raf.Get_volume(box) ) print "BAD: mean %1.0f\n" %(np.mean(bad)) for v in bad: print "%d\n" %v print "\n" print "GOOD: mean %1.0f\n" %(np.mean(good))
#! /usr/bin/python import ReadAmberFiles as raf import argparse parser = argparse.ArgumentParser() parser.add_argument("pdbfile", help="name of pdb file") args = parser.parse_args() pdb = raf.pdb(args.pdbfile) box = pdb.Get_Box() print(" %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f " % (box[0], box[1], box[2], box[3], box[4], box[5]))
# mass aligns with the experimental center of mass. # # # #======================================================================# parser = argparse.ArgumentParser() parser.add_argument("-p", "--AsuTopology", help="Amber single ASU topology file") parser.add_argument("-pdb", "--AsuPDB", help="Single ASU PDB file") parser.add_argument("-pdbs", "--PdbWithSymmetry", help="PDB file containing SMTRY and CRYST1 records") parser.add_argument("-prop", help="Propagation used to create the supercell. Format: \"x y z\"") args = parser.parse_args() ############################################ # SETUP # ############################################ topo = raf.prmtop(args.AsuTopology) pdb = raf.pdb(args.AsuPDB) masses=topo.Get_Masses() xtal_com=raf.COM(pdb.Get_Coords(),masses) ix=int(args.prop.split()[0]) iy=int(args.prop.split()[1]) iz=int(args.prop.split()[2]) pdbs = raf.pdb(args.PdbWithSymmetry) smtry,tr =pdbs.Get_SMTRY() asymunits=len(smtry) ########################################### # MAIN # ########################################### i=1 #counter for the names of the unitcell trajectories
fails = [ '1a21', '1a8v', '1ba7', '1c03', '1dvm', '1ezs', '1f3u', '1fc3', '1fh5', '1jxo', '1ofp', '1oy3', '1q32', '1q4o', '1r19', '1r1z', '1r52', '1rzi', '1t0j', '1tee', '1tks', '1tw9', '1tzo', '1vh0', '1vr4', '1w3b', '1wp7', '1wp8', '1x13' ] dirs = [ name for name in os.listdir('.') if os.path.isdir(name) and name[0] == '1' ] bad = [] good = [] for dir in dirs: if dir in fails: print dir trst = raf.rst7('%s/%s.rst7' % (dir, dir)) box = trst.Get_Box() bad.append(raf.Get_volume(box)) else: print dir trst = raf.rst7('%s/%s.rst7' % (dir, dir)) box = trst.Get_Box() good.append(raf.Get_volume(box)) print "BAD: mean %1.0f\n" % (np.mean(bad)) for v in bad: print "%d\n" % v print "\n" print "GOOD: mean %1.0f\n" % (np.mean(good))
def GenNM(obj, nmids, mode, inp=None, amp=50., nframes=20, dump_file=False, \ prmtop=None): nmids=[int(i) for i in nmids.split()] amp = float(amp) nframes=int(nframes) mode=int(mode) stored.NMA = {} stored.NMA[obj] = {} if mode==1: if not inp: print "Please specify cpptraj covariance matrix file" return 0 if (not prmtop): print "Please specify prmtop file for proper mass reweighing of vectors." return 0 print "Attempting to read mwcov matrix %s" %inp mwcvmat=genfromtxt(inp) print "Diagonalizing covariance matrix." w,v = linalg.eig(mwcvmat) #sort from largest eigenvvalue to smallest si=argsort(w)[::-1] w=w[si] v=v[:,si] #convert to cm-1 for i in range(len(w)): if w[i]<0: w[i]= -108.587*sqrt(-0.6/w[i]) elif w[i]>0: w[i]= 108.587*sqrt(0.6/w[i]) else: w[i]=0 #get masses and un-mass weigh the modes m=raf.prmtop(prmtop).Get_Masses() m=[[i]*3 for i in m] m=[item for sublist in m for item in sublist] for vec in range(v.shape[1]): v[:,vec]=v[:,vec]/sqrt(m) #store stored.NMA[obj]['w'] = w stored.NMA[obj]['v'] = v elif mode==2: if not inp: print "Please specify evecs frequency/eigenvector file" return 0 print "Attempting to read evecs file %s" %inp stored.NMA[obj]['w'], stored.NMA[obj]['v'] = ReadEvecs(inp) elif mode==3: if not inp: print "Please specify pickled normal mode object" return 0 print "Attempting to read pickle file %s" %inp stored.NMA[obj]=pickle.load( open(inp,"rb")) if dump_file: print "Dumping eigenvalues and modes to pickle file." pickle.dump(stored.NMA[obj], open(dump_file,"wb") ) w = stored.NMA[obj]['w'] v = stored.NMA[obj]['v'] print "%7s%20s%20s" % ('NMID', 'f Hz', 'f cm^-1') for i in range(min(w.size,20)): print "%7d%20.5e\t%20.5f" % (i, w[i]*2.99792458e10, w[i]), if i in nmids: print "*" else: print "" for nmid in nmids: newobj = "%s-nm_%d" % (obj, nmid) cmd.delete(newobj) nm = real(v[:,nmid]) nm *= amp/sqrt((nm**2).sum()) for ifr in range(nframes): cmd.create(newobj, obj, 1, ifr+1) stored.nm = nm*sin(2.*pi*ifr/nframes) cmd.alter_state(ifr+1, newobj, "x,y,z = x+stored.nm[(ID-1)*3], y+stored.nm[(ID-1)*3+1], z+stored.nm[(ID-1)*3+2]")
def get_U_invU(asu_rst7_file_name): rst7 = Rst7.open(asu_rst7_file_name) UCbox = rst7.box U, invU = raf.CompXfrm(UCbox) return U, invU, UCbox