def test_solv_water_free(tmp_path): mol_free = FreeEner('DEN', f'{tmp_path}/indene_water_solv') mol_free.water_box_from_SMILE('C1C=Cc2ccccc12') start_coor = pdb_manip.Coor(mol_free.gmxsys.coor_file) assert start_coor.num == 1625 # To avoid domain decomposition errors: # Use only one proc mol_free.gmxsys.nt = 1 mol_free.equilibrate_solvent_box(em_steps=100, dt=0.002, prod_time=0.02, short_steps=500) delta_coul = 0.5 coul_list = np.arange(0, 1 + delta_coul, delta_coul) vdw_coul = 0.5 vdw_list = np.arange(0, 1 + vdw_coul, vdw_coul) mol_free.run(lambda_coul_list=coul_list, lambda_vdw_list=vdw_list, em_steps=100, nvt_time=0.1, npt_time=0.1, prod_time=0.1, temp_groups='System') dg_solv, dg_std_solv = mol_free.get_free_ener() print(dg_solv, dg_std_solv) assert ((10 < dg_solv) and (dg_solv < 30))
def test_solv_oct(tmp_path): mol_free = FreeEner('DEN', f'{tmp_path}/indene_oct_solv') mol_free.octanol_box_from_SMILE('C1C=Cc2ccccc12') start_coor = pdb_manip.Coor(mol_free.gmxsys.coor_file) assert start_coor.num == 1502 mol_free.gmxsys.nt = 1 mol_free.equilibrate_solvent_box(em_steps=100, dt=0.002, prod_time=0.02, short_steps=500)
def test_symetry_corr(smile, dg): assert FreeEner.symmetry_correction(smile) == pytest.approx(dg, rel=1e-3)
def test_free_bind(tmp_path): dna_free = FreeEner('DAP', f'{tmp_path}/1D30_solv') dna_free.prepare_complex_pdb(PDB_1D30, 'NC(=N)c1ccc(cc1)c2[nH]c3cc(ccc3c2)C(N)=N') start_coor = pdb_manip.Coor(dna_free.gmxsys.coor_file) assert start_coor.num == 20973 dna_free.equilibrate_complex(em_steps=100, HA_time=0.001, CA_time=0.002, CA_LOW_time=0.02, dt=0.002, dt_HA=0.001, temp=300, receptor_grp='DNA', short_steps=500) dna_free.compute_add_intermol_from_traj(ref_coor=None, rec_group='DNA') dg_rest_water = dna_free.get_water_restr() print(dg_rest_water) assert ((5.5 < dg_rest_water) and (dg_rest_water < 9.5)) dna_free.plot_intermol_restr() delta_restr = 0.5 restr_list = np.arange(0, 1 + delta_restr, delta_restr) delta_coul = 0.5 coul_list = np.arange(0, 1 + delta_coul, delta_coul) vdw_coul = 0.5 vdw_list = np.arange(0, 1 + vdw_coul, vdw_coul) dna_free.run(lambda_restr_list=restr_list, lambda_coul_list=coul_list, lambda_vdw_list=vdw_list, em_steps=50, nvt_time=0.05, npt_time=0.05, prod_time=0.25, temp_groups='System') dna_free.extend_lambda_prod(prod_time=0.5) dg_bind, dg_std_bind = dna_free.get_free_ener() print(dg_bind, dg_std_bind) assert ((0 < dg_bind) and (dg_bind < 200)) # Need to think about using alchemlyb as a dependance or not dna_free.plot_convergence(dt=0.25, graph_out=f'{tmp_path}/alchem.png') dna_free.compute_convergence_gbar(dt=0.25) dna_free.plot_convergence_graph(graph_out=f'{tmp_path}/bar.png')
def test_is_palindrome(smile, dg): assert FreeEner.symmetry_correction(smile) == pytest.approx(dg, rel=1e-3)