pyxtal package
PyXtal: A Python library for crystal structure generation and manipulation.
This module initializes the pyxtal package, providing essential imports and utility functions.
- class pyxtal.pyxtal(molecular=False, random_state=None)[source]
Bases:
object
Class for handling atomic crystals based on symmetry constraints
Examples
To create a new structure instance
>>> from pyxtal import pyxtal >>> struc = pyxtal()
one can either use pyxtal to generate a random symmetric structure
>>> struc.from_random(3, 227, ['C'], [8])
or load a structure from a file or ASE atoms or Pymatgen structure object
>>> struc.from_seed('diamond.cif') # as a string >>> struc.from_seed(diamond_ase) # as a ase atoms object >>> struc.from_seed(diamond_pymatgen) # as a pymatgen structure object
as long as the struc is created, you can check their symmetry as follows
>>> struc.get_site_labels() {'C': ['8a']} >>> struc ------Crystal from random------ Dimension: 3 Composition: C8 Group: Fd-3m (227) cubic lattice: 4.3529 4.3529 4.3529 90.0000 90.0000 90.0000 Wyckoff sites: C @ [0.1250 0.1250 0.1250], WP: 8a, Site symmetry: -4 3 m
The structure object can be easily manipulated via apply_perturbtation or subgroup function
>>> struc2 = struc.subgroup_once(H=141) >>> struc2 ------Crystal from Wyckoff Split------ Dimension: 3 Composition: C8 Group: I41/amd (141) tetragonal lattice: 3.3535 3.3535 4.6461 90.0000 90.0000 90.0000 Wyckoff sites: C @ [0.0000 0.2500 0.3750], WP: 4b, Site symmetry: -4 m 2
Alternatively, one can easily compute its XRD via the pyxtal.XRD class
>>> xrd = struc.get_XRD() >>> xrd 2theta d_hkl hkl Intensity Multi 32.706 2.738 [ 1 1 1] 100.00 8 54.745 1.677 [ 2 2 0] 40.95 12 65.249 1.430 [ 3 1 1] 20.65 24 81.116 1.186 [ 4 0 0] 5.15 6 90.236 1.088 [ 3 3 1] 8.24 24 105.566 0.968 [ 4 2 2] 14.44 24 115.271 0.913 [ 5 1 1] 10.03 24 133.720 0.838 [ 4 4 0] 9.80 12 148.177 0.802 [ 5 3 1] 28.27 48
One can also try to get the transition path between two pyxtals that are symmetry related via the get_transition function
>>> s1 = pyxtal() >>> s2 = pyxtal() >>> s1.from_seed("pyxtal/database/cifs/0-G62.cif") #structure with low symmetry >>> s2.from_seed("pyxtal/database/cifs/2-G71.cif") #structure with high symmetry >>> strucs, _, _, _, _ = s2.get_transition(s1) # get the transition from high to low >>> strucs [ ------Crystal from Transition 0 0.000------ Dimension: 3 Composition: O24Mg4W4Pb8 Group: Pnma (62) orthorhombic lattice: 11.6075 8.0526 5.8010 90.0000 90.0000 90.0000 Wyckoff sites: Mg @ [ 0.8750 0.2500 0.7500], WP [4c] Site [.m.] Pb @ [ 0.6406 0.0053 0.7856], WP [8d] Site [1] W @ [ 0.6119 0.2500 0.2483], WP [4c] Site [.m.] O @ [ 0.6292 0.0083 0.2235], WP [8d] Site [1] O @ [ 0.4966 0.2500 0.0093], WP [4c] Site [.m.] O @ [ 0.5055 0.2500 0.4897], WP [4c] Site [.m.] O @ [ 0.7308 0.2500 0.9717], WP [4c] Site [.m.] O @ [ 0.7467 0.2500 0.4570], WP [4c] Site [.m.], ------Crystal from Transition 1 0.323------ Dimension: 3 Composition: O24Mg4W4Pb8 Group: Pnma (62) orthorhombic lattice: 11.6020 8.0526 5.8038 90.0000 90.0000 90.0000 Wyckoff sites: Mg @ [ 0.8750 0.2500 0.7500], WP [4c] Site [.m.] Pb @ [ 0.6250 -0.0053 0.7500], WP [8d] Site [1] W @ [ 0.6250 0.2500 0.2500], WP [4c] Site [.m.] O @ [ 0.6250 0.0083 0.2500], WP [8d] Site [1] O @ [ 0.5158 0.2500 -0.0068], WP [4c] Site [.m.] O @ [ 0.5158 0.2500 0.5068], WP [4c] Site [.m.] O @ [ 0.7342 0.2500 0.9932], WP [4c] Site [.m.] O @ [ 0.7342 0.2500 0.5068], WP [4c] Site [.m.]]
Finally, the structure can be saved to different formats
>>> struc.to_file('my.cif') >>> struc.to_file('my_poscar', fmt='poscar')
or to Pymatgen/ASE structure object
>>> pmg_struc = struc.to_pymatgen() >>> ase_struc = struc.to_ase()
or to json file
>>> struc.to_json('1.json')
- apply_perturbation(d_lat=0.05, d_coor=0.05, d_rot=1)[source]
perturb the structure without breaking the symmetry
- Parameters:
d_coor – magnitude of perturbation on atomic coordinates (in A)
d_lat – magnitude of perturbation on lattice (in percentage)
- build(group, species, numIons, lattice, sites, tol=0.01, dim=3, use_hall=False)[source]
Build a atomic crystal based on the necessary input
- Parameters:
group (int) – 225
species (list) – [‘Na’, ‘Cl’]
numIons (list) – [4, 4]
lattice – lattice object
sites (list) – [[{“4a”: [0.0, 0.0, 0.0]}], [{“4b”: [0.5, 0.5, 0.5]}]]
dim (int)
use_hll (bool)
- check_H_coordination(r=1.12)[source]
A function to check short if H is connected to more than one atom Mainly used for debug, powered by pymatgen
- Parameters:
r – the given cutoff distances
- Returns:
True or False
- check_mapping(ref_struc)[source]
Compute the displacement w.r.t. the reference structure
- Parameters:
ref_struc – reference pyxtal structure (assuming the same atom order)
- Returns:
True or False
- check_short_distances(r=0.7, exclude_H=True)[source]
A function to check short distance pairs Mainly used for debug, powered by pymatgen
- Parameters:
r – the given cutoff distances
exclude_H – whether or not exclude the H atoms
- Returns:
list of pairs within the cutoff
- check_short_distances_by_dict(dicts)[source]
A function to check short distance pairs Mainly used for debug, powered by pymatgen
- Parameters:
dicts – e.g., {“H-H”: 1.0, “O-O”: 2.0}
- Returns:
number of atomic pairs within the cutoff
- Return type:
N_pairs
- check_validity(criteria, verbose=False)[source]
Check if the xtal is valid for a given list of criteria. Currently support the following keywords - MIN_Density (float) - CN: coordination number (int) - Dimension: (int)
- Parameters:
criteria (dict) – keywords and the threshhold values
verbose (bool) – whether or not print out details
- Returns:
bool value regarding the validity
- find_matched_lattice(ref_struc, d_tol=2.0, f_tol=0.15)[source]
Compute the displacement w.r.t. the reference structure
- Parameters:
ref_struc – reference pyxtal structure (assuming the same atomic ordering)
d_tol – tolerence of mismatch in the absolute scale
f_tol – tolerence of mismatch in the fractional scale
- Returns:
ref_struc with matched lattice
- from_1d_rep(x, sites, dim=3)[source]
An advanced way to build pyxtal from the 1d representation
- Parameters:
x – 1d representation
sites – list of (element, wp)
- from_CSD(csd_code)[source]
Download the crystal from CCDC if csd_code is given, return the single pyxtal object if csd_family is given, do group analysis and ignore high pressure form
- Parameters:
csd_code – e.g.,
ACSALA01
- from_prototype(prototype)[source]
Load a template structure based on a prototype name for quick testing.
- Parameters:
prototype (str) – Name of the crystal structure prototype to load. Supported (‘diamond’, ‘graphite’: ‘a-cristobalite’, .etc)
Example
self.from_prototype(‘diamond’) self.from_prototype(‘graphite’)
Notes
This method acts as a shortcut to quickly generate known crystals by loading the space group, Wyckoff positions, lattice parameters, and atomic species.
- from_random(dim=3, group=None, species=None, numIons=None, factor=1.1, thickness=None, area=None, lattice=None, sites=None, conventional=True, t_factor=1.0, max_count=10, torsions=None, force_pass=False, block=None, num_block=None, seed=None, random_state=None, tm=None, use_hall=False)[source]
The main function to generate random crystals. It calls block_crysstal or random_crystal internally.
- Parameters:
dim (int) – dimenion (0, 1, 2, 3)
group (int) – the group number (1-56, 1-75, 1-80, 1-230)
species (list) – a list of atomic symbols for each ion type, e.g., [“Ti”, “O”]
numIons (list) – a list of the number of each type of atom within the primitive cell (NOT the conventional cell), e.g., [4, 2]
factor (optional) – volume factor used to generate the crystal
thickness
area (float)
lattice (optional) – Lattice to define the cell
sites (optional) – pre-assigned wyckoff sites (e.g., [[“4a”], [“2b”]])
conventional (bool) – whether or not use the conventional setting
() (max_count)
()
tm (optional) – Tol_matrix object to define the distances
- from_seed(seed, molecules=None, tol=0.0001, a_tol=5.0, ignore_HH=True, add_H=False, backend='pymatgen', style='pyxtal', hn=None, standard=False)[source]
Load the seed structure from Pymatgen/ASE/POSCAR/CIFs Internally they will be handled by Pymatgen
- Parameters:
seed – cif/poscar file or a Pymatgen Structure object
molecules – a list of reference molecule (xyz file or Pyxtal molecule)
tol – scale factor for covalent bond distance
ignore_HH – whether or not ignore short H-H distance in molecules
add_H – whether or not add H atoms
backend – structure parser, default is pymatgen
style – pyxtal for spglib
standard – whether or not optimize lattice
- from_spg_wps_rep(spg, wps, x, elements=None)[source]
An advanced way to build pyxtal from wyckoff position and compacted 1d x representation
- Parameters:
spg (int) – space group number 1-230
wps (list) – wyckoff representation (e.g., [‘6a’, ‘6a’])
x (array) – 1d representation
elements (list) – list of element string
- from_tabular_representation(rep, max_abc=50.0, max_angle=180, normalize=False, tol=0.1, discrete=False, discrete_cell=False, N_grids=50, verbose=False)[source]
Reconstruc xtal from 1d tabular_representation Currently assuming the elemental composition like carbon
- Parameters:
rep – 1D array
max_abc (float) – maximum abc length for normalization
max_angle (float) – maximum angle in radian for normalization
normalize (bool) – whether normalize or not?
tol (float) – a tolerance value to assign the Wyckoff site
discrete (bool) – to discretize xyz
N_grids (int) – number of grids used for discretization
verbose (bool) – output detailed error
- get_1D_representation(standard=False)[source]
Get the 1D representation class for molecular crystals
- get_1d_rep_x()[source]
Get a simplified x representation for a crystal Group: I 41/a m d:2 (141) 2.5019, 2.5019, 8.7534, 90.0000, 90.0000, 90.0000, tetragonal Wyckoff sites: C @ [ 0.0000 0.2500 0.4614], WP [8e] Site [2mm.]
The above rep is [2.5019, 8.7514, 0.4614]
- get_XRD(**kwargs)[source]
Compute the PXRD object.
- ** kwargs include
wavelength (1.54184)
thetas [0, 180]
preferred_orientation: False
march_parameter: None
- get_alternatives(include_self=True, same_letters=False, ref_lat=None, d_tol=2.0, f_tol=0.15)[source]
Get alternative structure representations
- Parameters:
include_self (bool) – return the original structure
- Returns:
list of structures
- get_dimensionality(cutoff=None)[source]
A quick wrapper to compute dimensionality from pymatgen https://pymatgen.org/pymatgen.analysis.dimensionality.html The dimensionality of the structure can be 1/2/3
- get_disps_optim(ref_struc, trans, d_tol)[source]
- Parameters:
ref_struc – reference pyxtal structure (assuming the same atom order)
trans – translation vector
d_tol – tolerence of mismatch
- Returns:
Atomic displacements in np.array translation:
- get_disps_sets(ref_struc, d_tol, d_tol2=0.3, ld_tol=2.0, fd_tol=0.15, keep_lattice=False)[source]
Compute the displacement w.r.t. a reference structure (considering all wycsets)
- Parameters:
ref_struc – reference pyxtal structure (assuming the same atomic ordering)
d_tol – maximally allowed atomic displacement
d_tol2 – displacement that allows early termination
kepp_lattice – whether or not change the WP sets
- Returns:
Atomic displacements in np.array
- get_disps_single(ref_struc, trans, d_tol=1.2)[source]
Compute the displacement w.r.t. the reference structure
- Parameters:
ref_struc – reference pyxtal structure (assuming the same atom order)
trans – translation vector
d_tol – tolerence of mismatch
- Returns:
Atomic displacements in np.array translation:
- get_forcefield(ff_style='openff', code='lammps', chargemethod='am1bcc', parameters=None)[source]
An interface to create forcefield for molecular simulation with - Charmm - LAMMPS Note that the current approach generates charge with its own conformer, need to provide the option to use the conformer from the given molecule
- Parameters:
ff_style (-) – ‘gaff’ or ‘openff’
code (-) – ‘lammps’ or ‘charmm’
charge_method (-) – ‘am1bcc’, ‘am1-mulliken’, ‘mmff94’, ‘gasteiger’
parameters (-) – 1D-array of user-specified FF parameters
- Returns:
An ase_atoms_objects with force field information
- get_init_translations(ref_struc, tol=0.75)[source]
Compute the displacement w.r.t. the reference structure
- Parameters:
ref_struc – reference pyxtal structure (assuming the same atom order)
- Returns:
list of possible translations
- get_intermolecular_energy(factor=2.0, max_d=10.0)[source]
For molecular crystals, get the intermolecular interactions from Gavezzotti, A., Filippini, G., J. Phys. Chem., 1994, 98 (18), 4831-4837
- Returns:
Total energy
- get_neighboring_dists(site_id=0, factor=1.5, max_d=5.0)[source]
For molecular crystals, get the neighboring molecules for a given WP
- Parameters:
site_id – the index of reference site
factor – factor of vdw tolerance
max_d – maximum distances
- Returns:
list of short contact pairs engs: list of energies from atom-atom potential
- Return type:
pairs
- get_neighboring_molecules(site_id=0, factor=1.5, max_d=5.0, ignore_E=True)[source]
For molecular crystals, get the neighboring molecules for a given WP
- Parameters:
site_id – the index of reference site
factor – factor of vdw tolerance
max_d
ignore_E
- Returns:
list of shortest distances neighs: list of neighboring molecular xyzs comps: list of molecular types Ps: list of [0, 1] to distinguish self and other molecules engs: list of energies from atom-atom potential
- Return type:
min_ds
- get_separations(hkls=[[1, 0, 0], [0, 1, 0], [0, 0, 1]])[source]
Compute the separation for the given hkl plane
- get_spherical_images(**kwargs)[source]
get the spherical image representation
- Parameters:
model – either ‘molecule’ or ‘contacts’
- Returns:
the sph class
- get_std_representation(trans)[source]
Perform cell transformation so that the symmetry operations follow standard space group notation
- get_structure_factor(hkl, coeffs=None)[source]
Compute the structure factor for a given hkl plane
- Parameters:
hkl (-) – three indices hkl plane
coeffs (-) – Atomic scatering factors
- get_tabular_representation(ids=None, normalize=False, N_wp=6, perturb=False, max_abc=50.0, max_angle=3.141592653589793, eps=0.05, standardize=True, discrete=False, discrete_cell=False, N_grids=50)[source]
Convert the xtal to a 1D reprsentation organized as (space_group_number, a, b, c, alpha, beta, gamma, wp1, wp2, ….) each wp is represented by 4 numbers (wp_id, x, y, z)
- Parameters:
ids (list) – index of generators for each wp
normalize (bool) – whether or not normalize the data to (0, 1)
N_wp (int) – number of maximum wp sites
perturb (bool) – whether or not perturb the variables
max_abc (float) – maximum abc length for normalization
max_angle (float) – maximum angle in radian for normalization
eps (float) – the degree of perturbation
discrete (bool) – to discretize xyz
discrete_cell (bool) – to discretize cell_para
N_grids (int) – number of grids used for discretization
- Returns:
a 1D vector such as (141, 3, 3, 3, pi/2, pi/2, pi/2, wp_id, x, y, z)
- get_tabular_representations(N_max=200, N_wp=8, normalize=False, perturb=False, eps=0.05, discrete=False, discrete_cell=False, N_grids=50)[source]
Enumerate the equivalent representations for a give crystal. For example, 8a in space group 227 has 8 equivalent positions
- Parameters:
N_max (int) – the max number of samples from the enumeration
N_wp (int) – the maximum number of allowed WP sites
normalize (bool) – normalize all number to (0, 1)
perturb (bool) – whether or not perturb the variables
eps (float) – the degree of perturbation
discrete (bool) – to discretize xyz
N_grids (int) – number of grids used for discretization
- Returns:
a list of equivalent 1D tabular representations
- get_transition(ref_struc, d_tol=1.0, d_tol2=0.3, N_images=2, max_path=30, both=False)[source]
Get the splitted wyckoff information along a given path:
- Parameters:
ref_struc – structure with subgroup symmetry
d_tol – maximally allowed atomic displacement
d_tol2 – displacement that allows early termination
N_images – number of intermediate images
max_path – maximum number of paths
both – whether or not do interpolation along both sides
- Returns:
displacements:
cell translation:
the list of space groups along the path
the list of splitters along the path
- Return type:
strucs
- get_transition_by_path(ref_struc, path, d_tol, d_tol2=0.5, N_images=2, both=False)[source]
Get the splitted wyckoff information along a given path:
- Parameters:
ref_struc – structure with subgroup symmetry
path – a list of transition path
d_tol – maximally allowed atomic displacement
d_tol2 – displacement that allows early termination
N_images – number of intermediate images
both – interpolation on both sides
- Returns:
displacements:
cell translation:
- Return type:
strucs
- get_xtal_string(dicts=None, header=None)[source]
get the xtal string
- Parameters:
xtal – pyxtal instance
sim (float) – similarity metric
status (bool) – whether or not the structure is valid
energy (float) – the energy value
- make_transitions(disps, lattice=None, translation=None, N_images=3, both=False)[source]
make the pyxtals by following the atomic displacements
- Parameters:
disps – N*3 atomic displacements in fractional coordinates
lattice – 3*3 cell matrix (self.lattice.matrix if None)
translation – overall translation
N_images – number of images
both – whether or not interpolar on both sides
- optimize_lattice(iterations=5, force=False, standard=False)[source]
Optimize the lattice if the cell has a bad inclination angles We first optimize the angle to some good-looking range. If standard, force the structure to have the standard setting This only applies to monoclinic systems
- Parameters:
iterations – maximum number of iterations
force – whether or not do the early termination
standard – True or False
- optimize_lattice_and_rotation(iterations=3, verbose=False)[source]
Iteratively cut lattice and optimize the rotation
- resort_species(species)[source]
resort the atomic species
- Parameters:
species – list of elements, e.g. [‘Si’, ‘O’]
- resymmetrize(tol=0.001)[source]
Recheck the symmetry with a given tolerance value Useful to identify a higher space group symmetry
- Parameters:
tol (float) – the tolerance value for symmetry finder
- set_cutoff(exclude_ii=False, value=None)[source]
get the cutoff dictionary
- Parameters:
exclude_ii (bool) – whether or not exclude A-A distance
value (float) – cutoff distance
- set_site_coordination(cutoff=None, verbose=False, exclude_ii=False)[source]
Compute the coordination number from each atomic site
- show_mol_cluster(id, factor=1.5, max_d=4.0, plot=True, ignore_E=False, cmap='YlGn', **kwargs)[source]
display the local packing environment for a selected molecule
- subgroup(perms=None, H=None, eps=0.05, idx=None, group_type='t', max_cell=4, min_cell=0, N_groups=None)[source]
Generate a structure with lower symmetry
- Parameters:
perms – e.g., {“Si”: “C”}
H – space group number (int)
eps – pertubation term (float)
idx – list
group_type (string) – t, k or t+k
max_cell (float) – maximum cell reconstruction
min_cell (float) – maximum cell reconstruction
max_subgroups (int) – maximum number of trial subgroups
- Returns:
a list of pyxtal structures with lower symmetries
- subgroup_by_path(gtypes, ids, eps=0, mut_lat=False)[source]
Generate a structure with lower symmetry (for atomic crystals only)
- Parameters:
g_types – [‘t’, ‘k’]
idx – list of ids for the splitter
eps – degree of displacement
mut_lat – mutate the lattice of not
- Returns:
a pyxtal structure with lower symmetries list of splitters
- subgroup_once(eps=0.1, H=None, perms=None, group_type='t', max_cell=4, min_cell=0, mut_lat=True, ignore_special=False, verbose=False)[source]
Generate a structure with lower symmetry (for atomic crystals only)
- Parameters:
perms – e.g., {“Si”: “C”}
H – space group number (int)
idx – list
group_type – t or k
max_cell – maximum cell reconstruction (float)
- Returns:
a pyxtal structure with lower symmetries
- substitute(dicts)[source]
A quick function to apply substitution
- Parameters:
dicts – e.g., {“F”: “Cl”}
- substitute_1_2(dicts, ratio=None, group_type='t+k', max_cell=4, min_cell=0, max_wp=None, N_groups=None, N_max=10, criteria=None)[source]
Derive the BC compounds from A via subgroup relation For example, from C to BN or from SiO2 to AlPO3. The key is to split A’s wyckoff site to B and C by w.r.t. composition relation. If the current parent crystal doesn’t allow splitting, look for the subgroup
- Parameters:
dicts – e.g., {“F”: “Cl”}
ratio – e.g., [1, 1]
group_type (string) – t, k or t+k
max_cell (float) – maximum cell reconstruction
min_cell (float) – maximum cell reconstruction
max_wp (int) – maximum number of wp
N_groups (int) – maximum number of trial subgroups
N_max (int) – maximum number of structures
criteria (dict) – dictionary criteria
- Returns:
A list of pyxtal structures
- substitute_linear(dicts)[source]
This is mainly designed for substitution between single atom and the linear block e.g., we want to make Zn(CN)2 from SiO2 :param dicts: e.g., {“Si”: [“Zn”], “O”: [“C”,”N”]}
- supergroup(G=None, d_tol=1.0)[source]
Generate a structure with higher symmetry
- Parameters:
G – super space group number (list of integers)
d_tol – maximum tolerance
- Returns:
a list of pyxtal structures with minimum super group symmetries
- supergroups(G=None, d_tol=1.0)[source]
Generate the structures with higher symmetry
- Parameters:
G – super space group number (list of integers)
d_tol – maximum tolerance
- Returns:
a list of pyxtal structures with minimum super group symmetries
- to_ase(resort=True, center_only=False, add_vaccum=True)[source]
Export to ase Atoms object.
- Parameters:
resort (bool) – resort atoms
center (bool) – dump only molculer center for mol. xtal
add_vaccum (bool) – add vaccum for 0/1/2D systems
- to_file(filename=None, fmt=None, permission='w', sym_num=None, header='from_pyxtal')[source]
Creates a file with the given ame and type to store the structure. By default, creates cif files for crystals and xyz files for clusters. For other formats, Pymatgen is used
- Parameters:
filename (string) – the file path
fmt (string) – the file type (cif, xyz, etc.)
permission (string) – w or a+
sym_num (int) – number of sym_ops, None means writing all symops
header (string) – header
- Returns:
Nothing. Creates a file at the specified path
- to_molecular_xtal(molecules, oris=None, reflects=None)[source]
Convert the atomic xtal to molecular xtal the input molecules must have the same length of the self.atom_sites
- to_subgroup(path=None, t_only=True, iterate=False, species=None)[source]
Transform a crystal with speical sites to subgroup represenatation with general sites
- Parameters:
Path – list of path to get the general sites
iterate (bool) – whether or not do it iteratively
species – to add
- transform(trans, lattice=None)[source]
Perform cell transformation and symmetry operation
- Parameters:
trans – 3*3 matrix
lattice – pyxtal lattice object
update – whether or not update each wp
- translate(trans, reset_wp=False)[source]
move the atomic sites along a translation Note that this may change the structure
- Parameters:
trans – 1*3 vector
- update_from_1d_rep(x)[source]
update the xtal from the 1d representation Group: I 41/a m d:2 (141) 2.5019, 2.5019, 8.7534, 90.0000, 90.0000, 90.0000, tetragonal Wyckoff sites: C @ [ 0.0000 0.2500 0.4614], WP [8e] Site [2mm.]
the above rep is [2.5019, 8.7514, 0.4614]
- Parameters:
x (float) – input variable array to describe a xtal
Subpackages
- pyxtal.database package
- pyxtal.interface package
- pyxtal.lego package
- pyxtal.optimize package
- pyxtal.potentials package
Submodules
- pyxtal.XRD module
- pyxtal.block_crystal module
- pyxtal.constants module
- pyxtal.crystal module
- pyxtal.db module
call_opt_single()
database
database_topology
database_topology.add_strucs_from_db()
database_topology.add_xtal()
database_topology.check_new_structure()
database_topology.check_overlap()
database_topology.clean_structures()
database_topology.clean_structures_pmg()
database_topology.clean_structures_spg_topology()
database_topology.export_structures()
database_topology.get_all_xtals()
database_topology.get_db_unique()
database_topology.get_label()
database_topology.get_max_id()
database_topology.get_properties()
database_topology.get_pyxtal()
database_topology.plot_histogram()
database_topology.print_info()
database_topology.print_memory_usage()
database_topology.select_xtal()
database_topology.select_xtals()
database_topology.update_db_description()
database_topology.update_row_energy()
database_topology.update_row_energy_mproc()
database_topology.update_row_energy_serial()
database_topology.update_row_topology()
database_topology.vacuum()
dftb_opt_single()
gulp_opt_single()
mace_opt_single()
make_db_from_CSD()
make_entry_from_CSD()
make_entry_from_CSD_web()
make_entry_from_pyxtal()
opt_single()
process_xtal()
setup_worker_logger()
vasp_opt_single()
- pyxtal.descriptor module
- pyxtal.elasticity module
CubicElasticModuli
Voigt_6_to_full_3x3_strain()
Voigt_6_to_full_3x3_stress()
Voigt_6x6_to_cubic()
Voigt_6x6_to_full_3x3x3x3()
cubic_to_Voigt_6x6()
elastic_moduli()
elastic_properties()
fit_elastic_constants()
full_3x3_to_Voigt_6_index()
full_3x3_to_Voigt_6_strain()
full_3x3_to_Voigt_6_stress()
full_3x3x3x3_to_Voigt_6x6()
generate_strained_configs()
invariants()
measure_triclinic_elastic_constants()
poisson_ratio()
rotate_cubic_elastic_constants()
rotate_elastic_constants()
youngs_modulus()
- pyxtal.io module
- pyxtal.lattice module
Lattice
Lattice.add_vacuum()
Lattice.apply_transformation()
Lattice.check_mismatch()
Lattice.copy()
Lattice.encode()
Lattice.find_transition_to_orthoslab()
Lattice.from_1d_representation()
Lattice.from_matrix()
Lattice.from_para()
Lattice.generate_matrix()
Lattice.generate_para()
Lattice.generate_point()
Lattice.get_bounds()
Lattice.get_diff()
Lattice.get_dofs()
Lattice.get_lengths()
Lattice.get_matrix()
Lattice.get_para()
Lattice.get_permutation_matrices()
Lattice.get_transformation_matrices()
Lattice.get_worst_angle()
Lattice.is_valid_lattice()
Lattice.is_valid_matrix()
Lattice.mutate()
Lattice.optimize_multi()
Lattice.optimize_once()
Lattice.reset_matrix()
Lattice.scale()
Lattice.search_transformation()
Lattice.search_transformations()
Lattice.set_matrix()
Lattice.set_para()
Lattice.set_volume()
Lattice.standardize()
Lattice.swap_angle()
Lattice.swap_axis()
Lattice.transform()
Lattice.transform_multi()
Lattice.update_from_1d_representation()
Lattice.update_para()
gaussian_random_variable()
generate_cellpara()
generate_cellpara_0D()
generate_cellpara_1D()
generate_cellpara_2D()
matrix2para()
para2matrix()
random_shear_matrix()
random_vector()
- pyxtal.molecular_crystal module
- pyxtal.molecule module
Box
Orientation
compare_mol_connectivity()
find_rotor_from_smile()
generate_molecules()
get_inertia_tensor()
has_non_aromatic_ring()
is_compatible_symmetry()
make_graph()
pyxtal_molecule
pyxtal_molecule.align()
pyxtal_molecule.apply_inversion()
pyxtal_molecule.copy()
pyxtal_molecule.get_box()
pyxtal_molecule.get_box_coordinates()
pyxtal_molecule.get_center()
pyxtal_molecule.get_coefs_matrix()
pyxtal_molecule.get_energy()
pyxtal_molecule.get_lengths()
pyxtal_molecule.get_max_length()
pyxtal_molecule.get_orientation()
pyxtal_molecule.get_orientations_in_wp()
pyxtal_molecule.get_orientations_in_wps()
pyxtal_molecule.get_principle_axes()
pyxtal_molecule.get_radius()
pyxtal_molecule.get_rmsd()
pyxtal_molecule.get_rmsd2()
pyxtal_molecule.get_symbols()
pyxtal_molecule.get_symmetry()
pyxtal_molecule.get_tols_matrix()
pyxtal_molecule.get_torsion_angles()
pyxtal_molecule.list_molecules()
pyxtal_molecule.load_str()
pyxtal_molecule.perturb_torsion()
pyxtal_molecule.rdkit_mol()
pyxtal_molecule.rdkit_mol_init()
pyxtal_molecule.relax()
pyxtal_molecule.reset_positions()
pyxtal_molecule.save_str()
pyxtal_molecule.set_labels()
pyxtal_molecule.set_torsion_angles()
pyxtal_molecule.show()
pyxtal_molecule.show_box()
pyxtal_molecule.swap_axis()
pyxtal_molecule.to_ase()
reoriented_molecule()
- pyxtal.msg module
- pyxtal.operations module
OperationAnalyzer
aa2matrix()
angle()
apply_ops()
apply_ops_diagonal()
are_equal()
check_distance()
check_images()
create_matrix()
distance()
distance_matrix()
distance_matrix_no_PBC()
filtered_coords()
filtered_coords_euclidean()
find_ids()
get_best_match()
get_inverse()
get_inverse_ops()
is_orthogonal()
rotate_vector()
verify_distances()
- pyxtal.plane module
- pyxtal.representation module
- pyxtal.supergroup module
find_mapping()
find_mapping_per_element()
find_xyz()
new_path()
new_structure()
search_G1()
search_G2()
supergroup
supergroup.calc_disps()
supergroup.get_coord_H()
supergroup.get_initial_mask()
supergroup.make_pyxtal_in_supergroup()
supergroup.make_pyxtals_in_subgroup()
supergroup.make_supergroup()
supergroup.print_detail()
supergroup.print_wp()
supergroup.search_supergroup()
supergroup.sort_solutions()
supergroup.symmetrize()
supergroup.symmetrize_dist()
supergroup.symmetrize_site_double_k()
supergroup.symmetrize_site_double_t()
supergroup.symmetrize_site_multi()
supergroup.symmetrize_site_single()
supergroups
write_poscars()
- pyxtal.symmetry module
Group
Group.add_k_transitions()
Group.cellsize()
Group.check_compatible()
Group.clean_lists()
Group.get_alternatives()
Group.get_ferroelectric_groups()
Group.get_free_axis()
Group.get_index_by_letter()
Group.get_lattice_dof()
Group.get_lists()
Group.get_lists_mol()
Group.get_max_k_subgroup()
Group.get_max_subgroup()
Group.get_max_subgroup_numbers()
Group.get_max_t_subgroup()
Group.get_min_supergroup()
Group.get_site_dof()
Group.get_spg_symmetry_object()
Group.get_splitters_from_relation()
Group.get_splitters_from_structure()
Group.get_symmetry_directions()
Group.get_valid_solutions()
Group.get_wp_by_letter()
Group.get_wp_list()
Group.get_wyckoff_position()
Group.get_wyckoff_position_from_xyz()
Group.is_valid_combination()
Group.list_groups()
Group.list_wyckoff_combinations()
Group.path_to_general_wp()
Group.path_to_subgroup()
Group.search_subgroup_paths()
Group.search_supergroup_paths()
Group.short_path_to_general_wp()
Hall
SymmetryData
SymmetryData.get_generator_lg()
SymmetryData.get_generator_pg()
SymmetryData.get_generator_rg()
SymmetryData.get_generator_sg()
SymmetryData.get_hall_table()
SymmetryData.get_k_subgroup()
SymmetryData.get_symmetry_lg()
SymmetryData.get_symmetry_pg()
SymmetryData.get_symmetry_rg()
SymmetryData.get_symmetry_sg()
SymmetryData.get_t_subgroup()
SymmetryData.get_wyckoff_lg()
SymmetryData.get_wyckoff_pg()
SymmetryData.get_wyckoff_rg()
SymmetryData.get_wyckoff_sg()
Wyckoff_position
Wyckoff_position.apply_ops()
Wyckoff_position.are_equivalent_pts()
Wyckoff_position.copy()
Wyckoff_position.distance_check()
Wyckoff_position.equivalent_set()
Wyckoff_position.from_dict()
Wyckoff_position.from_discrete_grid()
Wyckoff_position.from_group_and_index()
Wyckoff_position.from_group_and_letter()
Wyckoff_position.from_index_quick()
Wyckoff_position.from_symops()
Wyckoff_position.from_symops_wo_group()
Wyckoff_position.gen_pos()
Wyckoff_position.get_all_positions()
Wyckoff_position.get_dof()
Wyckoff_position.get_euclidean_generator()
Wyckoff_position.get_euclidean_ops()
Wyckoff_position.get_euclidean_symmetries()
Wyckoff_position.get_free_xyzs()
Wyckoff_position.get_frozen_axis()
Wyckoff_position.get_hm_number()
Wyckoff_position.get_hm_symbol()
Wyckoff_position.get_label()
Wyckoff_position.get_ops_from_transformation()
Wyckoff_position.get_position_from_free_xyzs()
Wyckoff_position.get_site_symm_ops()
Wyckoff_position.get_site_symm_wo_translation()
Wyckoff_position.get_site_symmetry()
Wyckoff_position.get_site_symmetry_object()
Wyckoff_position.has_equivalent_ops()
Wyckoff_position.is_pure_translation()
Wyckoff_position.is_standard_setting()
Wyckoff_position.load_dict()
Wyckoff_position.merge()
Wyckoff_position.print_ops()
Wyckoff_position.process_ops()
Wyckoff_position.project()
Wyckoff_position.save_dict()
Wyckoff_position.search_all_generators()
Wyckoff_position.search_generator()
Wyckoff_position.search_generator_dist()
Wyckoff_position.set_euclidean()
Wyckoff_position.set_generators()
Wyckoff_position.set_ops()
Wyckoff_position.short_distances()
Wyckoff_position.swap_axis()
Wyckoff_position.to_discrete_grid()
Wyckoff_position.transform_from_matrices()
Wyckoff_position.transform_from_matrix()
Wyckoff_position.update()
Wyckoff_position.update_hall()
Wyckoff_position.update_index()
abc2matrix()
are_equivalent_ops()
check_symmetry_and_dim()
check_wyckoff_position()
choose_wyckoff()
choose_wyckoff_mol()
find_axis_order()
get_all_polar_space_groups()
get_close_packed_groups()
get_generators()
get_pbc_and_lattice()
get_point_group()
get_symbol_and_number()
get_symmetry_directions()
get_symmetry_from_ops()
get_wyckoff_symmetry()
get_wyckoffs()
identity_ops()
index_from_letter()
jk_from_i()
letter_from_index()
op_transform()
op_translation()
organized_wyckoffs()
para2ferro()
rf()
search_cloest_wp()
site_symm()
site_symmetry
site_symmetry.get_highest_symmetry()
site_symmetry.get_name()
site_symmetry.ref_symmetry()
site_symmetry.set_full_hm_symbols()
site_symmetry.set_short_symbols()
site_symmetry.set_table()
site_symmetry.to_beautiful_matrix_representation()
site_symmetry.to_matrix_representation()
site_symmetry.to_matrix_representation_spg()
site_symmetry.to_one_hot()
site_symmetry.unique_symmetry()
swap_xyz_ops()
swap_xyz_string()
symmetry_element_from_axis()
transform_ops()
trim_ops()
- pyxtal.tolerance module
- pyxtal.util module
Kgrid()
ase2pymatgen()
extract_ase_db()
find_dir()
generate_wp_lib()
get_similar_cids_from_pubchem()
get_struc_from__parser()
get_symmetrized_pmg()
good_lattice()
listToString()
new_struc()
new_struc_wo_energy()
parse_cif()
process_csd_cif()
pymatgen2ase()
reset_lammps_cell()
search_csd_code_by_pubchem()
search_csd_entries_by_code()
sort_by_dimer()
split_list_by_ratio()
symmetrize()
symmetrize_cell()
- pyxtal.version module
- pyxtal.viz module
- pyxtal.wyckoff_site module
atom_site
atom_site.check_with_ws2()
atom_site.copy()
atom_site.encode()
atom_site.equivalent_set()
atom_site.get_bounds()
atom_site.get_disp()
atom_site.get_translations()
atom_site.load_dict()
atom_site.perturbate()
atom_site.save_dict()
atom_site.search_position()
atom_site.shift_by_swap()
atom_site.substitute_with_linear()
atom_site.substitute_with_single()
atom_site.to_mol_site()
atom_site.update()
mol_site
mol_site.mol
mol_site.position
mol_site.orientation
mol_site.wp
mol_site.lattice
mol_site.stype
mol_site.symbols
mol_site.numbers
mol_site.PBC
mol_site.radius
mol_site.tols_matrix
mol_site._get_dof()
mol_site.cut_lattice()
mol_site.encode()
mol_site.extract_short_distances()
mol_site.from_1D_dicts()
mol_site.get_bounds()
mol_site.get_coords_and_species()
mol_site.get_dist_angle_AD()
mol_site.get_dist_angle_DA()
mol_site.get_distances()
mol_site.get_dists_WP()
mol_site.get_dists_WP2()
mol_site.get_dists_auto()
mol_site.get_energy()
mol_site.get_ijk_lists()
mol_site.get_min_dist()
mol_site.get_mol_object()
mol_site.get_neighbors_auto()
mol_site.get_neighbors_wp2()
mol_site.is_valid_orientation()
mol_site.load_dict()
mol_site.optimize_orientation_by_dist()
mol_site.optimize_orientation_by_energy()
mol_site.perturbate()
mol_site.rotate()
mol_site.save_dict()
mol_site.short_dist()
mol_site.short_dist_with_wp2()
mol_site.show()
mol_site.show_molecule_in_box()
mol_site.to_1D_dicts()
mol_site.to_atom_site()
mol_site.translate()
mol_site.update()
mol_site.update_molecule()
mol_site.update_orientation()
- pyxtal.wyckoff_split module