# FOX.ff.lj_param

A module for estimating Lennard-Jones parameters.

Examples

>>> import pandas as pd
>>> from FOX import MultiMolecule, example_xyz, estimate_lennard_jones

>>> xyz_file: str = example_xyz
>>> atom_subset = ['Cd', 'Se', 'O']

>>> mol = MultiMolecule.from_xyz(xyz_file)
>>> rdf: pd.DataFrame = mol.init_rdf(atom_subset=atom_subset)
>>> param: pd.DataFrame = estimate_lennard_jones(rdf)

>>> print(param)
sigma (Angstrom)  epsilon (kj/mol)
Atom pairs
Cd Cd                   3.95          2.097554
Cd Se                   2.50          4.759017
Cd O                    2.20          3.360966
Se Se                   4.20          2.976106
Se O                    3.65          0.992538
O O                     2.15          6.676584


## Index

 estimate_lj(rdf[, temperature, sigma_estimate]) Estimate the Lennard-Jones $$\sigma$$ and $$\varepsilon$$ parameters using an RDF. get_free_energy(distribution[, temperature, ...]) Convert a distribution function into a free energy function.

## API

FOX.ff.lj_param.estimate_lj(rdf, temperature=298.15, sigma_estimate='base')[source]

Estimate the Lennard-Jones $$\sigma$$ and $$\varepsilon$$ parameters using an RDF.

Given a radius $$r$$, the Lennard-Jones potential $$V_{LJ}(r)$$ is defined as following:

$V_{LJ}(r) = 4 \varepsilon \left( \left( \frac{\sigma}{r} \right )^{12} - \left( \frac{\sigma}{r} \right )^6 \right )$

The $$\sigma$$ and $$\varepsilon$$ parameters are estimated as following:

• $$\sigma$$: The radii at which the first inflection point or peak base occurs in rdf.

• $$\varepsilon$$: The minimum value in of the rdf ree energy multiplied by $$-1$$.

• All values are calculated per atom pair specified in rdf.

Parameters
• rdf (pandas.DataFrame) – A radial distribution function. The columns should consist of atom-pairs.

• temperature (float) – The temperature in Kelvin.

• sigma_estimate (str) – Whether $$\sigma$$ should be estimated based on the base of the first peak or its inflection point. Accepted values are "base" and "inflection", respectively.

Returns

A Pandas DataFrame with two columns, "sigma" (Angstrom) and "epsilon" (kcal/mol), holding the Lennard-Jones parameters. Atom-pairs from rdf are used as index.

Return type

pandas.DataFrame

MultiMolecule.init_rdf()

Initialize the calculation of radial distribution functions (RDFs).

get_free_energy()

Convert a distribution function into a free energy function.

FOX.ff.lj_param.get_free_energy(distribution, temperature=298.15, unit='kcal/mol', inf_replace=nan)[source]

Convert a distribution function into a free energy function.

Given a distribution function $$g(r)$$, the free energy $$F(g(r))$$ can be retrieved using a Boltzmann inversion:

$F(g(r)) = -RT * \text{ln} (g(r))$

Two examples of valid distribution functions would be the radial- and angular distribution functions.

Parameters
• distribution (array-like) – A distribution function (e.g. an RDF) as an array-like object.

• temperature (float) – The temperature in Kelvin.

• inf_replace (float, optional) – A value used for replacing all instances of infinity (np.inf).

• unit (str) – The to-be returned unit. See scm.plams.Units for a comprehensive overview of all allowed values.

Returns

An array-like object with a free-energy function (kj/mol) of distribution.

Return type

pandas.DataFrame

MultiMolecule.init_rdf()
MultiMolecule.init_adf()