def opt1(): gaussian.job( filetypes.parse_xyz('xyz/3_2_2_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_both_3_2_2_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_1_2_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_both_3_1_2_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_3_1_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_both_3_3_1_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_2_2_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_n_3_2_2_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_1_2_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_n_3_1_2_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_2_2_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_i_3_2_2_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_1_2_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_i_3_1_2_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_3_1_dmf_dma_pbi2_7.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'x_i_3_3_1_dmf_dma_pbi2_7', 'Opt', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F')
def acetone_and_pbi2(): acetone1 = gaussian.atoms('acetone') pbi2 = filetypes.parse_xyz('xyz/Optimized Molecules/pbi2.xyz') for atom in acetone1: atom.x = atom.x + 10 atoms = acetone1+pbi2 filetypes.write_xyz('pbi2_1acetone', atoms)
def react_dots( params, dot_size1, dot_size2, prior_run_name1, prior_run_name2, random_seed=1, run_name_prefix="react_", on_queue=True, method="metadynamics", ): random_s = str(random_seed) random.seed(random_seed) run_name = run_name_prefix + str(dot_size1) + "_" + str(dot_size2) spoc = utils.Molecule("/fs/home/jms875/Documents/nanocrystals/pb_oleate_hydrate_morse/" + spoc_name + ".arc") atoms1, bonds1, angles1, dihedrals1 = cPickle.load(open("lammps/" + prior_run_name1 + ".pickle", "rb")) atoms1, bonds1, angles1, dihedrals1 = remove_unattached_ligands(atoms1, bonds1, angles1, dihedrals1, spoc) atoms2, bonds2, angles2, dihedrals2 = cPickle.load(open("lammps/" + prior_run_name2 + ".pickle", "rb")) atoms2, bonds2, angles2, dihedrals2 = remove_unattached_ligands(atoms2, bonds2, angles2, dihedrals2, spoc) atoms1_xyz = filetypes.parse_xyz(prior_run_name1 + ".xyz") atoms2_xyz = filetypes.parse_xyz(prior_run_name2 + ".xyz") goal_atoms = filetypes.parse_xyz("dot" + str(dot_size1 + dot_size2) + ".xyz") # set starting coordinates for a, b in zip(atoms1, atoms1_xyz): a.x = b.x a.y = b.y a.z = b.z for a, b in zip(atoms2, atoms2_xyz): a.x = b.x a.y = b.y a.z = b.z atoms = atoms1 + atoms2 bonds = bonds1 + bonds2 angles = angles1 + angles2 dihedrals = dihedrals1 + dihedrals2 # make sure atom types are the same in atom1 and atom2 atom_types_by_type_index = dict([(t.type.index, t.type) for t in atoms]) for i, a in enumerate(atoms): a.type = atom_types_by_type_index[a.type.index] a.index = i + 1 if coul_on and a.type.index in params: a.charge = params[a.type.index] else: a.charge = a.type.charge atom_types = dict([(t.type, True) for t in atoms]).keys() atom_types.sort(key=lambda t: -t.element - t.index * 0.00001) offset = ( radius_of_gyration([a for a in atoms1 if (a.type.notes == "PbS Nanocrystal Pb" or a.element == "S")]) + radius_of_gyration([a for a in atoms2 if (a.type.notes == "PbS Nanocrystal Pb" or a.element == "S")]) + 10.0 ) offset_vector = utils.matvec(utils.rand_rotation(), [offset, offset, offset]) rot = utils.rand_rotation() for a in atoms2: # offset by random orientation vector a.x, a.y, a.z = utils.matvec(rot, [a.x, a.y, a.z]) a.x += offset_vector[0] a.y += offset_vector[1] a.z += offset_vector[2] box_size = [ 15.0 + max([a.x for a in atoms]) - min([a.x for a in atoms]), 15.0 + max([a.y for a in atoms]) - min([a.y for a in atoms]), 15.0 + max([a.z for a in atoms]) - min([a.z for a in atoms]), ] # goal_atoms = cPickle.load( open('lammps/dot'+str(dot_size1+dot_size2)+'.pickle', 'rb') )[0] # filetypes.write_xyz('out_meta', atoms) # exit() os.chdir("lammps") save_to_file(atoms, bonds, angles, dihedrals, atom_types, run_name) lammps.write_data_file_general( atoms, bonds, angles, dihedrals, box_size, run_name, atom_types=atom_types, pair_coeffs_included=False ) os.system("cp ../" + sys.argv[0] + " " + run_name + ".py") starting_rxn_coord = radius_of_gyration( [a for a in atoms if (a.type.notes == "PbS Nanocrystal Pb" or a.element == "S")] ) print len([a for a in atoms if (a.type.notes == "PbS Nanocrystal Pb" or a.element == "S")]) goal_rxn_coord = radius_of_gyration(goal_atoms[0 : 2 * (dot_size1 + dot_size2)]) colvars_file = open(run_name + ".colvars", "w") colvars_file.write( """ colvarsTrajFrequency 10000 colvarsRestartFrequency 100000 colvar { name gyr width 0.1 #size of bins, in Angstroms upperBoundary """ + str(starting_rxn_coord) + """ #two separate dots lowerBoundary """ + str(goal_rxn_coord) + """ #one unified dot lowerwallconstant 10.0 upperwallconstant 10.0 gyration { atoms { atomNumbers """ + (" ".join([str(a.index) for a in atoms if (a.type.notes == "PbS Nanocrystal Pb" or a.element == "S")])) + """ } } } """ ) if method.lower() == "abf": colvars_file.write( """ abf { colvars gyr hideJacobian # when using distance-based colvar: makes pmf flat at infinity fullSamples 1000 } """ ) elif method.lower() == "metadynamics": colvars_file.write( """ metadynamics { colvars gyr hillWeight 0.1 newHillFrequency 1000 } """ ) else: raise Exception('Invalid free energy method "%s"' % method) colvars_file.close() f = open(run_name + ".in", "w") write_input_header(f, run_name, atom_types, read_restart=False) f.write( """ dump 1 all xyz 10000 """ + run_name + """.xyz minimize 0.0 1.0e-8 10000 1000 neigh_modify check yes every 1 delay 0 thermo_style custom pe temp thermo 10000 restart 100000 """ + run_name + """.restart1 """ + run_name + """.restart2 fix motion all nve fix implicit_solvent all langevin 400.0 400.0 100.0 """ + random_s + """ zero yes gjf yes fix col all colvars """ + run_name + """.colvars output """ + run_name + """ seed """ + random_s + """ tstat implicit_solvent velocity all create 400.0 """ + random_s + """ mom yes timestep 2.0 thermo_style custom step temp etotal pe ke epair ebond f_col tpcpu run """ + str(int(1e7)) + """ write_restart """ + run_name + """.restart """ ) f.close() # run_job(run_name, on_queue) os.chdir("..")
def d2o(): for step in range(3,4): gaussian.job( filetypes.parse_xyz('xyz/pbi2_d2o_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'pbi2_d2o_%d' % step, 'opt guess=read geom=(read,newdefinition)', previous='')
def dmso(): for step in range(7): gaussian.job( filetypes.parse_xyz('xyz/4_dp_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', '4_dp_%d' % step, 'opt')
def opt2(): gaussian.job( filetypes.parse_xyz('xyz/DMSO.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', 'DMSO', 'Opt')
def opt(): gaussian.job( filetypes.parse_xyz('xyz/2_dmf_dma_pbi2_1.xyz'), 'HSEH1PBE/LanL2DZ', 'batch', '2_dmf_dma_pbi2_1', 'opt')
def start_stuff(): for step in range(10): gaussian.job( filetypes.parse_xyz('xyz/3_1_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'n_3_1_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_1_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'i_3_1_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_1_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'both_3_1_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_2_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'n_3_2_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_2_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'i_3_2_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_2_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'both_3_2_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_3_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'n_3_3_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_3_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'i_3_3_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_3_1_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'both_3_3_1_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_1_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'n_3_1_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_1_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'i_3_1_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_1_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'both_3_1_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_2_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'n_3_2_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_2_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'i_3_2_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_2_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'both_3_2_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F') gaussian.job( filetypes.parse_xyz('xyz/3_3_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'n_3_3_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 29 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_3_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'i_3_3_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nA 13 29 36 F\nA 29 13 36F') gaussian.job( filetypes.parse_xyz('xyz/3_3_2_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', 'both_3_3_2_dmf_dma_pbi2_%d' % step, 'Opt=ModRedundant', extra_section='B 13 36 F\nB 13 29 F\nA 13 36 29 F\nA 36 13 29F')
def dmf2(): for step in range(9): gaussian.job( filetypes.parse_xyz('xyz/3_dmf_dma_pbi2_%d.xyz' % step), 'HSEH1PBE/LanL2DZ', 'batch', '3_dmf_dma_pbi2_%d' % step, 'opt')
def make_lattice(params, system_size, prior_run_name, lc_x=1, lc_y=1, lc_z=1, random_seed=1, run_name_prefix='lattice_', on_queue=True): atoms, bonds, angles, dihedrals = [], [], [], [] x, y, z = 0, 0, 0 spacer = utils.Molecule('ma.arc') for xi in range(system_size): x, y, z = 0, 0, 0 for yi in range(system_size): x, y, z = 0, 0, 0 for zi in range(system_size): x=xi*lc_x y=yi*lc_y z=zi*lc_z unbonded_atoms = filetypes.parse_xyz('/fs/home/jar528/Desktop/nano/xyz/unbonded.xyz') for a in unbonded_atoms: a.x += x a.y += y a.z += z atoms = atoms + unbonded_atoms spacer.add_to(x, y, z, atoms, bonds, angles, dihedrals) iodine_type = [t for t in utils.Molecule.atom_types if t.element_name=='I'][-1] lead_type = [t for t in utils.Molecule.atom_types if t.element_name=='Pb'][-1] for a in atoms: if a.element=='I': a.type=iodine_type if a.element=='Pb': a.type=lead_type #filetypes.write_xyz('/fs/home/jar528/Desktop/nano/out', atoms) #exit() random_s = str(random_seed) random.seed(random_seed) run_name = run_name_prefix+str(system_size) # make sure atom types are the same in atom1 and atom2 atom_types_by_type_index = dict( [(t.type.index,t.type) for t in atoms] ) for i,a in enumerate(atoms): a.type = atom_types_by_type_index[ a.type.index ] a.index = i+1 if coul_on and a.type.index in params: a.charge = params[a.type.index] else: a.charge = a.type.charge atom_types = dict( [(t.type,True) for t in atoms] ).keys() atom_types.sort(key=lambda t:-t.element-t.index*0.00001) box_size = [ 3.24+max([a.x for a in atoms])-min([a.x for a in atoms]), 3.24+max([a.y for a in atoms])-min([a.y for a in atoms]), 3.24+max([a.z for a in atoms])-min([a.z for a in atoms]) ] os.chdir('lammps') save_to_file( atoms, bonds, angles, dihedrals, atom_types, run_name ) lammps.write_data_file_general(atoms, bonds, angles, dihedrals, box_size, run_name, atom_types=atom_types, pair_coeffs_included=False) os.system('cp ../'+sys.argv[0]+' '+run_name+'.py') f = open(run_name+'.in', 'w') write_input_header(f, run_name, atom_types, read_restart=False) f.write(''' dump 1 all xyz 10000 '''+run_name+'''.xyz minimize 0.0 1.0e-8 10000 1000 neigh_modify check yes every 1 delay 0 thermo 10000 restart 100000 '''+run_name+'''.restart1 '''+run_name+'''.restart2 #fix motion all nve #fix implicit_solvent all langevin 400.0 400.0 1000.0 '''+random_s+''' zero yes gjf yes fix motion all npt temp 450.0 450.0 100.0 aniso 1.0 1.0 1000.0 velocity all create 400.0 '''+random_s+''' mom yes timestep 2.0 thermo_style custom step temp etotal pe tpcpu run '''+str(int(1e6))+''' #thermo 1 #run 1000 minimize 0.0 1.0e-8 10000 1000 write_restart '''+run_name+'''.restart ''') f.close() run_job(run_name, on_queue) os.chdir('..')
def SVD(dot_size,Niter): lattice_start = [] lattice_end = [] dot1 = [1, 2, 4, 5, 7, 9, 10] dot4 = [4, 5, 6, 8] for run in dot4: # W is the optimal rotation matrix that minimizes the differences between the start and end coordinates # read xyz file and compare the start and end structures f = open('/fs/home/ja539/Desktop/C/jovana_test/HSEHsol_test_iter'+str(Niter)+'_'+str(run)+'_'+str(dot_size)+'.xyz') Natoms = int(f.readline()) f.close() atoms = filetypes.parse_xyz('/fs/home/ja539/Desktop/C/jovana_test/HSEHsol_test_iter'+str(Niter)+'_'+str(run)+'_'+str(dot_size)+'.xyz') start_atoms = atoms[-Natoms:] energy, end_atoms = gaussian.parse_atoms('HSEHsol_testopt4_iter'+str(Niter)+'_'+str(run)+'_'+str(dot_size),check_convergence=False) #energy, end_atoms = gaussian.parse_atoms('/fs/home/jms875/Documents/nanocrystals/pb_oleate_hydrate/gaussian/dot2_m06_6.log',check_convergence=False) #energy, end_atoms = gaussian.parse_atoms('gaussian/HSEHsol_core1_dot6_2.log') startx,starty,startz,endx,endy,endz,start_com,end_com = unweighted_COM(start_atoms,end_atoms) A = np.array([startx,starty,startz]) #print A.shape B = np.array([endx,endy,endz]) BT = B.transpose() C = np.dot(A,BT) #print C.shape U, s, V = np.linalg.svd(C, full_matrices=True) #print U.shape, V.shape if np.linalg.det(V) < 0: for i in range(3): V[2][i] = V[2][i]*-1.0 #print U.shape, V.shape W = np.dot(V.transpose(),U.transpose()) A_new = np.dot(W,A) # piece together an xyz file that has the end and shifted start one after the other for i in range(len(start_atoms)): start_atoms[i].x = A_new[0][i] start_atoms[i].y = A_new[1][i] start_atoms[i].z = A_new[2][i] end_atoms[i].x = B[0][i] end_atoms[i].y = B[1][i] end_atoms[i].z = B[2][i] make_xyz_file('SVD_iter'+str(Niter)+'_'+str(run)+'_'+str(dot_size), end_atoms, 'w') make_xyz_file('SVD_iter'+str(Niter)+'_'+str(run)+'_'+str(dot_size), start_atoms, 'a') # calculate RMS translation D = 0.0 for a,b in zip(start_atoms,end_atoms): D += ((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) + (a.z-b.z)*(a.z-b.z))**(0.5) #procrustes_distance = (D/len(start_atoms))**0.5 procrustes_distance = D/len(start_atoms) #print procrustes_distance # relative separations # for the core: coreD = 0.0 for a1,b1 in zip(start_atoms[0:dot_size*2],end_atoms[0:dot_size*2]): for a2,b2 in zip(start_atoms[0:dot_size*2],end_atoms[0:dot_size*2]): coreD += abs(((a1.x-a2.x)*(a1.x-a2.x) + (a1.y-a2.y)*(a1.y-a2.y) + (a1.z-a2.z)*(a1.z-a2.z))**(0.5) - ((b1.x-b2.x)*(b1.x-b2.x) + (b1.y-b2.y)*(b1.y-b2.y) + (b1.z-b2.z)*(b1.z-b2.z))**(0.5)) coreD = coreD/(dot_size*2)/(dot_size*2-1) print 'core:', coreD # for the ligands (average over all the ligands) ligD = [0.0]*((Natoms-2*dot_size)/10) for i in range((Natoms-2*dot_size)/10): for a1,b1 in zip(start_atoms[dot_size*2+10*i:dot_size*2+10*(i+1)],end_atoms[dot_size*2+10*i:dot_size*2+10*(i+1)]): for a2,b2 in zip(start_atoms[dot_size*2+10*i:dot_size*2+10*(i+1)],end_atoms[dot_size*2+10*i:dot_size*2+10*(i+1)]): ligD[i] += abs(((a1.x-a2.x)*(a1.x-a2.x) + (a1.y-a2.y)*(a1.y-a2.y) + (a1.z-a2.z)*(a1.z-a2.z))**(0.5) - ((b1.x-b2.x)*(b1.x-b2.x) + (b1.y-b2.y)*(b1.y-b2.y) + (b1.z-b2.z)*(b1.z-b2.z))**(0.5)) ligD[i] = ligD[i]/10/9 #print ligD ligDavg = (sum(a for a in ligD))/len(ligD) print 'lig:', ligDavg allD = 0.0 for a1,b1 in zip(start_atoms,end_atoms): for a2,b2 in zip(start_atoms,end_atoms): allD += abs(((a1.x-a2.x)*(a1.x-a2.x) + (a1.y-a2.y)*(a1.y-a2.y) + (a1.z-a2.z)*(a1.z-a2.z))**(0.5) - ((b1.x-b2.x)*(b1.x-b2.x) + (b1.y-b2.y)*(b1.y-b2.y) + (b1.z-b2.z)*(b1.z-b2.z))**(0.5)) allD = allD/Natoms/(Natoms-1) print 'all:', allD for a1,b1 in zip(start_atoms[0:dot_size],end_atoms[0:dot_size]): for a2,b2 in zip(start_atoms[dot_size:dot_size*2],end_atoms[dot_size:dot_size*2]): lattice_start += [((a1.x-a2.x)*(a1.x-a2.x) + (a1.y-a2.y)*(a1.y-a2.y) + (a1.z-a2.z)*(a1.z-a2.z))**(0.5)] lattice_end += [((b1.x-b2.x)*(b1.x-b2.x) + (b1.y-b2.y)*(b1.y-b2.y) + (b1.z-b2.z)*(b1.z-b2.z))**(0.5)]
def binding(): #for n in ['propanenitrile', 'butanenitrile', 'pentanenitrile', 'hexanenitrile', 'aminopropane2', 'aminobutane2', 'aminopentane2', 'aminohexane2', 'hexane2', 'methane', 'hcn2', 'cyanoacetylene2', 'acrylonitrile2', 'cyanoallene2', 'acetonitrile2', 'hc5n2']: for n in ['aminobutane2']: contents = open('lammps/bind3_' + n + '.log').read() opls_binding_e = float( re.search('\n1\s+(\S+)\s+Loop time of', contents).group(1)) atoms = filetypes.parse_xyz('bind3_' + n + '.xyz') #opt0: use B97D #gaussian.job(atoms, 'B97D/TZVP/Fit', 'batch', 'bind3_'+n+'_opt0', 'Opt=Cartesian', procs=1) #opt1: use M062X #os.system('cp gaussian/bind3_'+n+'_opt0.chk gaussian/bind3_'+n+'_opt1.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1', 'Opt=Cartesian Geom=AllCheck Guess=Read', procs=1) #opt2: M062X with solvent #os.system('cp gaussian/bind3_'+n+'_opt0.chk gaussian/bind3_'+n+'_opt2.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2', 'Opt=Cartesian Geom=AllCheck Guess=Read SCRF(Solvent=n-Hexane)', procs=1) ''' jlist = subprocess.Popen('jlist', shell=True, stdout=subprocess.PIPE).communicate()[0] if ' bind3_'+n+'_opt1 ' not in jlist and ' bind3_'+n+'_opt1.1 ' not in jlist and gaussian.parse_atoms('gaussian/bind3_'+n+'_opt1.log') is None and (not os.path.isfile('gaussian/bind3_'+n+'_opt1.1.log') or gaussian.parse_atoms('gaussian/bind3_'+n+'_opt1.1.log') is None): os.system('cp gaussian/bind3_'+n+'_opt1.chk gaussian/bind3_'+n+'_opt1.1.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1.1', 'Opt=Restart', procs=1) #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1.1', 'Opt=Cartesian Geom=AllCheck Guess=Read', procs=1) print 'bind3_'+n+'_opt1.1' if ' bind3_'+n+'_opt2 ' not in jlist and ' bind3_'+n+'_opt2.1 ' not in jlist and gaussian.parse_atoms('gaussian/bind3_'+n+'_opt2.log') is None and (not os.path.isfile('gaussian/bind3_'+n+'_opt2.1.log') or gaussian.parse_atoms('gaussian/bind3_'+n+'_opt2.1.log') is None): os.system('cp gaussian/bind3_'+n+'_opt2.chk gaussian/bind3_'+n+'_opt2.1.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2.1', 'Opt=Restart SCRF(Solvent=n-Hexane)', procs=1) #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2.1', 'Opt=Cartesian Geom=AllCheck Guess=Read SCRF(Solvent=n-Hexane)', procs=1) print 'bind3_'+n+'_opt2.1' continue ''' #Find BSSE without solvent (on opt1) #os.system('cp gaussian/'+n+'_0.chk gaussian/bind3_'+n+'_opt1a.chk') #os.system('cp gaussian/'+n+'_0.chk gaussian/bind3_'+n+'_opt1b.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.chk gaussian/bind3_'+n+'_opt1a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.chk gaussian/bind3_'+n+'_opt1b_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.1.chk gaussian/bind3_'+n+'_opt1a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.1.chk gaussian/bind3_'+n+'_opt1b_Bq.chk') try: atoms = gaussian.parse_atoms('gaussian/bind3_' + n + '_opt1.1.log', check_convergence=False)[1] except: atoms = gaussian.parse_atoms('gaussian/bind3_' + n + '_opt1.log', check_convergence=False)[1] #gaussian.job(atoms[ : len(atoms)/2 ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1a', 'Guess=Read', procs=1) #gaussian.job(atoms[ len(atoms)/2 : ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1b', 'Guess=Read', procs=1) atoms_a = copy.deepcopy(atoms) for a in atoms_a[:len(atoms) / 2]: a.element = a.element + '-Bq' #gaussian.job(atoms_a, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1a_Bq', 'Guess=Read', procs=1) for a in atoms[len(atoms) / 2:]: a.element = a.element + '-Bq' #gaussian.job(atoms, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1b_Bq', 'Guess=Read', procs=1) #Find BSSE with solvent (on opt2) #os.system('cp gaussian/'+n+'_1.chk gaussian/bind3_'+n+'_opt2a.chk') #os.system('cp gaussian/'+n+'_1.chk gaussian/bind3_'+n+'_opt2b.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.chk gaussian/bind3_'+n+'_opt2a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.chk gaussian/bind3_'+n+'_opt2b_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.1.chk gaussian/bind3_'+n+'_opt2a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.1.chk gaussian/bind3_'+n+'_opt2b_Bq.chk') try: atoms = gaussian.parse_atoms('gaussian/bind3_' + n + '_opt2.1.log', check_convergence=False)[1] except: atoms = gaussian.parse_atoms('gaussian/bind3_' + n + '_opt2.log', check_convergence=False)[1] #gaussian.job(atoms[ : len(atoms)/2 ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2a', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) #gaussian.job(atoms[ len(atoms)/2 : ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2b', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) atoms_a = copy.deepcopy(atoms) for a in atoms_a[:len(atoms) / 2]: a.element = a.element + '-Bq' gaussian.job(atoms_a, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_' + n + '_opt2a_Bq', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) for a in atoms[len(atoms) / 2:]: a.element = a.element + '-Bq' #gaussian.job(atoms, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2b_Bq', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) continue #atoms = atoms[ : len(atoms)/2 ] #atoms = atoms[ len(atoms)/2 : ] #for a in atoms[ len(atoms)/2 : ]: # a.element = a.element + '-Bq' #gaussian.job(atoms, 'M062X/cc-pVDZ', 'batch', n+'_sp4', 'SP', procs=1) #sp0 is pair, sp1,sp2 are single, sp3,sp4 with ghost atoms os.system('cp gaussian/' + n + '_sp0.chk gaussian/' + n + '_scrf0.chk') gaussian.job(atoms, 'M062X/aug-cc-pVDZ', 'batch', n + '_scrf0', 'SP SCRF(Solvent=n-Hexane) Guess=Read', procs=1) #scrf0, scrf1, scrf2 atoms1 = copy.deepcopy(atoms) for a in atoms1[:len(atoms) / 2]: a.element = a.element + '-Bq' os.system('cp gaussian/' + n + '_sp0.chk gaussian/' + n + '_scrf1.chk') gaussian.job(atoms1, 'M062X/aug-cc-pVDZ', 'batch', n + '_scrf1', 'SP SCRF(Solvent=n-Hexane) Guess=Read', procs=1) atoms2 = copy.deepcopy(atoms) for a in atoms2[len(atoms) / 2:]: a.element = a.element + '-Bq' os.system('cp gaussian/' + n + '_sp0.chk gaussian/' + n + '_scrf2.chk') gaussian.job(atoms2, 'M062X/aug-cc-pVDZ', 'batch', n + '_scrf2', 'SP SCRF(Solvent=n-Hexane) Guess=Read', procs=1) #pair = gaussian.parse_atoms('gaussian/'+n+'_sp0.log')[0] #single = gaussian.parse_atoms('gaussian/'+n+'_sp1.log')[0] #print n, opls_binding_e, 627.5*(pair - single*2) '''
def binding(): #for n in ['propanenitrile', 'butanenitrile', 'pentanenitrile', 'hexanenitrile', 'aminopropane2', 'aminobutane2', 'aminopentane2', 'aminohexane2', 'hexane2', 'methane', 'hcn2', 'cyanoacetylene2', 'acrylonitrile2', 'cyanoallene2', 'acetonitrile2', 'hc5n2']: for n in ['aminobutane2']: contents = open('lammps/bind3_'+n+'.log').read() opls_binding_e = float(re.search('\n1\s+(\S+)\s+Loop time of', contents).group(1)) atoms = filetypes.parse_xyz('bind3_'+n+'.xyz') #opt0: use B97D #gaussian.job(atoms, 'B97D/TZVP/Fit', 'batch', 'bind3_'+n+'_opt0', 'Opt=Cartesian', procs=1) #opt1: use M062X #os.system('cp gaussian/bind3_'+n+'_opt0.chk gaussian/bind3_'+n+'_opt1.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1', 'Opt=Cartesian Geom=AllCheck Guess=Read', procs=1) #opt2: M062X with solvent #os.system('cp gaussian/bind3_'+n+'_opt0.chk gaussian/bind3_'+n+'_opt2.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2', 'Opt=Cartesian Geom=AllCheck Guess=Read SCRF(Solvent=n-Hexane)', procs=1) ''' jlist = subprocess.Popen('jlist', shell=True, stdout=subprocess.PIPE).communicate()[0] if ' bind3_'+n+'_opt1 ' not in jlist and ' bind3_'+n+'_opt1.1 ' not in jlist and gaussian.parse_atoms('gaussian/bind3_'+n+'_opt1.log') is None and (not os.path.isfile('gaussian/bind3_'+n+'_opt1.1.log') or gaussian.parse_atoms('gaussian/bind3_'+n+'_opt1.1.log') is None): os.system('cp gaussian/bind3_'+n+'_opt1.chk gaussian/bind3_'+n+'_opt1.1.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1.1', 'Opt=Restart', procs=1) #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1.1', 'Opt=Cartesian Geom=AllCheck Guess=Read', procs=1) print 'bind3_'+n+'_opt1.1' if ' bind3_'+n+'_opt2 ' not in jlist and ' bind3_'+n+'_opt2.1 ' not in jlist and gaussian.parse_atoms('gaussian/bind3_'+n+'_opt2.log') is None and (not os.path.isfile('gaussian/bind3_'+n+'_opt2.1.log') or gaussian.parse_atoms('gaussian/bind3_'+n+'_opt2.1.log') is None): os.system('cp gaussian/bind3_'+n+'_opt2.chk gaussian/bind3_'+n+'_opt2.1.chk') #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2.1', 'Opt=Restart SCRF(Solvent=n-Hexane)', procs=1) #gaussian.job([], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2.1', 'Opt=Cartesian Geom=AllCheck Guess=Read SCRF(Solvent=n-Hexane)', procs=1) print 'bind3_'+n+'_opt2.1' continue ''' #Find BSSE without solvent (on opt1) #os.system('cp gaussian/'+n+'_0.chk gaussian/bind3_'+n+'_opt1a.chk') #os.system('cp gaussian/'+n+'_0.chk gaussian/bind3_'+n+'_opt1b.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.chk gaussian/bind3_'+n+'_opt1a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.chk gaussian/bind3_'+n+'_opt1b_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.1.chk gaussian/bind3_'+n+'_opt1a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt1.1.chk gaussian/bind3_'+n+'_opt1b_Bq.chk') try: atoms = gaussian.parse_atoms('gaussian/bind3_'+n+'_opt1.1.log', check_convergence=False)[1] except: atoms = gaussian.parse_atoms('gaussian/bind3_'+n+'_opt1.log', check_convergence=False)[1] #gaussian.job(atoms[ : len(atoms)/2 ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1a', 'Guess=Read', procs=1) #gaussian.job(atoms[ len(atoms)/2 : ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1b', 'Guess=Read', procs=1) atoms_a = copy.deepcopy(atoms) for a in atoms_a[ : len(atoms)/2 ]: a.element = a.element + '-Bq' #gaussian.job(atoms_a, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1a_Bq', 'Guess=Read', procs=1) for a in atoms[ len(atoms)/2 : ]: a.element = a.element + '-Bq' #gaussian.job(atoms, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt1b_Bq', 'Guess=Read', procs=1) #Find BSSE with solvent (on opt2) #os.system('cp gaussian/'+n+'_1.chk gaussian/bind3_'+n+'_opt2a.chk') #os.system('cp gaussian/'+n+'_1.chk gaussian/bind3_'+n+'_opt2b.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.chk gaussian/bind3_'+n+'_opt2a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.chk gaussian/bind3_'+n+'_opt2b_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.1.chk gaussian/bind3_'+n+'_opt2a_Bq.chk') #os.system('cp gaussian/bind3_'+n+'_opt2.1.chk gaussian/bind3_'+n+'_opt2b_Bq.chk') try: atoms = gaussian.parse_atoms('gaussian/bind3_'+n+'_opt2.1.log', check_convergence=False)[1] except: atoms = gaussian.parse_atoms('gaussian/bind3_'+n+'_opt2.log', check_convergence=False)[1] #gaussian.job(atoms[ : len(atoms)/2 ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2a', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) #gaussian.job(atoms[ len(atoms)/2 : ], 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2b', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) atoms_a = copy.deepcopy(atoms) for a in atoms_a[ : len(atoms)/2 ]: a.element = a.element + '-Bq' gaussian.job(atoms_a, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2a_Bq', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) for a in atoms[ len(atoms)/2 : ]: a.element = a.element + '-Bq' #gaussian.job(atoms, 'M062X/aug-cc-pVDZ', 'batch', 'bind3_'+n+'_opt2b_Bq', 'Guess=Read SCRF(Solvent=n-Hexane)', procs=1) continue #atoms = atoms[ : len(atoms)/2 ] #atoms = atoms[ len(atoms)/2 : ] #for a in atoms[ len(atoms)/2 : ]: # a.element = a.element + '-Bq' #gaussian.job(atoms, 'M062X/cc-pVDZ', 'batch', n+'_sp4', 'SP', procs=1) #sp0 is pair, sp1,sp2 are single, sp3,sp4 with ghost atoms os.system('cp gaussian/'+n+'_sp0.chk gaussian/'+n+'_scrf0.chk') gaussian.job(atoms, 'M062X/aug-cc-pVDZ', 'batch', n+'_scrf0', 'SP SCRF(Solvent=n-Hexane) Guess=Read', procs=1) #scrf0, scrf1, scrf2 atoms1 = copy.deepcopy(atoms) for a in atoms1[ : len(atoms)/2 ]: a.element = a.element + '-Bq' os.system('cp gaussian/'+n+'_sp0.chk gaussian/'+n+'_scrf1.chk') gaussian.job(atoms1, 'M062X/aug-cc-pVDZ', 'batch', n+'_scrf1', 'SP SCRF(Solvent=n-Hexane) Guess=Read', procs=1) atoms2 = copy.deepcopy(atoms) for a in atoms2[ len(atoms)/2 : ]: a.element = a.element + '-Bq' os.system('cp gaussian/'+n+'_sp0.chk gaussian/'+n+'_scrf2.chk') gaussian.job(atoms2, 'M062X/aug-cc-pVDZ', 'batch', n+'_scrf2', 'SP SCRF(Solvent=n-Hexane) Guess=Read', procs=1) #pair = gaussian.parse_atoms('gaussian/'+n+'_sp0.log')[0] #single = gaussian.parse_atoms('gaussian/'+n+'_sp1.log')[0] #print n, opls_binding_e, 627.5*(pair - single*2) '''