Pontibus force field and solvation Settings#

Protocol settings specific to pontibus force field and solvation behaviour.

Protocol Solvation Settings#

pydantic model pontibus.utils.settings.BasePontibusSolvationSettings#

Base settings for use with Pontibus

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field number_of_solvent_molecules: int | None = None#

The number of solvent molecules to add.

Note

  • Cannot be defined alongside solvent_padding.

field box_vectors: _is_box_shape)] | None = None#

Simulation box vectors.

Note

  • Cannot be defined alongside target_density.

  • If defined, number_of_solvent_molecules must be defined.

field solvent_padding: partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit='nanometer', convert=True))] | None = <Quantity(1.2, 'nanometer')>#

Minimum distance from any solute bounding sphere to the edge of the box.

Note

  • Cannot be defined if number_of_solvent_molecules is defined.

field box_shape: Literal['cube', 'dodecahedron'] | None = 'cube'#

The shape of the periodic box to create.

field assign_solvent_charges: bool = False#

If True, assign solvent charges based on the input solvent molecule. If False, rely on library charges.

Notes

  • If no partial charges are set in the input molecule, the molecule will be charged using the approach defined in partial_charge_settings.

  • If not using ExtendedSolventComponent, the input molecule will be created using SolventComponent.smiles and partial charges will be set using the approach defined in partial_charge_settings.

field packing_tolerance: partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit='nanometer', convert=True))] = <Quantity(0.2, 'nanometer')>#

Packmol setting; minimum spacing between molecules in units of distance. 2.0 A is recommended when packing proteins, but can go as low as 0.5 A to help with convergence.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit=’nanometer’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always

field target_density: partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit='grams / mL', convert=True))] | None = <Quantity(0.95, 'gram / milliliter')>#

Target mass density for the solvated system in units compatible with g / mL. A target_density value of 0.95 * unit.grams / unit.mL works in many cases, but may lead to an overly dense system. This is especially true when defining number_of_solvent_molecules, in this case a value of 0.715 * unit.grams / unit.mL is recommended.

Default: 0.95 * unit.grams / unit.mL.

Notes

  • Cannot be defined alongside box_vectors

pydantic model pontibus.utils.settings.PackmolSolvationSettings#

Settings defining how to solvate the system using Packmol.

Notes

  • This is currently limited to the options allowed by Interchange’s solvate_topology_nonwater.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field number_of_solvent_molecules: int | None = None#

The number of solvent molecules to add.

Note

  • Cannot be defined alongside solvent_padding.

field box_vectors: BoxQuantity | None = None#

Simulation box vectors.

Note

  • Cannot be defined alongside target_density.

  • If defined, number_of_solvent_molecules must be defined.

field solvent_padding: NanometerQuantity | None = <Quantity(1.2, 'nanometer')>#

Minimum distance from any solute bounding sphere to the edge of the box.

Note

  • Cannot be defined if number_of_solvent_molecules is defined.

field box_shape: Literal['cube', 'dodecahedron'] | None = 'cube'#

The shape of the periodic box to create.

field assign_solvent_charges: bool = False#

If True, assign solvent charges based on the input solvent molecule. If False, rely on library charges.

Notes

  • If no partial charges are set in the input molecule, the molecule will be charged using the approach defined in partial_charge_settings.

  • If not using ExtendedSolventComponent, the input molecule will be created using SolventComponent.smiles and partial charges will be set using the approach defined in partial_charge_settings.

field packing_tolerance: NanometerQuantity = <Quantity(0.2, 'nanometer')>#

Packmol setting; minimum spacing between molecules in units of distance. 2.0 A is recommended when packing proteins, but can go as low as 0.5 A to help with convergence.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit=’nanometer’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always

field target_density: GramsPerMolQuantity | None = <Quantity(0.95, 'gram / milliliter')>#

Target mass density for the solvated system in units compatible with g / mL. A target_density value of 0.95 * unit.grams / unit.mL works in many cases, but may lead to an overly dense system. This is especially true when defining number_of_solvent_molecules, in this case a value of 0.715 * unit.grams / unit.mL is recommended.

Default: 0.95 * unit.grams / unit.mL.

Notes

  • Cannot be defined alongside box_vectors

pydantic model pontibus.utils.settings.InterchangeOpenMMSolvationSettings#

Settings defining how to solvate the system using OpenMM.

Notes

  • This settings class uses Interchange for system

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field number_of_solvent_molecules: int | None = None#

The number of solvent molecules to add.

Note

  • Cannot be defined alongside solvent_padding.

field box_vectors: BoxQuantity | None = None#

Simulation box vectors.

Note

  • Cannot be defined alongside target_density.

  • If defined, number_of_solvent_molecules must be defined.

field solvent_padding: NanometerQuantity | None = <Quantity(1.2, 'nanometer')>#

Minimum distance from any solute bounding sphere to the edge of the box.

Note

  • Cannot be defined if number_of_solvent_molecules is defined.

field box_shape: Literal['cube', 'dodecahedron'] | None = 'cube'#

The shape of the periodic box to create.

field assign_solvent_charges: bool = False#

If True, assign solvent charges based on the input solvent molecule. If False, rely on library charges.

Notes

  • If no partial charges are set in the input molecule, the molecule will be charged using the approach defined in partial_charge_settings.

  • If not using ExtendedSolventComponent, the input molecule will be created using SolventComponent.smiles and partial charges will be set using the approach defined in partial_charge_settings.

field packing_tolerance: NanometerQuantity = <Quantity(0.2, 'nanometer')>#

Packmol setting; minimum spacing between molecules in units of distance. 2.0 A is recommended when packing proteins, but can go as low as 0.5 A to help with convergence.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit=’nanometer’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always

field target_density: GramsPerMolQuantity | None = <Quantity(0.95, 'gram / milliliter')>#

Target mass density for the solvated system in units compatible with g / mL. A target_density value of 0.95 * unit.grams / unit.mL works in many cases, but may lead to an overly dense system. This is especially true when defining number_of_solvent_molecules, in this case a value of 0.715 * unit.grams / unit.mL is recommended.

Default: 0.95 * unit.grams / unit.mL.

Notes

  • Cannot be defined alongside box_vectors

Protocol Force Field Assignment Settings#

pydantic model pontibus.utils.settings.InterchangeFFSettings#

Parameters to set up the force field using Interchange and the OpenFF toolkit.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field hydrogen_mass: float = 3.023841#

Mass to be repartitioned to hydrogens from neighbouring heavy atoms (in amu), default 3.0

field forcefields: list[str] = ['openff-2.0.0.offxml', 'tip3p.offxml']#

List of force field ffxmls to apply

field nonbonded_method: Literal['pme', 'nocutoff'] = 'pme'#

Method for treating nonbonded interactions, currently only PME and NoCutoff are allowed. Default PME.

field nonbonded_cutoff: partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit='nanometer', convert=True))] = <Quantity(0.9, 'nanometer')>#

Cutoff value for short range nonbonded interactions. Default 1.0 * unit.nanometer.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit=’nanometer’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always

field switch_width: partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit='nanometer', convert=True))] = <Quantity(0.1, 'nanometer')>#

The width over which the VdW switching function is applied. Default 0.1 * unit.nanometer.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x71f28eb30f40>, unit=’nanometer’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always