Beispiel #1
0
    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')
Beispiel #2
0
    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)
Beispiel #3
0
 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')]]
Beispiel #4
0
    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'))
Beispiel #5
0
    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.
Beispiel #8
0
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)