aiida-gaussian-datatypes 0.5.1
AiiDA data plugin to manage gaussian datatypes (basis sets and pseudopotentials) as first-class citizens
License: MIT License

# AiiDA Gaussian Data Plugin

[![tests](https://github.com/dev-zero/aiida-gaussian-datatypes/workflows/tests/badge.svg)](https://github.com/dev-zero/aiida-gaussian-datatypes/actions) [![codecov](https://codecov.io/gh/dev-zero/aiida-gaussian-datatypes/branch/develop/graph/badge.svg)](https://codecov.io/gh/dev-zero/aiida-gaussian-datatypes) [![PyPI](https://img.shields.io/pypi/pyversions/aiida-gaussian-datatypes)](https://pypi.org/project/aiida-gaussian-datatypes/)


Plugin to handle GTO-based basis sets and pseudopotentials and manage them as first-class citizens in AiiDA.

## Commandline usage

After the installation, you will get new commands in `verdi data`

```console
$ verdi data
Usage: verdi data [OPTIONS] COMMAND [ARGS]...

  Inspect, create and manage data nodes.

Options:
  -h, --help  Show this message and exit.

Commands:
  array              Manipulate ArrayData objects.
  bands              Manipulate BandsData objects.
  cif                Manipulation of CIF data objects.
  parameter          View and manipulate Dict objects.
  plugins            Print a list of registered data plugins or details of
                     a...
  remote             Managing RemoteData objects.
  structure          Manipulation of StructureData objects.
  trajectory         View and manipulate TrajectoryData instances.
  upf                Manipulation of the upf families.
  gaussian.basisset  Manage basis sets for GTO-based codes
  gaussian.pseudo    Manage Pseudopotentials for GTO-based codes

$ verdi data gaussian.basisset
Usage: verdi data gaussian.basisset [OPTIONS] COMMAND [ARGS]...

  Manage basis sets for GTO-based codes

Options:
  -h, --help  Show this message and exit.

Commands:
  dump    Print specified Basis Sets
  import  Add a basis sets from a file to the database
  list    List Gaussian Basis Sets

$ verdi data gaussian.pseudo
Usage: verdi data gaussian.pseudo [OPTIONS] COMMAND [ARGS]...

  Manage Pseudopotentials for GTO-based codes

Options:
  -h, --help  Show this message and exit.

Commands:
  dump    Print specified Pseudopotential
  import  Add a pseudopotential from a file to the database
  list    List Gaussian Pseudopotentials
```

## Examples

### Import and use Basis Set from CP2K

To import a specific basis set from a file with basis sets in CP2K's native format, simply use:

```console
$ verdi data gaussian.basisset import --sym He data/BASIS_MOLOPT
Info: 2 Gaussian Basis Sets found:

  Nr.  Sym    Names                                      Tags                         # Val. e⁻    Version
-----  -----  -----------------------------------------  -------------------------  -----------  ---------
    1  He     SZV-MOLOPT-SR-GTH-q2, SZV-MOLOPT-SR-GTH    SZV, MOLOPT, SR, GTH, q2             2          1
    2  He     DZVP-MOLOPT-SR-GTH-q2, DZVP-MOLOPT-SR-GTH  DZVP, MOLOPT, SR, GTH, q2            2          1

Which Gaussian Basis Set do you want to add? ('n' for none, 'a' for all, comma-seperated list or range of numbers): 2
Info: Adding Gaussian Basis Set for: He (DZVP-MOLOPT-SR-GTH-q2)... DONE

$ verdi data gaussian.basisset list
Info: 1 Gaussian Basis Sets found:

ID                                    Sym    Names                                      Tags                       # Val. e⁻      Version
------------------------------------  -----  -----------------------------------------  -------------------------  -----------  ---------
4a173d43-b022-4e1e-aca9-c4db51da223b  He     DZVP-MOLOPT-SR-GTH-q2, DZVP-MOLOPT-SR-GTH  DZVP, MOLOPT, SR, GTH, q2  2                    1
```

Notes:

* The command line argument `--sym He` is optional (leaving it away will simply show all available entries)
* The plugin automatically filters already imported basis sets

To reference this in a `verdi` script, you can use the following snippet:

```python
from aiida.plugins import DataFactory

BasisSet = DataFactory('gaussian.basisset')

basis_He = BasisSet.get(element="He", name="DZVP-MOLOPT-SR-GTH")

# the generic way using BasisSet.objects.find(...) works too, of course
```

Notes:

* You don't have to specify the full name (`DZVP-MOLOPT-SR-GTH-q2`), the shorter name (`DZVP-MOLOPT-SR-GTH`) also works

### Import and use Pseudopotential from CP2K

To import a specific pseudopotential from a file with pseudopotentials in CP2K's native format, simply use:

```console
$ verdi data gaussian.pseudo import --sym He data/GTH_POTENTIALS
Info: 4 Gaussian Pseudopotentials found:

  Nr.  Sym    Names                                       Tags           Val. e⁻ (s, p, d)      Version
-----  -----  ------------------------------------------  -------------  -------------------  ---------
    1  He     GTH-BLYP-q2, GTH-BLYP                       GTH, BLYP, q2  2, 0, 0                      1
    2  He     GTH-BP-q2, GTH-BP                           GTH, BP, q2    2, 0, 0                      1
    3  He     GTH-PADE-q2, GTH-LDA-q2, GTH-PADE, GTH-LDA  GTH, PADE, q2  2, 0, 0                      1
    4  He     GTH-PBE-q2, GTH-PBE                         GTH, PBE, q2   2, 0, 0                      1

Which Gaussian Pseudopotentials do you want to add? ('n' for none, 'a' for all, comma-seperated list or range of numbers): 4
Info: Adding Gaussian Pseudopotentials for: He (GTH-PBE-q2)... DONE

$ verdi data gaussian.pseudo list
Info: 1 Gaussian Pseudopotential found:

ID                                    Sym    Names                                         Tags            Val. e⁻ (s, p, d)      Version
------------------------------------  -----  --------------------------------------------  --------------  -------------------  ---------
5838b0b7-336a-4b97-b76a-e5c42a4e98ac  He     GTH-PBE-q2, GTH-PBE                           GTH, PBE, q2    2, 0, 0                      1
```

Notes:

* The command line argument `--sym He` is optional (leaving it away will simply show all available entries)
* The plugin automatically filters already imported basis sets

To reference this in a `verdi` script, you can use the following snippet:

```python
from aiida.plugins import DataFactory

Pseudopotential = DataFactory('gaussian.pseudo')

pseudo_He = Pseudopotential.get(element="He", name="GTH-PBE")

# the generic way using Pseudopotential.objects.find(...) works too, of course
```

Notes:

* You don't have to specify the full name (`GTH-PBE-q2`), the shorter name (`GTH-PBE`) also works