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