atomlib
is a package for creating, modifying, and controlling atomic structures. It draws heavy inspiration from previous tools like Atomsk and ASE, but attempts to provide a cleaner, more consistent interface that can be used from Python or a command line.
atomlib
has minimal dependencies: numpy
, scipy
, and polars
are required for core atom structure manipulation, and click
is required for command line functionality.
Atomic structures are stored as polars
DataFrames, providing a clean, immutable interface that maximizes expressiveness and minimizes errors.
For formats that allow arbitrary properties, these properties can be passed through transparently. atomlib
has first-class support for fractional occupancy, Debye-Waller factors, atomic forces, and labels.
Translational symmetry is stored in Cell
objects, which represent a fully generic cell. Atoms can be modified in any coordinate system that makes sense (global, local real-space, cell fraction, box fraction, etc.). Support for non-translational symmetry operations is limited at this point.
For more information, check out the example notebooks and the API documentation.
File format support is still a work in progress. Where possible, parsers are implemented from scratch in-repo.
Most formats are implemented in two steps: Parsing to an intermediate representation which preserves all format-specific information, and then conversion to the generic Atoms
& AtomCell
types for manipulation & display.
This means you can write your own code to utilize advanced format features even if they're not supported out of the box.
Format | Ext. | Read | Write | Notes |
---|---|---|---|---|
CIF | .cif | ✅ | ✅ | CIF1 & CIF2. Isotropic B-factor only |
XCrysDen | .xsf | ✅ | ✅ | |
AtomEye CFG | .cfg | ✅ | ✅ | Currently basic format only |
Basic XYZ | .xyz | ✅ | ✅ | |
Ext. XYZ | .exyz | ✅ | ✅ | Arbitrary properties not implemented |
Special XYZ | .sxyz | ❌ | ❌ | To be implemented |
LAMMPS Data | .lmp | ✅ | ✅ | |
Quantum Espresso | .qe | ❌ | ✅ | pw.x format |
pyMultislicer | .mslice | ✅ | ✅ | Currently XML format only |