The Gromacs TRR trajectory format is a lossless format like e.g. the DCD format (see DCD) and unlike the XTC format, which stores reduced precision coordinates. Therefore, if one wants to convert to Gromacs trajectories without loss of precision then one should use the TRR format.
The TRR format can store velocities and forces in addition to coordinates. It is also used by other Gromacs tools to store and process other data such as modes from a principal component analysis.
Changed in version 0.8.0.
The TRR I/O interface now uses libxdrfile2, which has seeking and indexing capabilities. Note that unlike libxdrfile before it, libxdrfile2 is distributed under the GNU GENERAL PUBLIC LICENSE, version 2 (or higher).
The following recipe by Ramon Crehuet shows how to convert modes stored in a NumPy-like array (e.g. from a PCA analysis with MMTK) to a TRR usable by Gromacs. The idea is to manually fill a Timestep with the desired values and then write it to a file with the appropriate TRRWriter. In order to respect the Gromacs format for modes in a TRR file, one must write the average coordinates in the first frame of the TRR and the modes into subsequent ones. The mode number is stored in the step attribute and the mode coordinates are filling the _pos attribute of Timestep:
# 'modes' is a mode object with M PCs, similar to a MxNx3 array
# 'xav' the average coordinates, a Nx3 array for N atoms
N = len(xav) # number of atoms, i.e. number of coordinates
W = Writer('pca.trr', numatoms=N) # TRR writer
ts = MDAnalysis.coordinates.TRR.Timestep(N) # TRR time step
# TRR handling requires 'has_x' to be set
# before low-level assignment to ts._pos.
# (likewise for 'has_v' and 'has_f' for assignment
# to ts._velocites and ts._forces). The default of
# the Timestep constructor is to set 'has_x' to True
# (but not 'has_v' or 'has_f') when only the number
# of atoms is passed.
for frame,mode in enumerate(modes[4:16]):
ts.lmbda = -1
if frame<=1:
ts._pos[:] = xav
else:
ts._pos[:] = mode.scaledToNorm(1.).array*10 # nm to angstroms
ts.frame = frame # manually change the frame number
ts.step = frame - 1
if frame <= 1:
ts.time = frame-1
else:
ts.time = mode.frequency
W.write(ts) # converts angstrom to nm for gmx
W.close()
Reading of Gromacs TRR trajectories.
See also
MDAnalysis.coordinates.xdrfile.libxdrfile2 for low-level bindings to the Gromacs trajectory file formats
The Timestep can be initialized with arg being
The constructor also takes the named arguments has_x, has_v, and has_f, which are used to set has_x, has_v, has_f. Depending on the arg use-case above, the defaults set for these flags will vary: 1. when arg is an integer has_x defaults to True and
has_v and has_f to False.
Changed in version 0.8.0: TRR Timestep objects are now fully aware of the existence or not of coordinate/velocity/force information in frames, reflected in the has_x, has_v, and has_f flags. Accessing either kind of information while the corresponding flag is set to False wil raise a NoDataError. Internally, however, the arrays are always populated, even when the flags are False; upon creation of a Timestep they are zero-filled, but this might not always be the case later on for properties flagged as False if the same Timestep instance is used to read from a TRR frame.
When doing low-level writing to _pos, _velocities, or The TRR :class:`Timestep constructor allows for the named boolean arguments has_x, has_v, and has_f to be passed for automatic setting of the corresponding flag. An exception to this is assignment to the full property array thus:
ts = MDAnalysis.coordinates.TRR.Timestep(N) # N being the number of atoms
ts._velocities = vel_array # Where vel_array is an existing array of shape (N, DIM)
# This will also automatically set 'has_v' to True.
Attempting to populate the array instead will, however, raise a NoDataError exception:
ts = MDAnalysis.coordinates.TRR.Timestep(N) # N being the number of atoms
ts._velocities[:] = vel_array # This will fail if 'has_v' hasn't been set to True.
Make a new Timestep containing a subset of the original Timestep.
ts.copy_slice(slice(start, stop, skip)) ts.copy_slice([list of indices])
Returns: | A Timestep object of the same type containing all header information and all atom information relevent to the selection. |
---|
Note
The selection must be a 0 based slice or array of the atom indices in this Timestep
New in version 0.8.
unitcell dimensions (A, B, C, alpha, beta, gamma)
volume of the unitcell
Read a Gromacs TRR trajectory.
Arguments: |
---|
sub
an numpy integer array of what subset of trajectory atoms to load into the timestep. Intended to work similarly to the ‘sub’ argument to gromac’s trjconv.
This is usefull when one has a Universe loaded with only an unsolvated protein, and wants to read a solvated trajectory.
The length of this array must be <= to the actual number of atoms in the trajectory, and equal to number of atoms in the Universe.
Returns a writer appropriate for filename.
Sets the default keywords start, step and delta (if available). numatoms is always set from Reader.numatoms.
See also
Reader.Writer() and MDAnalysis.Writer()
Returns a Gromacs TrjWriter for filename with the same parameters as this trajectory.
All values can be changed through keyword arguments.
Arguments: |
|
---|---|
Keywords: |
|
Returns: | appropriate TrjWriter |
Close xdr trajectory file if it was open.
Specific implementation of trajectory closing.
In-place conversion of forces array force from native units to base units.
By default, the input force is modified in place and also returned.
New in version 0.7.7.
In-place conversion of force array force from base units to native units.
By default, the input force is modified in place and also returned.
New in version 0.7.7.
In-place conversion of coordinate array x from native units to base units.
By default, the input x is modified in place and also returned.
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
Conversion of coordinate array x from base units to native units.
By default, the input x is modified in place and also returned.
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
Convert time t from native units to base units.
By default, the input t is modified in place and also returned (although note that scalar values t are passed by value in Python and hence an in-place modification has no effect on the caller.)
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
Convert time t from base units to native units.
By default, the input t is modified in place and also returned. (Also note that scalar values t are passed by value in Python and hence an in-place modification has no effect on the caller.)
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
In-place conversion of velocities array v from native units to base units.
By default, the input v is modified in place and also returned.
New in version 0.7.5.
In-place conversion of coordinate array v from base units to native units.
By default, the input v is modified in place and also returned.
New in version 0.7.5.
Time step length in ps.
The result is computed from the trajectory and cached. If for any reason the trajectory cannot be read then 0 is returned.
Time between two trajectory frames in picoseconds.
Frame number of the current time step.
This is a simple short cut to Timestep.frame.
Loads current trajectory offsets from filename (in numpy format). No error checking is performed.
Arguments: |
|
---|
Forward one step to next frame.
The number of publically available atoms that this reader will store in the timestep.
If ‘sub’ was not given in the ctor, then this value will just be the actual number of atoms in the underlying trajectory file. If however ‘sub’ was given, then this value is the number specified by the ‘sub’ sub-selection.
If for any reason the trajectory cannot be read then a negative value is returned.
Read the number of frames from the trajectory.
The result is cached. If for any reason the trajectory cannot be read then 0 is returned.
This takes a long time because the frames are counted by iterating through the whole trajectory.
Open xdr trajectory file.
Returns: | pointer to XDRFILE (and sets self.xdrfile) |
---|---|
Raises: | IOError with code EALREADY if file was already opened or ENOENT if the file cannot be found |
Position at beginning of trajectory
Saves current trajectory offsets into filename, in numpy format. A ”.npy” suffix will be appended to filename if not already present.
Arguments: |
|
---|
Time of the current frame in MDAnalysis time units (typically ps).
time = Timestep.frame * Reader.dt
Total length of the trajectory numframes * dt.
Write a Gromacs TRR trajectory.
Create a new TrjWriter
Arguments: |
|
---|---|
Keywords: |
|
Changed in version 0.8.0: The TRR writer is now able to write TRRs without coordnates/velocities/forces, depending on the properties available in the Timestep objects passed to write().
Specific implementation of trajectory closing.
Read dimensions from timestep ts and return Gromacs box vectors
In-place conversion of forces array force from native units to base units.
By default, the input force is modified in place and also returned.
New in version 0.7.7.
In-place conversion of force array force from base units to native units.
By default, the input force is modified in place and also returned.
New in version 0.7.7.
In-place conversion of coordinate array x from native units to base units.
By default, the input x is modified in place and also returned.
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
Conversion of coordinate array x from base units to native units.
By default, the input x is modified in place and also returned.
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
Convert time t from native units to base units.
By default, the input t is modified in place and also returned (although note that scalar values t are passed by value in Python and hence an in-place modification has no effect on the caller.)
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
Convert time t from base units to native units.
By default, the input t is modified in place and also returned. (Also note that scalar values t are passed by value in Python and hence an in-place modification has no effect on the caller.)
Changed in version 0.7.5: Keyword inplace can be set to False so that a modified copy is returned unless no conversion takes place, in which case the reference to the unmodified x is returned.
In-place conversion of velocities array v from native units to base units.
By default, the input v is modified in place and also returned.
New in version 0.7.5.
In-place conversion of coordinate array v from base units to native units.
By default, the input v is modified in place and also returned.
New in version 0.7.5.
Returns True if all values are within limit values of their formats.
Due to rounding, the test is asymmetric (and min is supposed to be negative):
min < x <= max
Arguments: |
|
---|---|
Returns: | boolean |
Read a Gromacs TRR trajectory.
Arguments: |
---|
sub
an numpy integer array of what subset of trajectory atoms to load into the timestep. Intended to work similarly to the ‘sub’ argument to gromac’s trjconv.
This is usefull when one has a Universe loaded with only an unsolvated protein, and wants to read a solvated trajectory.
The length of this array must be <= to the actual number of atoms in the trajectory, and equal to number of atoms in the Universe.
Write a Gromacs TRR trajectory.
Create a new TrjWriter
Arguments: |
|
---|---|
Keywords: |
|
The Timestep can be initialized with arg being
The constructor also takes the named arguments has_x, has_v, and has_f, which are used to set has_x, has_v, has_f. Depending on the arg use-case above, the defaults set for these flags will vary: 1. when arg is an integer has_x defaults to True and
has_v and has_f to False.
Changed in version 0.8.0: TRR Timestep objects are now fully aware of the existence or not of coordinate/velocity/force information in frames, reflected in the has_x, has_v, and has_f flags. Accessing either kind of information while the corresponding flag is set to False wil raise a NoDataError. Internally, however, the arrays are always populated, even when the flags are False; upon creation of a Timestep they are zero-filled, but this might not always be the case later on for properties flagged as False if the same Timestep instance is used to read from a TRR frame.
When doing low-level writing to _pos, _velocities, or The TRR :class:`Timestep constructor allows for the named boolean arguments has_x, has_v, and has_f to be passed for automatic setting of the corresponding flag. An exception to this is assignment to the full property array thus:
ts = MDAnalysis.coordinates.TRR.Timestep(N) # N being the number of atoms
ts._velocities = vel_array # Where vel_array is an existing array of shape (N, DIM)
# This will also automatically set 'has_v' to True.
Attempting to populate the array instead will, however, raise a NoDataError exception:
ts = MDAnalysis.coordinates.TRR.Timestep(N) # N being the number of atoms
ts._velocities[:] = vel_array # This will fail if 'has_v' hasn't been set to True.