Physical Constants
==================
NIST Physical constants are available from QCElemental with arbitrary
conversion factors using the `pint `_
package. The current default physical constants come from the `NIST CODATA
2014 `_.
Conversion Factors
------------------
Conversion factors are available for any valid conversion:
.. code-block:: python
>>> qcel.constants.conversion_factor("nanometer", "angstrom")
10.0
>>> qcel.constants.conversion_factor("eV / nanometer ** 2", "hartree / angstrom ** 2")
0.00036749322481535707
.. warning::
QCElemental is explicit: ``kcal`` is quite different from ``kcal / mol``. Be careful of common
shorthands.
.. code-block:: python
>>> qcel.constants.conversion_factor("kcal", "eV")
2.611447418269555e+22
>>> qcel.constants.conversion_factor("kcal / mol", "eV")
0.043364103900593226
Quantities
-----------
QCElemental supports the ``pint`` "values with units" Quantity objects:
.. code-block:: python
>>> q = qcel.constants.Quantity("5 kcal / mol")
>>> q
>>> q.magnitude
5.0
>>> q.dimensionality
These objects are often used for code that has many different units to make
the requisite bookkeeping nearly effortless. In addition, these objects have
NumPy and Pandas support built-in:
.. code-block:: python
>>> import numpy as np
>>> a = qcel.constants.Quantity("kcal") * np.arange(4)
>>> a
An example of array manipulation using a NumPy array with a ``pint`` quantity:
>>> a * qcel.constants.Quantity("eV")
>>> a.to("eV")
NIST CODATA
-----------
The exact values from the NIST CODATA can be queried explicitly:
.. code-block:: python
>>> qcel.constants.get("hartree energy in ev")
27.21138602
The complete NIST CODATA record is held and can be obtained via the Python-
API. The following example shows how to obtain a comprehensive overview of
the individual CODATA record:
.. code-block:: python
>>> datum = qcel.constants.get("hartree energy in ev", return_tuple=True)
>>> datum
<----------------------------------------
Datum Hartree energy in eV
----------------------------------------
Data: 27.21138602
Units: [eV]
doi: 10.18434/T4WW24
Comment: uncertainty=0.000 000 17
Glossary:
---------------------------------------->
Each of these quantities is API accessible:
.. code-block:: python
>>> datum.doi
'10.18434/T4WW24'
>>> datum.comment
'uncertainty=0.000 000 17'
Contexts
--------
Physical constants are continuously refined over time as experimental precision
increases or redefinition occurs. To prepare for future changes, physical
constants are contained in contexts. The ``qcel.constants`` context will be
updated over time to the latest NIST data. To "pin" a context version, a
specific context can be created like so:
.. code-block:: python
>>> context = qcel.PhysicalConstantsContext("CODATA2014")
>>> context.conversion_factor("hartree", "eV")
27.21138601949571
Currently only ``CODATA2014`` is available.
API
---
.. currentmodule:: qcelemental.constants
Top level user functions:
.. autosummary::
conversion_factor
get
Quantity
string_representation
Function Definitions
--------------------
.. note:: ``conversion_factor`` is a function, not a class, but cannot be documented in Sphinx as such
due to the way the LRU Cache wraps it. Please disregard the marking of it being a "class."
.. autoclass:: conversion_factor
:noindex:
.. autofunction:: get
:noindex:
.. autofunction:: Quantity
:noindex:
.. autofunction:: string_representation
:noindex: