Trajectory¶
-
class Trajectory¶
A
Trajectory
is a chemistry file on the hard drive. It is the entry point of the chemfiles library.Public Functions
-
explicit Trajectory(std::string path, char mode = 'r', const std::string &format = "")¶
Open a file, automatically gessing the file format from the extension.
The
format
parameter should be a string formatted as"<format>"
or"<format>/<compression>"
.<format>
should be the format name (see the corresponding documentation section for the names) or an empty string.<compression>
should beGZ
for gzip files,BZ2
for bzip2 files, orXZ
for lzma/.xz files. If<compression>
is present, it will determine which compression method is used to read/write the file.For example,
format = "XYZ"
will force usage of XYZ format regardless of the file extension;format = "XYZ / GZ"
will additionally use gzip compression.If the
format
is an empty string, the file extension will be used to guess the format. If the file path ends with.gz
,.xz
, or.bz2
; the file will be treated as a compressed file and the next extension is used to guess the format. For exampleTrajectory("file.xyz.gz")
will open the file for reading using the XYZ format and the gzip compression method.- Parameters:
path – The file path. In
w
ora
modes, the file is created if it does not exist yet. Inr
mode, an exception is thrown is the file does not exist yet.mode – Opening mode for the file. Default mode is
r
for read. Other supported modes depends on the underlying format and arew
for write, anda
for append.w
mode discard any previously existing file.format – Specific format to use. Needed when there is no way to guess the format from the extension of the file, or when this guess would be wrong.
- Throws:
FileError – for all errors concerning the physical file: can not open it, can not read/write it, etc.
FormatError – if the file is not valid for the used format.
-
Frame read()¶
Read the next frame in the trajectory.
The trajectory must have been opened in read mode, and the underlying format must support reading.
This function throws a
FileError
if there are no more frames to read in the trajectory.- Throws:
FileError – for all errors concerning the physical file: can not open it, can not read/write it, etc.
FormatError – if the file is not valid for the used format, or if the format does not support reading.
-
Frame read_step(size_t step)¶
Read a single frame at specified
step
from the trajectory.The trajectory must have been opened in read mode, and the underlying format must support reading.
This function throws a
FileError
if the step is bigger than the number of steps in the trajectory.- Parameters:
step – step to read from the trajectory
- Throws:
FileError – for all errors concerning the physical file: can not open it, can not read/write it, etc.
FormatError – if the file is not valid for the used format, or if the format does not support reading.
-
void write(const Frame &frame)¶
Write a single frame to the trajectory.
The trajectory must have been opened in write or append mode, and the underlying format must support reading.
- Parameters:
frame – frame to write to this trajectory
- Throws:
FileError – for all errors concerning the physical file: can not open it, can not read/write it, etc.
FormatError – if the format does not support writing.
-
void set_topology(const Topology &topology)¶
Use the given
topology
instead of any pre-existingTopology
when reading or writing.This replace any topology in the file being read, or in the
Frame
being written.This is mainly usefull when a format does not define topological information, as it can be the case with some molecular dynamic formats.
- Parameters:
topology – the topology to use with this frame
- Throws:
Error – if the topology does not contain the right number of atoms at any step.
-
void set_topology(const std::string &filename, const std::string &format = "")¶
Use the
Topology
from the firstFrame
of theTrajectory
atfilename
instead any pre-existingTopology
when reading or writing.This replace any topology in the file being read, or in the
Frame
being written.This is mainly usefull when a format does not define topological information, as it can be the case with some molecular dynamic formats.
- Parameters:
filename – trajectory file path.
format – Specific format to use. Needed when there is no way to guess the format from the extension of the file, or when this guess would be wrong.
- Throws:
FileError – for all errors concerning the physical file: can not open it, can not read it, etc.
FormatError – if the file is not valid for the used format.
Error – if the topology does not contain the right number of atoms at any step.
-
void set_cell(const UnitCell &cell)¶
Use the given
cell
instead of any pre-existingUnitCell
when reading or writing.This replace any unit cell in the file being read, or in the
Frame
being written.This is mainly usefull when a format does not define unit cell information.
- Parameters:
cell – the unit cell to use with this frame
-
size_t nsteps() const¶
Get the number of steps (the number of frames) in this trajectory.
-
bool done() const¶
Check if all the frames in this trajectory have been read, i.e. if the last read frame is the last frame of the trajectory.
-
void close()¶
Close a trajectory, and synchronize all buffered content with the drive.
Calling any function on a closed trajectory will throw a
FileError
.
-
inline const std::string &path() const¶
Get the path used to open the trajectory
-
optional<span<const char>> memory_buffer() const¶
Get the memory buffer used for writing if the trajectory was created with
Trajectory::memory_writer
.If the trajectory was not created for writing to memory, this will return
nullopt
.
Public Static Functions
-
static Trajectory memory_reader(const char *data, size_t size, const std::string &format)¶
Read a memory buffer as though it were a formatted file
The
format
parameter should be follow the same rules as in the mainTrajectory
constructor.- Parameters:
data – The start of the memory buffer used to store the file. It does not need to be null terminated.
size – The size of the memory buffer.
format – Specific format to use.
- Throws:
FileError – If the compression given in
format
is not supportedFormatError – if the data in the buffer is not valid for the used format, or the format does not support reading from a memory buffer
-
static Trajectory memory_writer(const std::string &format)¶
Write to a memory buffer as though it were a formatted file
The
format
parameter should be follow the same rules as in the mainTrajectory
constructor, except that compression specification are not supported.To retreive the memory written to by the returned
Trajectory
object, make a call to thememory_buffer
function.- Parameters:
format – Specific format to use.
- Throws:
FileError – If any compression is given in
format
FormatError – if the format does not support writing to a memory buffer
-
explicit Trajectory(std::string path, char mode = 'r', const std::string &format = "")¶