def UFormulas(self, Usymbols=None): """List of atom displacement formulas with custom parameter symbols. Usymbols -- list of custom symbols used in formula strings Return list of atom displacement formula dictionaries per each site. Formula dictionary keys are from ('U11','U22','U33','U12','U13','U23') and the values are formatted as {[%g*][Usymbol]|0}, for example: "U11", "0.5*@37", "0". """ if not Usymbols: return list(self.Ueqns) # check Usymbols if len(Usymbols) < len(self.Upars): emsg = "Not enough symbols for %i U parameters" % len(self.Upars) raise SymmetryError(emsg) # build translation dictionary trsmbl = dict(zip(self.UparSymbols(), Usymbols)) def translatesymbol(matchobj): return trsmbl[matchobj.group(0)] pat = re.compile(r'\bU\d\d\d+') rv = [] for eqns in self.Ueqns: treqns = {} for smbl, eq in eqns.iteritems(): treqns[smbl] = re.sub(pat, translatesymbol, eq) rv.append(treqns) return rv
def positionFormulas(self, xyzsymbols=None): """List of position formulas with custom parameter symbols. xyzsymbols -- list of custom symbols used in formula strings Return list of coordinate formulas dictionaries. Formulas dictionary keys are from ("x", "y", "z") and the values are formatted as [[-]{symbol}] [{+|-}%g], for example: "x0", "-sym", "@7 +0.5", "0.25". """ if not xyzsymbols: return list(self.poseqns) # check xyzsymbols if len(xyzsymbols) < len(self.pospars): emsg = ("Not enough symbols for %i position parameters" % len(self.pospars)) raise SymmetryError(emsg) # build translation dictionary trsmbl = dict(zip(self.posparSymbols(), xyzsymbols)) def translatesymbol(matchobj): return trsmbl[matchobj.group(0)] pat = re.compile(r'\b[xyz]\d+') rv = [] for eqns in self.poseqns: treqns = {} for smbl, eq in eqns.iteritems(): treqns[smbl] = re.sub(pat, translatesymbol, eq) rv.append(treqns) return rv