Preparation of initial data

Active learning cycle can be initiated from one structure (e.g., transition state) or from existing data sets in .npz or .xyz formats.

Loading xyz data

You can train MLIP for existing dataset. The structures can be loaded in xyz format as:

import mlptrain as mlt

data = mlt.ConfigurationSet()
data.load_xyz('data_set.xyz', charge = 0, mult = 1)

This function assumes that all data in your dataset have the same charge and multiplicity. If it is not the case, you can load data with different charges separately.

import mlptrain as mlt

data = mlt.ConfigurationSet()
data.load_xyz('water.xyz', charge = 0, mult = 1)
data.load_xyz('magnesium_aqua_complex.xyz', charge = 2, mult = 1)

This would allow you to compute ab initio labels with correct charges/multiplicities for your data.

If you already have data labeled by reference, this can be loaded as well. However, the data need to be provided in extended xyz format, such as:

2
Lattice="100.000000 0.000000 0.000000 0.000000 100.000000 0.000000 0.000000 0.000000 100.000000"
energy=-11581.02323085 Properties=species:S:1:pos:R:3:forces:R:3
C   0.00000   0.00000  0.00000    0.00000    0.00000    0.00000
O   1.00000   1.00000  1.00000   -1.00000    1.00000    1.00000

where energy and forces are reference data in eV.

You can than load the energies and forces as:

import mlptrain as mlt

data = mlt.ConfigurationSet()
data.load_xyz('data_set.xyz', charge = 0, mult = 1, load_energies = True, load_forces = True)

Label data with reference energy and force

To train MLIP, the structures need to be labelled by suitable reference. This is typically energy and forces from electronic structure computations. mlp-train currently supports computing the reference data by Orca, Gaussian or xtb. Below, we discuss the examples how to use them:

ORCA

To be able to use Orca, you first need to get the suitable binary from: https://www.faccts.de/orca/ and add it to your $PATH. Orca is free for personal and academic use, but you will need to register.

When you have the binary file, you can use Orca to label the data. Assume that you load the data_set.xyz file as discussed in previous example.

First, select the level of theory, i.e., the DFT functional and basis set and specify Engrad keyword to compute both energy and gradients.

mlt.Config.orca_keywords = ['PBE', 'def2-SVP', 'EnGrad']

You can provide more keywords, using the same synthax as you would use with Orca. For example:

mlt.Config.orca_keywords = [
  'PBE0',
  'D3BJ',
  'def2-TZVP',
  'def2/J',
  'RIJCOSX',
  'EnGrad',
  'CPCM(Water)'
]

More advanced settings can be provided in scf_block, following the same structure as normal Orca input:

scf_block= (
 '\n%scf\n'
 'MaxIter 1000\n'
 'DIISMaxEq 15\n'
 'end\n'
 '%cpcm\n'
 'smd true\n'
 'SMDSolvent "Acetonitrile"\n'
 'end\n'
)

mlt.Config.orca_keywords = ['UKS','r2SCAN-3c','EnGrad','VeryTightSCF', 'defgrid3', 'NoTrah', 'SlowConv', scf_block]

Afterwards, you can run single point computations over the loaded ConfigurationSet:

data.single_point(method='orca')
data.save_npz('data_set_labelled.npz')

Gaussian

Unlike Orca, Gaussian requires paid licenece. More information can be found: https://gaussian.com/

The synthax is very similar as in previous case:

mlt.Config.gaussian_keywords = ['PBEPBE', 'Def2SVP', 'Force(NoStep)', 'integral=ultrafinegrid']

You can choose from Gaussian 09 (‘g09’) or Gaussian 16 (‘g16’). For Gaussian 16, the synthax would be as follows:

data.single_point(method='g16')
data.save_npz('data_set_labelled.npz')

xTB

Finally, you can label your data using GFN2-xTB semiempirical method. However, the training MLIP on this level is recomanded only for testing of the workflow.

data.single_point(method='g16')
data.save_npz('data_set_labelled.npz')