Skip to content

Commit

Permalink
Merge f47e09c into 558466c
Browse files Browse the repository at this point in the history
  • Loading branch information
hainm committed Mar 5, 2019
2 parents 558466c + f47e09c commit dbc5a15
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 0 deletions.
1 change: 1 addition & 0 deletions pytraj/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@
from .all_actions import xcorr
from .all_actions import ti
from .all_actions import lipidscd
from .all_actions import xtalsymm

from .analysis.matrix import dist as distance_matrix
from .analysis import matrix
Expand Down
45 changes: 45 additions & 0 deletions pytraj/all_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@
'rotdif',
'ti',
'lipidscd',
'xtalsymm',
]


Expand Down Expand Up @@ -3064,6 +3065,50 @@ def lipidscd(traj, mask='', options='', dtype='dict'):
return get_data_from_dtype(c_dslist, dtype=dtype)


@super_dispatch()
def xtalsymm(traj, mask='', options='', ref=None, **kwargs):
'''
Parameters
----------
traj : Mutable `pytraj.Trajectory`
mask : str, default '' (all)
options : str, extra cpptraj's options
See `pytraj.info("xtalsymm")` for further information.
NOTE: Should not provide 'mask' or 'reference' in `options`, use the keyword arguments.
ref : Frame | Trajectory
Reference frame
kwargs : dummy key words arguments for `super_dispatch`
Examples
--------
>>> pytraj.xtalsymm(traj, mask=':1-16', ref=ref, options="group P22(1)2(1) na 2 nb 1 nc 1") # doctest: +SKIP
'''
top = traj.top
command = ' '.join((mask, options))

c_dslist = CpptrajDatasetList()

if ref is not None:
c_dslist.add('reference', name='xtalsymm_ref')
c_dslist[0].top = top
c_dslist[0].add_frame(ref)
command = ' '.join((command, 'reference'))

act = c_action.Action_XtalSymm()
act.read_input(command, top=top, dslist=c_dslist)
act.setup(top)

for frame in traj:
act.compute(frame)
act.post_process()

# remove ref
c_dslist._pop(0)

return traj


def analyze_modes(mode_type,
eigenvectors,
eigenvalues,
Expand Down
10 changes: 10 additions & 0 deletions pytraj/analysis/c_action/c_action.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -959,3 +959,13 @@ cdef extern from "Action_Watershell.h":
cdef class Action_Watershell(Action):
cdef _Action_Watershell* thisptr


cdef extern from "Action_XtalSymm.h":
cdef cppclass _Action_XtalSymm "Action_XtalSymm" (_Action) nogil:
_Action_XtalSymm()
_DispatchObject * Alloc()
void Help()


cdef class Action_XtalSymm(Action):
cdef _Action_XtalSymm* thisptr
13 changes: 13 additions & 0 deletions pytraj/analysis/c_action/c_action.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1292,3 +1292,16 @@ cdef class Action_Watershell(Action):

def help(self):
self.thisptr.Help()

cdef class Action_XtalSymm(Action):
def __cinit__(self):
self.baseptr = <_Action*> new _Action_XtalSymm()
self.thisptr = <_Action_XtalSymm*> self.baseptr
self.own_memory = True

def __dealloc__(self):
if self.baseptr is not NULL and self.own_memory:
del self.baseptr

def help(self):
self.thisptr.Help()
25 changes: 25 additions & 0 deletions tests/test_analysis/test_xtalsymm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import os
import pytraj as pt
from pytraj.testing import cpptraj_test_dir, aa_eq


def test_xtalsymm(tmpdir):
with tmpdir.as_cwd():
x6dky_parm = os.path.join(cpptraj_test_dir, 'x6dky.parm7')
x6dky_tname = os.path.join(cpptraj_test_dir, 'mdXtal.nc')
x6dky_refname = os.path.join(cpptraj_test_dir, 'mdXtal.inpcrd')
state = pt.load_cpptraj_state(
"""
parm {parm}
trajin {trajin}
reference {reference}
xtalsymm :1-16 reference group P22(1)2(1) na 2 nb 1 nc 1
trajout mdAsuOnly.pdb
""".format(parm=x6dky_parm, trajin=x6dky_tname, reference=x6dky_refname))
state.run()

traj = pt.load(x6dky_tname, x6dky_parm)
ref = pt.load(x6dky_refname, traj.top)
pt.xtalsymm(traj, mask=':1-16', ref=ref, options="group P22(1)2(1) na 2 nb 1 nc 1")
c_traj = pt.load('mdAsuOnly.pdb')
aa_eq(traj.xyz, c_traj.xyz, decimal=2)

0 comments on commit dbc5a15

Please sign in to comment.