nanover.ase.converter module

Module containing methods for converting between ASE simulations consisting of Atoms and the NanoVer FrameData object for transmission to NanoVer clients.

nanover.ase.converter.add_ase_box_vectors_to_frame_data(data: FrameData, ase_atoms: Atoms)

Adds the periodic box vectors from the given ASE Atoms object to the given FrameData.

Parameters:
  • dataFrameData upon which to add periodic box vectors.

  • ase_atomsAtoms from which to extract periodic box vectors.

nanover.ase.converter.add_ase_forces_to_frame_data(data: FrameData, ase_atoms: Atoms)

Adds ASE forces to the frame data, converting to kJ mol-1 per nanometer. If the ASE calculator is an ImdCalculator, removes the iMD forces from the ASE forces to deliver the system forces (iMD forces delivered separately elsewhere).

Parameters:
  • dataFrameData to add atom forces to.

  • ase_atoms – ASE Atoms to add particle positions to.

nanover.ase.converter.add_ase_positions_to_frame_data(data: FrameData, positions: ndarray[Any, dtype[_ScalarType_co]])

Adds ASE positions to the frame data, converting to nanometers.

Parameters:
  • dataFrameData to add atom positions to.

  • positions – Array of atomic positions, in angstroms.

nanover.ase.converter.add_ase_state_to_frame_data(frame_data: FrameData, ase_atoms: Atoms)

Adds simulation state information to the frame, consisting of the potential energy and kinetic energy of the molecular system. If the ASE calculator is an ImdCalculator, removes the iMD energy from the ASE potential energy to deliver the system potential energy (iMD energy delivered separately elsewhere).

Parameters:
  • frame_data – Frame data to add ASE state information to.

  • ase_atoms – The ASE atoms from which to extract state information.

nanover.ase.converter.add_ase_topology_to_frame_data(frame_data: FrameData, ase_atoms: Atoms, generate_bonds=True)

Generates a topology for the current state of the atoms and adds it to the frame.

Since ASE atoms have no concept of bonds, they are generated using distance criteria.

Parameters:
  • frame_data – Frame data to add topology information to.

  • ase_atoms – ASE atoms to extract topology information from.

nanover.ase.converter.add_ase_velocities_to_frame_data(data: FrameData, ase_atoms: Atoms)

Adds ASE velocities to the frame data, converting to nanometers per picosecond.

Parameters:
  • dataFrameData to add atom velocities to.

  • ase_atoms – ASE Atoms to add particle positions to.

nanover.ase.converter.add_frame_data_positions_to_ase(frame_data, ase_atoms)

Adds frame data particle positions to ASE atoms, converting to angstroms.

Parameters:
  • frame_dataFrameData from which to extract positions.

  • ase_atoms – ASE Atoms to add particle positions to.

nanover.ase.converter.add_frame_data_topology_to_ase(frame_data: FrameData, atoms: Atoms)

Adds frame data topology information to ASE Atoms.

Since ASE Atoms do not have a concept of bonds, this just adds particle elements.

Parameters:
  • frame_dataFrameData from which to extract topology.

  • atoms – ASE Atoms to add element data to.

nanover.ase.converter.ase_atoms_to_frame_data(ase_atoms: Atoms, *, topology: bool, **kwargs) FrameData
nanover.ase.converter.ase_to_frame_data(ase_atoms: Atoms, positions=True, topology=True, state=True, box_vectors=True, generate_bonds=True, include_velocities=False, include_forces=False) FrameData

Constructs a NanoVer frame from the state of the atoms in an ASE simulation.

Parameters:
  • ase_atoms – The ASE atoms object representing the state of the simulation to send.

  • positions – Whether to add positions to the frame.

  • topology – Whether to generate the current state of the topology and add it to the frame.

  • state – Whether to add additional state information such as energies.

  • box_vectors – Whether to add the box vectors to the frame data.

  • generate_bonds – Whether to generate bonds for the topology.

  • include_velocities – Whether to includes per particle velocities.

  • include_forces – Whether to include per particle forces.

Returns:

NanoVer frame.

Raises:

AttributeError Raised if state is True, and ase_atoms has no calculator attached.

Example

>>> atoms = Atoms('CO', positions=[(0, 0, 0), (0, 0, 1.1)], cell=[2, 2, 2])
>>> frame = ase_to_frame_data(atoms, state=False)
>>> frame.particle_count
2
>>> frame.bonds
[[0, 1]]
>>> frame.particle_elements
[6, 8]
nanover.ase.converter.frame_data_to_ase(frame_data: FrameData, positions: bool = True, topology: bool = True, ase_atoms: Atoms | None = None) Atoms

Constructs an ASE Atoms object from a NanoVer FrameData.

Parameters:
  • frame_data – The NanoVer FrameData.

  • positions – Whether to add positions to the ASE atoms.

  • topology – Whether to add topology information within the frame data to ASE.

  • ase_atoms – Optional ASE Atoms object, which will have its positions replaced. If the flag topology is set, then a new object will still be constructed.

Returns:

ASE Atoms updated or created with the data contained in the NanoVer frame.

Example:

>>> frame = FrameData()
>>> frame.particle_elements = [6, 8]
>>> frame.particle_positions = [[0,0,0], [0,0, 0.11]]
>>> atoms = frame_data_to_ase(frame)
>>> atoms.symbols
Symbols('CO')
nanover.ase.converter.generate_bonds_from_ase(atoms: Atoms)

Generates bonds for the given configuration of ASE atoms using a distance criterion.

A bond is placed between two atoms if the distance between them is less than 0.6 times the VDW radii of the atoms.

Parameters:

atoms – ASE atoms to generate bonds for.

Returns:

A list of pairs of atom indexes representing bonds.

Example

The following example produces a bond between the two atoms in a carbon monoxide molecule:

>>> co = Atoms('CO', positions=[(0, 0, 0), (0, 0, 1.1)], cell=[2, 2, 2])
>>> generate_bonds(co)
[[0, 1]]
nanover.ase.converter.get_radius_of_element(symbol: str, default=1.0)

Gets the radius of an atom in Angstroms.

Parameters:
  • symbol – The chemical symbol representing the element.

  • default – Default radius to use if the radius for the given chemical symbol is not known.

Returns:

The VDW radius of the atom in angstroms.