Putting lattice vectors in lower triangle form

I would like to use ssNEB to follow the transition from one solid state phase to another. This capability is contained within the Henkelman group VTST tools as well as in another library tsase (transition-state ase) from the university of Texas. It appears that it is necessary to put the lattice vectors when read as a matrix in “lower triangular form” with the “a” vector pointing along the x-axis and the “b” vector lying in the x-y plane. Can someone suggest how to put the lattice vectors of a cell in this form using pymatgen? Thanks for the help.

1 Like

I accomplished putting a structure into lower triangular form (aka “standard form” in ASE language) by combining ase and pymatgen. The code to do so is below.

Is this same procedure possible using only pymatgen? Can someone give an example of how to accomplish the same task?)

from pymatgen.core import SymmOp
from pymatgen.core.structure import Structure
from ase.io import read, write
from ase.geometry import Cell
from pymatgen.io.ase import AseAtomsAdaptor

# import structure to be converted to standard form
structure = Structure.from_file('POSCAR.in')
# change to an ASE object
atoms = AseAtomsAdaptor.get_atoms(structure)
# make a cell object from the lattice information
cell = atoms.cell
# transform the cell to standard form (lower triangular form)
std = cell.standard_form()
# pick off the transformation matrix
rotation_matrix = std[1]
# Back to pymatgen
# define a symmetry operation with the rotation matrix
myop = SymmOp.from_rotation_and_translation(rotation_matrix)
#apply the rotation to the pymatgen structure
structure.apply_operation(myop)
# write the output
structure.to('POSCAR.out')

Thread closed due to inactivity, please open a new thread to address related issues.