Changeset 1161 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Dec 5, 2013 2:50:03 PM (9 years ago)
Author:
toby
Message:

finish ISODISTORT occupancy modes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r1160 r1161  
    4848import GSASIIpwd as G2pwd
    4949import GSASIIpy3 as G2py3
     50import GSASIIobj as G2obj
    5051import numpy as np
    5152import numpy.linalg as nl
     
    16371638        only when Phase['ISODISTORT'] is defined.
    16381639        '''
     1640        def _onClose(event):
     1641            dlg.EndModal(wx.ID_CANCEL)
     1642        def fmtHelp(item,fullname):
     1643            helptext = "A new variable"
     1644            if item[-3]:
     1645                helptext += " named "+str(item[-3])
     1646            helptext += " is a linear combination of the following parameters:\n"
     1647            first = True
     1648            for term in item[:-3]:
     1649                line = ''
     1650                var = str(term[1])
     1651                m = term[0]
     1652                if first:
     1653                    first = False
     1654                    line += ' = '
     1655                else:
     1656                    if m >= 0:
     1657                        line += ' + '
     1658                    else:
     1659                        line += ' - '
     1660                    m = abs(m)
     1661                line += '%.3f*%s '%(m,var)
     1662                varMean = G2obj.fmtVarDescr(var)
     1663                helptext += "\n" + line + " ("+ varMean + ")"
     1664            helptext += '\n\nISODISTORT full name: '+str(fullname)
     1665            return helptext
     1666
    16391667        if 'ISODISTORT' not in data:
    16401668            raise Exception,"Should not happen: 'ISODISTORT' not in data"
     
    16451673                )
    16461674            return
    1647         def _onClose(event):
    1648             dlg.EndModal(wx.ID_CANCEL)
    1649 
    16501675        Histograms,Phases = G2frame.GetUsedHistogramsAndPhasesfromTree() # init for constraint
     1676        # make a lookup table for constraints
     1677        sub = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Constraints')
     1678        Constraints = G2frame.PatternTree.GetItemPyData(sub)
     1679        constDict = {}
     1680        for item in Constraints:
     1681            if item.startswith('_'): continue
     1682            for c in Constraints[item]:
     1683                if c[-1] != 'f' or not c[-3]: continue
     1684                constDict[c[-3]] = c
     1685
    16511686        ISO = data['ISODISTORT']
    16521687        parmDict,varyList = G2frame.MakeLSParmDict()
    1653         deltaList = []
    1654         for gv,Ilbl in zip(ISO['G2VarList'],ISO['IsoVarList']):
    1655             dvar = gv.varname()
    1656             var = dvar.replace('::dA','::A')
    1657             albl = Ilbl[:Ilbl.rfind('_')]
    1658             v = Ilbl[Ilbl.rfind('_')+1:]
    1659             pval = ISO['ParentStructure'][albl][['dx','dy','dz'].index(v)]
    1660             if var in parmDict:
    1661                 cval = parmDict[var][0]
    1662             else:
    1663                 G2frame.ErrorDialog('Atom not found',"No value found for parameter "+str(var))
    1664                 return
    1665             deltaList.append(cval-pval)
    1666         modeVals = np.inner(ISO['Var2ModeMatrix'],deltaList)
     1688           
    16671689        dlg = wx.Dialog(G2frame,wx.ID_ANY,'ISODISTORT mode values',#size=(630,400),
    16681690                           style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
     
    16791701            dlg, wx.ID_ANY,#size=(100,200),
    16801702            style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
    1681         subSizer2 = wx.FlexGridSizer(rows=1,cols=2,hgap=5,vgap=2)
    1682         subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,'Parameter name'))
    1683         subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,'value '),0,wx.ALIGN_RIGHT)
    1684         subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,' Mode name  '))
    1685         subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,'value '),0,wx.ALIGN_RIGHT)
     1703        subSizer2 = wx.FlexGridSizer(rows=1,cols=3,hgap=5,vgap=2)
     1704        subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,'Parameter name  '))
     1705        subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,' value'),0,wx.ALIGN_RIGHT)
     1706        subSizer2.Add((-1,-1))
     1707        subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,'Mode name  '))
     1708        subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,' value'),0,wx.ALIGN_RIGHT)
    16861709       
    1687         for lbl,xyz,var,val in zip(ISO['IsoVarList'],deltaList,ISO['IsoModeList'],modeVals):
    1688             subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,str(lbl)))
    1689             try:
    1690                 value = G2py3.FormatValue(xyz)
    1691             except TypeError:
    1692                 value = str(xyz)           
    1693             subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
    1694             #subSizer.Add((10,-1))
    1695             subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,str(var)))
    1696             try:
    1697                 value = G2py3.FormatValue(val)
    1698             except TypeError:
    1699                 value = str(val)           
    1700             subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
     1710        if 'G2VarList' in ISO:
     1711            deltaList = []
     1712            for gv,Ilbl in zip(ISO['G2VarList'],ISO['IsoVarList']):
     1713                dvar = gv.varname()
     1714                var = dvar.replace('::dA','::A')
     1715                albl = Ilbl[:Ilbl.rfind('_')]
     1716                v = Ilbl[Ilbl.rfind('_')+1:]
     1717                pval = ISO['ParentStructure'][albl][['dx','dy','dz'].index(v)]
     1718                if var in parmDict:
     1719                    cval = parmDict[var][0]
     1720                else:
     1721                    dlg.EndModal(wx.ID_CANCEL)
     1722                    G2frame.ErrorDialog('Atom not found',"No value found for parameter "+str(var))
     1723                    return
     1724                deltaList.append(cval-pval)
     1725            modeVals = np.inner(ISO['Var2ModeMatrix'],deltaList)
     1726            for lbl,xyz,var,val,G2var in zip(ISO['IsoVarList'],deltaList,
     1727                                             ISO['IsoModeList'],modeVals,ISO['G2ModeList']):
     1728                if G2var in constDict:
     1729                    ch = G2gd.HelpButton(panel2,fmtHelp(constDict[G2var],var))
     1730                    subSizer2.Add(ch,0,wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER,1)
     1731                else:
     1732                    subSizer2.Add((-1,-1))
     1733                subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,str(lbl)))
     1734                try:
     1735                    value = G2py3.FormatValue(xyz)
     1736                except TypeError:
     1737                    value = str(xyz)           
     1738                subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
     1739                subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,str(var)))
     1740                try:
     1741                    value = G2py3.FormatValue(val)
     1742                except TypeError:
     1743                    value = str(val)           
     1744                subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
     1745        if 'G2OccVarList' in ISO:
     1746            deltaList = []
     1747            for gv,Ilbl in zip(ISO['G2OccVarList'],ISO['OccVarList']):
     1748                var = gv.varname()
     1749                albl = Ilbl[:Ilbl.rfind('_')]
     1750                #v = Ilbl[Ilbl.rfind('_')+1:]
     1751                pval = ISO['BaseOcc'][albl]
     1752                if var in parmDict:
     1753                    cval = parmDict[var][0]
     1754                else:
     1755                    dlg.EndModal(wx.ID_CANCEL)
     1756                    G2frame.ErrorDialog('Atom not found',"No value found for parameter "+str(var))
     1757                    return
     1758                deltaList.append(cval-pval)
     1759            modeVals = np.inner(ISO['Var2OccMatrix'],deltaList)
     1760            for lbl,xyz,var,val,G2var in zip(ISO['OccVarList'],deltaList,
     1761                                             ISO['OccModeList'],modeVals,ISO['G2OccModeList']):
     1762                if G2var in constDict:
     1763                    ch = G2gd.HelpButton(panel2,fmtHelp(constDict[G2var],var))
     1764                    subSizer2.Add(ch,0,wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER,1)
     1765                else:
     1766                    subSizer2.Add((-1,-1))
     1767                subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,str(lbl)))
     1768                try:
     1769                    value = G2py3.FormatValue(xyz)
     1770                except TypeError:
     1771                    value = str(xyz)           
     1772                subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
     1773                #subSizer.Add((10,-1))
     1774                subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,str(var)))
     1775                try:
     1776                    value = G2py3.FormatValue(val)
     1777                except TypeError:
     1778                    value = str(val)           
     1779                subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
     1780
    17011781        # finish up ScrolledPanel
    17021782        panel1.SetSizer(subSizer1)
     
    17271807        dlg.ShowModal()
    17281808        dlg.Destroy()
    1729        
    17301809       
    17311810    def OnReImport(event):
Note: See TracChangeset for help on using the changeset viewer.