def test_gromacs_merge(): etoh_filename = utils.get_data_filename("chemicals/etoh/etoh.mol2") benzene_filename = utils.get_data_filename("chemicals/benzene/benzene.mol2") with utils.enter_temp_directory(): #Prevents creating lots of tleap/antechamber files everywhere #Generate frcmod files, mol2 files gaff_mol2_filename1, frcmod_filename1 = amber.run_antechamber( "etoh", etoh_filename, charge_method = None) gaff_mol2_filename2, frcmod_filename2 = amber.run_antechamber( "benzene", benzene_filename, charge_method = None) #Set file names prmtop_filename1 = "./out1.prmtop" prmtop_filename2 = "./out2.prmtop" crd_filename1 = "./out1.inpcrd" crd_filename2 = "./out2.inpcrd" top_filename1 = "./out1.top" top_filename2 = "./out2.top" gro_filename1 = "./out1.gro" gro_filename2 = "./out2.gro" #Generate AMBER files amber.run_tleap( 'etoh', gaff_mol2_filename1, frcmod_filename1, prmtop_filename1, crd_filename1 ) amber.run_tleap( 'benzene', gaff_mol2_filename2, frcmod_filename2, prmtop_filename2, crd_filename2 ) #Convert to GROMACS utils.amber_to_gromacs( "etoh", prmtop_filename1, crd_filename1, out_top = top_filename1, out_gro = gro_filename1 ) utils.amber_to_gromacs( "benzene", prmtop_filename2, crd_filename2, out_top = top_filename2, out_gro = gro_filename2 ) #Merge topologies gromacs.merge_topologies( [ top_filename1, top_filename2], './combined.top', 'combined', molecule_numbers = [1, 5], molecule_names = ['etoh', 'benzene'] ) #Test editing of molecule numbers in topology file gromacs.change_molecules_section( './combined.top', './edited.top', ['etoh', 'benzene'], [10, 20] )
def test_gromacs_merge(): etoh_filename = utils.get_data_filename("chemicals/etoh/etoh.mol2") benzene_filename = utils.get_data_filename("chemicals/benzene/benzene.mol2") with utils.enter_temp_directory(): #Prevents creating lots of tleap/antechamber files everywhere #Generate frcmod files, mol2 files gaff_mol2_filename1, frcmod_filename1 = amber.run_antechamber( "etoh", etoh_filename, charge_method = None) gaff_mol2_filename2, frcmod_filename2 = amber.run_antechamber( "benzene", benzene_filename, charge_method = None) #Set file names prmtop_filename1 = "./out1.prmtop" prmtop_filename2 = "./out2.prmtop" crd_filename1 = "./out1.inpcrd" crd_filename2 = "./out2.inpcrd" top_filename1 = "./out1.top" top_filename2 = "./out2.top" gro_filename1 = "./out1.gro" gro_filename2 = "./out2.gro" #Generate AMBER files amber.run_tleap( 'etoh', gaff_mol2_filename1, frcmod_filename1, prmtop_filename1, crd_filename1 ) amber.run_tleap( 'benzene', gaff_mol2_filename2, frcmod_filename2, prmtop_filename2, crd_filename2 ) #Convert to GROMACS utils.convert_via_acpype( "etoh", prmtop_filename1, crd_filename1, out_top = top_filename1, out_gro = gro_filename1 ) utils.convert_via_acpype( "benzene", prmtop_filename2, crd_filename2, out_top = top_filename2, out_gro = gro_filename2 ) #Merge topologies gromacs.merge_topologies( [ top_filename1, top_filename2], './combined.top', 'combined', molecule_numbers = [1, 5], molecule_names = ['etoh', 'benzene'] ) #Test editing of molecule numbers in topology file gromacs.change_molecules_section( './combined.top', './edited.top', ['etoh', 'benzene'], [10, 20] )
def test_gromacs_solvate(): etoh_filename = utils.get_data_filename("chemicals/etoh/etoh.mol2") with utils.enter_temp_directory(): #Prevents creating lots of tleap/antechamber files everywhere #Generate frcmod files, mol2 files gaff_mol2_filename, frcmod_filename = amber.run_antechamber( "etoh", etoh_filename, charge_method = None) #Amber setup amber.run_tleap( 'etoh', gaff_mol2_filename, frcmod_filename, 'etoh.prmtop', 'etoh.crd' ) #GROMACS conversion utils.amber_to_gromacs( 'etoh', 'etoh.prmtop', 'etoh.crd', 'etoh.top', 'etoh.gro' ) #Solvate gromacs.do_solvate( 'etoh.top', 'etoh.gro', 'etoh_solvated.top', 'etoh_solvated.gro', 1.2, 'dodecahedron', 'spc216', 'tip3p.itp' )
def test_gromacs_solvate(): etoh_filename = utils.get_data_filename("chemicals/etoh/etoh.mol2") with utils.enter_temp_directory(): #Prevents creating lots of tleap/antechamber files everywhere #Generate frcmod files, mol2 files gaff_mol2_filename, frcmod_filename = amber.run_antechamber( "etoh", etoh_filename, charge_method = None) #Amber setup amber.run_tleap( 'etoh', gaff_mol2_filename, frcmod_filename, 'etoh.prmtop', 'etoh.crd' ) #GROMACS conversion utils.convert_via_acpype( 'etoh', 'etoh.prmtop', 'etoh.crd', 'etoh.top', 'etoh.gro' ) #Solvate gromacs.do_solvate( 'etoh.top', 'etoh.gro', 'etoh_solvated.top', 'etoh_solvated.gro', 1.2, 'dodecahedron', 'spc216', 'tip3p.itp' )
def test_acpype_conversion(): molecule_name = 'sustiva' input_filename = utils.get_data_filename("chemicals/sustiva/sustiva.mol2") with utils.enter_temp_directory(): # Prevents creating tons of GAFF files everywhere. gaff_mol2_filename, frcmod_filename = amber.run_antechamber(molecule_name, input_filename, charge_method=None) prmtop, inpcrd = amber.run_tleap(molecule_name, gaff_mol2_filename, frcmod_filename) out_top, out_gro = utils.convert_via_acpype( molecule_name, prmtop, inpcrd )
def test_run_tleap(): molecule_name = "sustiva" input_filename = utils.get_data_filename("chemicals/sustiva/sustiva.mol2") with utils.enter_temp_directory( ): # Prevents creating tons of GAFF files everywhere. gaff_mol2_filename, frcmod_filename = amber.run_antechamber( molecule_name, input_filename, charge_method=None) prmtop, inpcrd = amber.run_tleap(molecule_name, gaff_mol2_filename, frcmod_filename)
def test_acpype_conversion(): molecule_name = 'sustiva' input_filename = utils.get_data_filename("chemicals/sustiva/sustiva.mol2") with utils.enter_temp_directory( ): # Prevents creating tons of GAFF files everywhere. gaff_mol2_filename, frcmod_filename = amber.run_antechamber( molecule_name, input_filename, charge_method=None) prmtop, inpcrd = amber.run_tleap(molecule_name, gaff_mol2_filename, frcmod_filename) out_top, out_gro = utils.convert_via_acpype(molecule_name, prmtop, inpcrd)
def generate_amber_files(self, ligand_name, file): """ Generates the prmtop and inpcrd files for a ligand. Parameters ---------- ligand_name : str The name of the ligand. file : str Mol2 file of the ligand. Returns ------- prmtop_filename : str Amber prmtop file produced by tleap. inpcrd_filename : str Amber inpcrd file produced by tleap. """ gaff_mol2_filename1, frcmod_filename1 = amber.run_antechamber( ligand_name, file, resname=True, charge_method=None) source_mol2 = os.path.abspath(gaff_mol2_filename1) source_frcmod = os.path.abspath(frcmod_filename1) destination = os.path.abspath('data') shutil.move(source_mol2, os.path.join(destination, os.path.basename(source_mol2))) shutil.move(source_frcmod, os.path.join(destination, os.path.basename(source_frcmod))) amber.run_tleap( ligand_name, os.path.join(destination, os.path.basename(source_mol2)), os.path.join(destination, os.path.basename(source_frcmod)), f'{ligand_name}.prmtop', f'{ligand_name}.inpcrd') source_prmtop = os.path.abspath(f'{ligand_name}.prmtop') source_inpcrd = os.path.abspath(f'{ligand_name}.inpcrd') shutil.move(source_prmtop, os.path.join(destination, os.path.basename(source_prmtop))) shutil.move(source_inpcrd, os.path.join(destination, os.path.basename(source_inpcrd))) return os.path.join(destination, os.path.basename(source_prmtop)), os.path.join( destination, os.path.basename(source_inpcrd))
def test_parmed_conversion(): molecule_name = 'sustiva' input_filename = utils.get_data_filename("chemicals/sustiva/sustiva.mol2") with utils.enter_temp_directory( ): # Prevents creating tons of GAFF files everywhere. #Make sure conversion runs gaff_mol2_filename, frcmod_filename = amber.run_antechamber( molecule_name, input_filename, charge_method=None) prmtop, inpcrd = amber.run_tleap(molecule_name, gaff_mol2_filename, frcmod_filename) out_top, out_gro = utils.amber_to_gromacs(molecule_name, prmtop, inpcrd, precision=8) #Test energies before and after conversion #Set up amber system a = parmed.amber.AmberParm(prmtop, inpcrd) ambersys = a.createSystem() ambercon = mmmm.Context(ambersys, mm.VerletIntegrator(0.001)) ambercon.setPositions(a.positions) #Set up GROMACS system g = parmed.load_file(out_top) gro = parmed.gromacs.GromacsGroFile.parse(out_gro) g.box = gro.box g.positions = gro.positions gromacssys = g.createSystem() gromacscon = mmmm.Context(gromacssys, mm.VerletIntegrator(0.001)) gromacscon.setPositions(g.positions) #Check energies a_energies = parmed.openmm.utils.energy_decomposition(a, ambercon) g_energies = parmed.openmm.utils.energy_decomposition(g, gromacscon) #Check components tolerance = 1e-5 ok = True for key in a_energies.keys(): diff = np.abs(a_energies[key] - g_energies[key]) if diff / np.abs(a_energies[key]) > tolerance: ok = False print( "In testing AMBER to GROMACS conversion, %s energy differs by %.5g, which is more than a fraction %.2g of the total, so conversion appears not to be working properly." % (key, diff, tolerance)) if not ok: raise (ValueError( "AMBER to GROMACS conversion yields energies which are too different." ))
def test_parmed_conversion(): molecule_name = 'sustiva' input_filename = utils.get_data_filename("chemicals/sustiva/sustiva.mol2") with utils.enter_temp_directory(): # Prevents creating tons of GAFF files everywhere. #Make sure conversion runs gaff_mol2_filename, frcmod_filename = amber.run_antechamber(molecule_name, input_filename, charge_method=None) prmtop, inpcrd = amber.run_tleap(molecule_name, gaff_mol2_filename, frcmod_filename) out_top, out_gro = utils.amber_to_gromacs( molecule_name, prmtop, inpcrd, precision = 8 ) #Test energies before and after conversion #Set up amber system a = parmed.amber.AmberParm( prmtop, inpcrd ) ambersys = a.createSystem() ambercon = mmmm.Context( ambersys, mm.VerletIntegrator(0.001)) ambercon.setPositions( a.positions ) #Set up GROMACS system g = parmed.load_file( out_top ) gro = parmed.gromacs.GromacsGroFile.parse( out_gro ) g.box = gro.box g.positions = gro.positions gromacssys = g.createSystem() gromacscon = mmmm.Context( gromacssys, mm.VerletIntegrator(0.001)) gromacscon.setPositions( g.positions ) #Check energies a_energies = parmed.openmm.utils.energy_decomposition( a, ambercon ) g_energies = parmed.openmm.utils.energy_decomposition( g, gromacscon ) #Check components tolerance = 1e-5 ok = True for key in a_energies.keys(): diff = np.abs(a_energies[key] - g_energies[key] ) if diff/np.abs(a_energies[key]) > tolerance: ok = False print("In testing AMBER to GROMACS conversion, %s energy differs by %.5g, which is more than a fraction %.2g of the total, so conversion appears not to be working properly." % ( key, diff, tolerance) ) if not ok: raise(ValueError("AMBER to GROMACS conversion yields energies which are too different."))
def test_run_tleap(): molecule_name = "sustiva" input_filename = utils.get_data_filename("chemicals/sustiva/sustiva.mol2") with utils.enter_temp_directory(): # Prevents creating tons of GAFF files everywhere. gaff_mol2_filename, frcmod_filename = amber.run_antechamber(molecule_name, input_filename, charge_method=None) prmtop, inpcrd = amber.run_tleap(molecule_name, gaff_mol2_filename, frcmod_filename)
def gcrt2prmtop(gcrt_file): system_name=gcrt_file.split('.')[0] amber.run_antechamber(system_name, gcrt_file, charge_method=None, input_format='gcrt') amber.run_tleap(system_name, system_name+'.gaff.mol2',system_name+'.frcmod',system_name+'.prmtop',system_name+'.crd') return None