Source code for vasppy.configuration

from vasppy import atom, cell, rdf
import numpy as np

[docs]class Configuration: """ A Configuration object stores a single structure. """ def __init__( self, cell, atoms ): self.cell = cell self.atoms = atoms
[docs] def dr( self, atom1, atom2 ): """ Calculate the distance between two atoms. Args: atom1 (vasppy.Atom): Atom 1. atom2 (vasppy.Atom): Atom 2. Returns: (float): The distance between Atom 1 and Atom 2. """ return self.cell.dr( atom1.r, atom2.r )
[docs] def minimum_image_dr( self, atom1, atom2, cutoff=None ): return self.cell.minimum_image_dr( atom1.r, atom2.r, cutoff=cutoff )
[docs] def interatomic_distances( self, minimum_image_convention = True ): return np.array( [ [ self.minimum_image_dr( atom_i, atom_j ) for atom_j in self.atoms ] for atom_i in self.atoms ] )
[docs] def interatomic_distances_for_atom( self, atom1, minimum_image_convention = True ): return np.array( [ self.minimum_image_dr( atom1, atom2 ) for atom2 in self.atoms ] )
[docs] def atoms_with_label( self, label ): return filter( lambda atom: atom.label == label, self.atoms )
[docs] def partial_rdf( self, spec_i, spec_j, max_r, number_of_bins ): this_rdf = rdf.Rdf( max_r, number_of_bins ) atoms_i = list( self.atoms_with_label( spec_i ) ) atoms_j = list( self.atoms_with_label( spec_j ) ) for atom_i in atoms_i: for atom_j in atoms_j: if atom_i is atom_j: continue dr = self.minimum_image_dr( atom_i, atom_j ) if dr <= max_r: this_rdf.add_dr( dr ) return this_rdf
[docs] def per_atom_rdf( self, spec_i, spec_j, max_r, number_of_bins ): rdfs = [] atoms_i = list( self.atoms_with_label( spec_i ) ) atoms_j = list( self.atoms_with_label( spec_j ) ) for atom_i in atoms_i: this_rdf = rdf.Rdf( max_r, number_of_bins ) for atom_j in atoms_j: if atom_i is atom_j: continue dr = self.minimum_image_dr( atom_i, atom_j ) try: this_rdf.add_dr( dr ) except IndexError: pass except: raise rdfs.append( this_rdf ) return rdfs