def create_esp_surfaces(Molecule): Rads = [VdW99[i] for i in Molecule.elem] #xyz = Molecule.xyzs[0] na = Molecule.na printxyz=True np.set_printoptions(precision=10, linewidth=120) # Pass 1: This will determine the number of ESP points. num_esp = [] for i, xyz in enumerate(Molecule.xyzs): print("Generating grid points for snapshot %i\r" % i) num_esp_shell = [] for j in [1.4, 1.6, 1.8, 2.0]: Radii = list(np.array(Rads)*j) vfloat = drive_msms(xyz, Radii, 20.0/j) if len(vfloat) < na: warn_press_key("I generated less ESP points than atoms!") num_esp_shell.append(len(vfloat)) num_esp.append(num_esp_shell) num_esp = np.array(num_esp) num_pts = np.amin(num_esp,axis=0) / 100 print("Number of points: ", num_pts) input() # We do not store. # Pass 2: This will actually print out the ESP grids. Mol_ESP = [] for i, xyz in enumerate(Molecule.xyzs): esp_pts = [] for sh, j in enumerate([1.4, 1.6, 1.8, 2.0]): Radii = list(np.array(Rads)*j) vfloat = drive_msms(xyz, Radii, 20.0/j) # print "Calling MSMS" # MS = MSMS(coords = list(xyz), radii = Radii) # print "Computing" # MS.compute(density=20.0/j) # print "Getting triangles" # vfloat, vint, tri = MS.getTriangles() # #vfloat = vfloat_shell[sh] a = list(range(len(vfloat))) random.shuffle(a) # We'll be careful and generate lots of ESP points, mm. # But we can't have a different number of points per snapshots, mm. for idx in a[:num_pts[sh]]: esp_pts.append(vfloat[idx][:3]) if printxyz: Out = [] Out.append("%i" % (len(xyz) + len(esp_pts))) Out.append("Molecule plus ESP points (heliums)") for j, x in enumerate(xyz): Out.append(format_xyz_coord(Molecule.elem[j], x)) for esp_pt in esp_pts: Out.append(format_xyz_coord('He',esp_pt)) fout = open('molecule_esp.xyz','w' if i == 0 else 'a') for line in Out: print(line, file=fout) fout.close() Mol_ESP.append(esp_pts) return Mol_ESP
def create_esp_surfaces(Molecule): from forcebalance.mslib import MSMS Rads = [VdW99[i] for i in Molecule.elem] #xyz = Molecule.xyzs[0] na = Molecule.na Mol_ESP = [] printxyz=0 for i, xyz in enumerate(Molecule.xyzs): print "Generating grid points for snapshot %i\r" % i esp_pts = [] for j in [1.4, 1.6, 1.8, 2.0]: MS = MSMS(coords = list(xyz), radii = list(np.array(Rads)*j)) MS.compute(density=0.5) vfloat, vint, tri = MS.getTriangles() a = range(len(vfloat)) random.shuffle(a) if len(vfloat) < na: warn_press_key("I generated less ESP points than atoms!") for idx in a[:na]: esp_pts.append(vfloat[idx][:3]) if printxyz: Out = [] Out.append("%i" % (len(xyz) + len(esp_pts))) Out.append("Molecule plus ESP points") for j, x in enumerate(xyz): Out.append(format_xyz_coord(Molecule.elem[j], x)) for esp_pt in esp_pts: Out.append(format_xyz_coord('chg',esp_pt)) fout = open('Mao.xyz','w') for line in Out: print >> fout, line fout.close() sys.exit(1) Mol_ESP.append(esp_pts) return Mol_ESP