Changeset 817


Ignore:
Timestamp:
Dec 17, 2012 4:06:53 PM (9 years ago)
Author:
vondreele
Message:

new GSASIIdata.py for useful data
add ramachandran calcs
show unit cell by default
add ramachandran plot
continue restraint development

Location:
trunk
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r815 r817  
    10851085        self.ContourColor = 'Paired'
    10861086        self.VcovColor = 'RdYlGn'
     1087        self.RamaColor = 'RdYlGn'
    10871088        self.Projection = 'equal area'
    10881089        self.logPlot = False
  • trunk/GSASIIgrid.py

    r811 r817  
    449449           
    450450# Restraints
    451         self.RestraintMenu = wx.MenuBar()
    452         self.PrefillDataMenu(self.RestraintMenu,helpType='Restraints')
    453451        self.RestraintEdit = wx.Menu(title='')
    454         self.RestraintMenu.Append(menu=self.RestraintEdit, title='Edit')
    455452        self.RestraintEdit.Append(id=wxID_RESTSELPHASE, kind=wx.ITEM_NORMAL,text='Select phase',
    456453            help='Select phase')
    457454        self.RestraintEdit.Append(id=wxID_RESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add restraints',
    458455            help='Add restraints')
     456        self.RestraintEdit.Enable(wxID_RESTRAINTADD,True)    #gets disenabled if macromolecule phase
    459457        self.RestraintEdit.Append(id=wxID_AARESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add residue restraints',
    460             help='Add residue based restraints for macromolecules')
     458            help='Add residue based restraints for macromolecules from macro file')
    461459        self.RestraintEdit.Enable(wxID_AARESTRAINTADD,False)    #gets enabled if macromolecule phase
    462460        self.RestraintEdit.Append(id=wxID_RESRCHANGEVAL, kind=wx.ITEM_NORMAL,text='Change value',
     
    466464        self.RestraintEdit.Append(id=wxID_RESTDELETE, kind=wx.ITEM_NORMAL,text='Delete restraints',
    467465            help='Delete selected restraints')
     466        self.RestraintMenu = wx.MenuBar()
     467        self.PrefillDataMenu(self.RestraintMenu,helpType='Restraints')
     468        self.RestraintMenu.Append(menu=self.RestraintEdit, title='Edit')
    468469        self.PostfillDataMenu()
    469470           
  • trunk/GSASIImacros/ramachandran.mac

    r815 r817  
    192192S MET-2 MET .5 N CA CB CG SD
    193193S TRP-2 TRP .5 N CA CB CG CD1
    194 
  • trunk/GSASIImath.py

    r815 r817  
    294294        delt = np.where(delt>180.,delt-360.,delt)
    295295#        pMax = np.min(cof[0])
    296         pMax = cof[0][np.argmin(delt)]
    297296        term = -cof[2]*delt**2
    298         sum = np.sum(cof[0]*np.exp(term/1000.0))-pMax
     297        val = cof[0]*np.exp(term/1000.0)
     298        pMax = cof[0][np.argmin(val)]
     299        sum = np.sum(val)-pMax
    299300    return TOR,sum
     301
     302def getRestRama(XYZ,Amat,Coeff=[]):
     303    phi,x = getRestTorsion(XYZ[:5],Amat)
     304    psi,x = getRestTorsion(XYZ[1:],Amat)
     305    sum = 0
     306    if len(Coeff):
     307        cof = Coeff.T
     308        dPhi = phi-cof[1]
     309        dPhi = np.where(dPhi<-180.,dPhi+360.,dPhi)
     310        dPhi = np.where(dPhi>180.,dPhi-360.,dPhi)
     311        dPsi = psi-cof[2]
     312        dPsi = np.where(dPsi<-180.,dPsi+360.,dPsi)
     313        dPsi = np.where(dPsi>180.,dPsi-360.,dPsi)
     314        val = -cof[3]*dPhi**2-cof[4]*dPsi**2-2.0*cof[5]*dPhi*dPsi
     315        val = cof[0]*np.exp(val/1000.)
     316        pMax = cof[0][np.argmin(val)]
     317        sum = np.sum(val)-pMax
     318    return phi,psi,sum
    300319   
    301320def getDistDerv(Oxyz,Txyz,Amat,Tunit,Top,SGData):
  • trunk/GSASIIphsGUI.py

    r815 r817  
    16251625            'backColor':[0,0,0],'depthFog':False,'Zclip':50.0,'cameraPos':50.,'Zstep':0.5,
    16261626            'radiusFactor':0.85,'contourLevel':1.,'bondRadius':0.1,'ballScale':0.33,
    1627             'vdwScale':0.67,'ellipseProb':50,'sizeH':0.50,'unitCellBox':False,
     1627            'vdwScale':0.67,'ellipseProb':50,'sizeH':0.50,'unitCellBox':True,
    16281628            'showABC':True,'selectedAtoms':[],'Atoms':[],'oldxy':[],
    16291629            'bondList':{},'viewDir':[1,0,0]}
     
    33033303            Obj.SetValue('%3d %3d %3d'%(h,k,l))
    33043304                       
     3305        def OnResetSize(event):
     3306            Obj = event.GetEventObject()
     3307            Obj.SetValue(False)
     3308            item,name = Indx[Obj.GetId()]
     3309            if name == 'isotropic':
     3310                UseList[item]['Size'][1][0] = 1.0
     3311            elif name == 'uniaxial':
     3312                UseList[item]['Size'][1][0] = 1.0
     3313                UseList[item]['Size'][1][1] = 1.0
     3314            elif name == 'ellipsoidal':
     3315                for i in range(3):
     3316                    UseList[item]['Size'][4][i] = 1.0
     3317                    UseList[item]['Size'][4][i+3] = 0.0
     3318            G2plt.PlotSizeStrainPO(G2frame,data)
     3319            wx.CallAfter(UpdateDData)
     3320               
    33053321        def OnStrainType(event):
    33063322            Obj = event.GetEventObject()
     
    33553371            G2plt.PlotSizeStrainPO(G2frame,data)
    33563372           
     3373        def OnResetStrain(event):
     3374            Obj = event.GetEventObject()
     3375            Obj.SetValue(False)
     3376            item,name = Indx[Obj.GetId()]
     3377            if name == 'isotropic':
     3378                UseList[item]['Mustrain'][1][0] = 1000.0
     3379            elif name == 'uniaxial':
     3380                UseList[item]['Mustrain'][1][0] = 1000.0
     3381                UseList[item]['Mustrain'][1][1] = 1000.0
     3382            elif name == 'generalized':
     3383                nTerm = len(UseList[item]['Mustrain'][4])
     3384                for i in range(nTerm):
     3385                    UseList[item]['Mustrain'][4][i] = 0.01
     3386            wx.CallAfter(UpdateDData)
     3387            G2plt.PlotSizeStrainPO(G2frame,data)
     3388               
    33573389        def OnHstrainRef(event):
    33583390            Obj = event.GetEventObject()
     
    35213553            return lgmixSizer
    35223554                       
     3555        def ResetSizer(name,OnReset):
     3556            resetSizer = wx.BoxSizer(wx.HORIZONTAL)
     3557            resetSizer.Add((5,0),0)
     3558            reset = wx.CheckBox(DData,-1,label='Reset?')
     3559            reset.thisown = False
     3560            reset.SetValue(False)
     3561            Indx[reset.GetId()] = [item,name]
     3562            reset.Bind(wx.EVT_CHECKBOX,OnReset)
     3563            resetSizer.Add(reset,0,wx.ALIGN_CENTER_VERTICAL)
     3564            return resetSizer
     3565           
    35233566        def IsoSizer(name,parm,fmt,OnVal,OnRef):
    35243567            isoSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    36063649                dataSizer.Add(strainVal,0,wx.ALIGN_CENTER_VERTICAL)
    36073650            return dataSizer
    3608            
     3651
    36093652        def HstrainSizer():
    36103653            hstrainSizer = wx.FlexGridSizer(1,6,5,5)
     
    38173860                        'Size',OnSizeType),0,wx.ALIGN_CENTER_VERTICAL)
    38183861                    isoSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
     3862                    isoSizer.Add(ResetSizer('isotropic',OnResetSize),0,wx.ALIGN_CENTER_VERTICAL)
    38193863                    mainSizer.Add(isoSizer)
    38203864                    mainSizer.Add(IsoSizer(u' Cryst. size(\xb5m): ','Size','%.3f',
     
    38253869                        'Size',OnSizeType),0,wx.ALIGN_CENTER_VERTICAL)
    38263870                    uniSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
    3827                     uniSizer.Add(UniSizer('Size',OnSizeAxis),0,wx.ALIGN_CENTER_VERTICAL)
     3871                    uniSizer.Add(ResetSizer('uniaxial',OnResetSize),0,wx.ALIGN_CENTER_VERTICAL)
     3872                    mainSizer.Add(UniSizer('Size',OnSizeAxis),0,wx.ALIGN_CENTER_VERTICAL)
    38283873                    mainSizer.Add(uniSizer)
    38293874                    mainSizer.Add(UniDataSizer(u'size(\xb5m): ','Size','%.3f',OnSizeVal,OnSizeRef))
     
    38333878                        'Size',OnSizeType),0,wx.ALIGN_CENTER_VERTICAL)
    38343879                    ellSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
     3880                    ellSizer.Add(ResetSizer('ellipsoidal',OnResetSize),0,wx.ALIGN_CENTER_VERTICAL)
    38353881                    mainSizer.Add(ellSizer)
    38363882                    mainSizer.Add(EllSizeDataSizer())
     
    38423888                        'Mustrain',OnStrainType),0,wx.ALIGN_CENTER_VERTICAL)
    38433889                    isoSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
     3890                    isoSizer.Add(ResetSizer('isotropic',OnResetStrain),0,wx.ALIGN_CENTER_VERTICAL)
    38443891                    mainSizer.Add(isoSizer)
    38453892                    mainSizer.Add(IsoSizer(' microstrain: ','Mustrain','%.1f',
     
    38513898                        'Mustrain',OnStrainType),0,wx.ALIGN_CENTER_VERTICAL)
    38523899                    uniSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
    3853                     uniSizer.Add(UniSizer('Mustrain',OnStrainAxis),0,wx.ALIGN_CENTER_VERTICAL)
     3900                    uniSizer.Add(ResetSizer('uniaxial',OnResetStrain),0,wx.ALIGN_CENTER_VERTICAL)
    38543901                    mainSizer.Add(uniSizer)
     3902                    mainSizer.Add(UniSizer('Mustrain',OnStrainAxis),0,wx.ALIGN_CENTER_VERTICAL)
    38553903                    mainSizer.Add(UniDataSizer('mustrain: ','Mustrain','%.1f',OnStrainVal,OnStrainRef))
    38563904                elif UseList[item]['Mustrain'][0] == 'generalized':
     
    38593907                        'Mustrain',OnStrainType),0,wx.ALIGN_CENTER_VERTICAL)
    38603908                    genSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
     3909                    genSizer.Add(ResetSizer('generalized',OnResetStrain),0,wx.ALIGN_CENTER_VERTICAL)
    38613910                    mainSizer.Add(genSizer)
    38623911                    mainSizer.Add(GenStrainDataSizer())                       
  • trunk/GSASIIplot.py

    r809 r817  
    3232import GSASIIspc as G2spc
    3333import GSASIImath as G2mth
     34import GSASIIdata as G2data
    3435import pytexture as ptx
    3536from  OpenGL.GL import *
     
    12711272        try:
    12721273            Xmin,Xmax = limits[1]
    1273             Xmin = min(0.5,max(Xmin,1))
    12741274            X = np.linspace(Xmin,Xmax,num=101,endpoint=True)
    12751275            Q = 4.*np.pi*npsind(X/2.)/lam
     
    17201720            ytics = np.where(ytics<len(varyList),ytics,-1)
    17211721            ylabs = [np.where(0<=i ,varyList[int(i)],' ') for i in ytics]
    1722             imgAx.set_yticklabels(ylabs)
    1723            
     1722            imgAx.set_yticklabels(ylabs)           
    17241723        if event.xdata and event.ydata:                 #avoid out of frame errors
    17251724            xpos = int(event.xdata+.5)
     
    17361735                Page.canvas.SetToolTipString(msg)
    17371736                G2frame.G2plotNB.status.SetFields(['',msg])
     1737               
    17381738    try:
    17391739        plotNum = G2frame.G2plotNB.plotList.index('Covariance')
     
    17491749        Page.canvas.mpl_connect('motion_notify_event', OnMotion)
    17501750        Page.canvas.mpl_connect('key_press_event', OnPlotKeyPress)
    1751 
    17521751    Page.Choice = ['s: to change colors']
    17531752    Page.keyPress = OnPlotKeyPress
     
    17661765    Page.canvas.draw()
    17671766   
     1767################################################################################
     1768##### PlotRama
     1769################################################################################
     1770
     1771def PlotRama(G2frame,phaseName):
     1772
     1773    Data = G2frame.PatternTree.GetItemPyData(
     1774        G2gd.GetPatternTreeItemId(G2frame,G2frame.root, 'Restraints'))
     1775    Rama = Data[phaseName]['Rama']
     1776    rama = np.log(G2data.ramachandranDist)
     1777    ramaMax = np.max(rama)
     1778    rama /= float(ramaMax)
     1779    rama = np.reshape(rama,(45,45))
     1780
     1781    def OnPlotKeyPress(event):
     1782        newPlot = False
     1783        if event.key == 's':
     1784            choice = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")]
     1785            choice.sort()
     1786            dlg = wx.SingleChoiceDialog(G2frame,'Select','Color scheme',choice)
     1787            if dlg.ShowModal() == wx.ID_OK:
     1788                sel = dlg.GetSelection()
     1789                G2frame.RamaColor = choice[sel]
     1790            else:
     1791                G2frame.RamaColor = 'RdYlGn'
     1792            dlg.Destroy()
     1793        PlotRama(G2frame,phaseName)
     1794
     1795    def OnMotion(event):
     1796        if event.xdata and event.ydata:                 #avoid out of frame errors
     1797            xpos = event.xdata
     1798            ypos = event.ydata
     1799            msg = 'phi/psi: %5.3f %5.3f'%(xpos,ypos)
     1800            Page.canvas.SetToolTipString(msg)
     1801            G2frame.G2plotNB.status.SetFields(['',msg])
     1802
     1803    try:
     1804        plotNum = G2frame.G2plotNB.plotList.index('Ramachandran')
     1805        Page = G2frame.G2plotNB.nb.GetPage(plotNum)
     1806        Page.figure.clf()
     1807        Plot = Page.figure.gca()
     1808        if not Page.IsShown():
     1809            Page.Show()
     1810    except ValueError:
     1811        Plot = G2frame.G2plotNB.addMpl('Ramachandran').gca()
     1812        plotNum = G2frame.G2plotNB.plotList.index('Ramachandran')
     1813        Page = G2frame.G2plotNB.nb.GetPage(plotNum)
     1814        Page.canvas.mpl_connect('motion_notify_event', OnMotion)
     1815        Page.canvas.mpl_connect('key_press_event', OnPlotKeyPress)
     1816
     1817    Page.Choice = ['s: to change colors']
     1818    Page.keyPress = OnPlotKeyPress
     1819    Page.SetFocus()
     1820    G2frame.G2plotNB.status.SetFields(['',''])   
     1821    acolor = mpl.cm.get_cmap(G2frame.RamaColor)
     1822    Img = Plot.imshow(rama,aspect='equal',cmap=acolor,interpolation='nearest',
     1823        extent=[-180,180,-180,180],origin='lower')
     1824    colorBar = Page.figure.colorbar(Img)
     1825    Plot.set_title('Ramachandran for '+phaseName)
     1826    Plot.set_xlabel(r'$\phi$',fontsize=16)
     1827    Plot.set_ylabel(r'$\psi$',fontsize=16)
     1828    Page.canvas.draw()
     1829
     1830
    17681831################################################################################
    17691832##### PlotSeq
  • trunk/GSASIIrestrGUI.py

    r815 r817  
    2121import GSASIIspc as G2spc
    2222import GSASIIgrid as G2gd
     23import GSASIIplot as G2plt
    2324
    2425VERY_LIGHT_GREY = wx.Colour(235,235,235)
     
    111112        elif 'Chiral' in G2frame.dataDisplay.GetPageText(page):
    112113            AddChiralRestraint(restrData['Chiral'])
    113         elif 'Torsion' in G2frame.dataDisplay.GetPageText(page):
    114             AddTorsionRestraint(restrData['Torsion'])
    115         elif 'Rama' in G2frame.dataDisplay.GetPageText(page):
    116             AddRamaRestraint(restrData['Rama'])
     114#        elif 'Torsion' in G2frame.dataDisplay.GetPageText(page):
     115#            AddTorsionRestraint(restrData['Torsion'])
     116#        elif 'Rama' in G2frame.dataDisplay.GetPageText(page):
     117#            AddRamaRestraint(restrData['Rama'])
    117118           
    118119    def OnAddAARestraint(event):
     
    454455        UpdateChiralRestr(chiralRestData)               
    455456       
    456     def AddTorsionRestraint():
    457         print 'Torsion restraint'
    458        
     457#    def AddTorsionRestraint():
     458#        print 'Torsion restraint'
     459#       
    459460    def AddAATorsionRestraint(torsionRestData):
    460461        macro = getMacroFile('torsion')
     
    520521        UpdateTorsionRestr(torsionRestData)                       
    521522       
    522     def AddRamaRestraint():
    523         print 'Ramachandran restraint'
    524                
     523#    def AddRamaRestraint():
     524#        print 'Ramachandran restraint'
     525#               
    525526    def AddAARamaRestraint(ramaRestData):
    526         macro = getMacroFile('ramachandran')
     527        macro = getMacroFile('Ramachandran')
    527528        if not macro:
    528529            return
     
    540541                    macStr = macro.readline()
    541542                    items = macStr.split()
    542                     coeff[i] = np.fromstring([item for item in items])
     543                    for j,val in enumerate(items):
     544                        coeff[i][j] = float(val)
    543545                ramaRestData['Coeff'][name] = coeff
    544546            elif 'S' in items[0]:
    545                 name = items[1]
     547                print items
     548                cofname = items[1]
    546549                res = items[2]
    547550                esd = float(items[3])
    548551                Atms = items[4:9]
    549                 orNum = -1
     552                mAtms = ['','','','','']
     553                pAtms = ['','','','','']
     554                for i,atm in enumerate(Atms):
     555                    if '+' in atm:
     556                        pAtms[i] = atm.strip('+')
     557                    elif '-' in atm:
     558                        mAtms[i] = atm.strip('-')
    550559                ids = np.array([0,0,0,0,0])
    551560                coords = [[],[],[],[],[]]
     561                rNum = -1
    552562                for name,coord,id in atoms:
    553563                    names = name.split()
     564                    tNum = int(names[0].split(':')[0])
    554565                    if res in names[0]:
    555                         rNum = int(names[0].split(res)[0])
    556566                        try:
    557567                            ipos = Atms.index(names[2])
     568                            if not np.all(ids):
     569                                rNum = int(names[0].split(':')[0])
    558570                            ids[ipos] = id
    559571                            coords[ipos] = coord
    560572                        except ValueError:
    561                             pass
    562                         if np.all(ids):
    563                             orNum = rNum
    564                             torsionRestData['Rama'].append([list(ids),['1','1','1','1'],name,esd])
    565                             ids = np.array([0,0,0,0,0])
    566                             coords = [[],[],[],[],[]]
     573                            continue
     574#                        try:
     575#                            if tNum == rNum+1:
     576#                                ipos = Atms.index(names[2])
     577#                                ids[ipos] = id
     578#                                coords[ipos] = coord
     579#                        except ValueError:
     580#                            try:
     581#                                if tNum == rNum+2:
     582#                                    ipos = pAtms.index(names[2])
     583#                                    ids[ipos] = id
     584#                                    coords[ipos] = coord
     585#                            except ValueError:
     586#                                pass
     587                    print ids
     588                    if np.all(ids):
     589                        rama = [list(ids),['1','1','1','1'],cofname,esd]
     590                        print rama
     591                        if rama not in ramaRestData['Ramas']:
     592                            ramaRestData['Ramas'].append(rama)
     593                        ids = np.array([0,0,0,0,0])
     594                        coords = [[],[],[],[],[]]
    567595            macStr = macro.readline()
    568596        macro.close()
    569597        UpdateRamaRestr(ramaRestData)               
    570        
    571        
     598               
    572599    def WtBox(wind,restData):
    573600        if 'Range' not in restData: restData['Range'] = 0.9     #patch
     
    10941121                    table.append([name,cofName,tor,calc,esd])
    10951122                    rowLabels.append(str(i))
    1096             else:
    1097                 colLabels = ['A+SymOp  B+SymOp  C+SymOp  D+SymOp)','coef name','torsion','obs E','esd']
    1098                 for i,[indx,ops,cofName,esd] in enumerate(torsionList):
    1099                     atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
    1100                     XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
    1101                     XYZ = G2mth.getSyXYZ(XYZ,ops,SGData)
    1102                     tor,calc = G2mth.getRestTorsion(XYZ,Amat,coeffDict[cofName])
    1103                     table.append([atoms[0]+'+('+ops[0]+') '+atoms[1]+'+('+ops[1]+') '+atoms[2]+ \
    1104                     '+('+ops[2]+') '+atoms[3]+'+('+ops[3]+')',cofName,tor,calc,esd])
    1105                     rowLabels.append(str(i))
    11061123            torsionTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    11071124            Torsions = G2gd.GSGrid(TorsionRestr)
     
    11311148
    11321149        def OnDeleteRestraint(event):
    1133             rows = Volumes.GetSelectedRows()
     1150            rows = Ramas.GetSelectedRows()
    11341151            if not rows:
    11351152                return
     
    11401157            UpdateRamaRestr(ramaRestData)               
    11411158           
     1159        def OnChangeEsd(event):
     1160            rows = Ramas.GetSelectedRows()
     1161            if not rows:
     1162                return
     1163            Ramas.ClearSelection()
     1164            val = ramaList[rows[0]][5]
     1165            dlg = G2phG.SingleFloatDialog(G2frame,'New value','Enter new esd for energy',val,[0.,5.],'%.2f')
     1166            if dlg.ShowModal() == wx.ID_OK:
     1167                parm = dlg.GetValue()
     1168                for r in rows:
     1169                    ramaList[r][4] = parm
     1170            dlg.Destroy()
     1171            UpdateRamaRestr(ramaRestData)               
     1172                                           
    11421173        RamaRestr.DestroyChildren()
    11431174        dataDisplay = wx.Panel(RamaRestr)
     
    11451176        mainSizer.Add((5,5),0)
    11461177        mainSizer.Add(WtBox(RamaRestr,ramaRestData),0,wx.ALIGN_CENTER_VERTICAL)
    1147 
     1178        mainSizer.Add(wx.StaticText(RamaRestr,-1,'Ramachandran function coefficients:'),0,wx.ALIGN_CENTER_VERTICAL)
     1179
     1180        coeffDict = ramaRestData['Coeff']
     1181        if len(coeffDict):
     1182            table = []
     1183            rowLabels = []
     1184            Types = 6*[wg.GRID_VALUE_FLOAT+':10,4',]
     1185            colLabels = ['Mag','Pos phi','Pos psi','sig(phi)','sig(psi)','sig(cov)']
     1186            for item in coeffDict:
     1187                for i,term in enumerate(coeffDict[item]):
     1188                    rowLabels.append(item+' term:'+str(i))
     1189                    table.append(term)
     1190            coeffTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1191            Coeff = G2gd.GSGrid(RamaRestr)
     1192            Coeff.SetTable(coeffTable, True)
     1193            Coeff.AutoSizeColumns(False)
     1194            for r in range(Coeff.GetNumberRows()):
     1195                for c in range(6):
     1196                    Coeff.SetReadOnly(r,c,True)
     1197                    Coeff.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1198            mainSizer.Add(Coeff,0,)
     1199        mainSizer.Add((5,5))
    11481200        ramaList = ramaRestData['Ramas']
    11491201        if len(ramaList):
    11501202            table = []
    11511203            rowLabels = []
    1152             Types = 2*[wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
     1204            Types = 2*[wg.GRID_VALUE_STRING,]+4*[wg.GRID_VALUE_FLOAT+':10,2',]
    11531205            if 'macro' in General['Type']:
    1154                 colLabels = ['(res) A (res) B (res) C (res) D (res) E','coef name','calc','obs','esd']
    1155                 for i,[indx,ops,cofName,dcalc,dobs,esd] in enumerate(ramaList):
     1206                colLabels = ['(res) A (res) B (res) C (res) D (res) E','coef name','phi','psi','obs E','esd']
     1207                for i,[indx,ops,cofName,esd] in enumerate(ramaList):
    11561208                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,0,4)
    11571209                    name = ''
    11581210                    for atom in atoms:
    11591211                        name += '('+atom[1]+atom[0].strip()+atom[2]+') '+atom[3]+' '
    1160                     table.append([name,cofName,dcalc,dobs,esd])
    1161                     rowLabels.append(str(i))
    1162             else:
    1163                 colLabels = ['A+SymOp  B+SymOp  C+SymOp  D+SymOp  E+SymOp)','coef name','calc','obs','esd']
    1164                 for i,[indx,ops,cofName,dcalc,dobs,esd] in enumerate(ramaList):
    1165                     atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
    1166                     table.append([atoms[0]+'+('+ops[0]+') '+atoms[1]+'+('+ops[1]+') '+atoms[2]+ \
    1167                     '+('+ops[2]+') '+atoms[3]+'+('+ops[3]+')',cofName,dcalc,dobs,esd])
     1212                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     1213                    phi,psi,calc = G2mth.getRestRama(XYZ,Amat,coeffDict[cofName])
     1214                    table.append([name,cofName,phi,psi,calc,esd])
    11681215                    rowLabels.append(str(i))
    11691216            ramaTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    11961243        if text == 'Bond restraints':
    11971244            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
     1245            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True)
     1246            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESRCHANGEVAL,True)
    11981247            bondRestData = restrData['Bond']
    11991248            UpdateBondRestr(bondRestData)
    12001249        elif text == 'Angle restraints':
    12011250            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
     1251            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True)
     1252            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESRCHANGEVAL,True)
    12021253            angleRestData = restrData['Angle']
    12031254            UpdateAngleRestr(angleRestData)
    12041255        elif text == 'Plane restraints':
    12051256            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
     1257            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True)
     1258            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESRCHANGEVAL,False)
    12061259            planeRestData = restrData['Plane']
    12071260            UpdatePlaneRestr(planeRestData)
    12081261        elif text == 'Chiral restraints':
    12091262            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
     1263            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True)
     1264            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESRCHANGEVAL,True)
    12101265            chiralRestData = restrData['Chiral']
    12111266            UpdateChiralRestr(chiralRestData)
    12121267        elif text == 'Torsion restraints':
    12131268            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
     1269            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,False)
     1270            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESRCHANGEVAL,False)
    12141271            torsionRestData = restrData['Torsion']
    12151272            UpdateTorsionRestr(torsionRestData)
    12161273        elif text == 'Ramachandran restraints':
    12171274            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu)
     1275            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,False)
     1276            G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESRCHANGEVAL,False)
    12181277            ramaRestData = restrData['Rama']
    12191278            UpdateRamaRestr(ramaRestData)
     1279            G2plt.PlotRama(G2frame,phaseName)
    12201280        event.Skip()
    12211281
     
    12501310    ChiralRestr = wx.ScrolledWindow(G2frame.dataDisplay)
    12511311    G2frame.dataDisplay.AddPage(ChiralRestr,'Chiral restraints')
    1252     TorsionRestr = wx.ScrolledWindow(G2frame.dataDisplay)
    1253     G2frame.dataDisplay.AddPage(TorsionRestr,'Torsion restraints')
    1254     RamaRestr = wx.ScrolledWindow(G2frame.dataDisplay)
    1255     G2frame.dataDisplay.AddPage(RamaRestr,'Ramachandran restraints')
     1312    if 'macro' in General['Type']:
     1313        TorsionRestr = wx.ScrolledWindow(G2frame.dataDisplay)
     1314        G2frame.dataDisplay.AddPage(TorsionRestr,'Torsion restraints')
     1315        RamaRestr = wx.ScrolledWindow(G2frame.dataDisplay)
     1316        G2frame.dataDisplay.AddPage(RamaRestr,'Ramachandran restraints')
    12561317   
    12571318    UpdateBondRestr(restrData['Bond'])
Note: See TracChangeset for help on using the changeset viewer.