pyxtal package

PyXtal: A Python library for crystal structure generation and manipulation.

This module initializes the pyxtal package, providing essential imports and utility functions.

print out the logo and version information

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)

are_valid_numIons()[source]

Check if the numIons are correct for debugging

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_distance()[source]

Check intermolecular distance for molecular crystal

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

copy()[source]

Simply copy the structure

cut_lattice(max_separation=3.0, verbose=False)[source]

An utility to reduce the empty spacing

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_json(filename)[source]

Load the model from a json file

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_comp()[source]

Get composition for 1d rep of molecular xtal

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_Pearson_Symbol()[source]

Based on https://en.wikipedia.org/wiki/Pearson_symbol

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_bounds(vec=(2.0, 50.0), ang=(30, 150))[source]

Get the number of dof for the given structures:

get_density()[source]

Compute density

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_dof()[source]

Get the number of dof for the given structures:

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_free_axis()[source]

Check if the a, b, c axis have free parameters

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_num_torsions()[source]

Get number of torsions for molecular xtal

get_orientation_energy()[source]
get_separations(hkls=[[1, 0, 0], [0, 1, 0], [0, 0, 1]])[source]

Compute the separation for the given hkl plane

get_site_labels()[source]

Get the site_labels as a dictionary

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

get_zprime(integer=False)[source]

Get zprime for molecular xtal

has_special_site(species=None)[source]

Check if the crystal has a special site

is_duplicate(ref_strucs)[source]

check if the structure is exactly the same

load_dict(dict0)[source]

Load the structure from a dictionary

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

optimize_orientation_by_energy(max_iter=20, verbose=False)[source]
remove_species(species)[source]

To remove the atom_sites by specie name :param dicts: e.g., [“O”]

remove_water()[source]

Remove water from hydrates

resort()[source]

A short cut to resort the sites by self.molecules or self.species

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

save_dict()[source]

Save the model as a dictionary

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(**kwargs)[source]

display the crystal structure

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

sort_sites_by_mult()[source]
sort_sites_by_numIons(seq=None)[source]
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_typet 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_atomic_xtal()[source]

Convert the molecular

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_json(filename='pyxtal.json')[source]

Save the model as a dictionary

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_pymatgen(resort=True, shape='upper')[source]

Export to Pymatgen structure object.

to_pyxtal_center()[source]

Export to PyXtal object for molecular centers only.

to_standard_setting()[source]

A short cut to symmetrize the structure in the stardard setting

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

update_wyckoffs()[source]

rescale the coordinates in the wyckoff site

Subpackages

Submodules