def test_hbond_general(self): traj = pt.iterload(fn('DPDP.nc'), fn('DPDP.parm7')) dslist = pt.search_hbonds(traj, dtype='dataset') for key in dslist.keys(): if 'UU' not in key: assert len(dslist[key].values) == traj.n_frames mydict = dslist.to_dict() mydict_np = dslist.to_dict() assert len(mydict.keys()) == dslist.size assert len(mydict_np.keys()) == dslist.size for key in mydict.keys(): mydict[key] = np.asarray(mydict[key]) aa_eq(mydict[key], mydict_np[key]) # raise if dtype='hbond' and series=False with pytest.raises(ValueError): pt.hbond(traj, series=False, dtype='hbond')
def test_pmap_hbond(self): traj = pt.iterload(fn('tz2.nc'), fn('tz2.parm7')) hbond_data_serial = pt.hbond(traj, dtype='dict') hbond_data_pmap = pt.pmap(pt.hbond, traj, n_cores=3) assert sorted(hbond_data_serial.keys()) == sorted( hbond_data_pmap.keys()) for key, value in hbond_data_serial.items(): aa_eq(hbond_data_serial[key], hbond_data_pmap[key]) assert value.dtype == np.int32 with pytest.raises(ValueError): # cpptraj style # not support yet. pt.pmap(['radgyr', 'hbond'], traj, n_cores=3)
def test_hbonds_solvent_bridge(self): traj = pt.iterload(fn('tz2.ortho.nc'), fn('tz2.ortho.parm7')) # find solvent bridge between residue 10 and 11. hb = pt.hbond( traj, ':10,11', solvent_donor=':WAT', solvent_acceptor=':WAT') assert hb._get_bridge() == \ [[('WAT208', 'THR10', 'TRP11')], [('WAT208', 'THR10', 'TRP11')], [('WAT208', 'THR10', 'TRP11')], [('WAT208', 'THR10', 'TRP11')], [], [], [], [], [], [('WAT266', 'THR10', 'TRP11')]]
def test_hbond_general(self): traj = pt.iterload("./data/DPDP.nc", "./data/DPDP.parm7") dslist = pt.search_hbonds(traj, dtype='dataset') for key in dslist.keys(): if 'UU' not in key: assert len(dslist[key].values) == traj.n_frames mydict = dslist.to_dict() mydict_np = dslist.to_dict() assert len(mydict.keys()) == dslist.size assert len(mydict_np.keys()) == dslist.size for key in mydict.keys(): mydict[key] = np.asarray(mydict[key]) aa_eq(mydict[key], mydict_np[key]) # raise if dtype='hbond' and series=False self.assertRaises(ValueError, lambda: pt.hbond(traj, series=False, dtype='hbond'))
def test_pmap_hbond_with_solvent_bridge(self): for trajin_fn, parm_fn in [('tz2.ortho.nc', 'tz2.ortho.parm7'), ('tz2.truncoct.nc', 'tz2.truncoct.parm7')]: traj = pt.iterload(fn(trajin_fn), fn(parm_fn)) kwargs = dict(solvent_donor=':WAT@O', solvent_acceptor=':WAT') hbond_data_serial = pt.hbond(traj, dtype='dict', **kwargs) hbond_data_pmap = pt.pmap( pt.hbond, traj, dtype='dict', n_cores=3, **kwargs) assert sorted(hbond_data_serial.keys()) == sorted( hbond_data_pmap.keys()) for key, value in hbond_data_serial.items(): if key.endswith('HB[ID]'): assert hbond_data_pmap[key].tolist() == hbond_data_serial[ key].tolist() print(hbond_data_pmap[key].tolist(), hbond_data_serial[key].tolist()) else: aa_eq(hbond_data_serial[key], hbond_data_pmap[key]) assert value.dtype == np.int32
def main(traj): ''' 氢键分析与数据导出 Paramters ---------- traj: MD轨迹 pytraj对象 ''' print('\nStart H-Bond Analysis...') # hbond 分析 hb = pt.hbond( traj, mask=':*', distance=4, options='avgout ./pynalysis/hbond/avg-hbd.dat printatomnum nointramol') ''' options可填参数与cpptraj一致 输出氢键平均信息文件 打印原子序号 仅计算分子间氢键 distance: 识别氢键cutoff值 默认值3埃 ''' distance_mask = hb.get_amber_mask()[0] print('Hbond Distance Mask: {} \n '.format(distance_mask)) angle_mask = hb.get_amber_mask()[1] print('Hbond Hngle Mask: {} \n'.format(angle_mask)) print("\nHbond Data") print(hb.data) # 1: have hbond; 0: does not have hbond # 创建excel工作表 hbondxlsx = xlsxwriter.Workbook('./pynalysis/hbond/hbond.xlsx') distance_sheet = hbondxlsx.add_worksheet('Distance') angle_sheet = hbondxlsx.add_worksheet('Angle') # 写入header col = 0 row = 0 for hbond_mask in distance_mask: distance_sheet.write(row, col, hbond_mask) col += 1 col = 0 row = 0 for hbond_mask in angle_mask: angle_sheet.write(row, col, hbond_mask) col += 1 # 计算氢键距离 dist = pt.distance(traj, distance_mask) print('\nAll Hbond Distance: \n', dist, end='\n') # 计算氢键角度 angle = pt.angle(traj, angle_mask) print('\nAll Hbond Angle: \n', angle, end='\n') print('\nSaving Data...', end='\n') # 写入氢键长度角度数据 row = 1 col = 0 for i in dist[:]: for j in i[:]: distance_sheet.write(row, col, j) row += 1 col += 1 row = 1 row = 1 col = 0 for l in angle[:]: for k in l[:]: angle_sheet.write(row, col, k) row += 1 col += 1 row = 1 hbondxlsx.close() print('\nDistance and Angle Raw Data(hbond.xlsx) saved.', end='\n') print('\nH Bond Analysis Complete\n') print(''.center(80, '*'))
import pytraj as pt from pytraj.testing import Timer traj = pt.iterload('GAAC3.1000frames.nc', 'GAAC.parm7', frame_slice=(0, 1000)) hb = pt.hbond(traj, '!:WAT') masklist = hb._amber_mask() cpp_cm = ['distance ' + _ for _ in masklist] cpp_mask = '\n'.join(cpp_cm) @Timer() def test_pytraj(): print('pytraj') traj = pt.iterload('GAAC3.1000frames.nc', 'GAAC.parm7', frame_slice=(0, 1000)) data = pt.distance(traj, masklist) #print(data) @Timer() def test_state(): print('cpptraj') state = pt.load_cpptraj_state(''' parm GAAC.parm7 trajin GAAC3.1000frames.nc 1 1000 {0}'''.format(cpp_mask)) state.run() #print(state.data[1:].values) test_pytraj() test_state() # timing output (seconds) with 1000 frames.
import pytraj as pt from pytraj.testing import Timer traj = pt.iterload('GAAC3.1000frames.nc', 'GAAC.parm7', frame_slice=(0, 1000)) hb = pt.hbond(traj, '!:WAT') masklist = hb._amber_mask() cpp_cm = ['distance ' + _ for _ in masklist] cpp_mask = '\n'.join(cpp_cm) @Timer() def test_pytraj(): print('pytraj') traj = pt.iterload('GAAC3.1000frames.nc', 'GAAC.parm7', frame_slice=(0, 1000)) data = pt.distance(traj, masklist) #print(data) @Timer() def test_state(): print('cpptraj') state = pt.load_cpptraj_state(''' parm GAAC.parm7 trajin GAAC3.1000frames.nc 1 1000 {0}'''.format(cpp_mask)) state.run() #print(state.data[1:].values)