The figure below represents how the basic classes of chemfiles are organized and how they interact together. Chemfiles is organized around a handful of public classes: Trajectory, Frame, Topology, Residue, Atom, UnitCell and Selection, all of which are presented here.


A trajectory is the main entry point of chemfiles. It reads one or many frames from a file on the disk using a specific format. The file type and the format are automatically determined from the extension.

A frame holds data for one step of a simulation, consisting in the positions for all the atoms; optionally the velocities for all the atoms; the topology and the unit cell of the system.

The topology describes the organization of the particles in the system. It contains a list of atoms in the system, and information about which atoms are bonded together. A residue is a group of atoms bonded together, which may or may not corresponds to molecules. When working with bio-molecules and specifically proteins from the PDB data bank, the residues should correspond to amino-acids in the protein.

The Atom class contains basic information about the atoms in the system: the name (if it is available), mass, kind of atom and so on. Atoms are not limited to plain chemical elements.

The UnitCell class describes the boundary conditions of the system: where are the boundaries, and what is the periodicity of theses boundaries. An unit cell can be of three types: Infinite, Orthorhombic or Triclinic. Infinite cells do not have any boundaries. Orthorhombic cells are defined by three orthogonal vectors, and triclinic cells are defined by three vectors without any constrain.

The Property class store additional data or metadata associated with frames, residues or atoms. Properties can store string values, numeric values, Boolean values or vector values.

Chemfiles also provides a selection language, implemented in the Selection class. This selection language allows the users to select a group of atoms from a frame using a selection string such as "(x < 45 and name O) or name C".