Changeset 685


Ignore:
Timestamp:
Jul 11, 2012 9:37:55 AM (9 years ago)
Author:
vondreele
Message:

more on restraints: GUI display, edit & delete

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r684 r685  
    8787] = [wx.NewId() for item in range(4)]
    8888
    89 [ wxID_RESTRAINTADD,wxID_PWDANALYSIS, wxID_RESTSELPHASE,
    90 ] = [wx.NewId() for item in range(3)]
     89[ wxID_RESTRAINTADD,wxID_PWDANALYSIS, wxID_RESTSELPHASE,wxID_RESTDELETE,
     90] = [wx.NewId() for item in range(4)]
    9191
    9292[ wxID_SAVESEQSEL,
     
    285285        self.RestraintEdit.Append(id=wxID_RESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add restraints',
    286286            help='Add restraints')
     287        self.RestraintEdit.Append(id=wxID_RESTDELETE, kind=wx.ITEM_NORMAL,text='Delete restraints',
     288            help='Delete selected restraints')
    287289           
    288290# Sequential results
     
    16531655       
    16541656    def UpdateBondRestr(bondRestData):
     1657       
     1658        def ChangeCell(event):
     1659            r,c =  event.GetRow(),event.GetCol()
     1660            if r >= 0 and c >= 0:
     1661                bondList[r][c+2] = table[r][c]
     1662               
     1663        def OnDeleteRestraint(event):
     1664            rows = Bonds.GetSelectedRows()
     1665            Bonds.ClearSelection()
     1666            rows.sort()
     1667            rows.reverse()
     1668            for row in rows:
     1669                bondList.remove(bondList[row])
     1670            UpdateBondRestr(bondRestData)               
     1671           
    16551672        BondRestr.DestroyChildren()
    16561673        dataDisplay = wx.Panel(BondRestr)
     
    16591676        mainSizer.Add(WtBox(BondRestr,bondRestData),0,wx.ALIGN_CENTER_VERTICAL)
    16601677
    1661         table = []
    1662         rowLabels = []
    1663         colLabels = ['A+SymOp  B+SymOp','d-calc','d-obs','esd']
    1664         Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,3',]
    1665         for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(bondRestData['Bonds']):
    1666             table.append([atoms[0]+'+ ('+ops[0]+')  '+atoms[1]+'+ ('+ops[1]+')',dcalc,dobs,esd])
    1667             rowLabels.append(str(i))
    1668         bondTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1669         Bonds = GSGrid(BondRestr)
    1670         Bonds.SetTable(bondTable, True)
    1671         Bonds.AutoSizeColumns(False)
    1672         for r in range(len(bondRestData['Bonds'])):
    1673             for c in range(2):
    1674                 Bonds.SetReadOnly(r,c,True)
    1675         mainSizer.Add(Bonds,0,)
     1678        bondList = bondRestData['Bonds']
     1679        if len(bondList):
     1680            table = []
     1681            rowLabels = []
     1682            colLabels = ['A+SymOp  B+SymOp','d-calc','d-obs','esd']
     1683            Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,3',]
     1684            for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(bondList):
     1685                table.append([atoms[0]+'+ ('+ops[0]+')  '+atoms[1]+'+ ('+ops[1]+')',dcalc,dobs,esd])
     1686                rowLabels.append(str(i))
     1687            bondTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1688            Bonds = GSGrid(BondRestr)
     1689            Bonds.SetTable(bondTable, True)
     1690            Bonds.AutoSizeColumns(False)
     1691            for r in range(len(bondList)):
     1692                for c in range(2):
     1693                    Bonds.SetReadOnly(r,c,True)
     1694            Bonds.Bind(wg.EVT_GRID_CELL_CHANGE, ChangeCell)
     1695            G2frame.dataFrame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=wxID_RESTDELETE)
     1696            mainSizer.Add(Bonds,0,)
     1697        else:
     1698            mainSizer.Add(wx.StaticText(BondRestr,-1,'No bond distance restraints for this phase'),0,)
    16761699
    16771700        BondRestr.SetSizer(mainSizer)
     
    16831706       
    16841707    def UpdateAngleRestr(angleRestData):
     1708
     1709        def ChangeCell(event):
     1710            r,c =  event.GetRow(),event.GetCol()
     1711            if r >= 0 and c >= 0:
     1712                angleList[r][c+2] = table[r][c]
     1713           
     1714        def OnDeleteRestraint(event):
     1715            rows = Angles.GetSelectedRows()
     1716            rows.sort()
     1717            rows.reverse()
     1718            for row in rows:
     1719                angleList.remove(angleList[row])
     1720            UpdateAngleRestr(angleRestData)               
     1721           
    16851722        AngleRestr.DestroyChildren()
    16861723        dataDisplay = wx.Panel(AngleRestr)
     
    16891726        mainSizer.Add(WtBox(AngleRestr,angleRestData),0,wx.ALIGN_CENTER_VERTICAL)
    16901727
    1691         table = []
    1692         rowLabels = []
    1693         colLabels = ['A+SymOp  B+SymOp  C+SymOp','calc','obs','esd']
    1694         Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
    1695         for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(angleRestData['Angles']):
    1696             table.append([atoms[0]+'+ ('+ops[0]+')  '+atoms[1]+'+ ('+ops[1]+')  '+atoms[2]+ \
    1697             '+ ('+ops[2]+')',dcalc,dobs,esd])
    1698             rowLabels.append(str(i))
    1699         angleTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1700         Angles = GSGrid(AngleRestr)
    1701         Angles.SetTable(angleTable, True)
    1702         Angles.AutoSizeColumns(False)
    1703         for r in range(len(angleRestData['Angles'])):
    1704             for c in range(2):
    1705                 Angles.SetReadOnly(r,c,True)
    1706         mainSizer.Add(Angles,0,)
     1728        angleList = angleRestData['Angles']
     1729        if len(angleList):
     1730            table = []
     1731            rowLabels = []
     1732            colLabels = ['A+SymOp  B+SymOp  C+SymOp','calc','obs','esd']
     1733            Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
     1734            for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(angleList):
     1735                table.append([atoms[0]+'+ ('+ops[0]+')  '+atoms[1]+'+ ('+ops[1]+')  '+atoms[2]+ \
     1736                '+ ('+ops[2]+')',dcalc,dobs,esd])
     1737                rowLabels.append(str(i))
     1738            angleTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1739            Angles = GSGrid(AngleRestr)
     1740            Angles.SetTable(angleTable, True)
     1741            Angles.AutoSizeColumns(False)
     1742            for r in range(len(angleList)):
     1743                for c in range(2):
     1744                    Angles.SetReadOnly(r,c,True)
     1745            Angles.Bind(wg.EVT_GRID_CELL_CHANGE, ChangeCell)
     1746            G2frame.dataFrame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=wxID_RESTDELETE)
     1747            mainSizer.Add(Angles,0,)
     1748        else:
     1749            mainSizer.Add(wx.StaticText(AngleRestr,-1,'No bond angle restraints for this phase'),0,)
    17071750
    17081751        AngleRestr.SetSizer(mainSizer)
     
    17141757   
    17151758    def UpdatePlaneRestr(planeRestData):
     1759
     1760        def ChangeCell(event):
     1761            r,c =  event.GetRow(),event.GetCol()
     1762            if r >= 0 and c >= 0:
     1763                planeList[r][c+2] = table[r][c]
     1764           
     1765        def OnDeleteRestraint(event):
     1766            rows = Planes.GetSelectedRows()
     1767            rows.sort()
     1768            rows.reverse()
     1769            for row in rows:
     1770                planeList.remove(planeList[row])
     1771            UpdatePlaneRestr(planeRestData)               
     1772           
    17161773        PlaneRestr.DestroyChildren()
    17171774        dataDisplay = wx.Panel(PlaneRestr)
     
    17201777        mainSizer.Add(WtBox(PlaneRestr,planeRestData),0,wx.ALIGN_CENTER_VERTICAL)
    17211778
    1722         table = []
    1723         rowLabels = []
    1724         colLabels = ['atom+SymOp','calc','obs','esd']
    1725         Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
    1726         for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(planeRestData['Planes']):
    1727             print [atoms,ops,indx,dcalc,dobs,esd]
    1728             atString = ''
    1729             for a,atom in enumerate(atoms):
    1730                 atString += atom+'+ ('+ops[a]+'),'
    1731                 if (a+1)%3 == 0:
    1732                     atString += '\n'
    1733             table.append([atString[:-1],dcalc,dobs,esd])
    1734             rowLabels.append(str(i))
    1735         planeTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1736         Planes = GSGrid(PlaneRestr)
    1737         Planes.SetTable(planeTable, True)
    1738         Planes.AutoSizeColumns(False)
    1739         Planes.AutoSizeRows(False)
    1740         for r in range(len(planeRestData['Planes'])):
    1741             for c in range(3):
    1742                 Planes.SetReadOnly(r,c,True)
    1743         mainSizer.Add(Planes,0,)
     1779        planeList = planeRestData['Planes']
     1780        if len(planeList):
     1781            table = []
     1782            rowLabels = []
     1783            colLabels = ['atom+SymOp','calc','obs','esd']
     1784            Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
     1785            for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(planeList):
     1786                atString = ''
     1787                for a,atom in enumerate(atoms):
     1788                    atString += atom+'+ ('+ops[a]+'),'
     1789                    if (a+1)%3 == 0:
     1790                        atString += '\n'
     1791                table.append([atString[:-1],dcalc,dobs,esd])
     1792                rowLabels.append(str(i))
     1793            planeTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1794            Planes = GSGrid(PlaneRestr)
     1795            Planes.SetTable(planeTable, True)
     1796            Planes.AutoSizeColumns(False)
     1797            Planes.AutoSizeRows(False)
     1798            for r in range(len(planeList)):
     1799                for c in range(3):
     1800                    Planes.SetReadOnly(r,c,True)
     1801            Planes.Bind(wg.EVT_GRID_CELL_CHANGE, ChangeCell)
     1802            G2frame.dataFrame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=wxID_RESTDELETE)
     1803            mainSizer.Add(Planes,0,)
     1804        else:
     1805            mainSizer.Add(wx.StaticText(PlaneRestr,-1,'No plane restraints for this phase'),0,)
    17441806
    17451807        PlaneRestr.SetSizer(mainSizer)
     
    17511813   
    17521814    def UpdateChiralRestr(chiralRestData):
     1815
     1816        def ChangeCell(event):
     1817            r,c =  event.GetRow(),event.GetCol()
     1818            if r >= 0 and c >= 0:
     1819                volumeList[r][c+2] = table[r][c]
     1820           
     1821        def OnDeleteRestraint(event):
     1822            rows = Volumes.GetSelectedRows()
     1823            rows.sort()
     1824            rows.reverse()
     1825            for row in rows:
     1826                volumeList.remove(volumeList[row])
     1827            UpdateChiralRestr(chiralRestData)               
     1828           
    17531829        ChiralRestr.DestroyChildren()
    17541830        dataDisplay = wx.Panel(ChiralRestr)
     
    17571833        mainSizer.Add(WtBox(ChiralRestr,chiralRestData),0,wx.ALIGN_CENTER_VERTICAL)
    17581834
    1759         table = []
    1760         rowLabels = []
    1761         colLabels = ['O+SymOp  A+SymOp  B+SymOp  C+SymOp','calc','obs','esd']
    1762         Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
    1763         for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(chiralRestData['Volumes']):
    1764             table.append([atoms[0]+'+ ('+ops[0]+') '+atoms[1]+'+ ('+ops[1]+') '+atoms[2]+ \
    1765             '+ ('+ops[2]+') '+atoms[3]+'+ ('+ops[3]+')',dcalc,dobs,esd])
    1766             rowLabels.append(str(i))
    1767         volumeTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1768         Volumes = GSGrid(ChiralRestr)
    1769         Volumes.SetTable(volumeTable, True)
    1770         Volumes.AutoSizeColumns(False)
    1771         for r in range(len(chiralRestData['Volumes'])):
    1772             for c in range(2):
    1773                 Volumes.SetReadOnly(r,c,True)
    1774         mainSizer.Add(Volumes,0,)
     1835        volumeList = chiralRestData['Volumes']
     1836        if len(volumeList):
     1837            table = []
     1838            rowLabels = []
     1839            colLabels = ['O+SymOp  A+SymOp  B+SymOp  C+SymOp','calc','obs','esd']
     1840            Types = [wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
     1841            for i,[atoms,ops,indx,dcalc,dobs,esd] in enumerate(volumeList):
     1842                table.append([atoms[0]+'+ ('+ops[0]+') '+atoms[1]+'+ ('+ops[1]+') '+atoms[2]+ \
     1843                '+ ('+ops[2]+') '+atoms[3]+'+ ('+ops[3]+')',dcalc,dobs,esd])
     1844                rowLabels.append(str(i))
     1845            volumeTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1846            Volumes = GSGrid(ChiralRestr)
     1847            Volumes.SetTable(volumeTable, True)
     1848            Volumes.AutoSizeColumns(False)
     1849            for r in range(len(volumeList)):
     1850                for c in range(2):
     1851                    Volumes.SetReadOnly(r,c,True)
     1852            Volumes.Bind(wg.EVT_GRID_CELL_CHANGE, ChangeCell)
     1853            G2frame.dataFrame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=wxID_RESTDELETE)
     1854            mainSizer.Add(Volumes,0,)
     1855        else:
     1856            mainSizer.Add(wx.StaticText(ChiralRestr,-1,'No chiral volume restraints for this phase'),0,)
    17751857
    17761858        ChiralRestr.SetSizer(mainSizer)
  • trunk/GSASIIpwdGUI.py

    r684 r685  
    195195            if event.GetKeyCode() == wx.WXK_DELETE:
    196196                G2frame.dataDisplay.ClearGrid()
     197                rowList.sort()
    197198                rowList.reverse()
    198199                nDel = 0
Note: See TracChangeset for help on using the changeset viewer.