MDMC.MD.packmol package

Submodules

MDMC.MD.packmol.packmol_setup module

A module containing a class for storing packmol systems and their metadata

class MDMC.MD.packmol.packmol_setup.PackmolSetup[source]

Bases: object

A class that stores structures and their metadata for use in a packmol generation. For an explanation of all the settings and constraints see: https://m3g.github.io/packmol/userguide.shtml#basic

add_box(structure: Structure, lengths: Tuple[float], origin: Tuple[float] = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0) None[source]

Add a cuboid box of randomly-packed structures. At least two of “lengths”, “density” or “number” must be filled in order to properly create the box. If “density” is provided, the size of the box may change to allow for a whole number of structures.

Parameters:
  • structure (Structure) – The Structure (atom or molecule) object to randomly fill the box with.

  • lengths (tuple) – A 3-tuple of xyz lengths for the box in angstroms.

  • origin (optional, tuple) – A 3-tuple of xyz coordinates for the origin of the box. Defaults to (0.,0.,0.).

  • density (optional, float) – The density of the structures within the box. Defaults to 0.

  • n_structures (optional, int) – An integer number of structures to fill the box with. Defaults to 0.

add_container(structure: Structure, dimensions: tuple, origin: tuple = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0, container_type: str = None) None[source]

Adds a container to the setup Only density or n_structures need to be provided at one time, as n_structures can be inferred from the density

Parameters:
  • structure (Structure) – A Structure (atom or molecule) object to be added to the container.

  • dimensions (tuple) – The size of the container either in xyz (3-tuple) or a single size (1-tuple) depending on the container type.

  • origin (tuple) – A 3-tuple containing the xyz coordinate for the origin of the container.

  • density (float) – A floating point number describing the density of the structures in the container in Ang^-3.

  • n_structures (int) – An integer number of structures to add to the container.

  • container_type (str) – The type of container to add. Currently only “cube”, “box” and “sphere” are supported.

add_cube(structure: Structure, size: float, origin: Tuple[float] = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0) None[source]

Add a cube of randomly-packed structures. At least two of “size”, “density” or “number” must be filled in order to properly create the cube. If “density” is provided, the size of the cube may change to allow for a whole number of structures.

Parameters:
  • structure (Structure) – The Structure (atom or molecule) object to randomly fill the cube with.

  • size (float) – The size (x y and z) of the cube in angstroms.

  • origin (tuple) – A 3-tuple of xyz coordinates indicating the origin of the cube. Defaults to (0.,0.,0.).

  • density (optional, float) – The density of the structures within the cube in Ang^-3.

  • n_structures (optional, int) – An integer number of structures to fill the cube with.

add_fixed_structure(structure: Structure, position: Tuple[float] = (0.0, 0.0, 0.0), rotation: Tuple[float] = (0.0, 0.0, 0.0), centre: bool = True) None[source]

Add a single structure (atom or molecule) in a fixed position to the setup.

Parameters:
  • structure (Structure) – The Structure object (atom or molecule) to be added to the setup.

  • position (optional, tuple) – A 3-tuple containing the xyz coordinates of the structure. Defaults to the origin (0.,0.,0.)

  • rotation (optional, tuple) – A 3-tuple containing the rotational angles of the structure (in radians). Defaults to (0.,0.,0.) (0 rotation in any direction). Meaningless if the structure is not a Molecule.

  • centre (optional, bool) – True if the structure is to be centred around the position or not. Defaults to True. Meaningless if the structure is not a Molecule.

add_sphere(structure: Structure, radius: float, origin: Tuple[float] = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0) None[source]

Add a sphere of randomly-packed structures. At least two of “size”, “density” or “number” must be filled in order to properly create the box. If “density” is provided, the size of the box may change to allow for a whole number of structures.

Parameters:
  • structure (Structure) – The Structure (atom or molecule) object to randomly fill the sphere with.

  • radius (float) – The radius of the sphere in angstroms.

  • origin (optional, tuple) – A 3-tuple of xyz coordinates for the centre of the sphere.

  • density (optional, float) – The density of the structures within the box. Defaults to 0.

  • n_structures (optional, int) – An integer number of structures to fill the box with. Defaults to 0.

get_max_sizes() Tuple[float][source]
Returns:

A 6-tuple of the minimum and maximum sizes of the setup in the following format: (x_min, y_min, z_min, x_max, y_max, z_max)

Return type:

tuple

get_settings() Tuple[dict, list[dict]][source]
Returns:

A tuple containing the whole-system and per-structure settings

Return type:

tuple

get_structures() Tuple[Structure][source]
Returns:

The set of Structure objects in the setup

Return type:

list

remove_structure(structure: Structure) None[source]

Remove a structure and associated setups from the system.

Parameters:

structure – The Structure (atom or molecule) object to remove from the setup.

static resolve_density(dimensions: Tuple[float], density: float = 0.0, container_type: str = None) tuple[source]

Takes a volume of type “box”, “cube”, or “sphere”, with nominal dimensions, tries to fill that volume to the given density, and changes the dimensions to ensure an integer number of structures will fit with the desired density.

Parameters:
  • dimensions (optional, tuple) – A tuple of the dimensions that affect the volume of the container.

  • density (optional, float) – A target density to achieve within the system.

  • container_type (str) – A string describing the type of container to use. Currently only “cube”, “box” and “sphere” are supported.

Returns:

A tuple containing (in order): 1) A tuple of the (possibly) revised dimensions of the volume 2) The number of structures needed to meet the density

Return type:

tuple

property tolerance: float

Get or set the tolerance of the packmol run (i.e. how far apart each atom must be)

Returns:

The tolerance of the distances between atoms

Return type:

float

validate_setup() None[source]

Ensures that the setup is valid - shows errors and warnings for issues with the setup

MDMC.MD.packmol.packmol_setup.calculate_volume(dimensions: Tuple[float], container_type: str = None) float[source]

A method to calculate the volume of a container given the dimensions.

Parameters:
  • dimensions – A tuple of floats that define the dimensions of the container.

  • container_type (str) – A string specifying the type of container. Currently only “cube”, “box” and “sphere” are supported.

Returns:

The volume of the container.

Return type:

float

MDMC.MD.packmol.packmol_wrapper module

A module that integrates packmol into MDMC

class MDMC.MD.packmol.packmol_wrapper.PackmolFiller(setup_data: PackmolSetup)[source]

Bases: object

A class representing a packmol run based on a PackmolSetup object.

fill_with_packmol() Universe[source]
Parameters:

setup_data – A PackmolSetup object containing the data for the packmol run.

Returns:

A Universe object filled with the structures requested by the PackmolSetup object.

Return type:

Universe

property filled_universe: Universe

Get the Universe filled via the packmol run.

Returns:

An MDMC Universe.

Return type:

Universe

get_packmol_files_path() str[source]

Get the path in which packmol files are placed and run.

Returns:

The path to the packmol files directory.

Return type:

str

get_packmol_output_path() str[source]

Obtains the name of the packmol output file, as defined by the input file. Returns an empty string if there is no input file name defined.

Returns:

The name of the packmol output file name.

Return type:

str

static get_packmol_path() str[source]

Returns a string containing the path to packmol from the PATH environment variable, if it exists. Otherwise, returns the current working directory if packmol is not in PATH.

property setup_data: PackmolSetup

The Packmol setup data for this run.

Returns:

The setup data for this run.

Return type:

PackmolSetup

Module contents

Interface with Packmol (https://m3g.github.io/packmol/)

class MDMC.MD.packmol.PackmolFiller(setup_data: PackmolSetup)[source]

Bases: object

A class representing a packmol run based on a PackmolSetup object.

fill_with_packmol() Universe[source]
Parameters:

setup_data – A PackmolSetup object containing the data for the packmol run.

Returns:

A Universe object filled with the structures requested by the PackmolSetup object.

Return type:

Universe

property filled_universe: Universe

Get the Universe filled via the packmol run.

Returns:

An MDMC Universe.

Return type:

Universe

get_packmol_files_path() str[source]

Get the path in which packmol files are placed and run.

Returns:

The path to the packmol files directory.

Return type:

str

get_packmol_output_path() str[source]

Obtains the name of the packmol output file, as defined by the input file. Returns an empty string if there is no input file name defined.

Returns:

The name of the packmol output file name.

Return type:

str

static get_packmol_path() str[source]

Returns a string containing the path to packmol from the PATH environment variable, if it exists. Otherwise, returns the current working directory if packmol is not in PATH.

property setup_data: PackmolSetup

The Packmol setup data for this run.

Returns:

The setup data for this run.

Return type:

PackmolSetup

class MDMC.MD.packmol.PackmolSetup[source]

Bases: object

A class that stores structures and their metadata for use in a packmol generation. For an explanation of all the settings and constraints see: https://m3g.github.io/packmol/userguide.shtml#basic

add_box(structure: Structure, lengths: Tuple[float], origin: Tuple[float] = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0) None[source]

Add a cuboid box of randomly-packed structures. At least two of “lengths”, “density” or “number” must be filled in order to properly create the box. If “density” is provided, the size of the box may change to allow for a whole number of structures.

Parameters:
  • structure (Structure) – The Structure (atom or molecule) object to randomly fill the box with.

  • lengths (tuple) – A 3-tuple of xyz lengths for the box in angstroms.

  • origin (optional, tuple) – A 3-tuple of xyz coordinates for the origin of the box. Defaults to (0.,0.,0.).

  • density (optional, float) – The density of the structures within the box. Defaults to 0.

  • n_structures (optional, int) – An integer number of structures to fill the box with. Defaults to 0.

add_container(structure: Structure, dimensions: tuple, origin: tuple = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0, container_type: str = None) None[source]

Adds a container to the setup Only density or n_structures need to be provided at one time, as n_structures can be inferred from the density

Parameters:
  • structure (Structure) – A Structure (atom or molecule) object to be added to the container.

  • dimensions (tuple) – The size of the container either in xyz (3-tuple) or a single size (1-tuple) depending on the container type.

  • origin (tuple) – A 3-tuple containing the xyz coordinate for the origin of the container.

  • density (float) – A floating point number describing the density of the structures in the container in Ang^-3.

  • n_structures (int) – An integer number of structures to add to the container.

  • container_type (str) – The type of container to add. Currently only “cube”, “box” and “sphere” are supported.

add_cube(structure: Structure, size: float, origin: Tuple[float] = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0) None[source]

Add a cube of randomly-packed structures. At least two of “size”, “density” or “number” must be filled in order to properly create the cube. If “density” is provided, the size of the cube may change to allow for a whole number of structures.

Parameters:
  • structure (Structure) – The Structure (atom or molecule) object to randomly fill the cube with.

  • size (float) – The size (x y and z) of the cube in angstroms.

  • origin (tuple) – A 3-tuple of xyz coordinates indicating the origin of the cube. Defaults to (0.,0.,0.).

  • density (optional, float) – The density of the structures within the cube in Ang^-3.

  • n_structures (optional, int) – An integer number of structures to fill the cube with.

add_fixed_structure(structure: Structure, position: Tuple[float] = (0.0, 0.0, 0.0), rotation: Tuple[float] = (0.0, 0.0, 0.0), centre: bool = True) None[source]

Add a single structure (atom or molecule) in a fixed position to the setup.

Parameters:
  • structure (Structure) – The Structure object (atom or molecule) to be added to the setup.

  • position (optional, tuple) – A 3-tuple containing the xyz coordinates of the structure. Defaults to the origin (0.,0.,0.)

  • rotation (optional, tuple) – A 3-tuple containing the rotational angles of the structure (in radians). Defaults to (0.,0.,0.) (0 rotation in any direction). Meaningless if the structure is not a Molecule.

  • centre (optional, bool) – True if the structure is to be centred around the position or not. Defaults to True. Meaningless if the structure is not a Molecule.

add_sphere(structure: Structure, radius: float, origin: Tuple[float] = (0.0, 0.0, 0.0), density: float = 0.0, n_structures: int = 0) None[source]

Add a sphere of randomly-packed structures. At least two of “size”, “density” or “number” must be filled in order to properly create the box. If “density” is provided, the size of the box may change to allow for a whole number of structures.

Parameters:
  • structure (Structure) – The Structure (atom or molecule) object to randomly fill the sphere with.

  • radius (float) – The radius of the sphere in angstroms.

  • origin (optional, tuple) – A 3-tuple of xyz coordinates for the centre of the sphere.

  • density (optional, float) – The density of the structures within the box. Defaults to 0.

  • n_structures (optional, int) – An integer number of structures to fill the box with. Defaults to 0.

get_max_sizes() Tuple[float][source]
Returns:

A 6-tuple of the minimum and maximum sizes of the setup in the following format: (x_min, y_min, z_min, x_max, y_max, z_max)

Return type:

tuple

get_settings() Tuple[dict, list[dict]][source]
Returns:

A tuple containing the whole-system and per-structure settings

Return type:

tuple

get_structures() Tuple[Structure][source]
Returns:

The set of Structure objects in the setup

Return type:

list

remove_structure(structure: Structure) None[source]

Remove a structure and associated setups from the system.

Parameters:

structure – The Structure (atom or molecule) object to remove from the setup.

static resolve_density(dimensions: Tuple[float], density: float = 0.0, container_type: str = None) tuple[source]

Takes a volume of type “box”, “cube”, or “sphere”, with nominal dimensions, tries to fill that volume to the given density, and changes the dimensions to ensure an integer number of structures will fit with the desired density.

Parameters:
  • dimensions (optional, tuple) – A tuple of the dimensions that affect the volume of the container.

  • density (optional, float) – A target density to achieve within the system.

  • container_type (str) – A string describing the type of container to use. Currently only “cube”, “box” and “sphere” are supported.

Returns:

A tuple containing (in order): 1) A tuple of the (possibly) revised dimensions of the volume 2) The number of structures needed to meet the density

Return type:

tuple

property tolerance: float

Get or set the tolerance of the packmol run (i.e. how far apart each atom must be)

Returns:

The tolerance of the distances between atoms

Return type:

float

validate_setup() None[source]

Ensures that the setup is valid - shows errors and warnings for issues with the setup