Trajectories and Frames
An N-body simulation, such as a molecular dynamics simulation, fundamentally consists of a set of frames - snapshots of the system describing the particles and their positions. A trajectory is a set of these frames, forming a three dimensional ‘movie’. Simulations are essentially trajectories which are being generated on the fly.
Each frame consists of information about the system and the atoms within it. This data takes the form of values related to the frame (such as the system’s instantaneous temperature or potential energy) and arrays storing information about the atoms themselves (such as position or element symbol). Some of these data are updated each frame as the simulation progresses (such as particle positions, simulation time or system potential energy) whilst others remain constant throughout the simulation (such as element type or number of particles). NanoVer handles this by only updating values or arrays that change between frames; to find out more about this, please refer to Frame description.
The approach taken by NanoVer is to use a key-value system to store frames, as what is
available in a frame varies dramatically based on what is being simulated. NanoVer applications
use a set of standard keys to define common fields, such as ‘particle_positions’ for the the field
containing the coordinates of the particles in the system. See the python implementation of
FrameData
or some of our conversion
utilities for more examples.
For a basic interactive molecular simulation, a frame typically has the following fields:
Particle positions (we always use nanometers!)
Particle elements
Bond pairs
For a simulation of a protein, a frame will have additional fields, such as:
Particle residues
Residue names
Residue IDs
Residue chains
Chain names
While in a QM calculation, we may have:
Bond orders
If you need to customize a frame with your own data, you can - just pick a good key by which to identify it, and convert your data into either an array of integers, bytes, floats, strings, or a single value type such as integer, byte, float, string, or a JSON like Struct.
To learn more about the types of data you can send in a frame, or to see how to add data to a frame in practice, take a look at our frame tutorial notebook (see NanoVer Fundamentals).