def __str__(self): if not hasattr(self, "site_symm"): self.site_symm = site_symm( self.wp.symmetry_m[0], self.wp.number, dim=self.wp.dim ) s = "{:>2s} @ [{:6.4f} {:6.4f} {:6.4f}], ".format(self.specie, *self.position) s += "WP: {:2d}{:s}, ".format(self.wp.multiplicity, self.wp.letter) s += "Site symmetry: {:s}".format(self.site_symm) return s
def swap_axis(self, swap_id, shift=np.zeros(3)): """ sometimes space groups like Pmm2 allows one to swap the a,b axes to get an alternative representation """ self.position += shift self.position = self.position[swap_id] self.position -= np.floor(self.position) self.wp, _ = self.wp.swap_axis(swap_id) self.site_symm = site_symm(self.wp.symmetry_m[0], self.wp.number, dim=self.wp.dim) self.update()
def __str__(self): if not hasattr(self, "site_symm"): self.site_symm = site_symm(self.wp.symmetry_m[0], self.wp.number, dim=self.wp.dim) self.angles = self.orientation.r.as_euler('zxy', degrees=True) formula = self.mol.formula.replace(" ", "") s = "{:} @ [{:7.4f} {:7.4f} {:7.4f}] ".format(formula, *self.position) s += "WP: {:2d}{:s}, ".format(self.wp.multiplicity, self.wp.letter) s += "Site symmetry {:} ==> Euler: ".format(self.site_symm) s += "{:6.3f} {:6.3f} {:6.3f}".format(*self.angles) return s
def equivalent_set(self, tran, indices): """ Transform the wp to another equivalent set. Needs to update both wp and positions Args: tran: affine matrix indices: the list of transformed wps """ self.position = SymmOp(tran).operate(self.position) self.position -= np.floor(self.position) self.wp = self.wp.equivalent_set( indices[self.wp.index]) #update the wp index self.site_symm = site_symm(self.wp.symmetry_m[0], self.wp.number, dim=self.wp.dim) self.update()