Misc

Try pytraj online:

http://mybinder.org/assets/images/logo.svg

seperate module, only use stdlib If want to use external package, import it inside the function

This module stores all useful functions that does not fit to anywhere else.

pytraj.utils.tools.as_2darray(traj_or_xyz)

reshape traj.xyz to 2d array, shape=(n_frames, n_atoms * 3)

Notes

if traj is mutable, this method return a view of its coordinates.

Examples

>>> import pytraj as pt
>>> traj = pt.load_sample_data('tz2')
>>> traj.xyz.shape
(10, 5293, 3)
>>> as_2darray(traj).shape
(10, 15879)
>>> as_2darray(traj.xyz).shape
(10, 15879)
pytraj.utils.tools.as_3darray(xyz)

reshape xyz to 3d array, shape=(n_frames, n_atoms, 3)

Examples

>>> import pytraj as pt
>>> traj = pt.load_sample_data('tz2')
>>> traj.xyz.shape
(10, 5293, 3)
>>> xyz_2d = as_2darray(traj)
>>> xyz_2d.shape
(10, 15879)
>>> as_3darray(xyz_2d).shape
(10, 5293, 3)
>>> as_3darray(traj.xyz)
Traceback (most recent call last):
    ...
ValueError: ndim must be 2
pytraj.utils.tools.block_average(self, n_chunk)

average by chunk

Examples

>>> block_average(range(30), 3)
array([  4.5,  14.5,  24.5])
pytraj.utils.tools.compose(*funcs)

Notes: copied from pandas (added pytraj’s example) see license in pytraj/license/

Compose 2 or more callables

Examples

>>> import pytraj as pt
>>> from pytraj.testing import get_fn
>>> func = compose(pt.calc_radgyr, pt.iterload)
>>> fname, tname = get_fn('tz2')
>>> func(fname, tname)
array([ 18.91114428,  18.93654996,  18.84969884,  18.90449256,
        18.8568644 ,  18.88917208,  18.9430491 ,  18.88878079,
        18.91669565,  18.87069722])
pytraj.utils.tools.concat_dict(iterables)

concat dict

Examples

>>> dict_0 = {'x' : [1, 2, 3,]}
>>> dict_1 = {'x' : [4, 5]}
>>> concat_dict((dict_0, dict_1))
OrderedDict([('x', array([1, 2, 3, 4, 5]))])
pytraj.utils.tools.dict_to_ndarray(dict_of_array)

convert OrderedDict to numpy array

Examples

>>> import pytraj as pt
>>> traj = pt.load_sample_data('tz2')
>>> dslist = pt.multidihedral(traj, dihedral_types='phi psi', resrange='2', dtype='dict')
>>> list(dslist.keys())
['phi:2', 'psi:2']
>>> dict_to_ndarray(dslist)
array([[-128.72617304, -109.44321317, -130.93278259, ..., -146.70146067,
        -121.58263643, -112.74485175],
       [ 150.11249102,  142.52303293,  131.11609265, ...,  123.44883266,
         141.18992429,  120.03168126]])
pytraj.utils.tools.dir_(obj)

return a list of obj’s attributes with no private method

pytraj.utils.tools.estimate_size(n_frames, n_atoms, dtype='f8')

return MB

>>> import pytraj as pt
>>> traj = pt.datafiles.load_tz2_ortho()
>>> estimate_size(traj.n_frames, traj.n_atoms, 'f8')
1.2114715576171875
>>> estimate_size(traj.n_frames, traj.n_atoms, 'f4')
0.6057357788085938
pytraj.utils.tools.flatten(x)

Returns a single, flat list which contains all elements retrieved from the sequence and all recursively contained sub-sequences (iterables).

Notes

from: http://kogs-www.informatik.uni-hamburg.de/~meine/python_tricks

Examples

>>> [1, 2, [3,4], (5,6)]
[1, 2, [3, 4], (5, 6)]
>>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, (8,9,10)])
[1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10]
pytraj.utils.tools.grep_key(self, key)

grep key

Examples

>>> import pytraj as pt
>>> traj  = pt.load_sample_data('tz2')
>>> dslist = pt.calc_multidihedral(traj, dtype='dataset')
>>> pt.tools.grep_key(dslist, 'psi').values[0]
array([ 176.6155643 ,  166.82129574,  168.79510009,  167.42561927,
        151.18334989,  134.17610997,  160.99207908,  165.1126967 ,
        147.94332109,  145.42901383])
pytraj.utils.tools.groupby(key, seq)

Examples

>>> names = ['Alice', 'Bob', 'Charlie', 'Dan', 'Edith', 'Frank']
>>> groupby(len, names)
{3: ['Bob', 'Dan'], 5: ['Alice', 'Edith', 'Frank'], 7: ['Charlie']}
pytraj.utils.tools.iteritems(d, **kw)

Return an iterator over the (key, value) pairs of a dictionary.

Examples

>>> for k, v in iteritems({'x': 3, 'y': 4}): print(k, v) : 
x 3
y 4
pytraj.utils.tools.make_fake_topology(n_atoms)

make fake Topology, just for writing xyz array to supported formats (netcdf, dcd, trr, ...)

>>> import pytraj as pt
>>> top = pt.tools.make_fake_topology(100)
>>> top.n_atoms
100
>>> isinstance(top, pt.Topology)
True
>>> import numpy as np
>>> xyz = np.random.rand(10*100*3).reshape(10, 100, 3)
>>> traj0 = pt.Trajectory(xyz=xyz, top=top)
>>> pt.write_traj('output/test.nc', traj0, overwrite=True)
>>> traj = pt.iterload('output/test.nc', top=top)
>>> traj.n_atoms
100
pytraj.utils.tools.mean_and_error(a1, a2)

calculate mean and error from two 1D array-like

Examples

>>> import pytraj as pt
>>> a0 = [2, 4, 6]
>>> a1 = [3, 5, 7]
>>> mean_and_error(a0, a1)
(4.5, 0.5)
pytraj.utils.tools.merge_coordinates(iterables)

merge_coordinates from frames

Examples

>>> import pytraj as pt
>>> traj = pt.load_sample_data('tz2')
>>> merge_coordinates(traj(0, 3)) 
array([[ 15.55458927,  28.54844856,  17.18908691],
       [ 16.20579147,  29.07935524,  17.74959946],
       [ 14.95065975,  29.27651787,  16.83513069],
       ...,
       [ 34.09399796,   7.88915873,  15.6500845 ],
       [ 34.4160347 ,   8.53098011,  15.01716137],
       [ 34.29132462,   8.27471733,  16.50368881]])
pytraj.utils.tools.merge_frame_from_trajs(trajlist)

Examples

>>> import numpy as np
>>> import pytraj as pt
>>> traj0 = pt.load_sample_data('tz2')[:3]
>>> traj1 = pt.load_sample_data('tz2')[3:6]
>>> traj2 = pt.load_sample_data('tz2')[6:9]
>>> print(traj0.n_atoms, traj1.n_atoms, traj2.n_atoms)
5293 5293 5293
>>> for frame in pt.tools.merge_frame_from_trajs((traj0, traj1, traj2)): print(frame)
<Frame with 15879 atoms>
<Frame with 15879 atoms>
<Frame with 15879 atoms>
pytraj.utils.tools.merge_frames(iterables)

merge from frames to a single Frame. Order matters. Examples ——– >>> import pytraj as pt >>> traj = pt.load_sample_data(‘tz2’) >>> traj[0] <Frame with 5293 atoms> >>> merge_frames(traj(0, 3)) <Frame with 15879 atoms>

pytraj.utils.tools.merge_trajs(traj1, traj2, start_new_mol=True, n_frames=None)

Notes

Code might be changed

Examples

>>> import pytraj as pt
>>> import numpy as np
>>> traj1 = pt.load_sample_data('ala3')[:1]
>>> traj2 = pt.load_sample_data('tz2')[:1]
>>> traj3 = merge_trajs(traj1, traj2)
>>> # from frame_iter for saving memory
>>> traj3 = merge_trajs((traj1(0, 10, 2), traj1.top), (traj2(100, 110, 2), traj2.top), n_frames=6)
>>> # raise error if not having the same n_frames
>>> traj4 = pt.load_sample_data('tz2')[:]
>>> traj4.n_frames
10
>>> traj1.n_frames
1
>>> merge_trajs(traj1, traj4)
Traceback (most recent call last):
    ...
ValueError: must have the same n_frames
pytraj.utils.tools.moving_average(data, n)

moving average

Notes

from stackoverflow

Examples

>>> moving_average([1, 2, 3, 4, 6], 2)
array([ 0.5,  1.5,  2.5,  3.5,  5. ])
pytraj.utils.tools.n_grams(a, n)
Parameters:

a : sequence

n : number of elements

asarray : bool, default False

if False: return an iterator if True: return a numpy array

Notes

adapted from: http://sahandsaba.com/thirty-python-language-features-and-tricks-you-may-not-know.html

Examples

>>> list(n_grams([2, 3, 4 ,5], 2))
[(2, 3), (3, 4), (4, 5)]
pytraj.utils.tools.read_gaussian_output(filename=None, top=None)

return a pytraj.trajectory.Trajectory object

Parameters:

fname : str, filename

top : {str, Topology}, optional, default None

pytraj.Topology or a filename or None if None, use antechamber to generate mol2 file, need set $AMBERHOME env

pytraj.utils.tools.read_to_array(fname)

read text from file to numpy array

pytraj.utils.tools.rmsd(a1, a2, flatten=True)

rmsd for two array with the same shape

Parameters:

a1, a2: np.ndarray

flatten : bool, default True

if True: always flatten two input arrays

Notes

This method is different from pytraj.rmsd

Examples

>>> import pytraj as pt
>>> t0 = pt.load_sample_data('ala3')
>>> t1 = t0[:]
>>> t1.xyz += 1.
>>> rmsd(t0.xyz, t1.xyz)
1.0
pytraj.utils.tools.rmsd_1darray(a1, a2)

rmsd of a1 and a2

Examples

>>> a0 = [1, 3, 4]
>>> a1 = [1.4, 3.5, 4.2]
>>> rmsd_1darray(a0, a1)
0.3872983346207417
>>> rmsd_1darray(a0, [3, 4, 5, 7, 8])
Traceback (most recent call last):
    ...
ValueError: must have the same shape
pytraj.utils.tools.split(data, n_chunks)

split self.data to n_chunks

Notes

same as numpy.array_split

Examples

>>> for data in split(range(30), 3): print(data)
[0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29]
pytraj.utils.tools.split_and_write_traj(self, n_chunks=None, root_name='trajx', ext='nc', *args, **kwd)

Examples

>>> import pytraj as pt
>>> traj = pt.load_sample_data('tz2')
>>> split_and_write_traj(traj, n_chunks=3, root_name='output/trajx', overwrite=True)
pytraj.utils.tools.split_traj_by_residues(traj, start=0, stop=-1, step=1)

return a generator

Examples

>>> import pytraj as pt
>>> traj = pt.datafiles.load_rna()
>>> g = pt.tools.split_traj_by_residues(traj)
>>> t0 = next(g)
>>> print(t0.top.n_residues)
1