Changeset 3243


Ignore:
Timestamp:
Jan 25, 2018 12:25:26 PM (4 years ago)
Author:
vondreele
Message:

G2ctrlGUI: comment about PyGridTableBase? - python 3?
move VALIDPROTEIN to General Compute menu from Atoms/Compute?
trap the too many atoms in box for proein validation
deal with gap in protein chain for protein validation
G2restGUI" replace all wx.ALIGN_CENTER_VERTICAL with WACV
revamp grid displays to put scroll bars on grids & make them fit frame better

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIctrlGUI.py

    r3235 r3243  
    34273427                                                   
    34283428################################################################################           
    3429 class Table(wg.PyGridTableBase):
     3429class Table(wg.PyGridTableBase):        #TODO: this works in python 3/phoenix but pygridtablebase doesn't exist
    34303430    '''Basic data table for use with GSgrid
    34313431    '''
  • trunk/GSASIIdataGUI.py

    r3233 r3243  
    47754775        self.SequentialEx = wx.Menu(title='')
    47764776        self.SequentialMenu.Append(menu=self.SequentialEx, title='Seq Export')
    4777         import inspect
    47784777        for lbl,txt in (('Phase','Export selected phase(s)'),
    47794778                        ('Project','Export entire sequential fit'),
     
    51235122
    51245123        # Phase / General tab
    5125         G2G.Define_wxId('wxID_FOURCALC', 'wxID_FOURSEARCH', 'wxID_FOURCLEAR','wxID_CHARGEFLIP',
     5124        G2G.Define_wxId('wxID_FOURCALC', 'wxID_FOURSEARCH', 'wxID_FOURCLEAR','wxID_CHARGEFLIP','wxID_VALIDPROTEIN',
    51265125            'wxID_MULTIMCSA','wxID_SINGLEMCSA', 'wxID_4DCHARGEFLIP', 'wxID_TRANSFORMSTRUCTURE',)
    51275126        self.DataGeneral = wx.MenuBar()
     
    51395138        self.GeneralCalc.Append(G2G.wxID_MULTIMCSA,'Multi MC/SA','Run Monte Carlo - Simulated Annealing on multiprocessors')
    51405139        self.GeneralCalc.Append(G2G.wxID_TRANSFORMSTRUCTURE,'Transform','Transform crystal structure')
     5140        self.GeneralCalc.Append(G2G.wxID_VALIDPROTEIN,'Protein quality','Protein quality analysis')
    51415141        self.PostfillDataMenu()
    51425142       
     
    51635163            'wxID_RELOADDRAWATOMS', 'wxID_ATOMSDISAGL', 'wxID_ATOMMOVE', 'wxID_MAKEMOLECULE',
    51645164            'wxID_ATOMSPDISAGL', 'wxID_ISODISP', 'wxID_ADDHATOM', 'wxID_UPDATEHATOM',
    5165             'wxID_ATOMSROTATE', 'wxID_ATOMSDENSITY', 'wxID_VALIDPROTEIN',
     5165            'wxID_ATOMSROTATE', 'wxID_ATOMSDENSITY',
    51665166            'wxID_ATOMSSETALL', 'wxID_ATOMSSETSEL',)
    51675167        self.AtomsMenu = wx.MenuBar()
     
    52015201        self.AtomCompute.Append(G2G.wxID_ATOMSPDISAGL,'Save Distances && Angles','Compute distances & angles for selected atoms')
    52025202        self.AtomCompute.Append(G2G.wxID_ATOMSDENSITY,'Density','Compute density for current phase')
    5203         self.AtomCompute.Append(G2G.wxID_VALIDPROTEIN,'Protein quality','Protein quality analysis')
    52045203        self.AtomCompute.ISOcalc = self.AtomCompute.Append(G2G.wxID_ISODISP,'ISODISTORT mode values',
    52055204            'Compute values of ISODISTORT modes from atom parameters')
    5206        
    52075205        self.PostfillDataMenu()
    52085206       
  • trunk/GSASIImath.py

    r3241 r3243  
    26962696    iBox = np.array([np.trunc((XYZ.T[i]-xyzmin[i])/4.) for i in [0,1,2]],dtype=int).T
    26972697    for ib,box in enumerate(iBox):  #put in a try for too many atoms in box (IndexError)?
    2698         Boxes[box[0],box[1],box[2],0] += 1
    2699         Boxes[box[0],box[1],box[2],Boxes[box[0],box[1],box[2],0]] = ib
     2698        try:
     2699            Boxes[box[0],box[1],box[2],0] += 1
     2700            Boxes[box[0],box[1],box[2],Boxes[box[0],box[1],box[2],0]] = ib
     2701        except IndexError:
     2702            print('too many atoms in box' )
     2703            continue
    27002704    #Box content checks with errat.f $ erratv2.cpp ibox1 arrays
    27012705    indices = (-1,0,1)
     
    27262730                newChain = True
    27272731        if atom[0] not in res:  #new residue, get residue no.
     2732            if res and int(res[-1]) != int(atom[0])-1:  #a gap in chain - not new chain
     2733                intact = {'CC':0,'CN':0,'CO':0,'NN':0,'NO':0,'OO':0,'NC':0,'OC':0,'ON':0}
     2734                ires = int(res[-1])
     2735                for i in range(int(atom[0])-ires-1):
     2736                    res.append(str(ires+i+1))
     2737                    resname.append('')
     2738                    resIntAct.append(sumintact(intact))
    27282739            res.append(atom[0])
    27292740            resname.append('%s-%s%s'%(atom[2],atom[0],atom[1]))
     
    27742785        Probs = [0.,0.,0.,0.]   #skip 1st 4 residues in chain
    27752786        for i in range(4,nRes-4):
    2776             mtrx = np.zeros(5)
    2777             summ = 0.
    2778             for j in range(i-4,i+5):
    2779                 summ += np.sum(np.array(IntAct[j].values()))
     2787            if resNames[i]:
     2788                mtrx = np.zeros(5)
     2789                summ = 0.
     2790                for j in range(i-4,i+5):
     2791                    summ += np.sum(np.array(IntAct[j].values()))
     2792                    if old:
     2793                        mtrx[0] += IntAct[j]['CC']
     2794                        mtrx[1] += IntAct[j]['CO']
     2795                        mtrx[2] += IntAct[j]['NN']
     2796                        mtrx[3] += IntAct[j]['NO']
     2797                        mtrx[4] += IntAct[j]['OO']
     2798                    else:
     2799                        mtrx[0] += IntAct[j]['CC']
     2800                        mtrx[1] += IntAct[j]['CN']
     2801                        mtrx[2] += IntAct[j]['CO']
     2802                        mtrx[3] += IntAct[j]['NN']
     2803                        mtrx[4] += IntAct[j]['NO']
     2804                mtrx /= summ
     2805    #            print i+1,mtrx*summ
    27802806                if old:
    2781                     mtrx[0] += IntAct[j]['CC']
    2782                     mtrx[1] += IntAct[j]['CO']
    2783                     mtrx[2] += IntAct[j]['NN']
    2784                     mtrx[3] += IntAct[j]['NO']
    2785                     mtrx[4] += IntAct[j]['OO']
     2807                    mtrx -= avg_old
     2808                    prob = np.inner(np.inner(mtrx,b1_old),mtrx)
    27862809                else:
    2787                     mtrx[0] += IntAct[j]['CC']
    2788                     mtrx[1] += IntAct[j]['CN']
    2789                     mtrx[2] += IntAct[j]['CO']
    2790                     mtrx[3] += IntAct[j]['NN']
    2791                     mtrx[4] += IntAct[j]['NO']
    2792             mtrx /= summ
    2793 #            print i+1,mtrx*summ
    2794             if old:
    2795                 mtrx -= avg_old
    2796                 prob = np.inner(np.inner(mtrx,b1_old),mtrx)
    2797             else:
    2798                 mtrx -= avg
    2799                 prob = np.inner(np.inner(mtrx,b1),mtrx)
     2810                    mtrx -= avg
     2811                    prob = np.inner(np.inner(mtrx,b1),mtrx)
     2812            else:       #skip the gaps
     2813                prob = 0.0
    28002814            Probs.append(prob)
    28012815        Probs += 4*[0.,]        #skip last 4 residues in chain
  • trunk/GSASIIphsGUI.py

    r3241 r3243  
    996996   
    997997def SetPhaseWindow(phasePage,mainSizer=None,Scroll=0):
    998     if mainSizer is not None: 
     998    if mainSizer is not None:
    999999        phasePage.SetSizer(mainSizer)
    10001000    phasePage.SetAutoLayout(True)
     
    26172617                   
    26182618        def Paint():
    2619        
     2619           
    26202620            table = []
    26212621            rowLabels = []
     
    33983398        G2G.G2MessageBox(G2frame,msg,'Density')
    33993399       
    3400     def OnValidProtein(event):
    3401         resNames,Probs1 = G2mth.validProtein(data,True)         #old version
    3402         resNames,Probs2 = G2mth.validProtein(data,False)        #new version
    3403         print ('Plot 1 is Protein validation based on errat.f')
    3404         print ('Ref: Colovos, C. & Yeates, T.O. Protein Science 2, 1511-1519 (1991).')
    3405         print ('Residue error scores >6 for 5% & >8 for 1% likelihood of being correct')
    3406         print ('NB: this calc. matches errat.f result')
    3407         print ('Plot 2 is Protein validation based on erratv2.cpp; by D. Obukhov & T. Yeates (2002)')
    3408         print ('Ref: Colovos, C. & Yates, T.O. Protein Science 2, 1511-1519 (1991).')
    3409         print ('Residue error scores >11.5 for 5% & >17.2 for 1% likelihood of being correct')
    3410         print ('NB: this calc. gives a close approximate to original erratv2 result')
    3411         G2plt.PlotAAProb(G2frame,resNames,Probs1,Probs2,Title='Error score for %s'%(data['General']['Name']),
    3412             thresh=[[8.0,6.0],[17.191,11.527]])
    3413 
    34143400    def OnSetAll(event):
    34153401        'set refinement flags for all atoms in table'
     
    34703456            G2frame.ErrorDialog('Select atom',"select one or more rows of atoms then redo")
    34713457                       
     3458    def OnValidProtein(event):
     3459        resNames,Probs1 = G2mth.validProtein(data,True)         #old version
     3460        resNames,Probs2 = G2mth.validProtein(data,False)        #new version
     3461        print ('Plot 1 is Protein validation based on errat.f')
     3462        print ('Ref: Colovos, C. & Yeates, T.O. Protein Science 2, 1511-1519 (1991).')
     3463        print ('Residue error scores >6 for 5% & >8 for 1% likelihood of being correct')
     3464        print ('NB: this calc. matches errat.f result')
     3465        print ('Plot 2 is Protein validation based on erratv2.cpp; by D. Obukhov & T. Yeates (2002)')
     3466        print ('Ref: Colovos, C. & Yates, T.O. Protein Science 2, 1511-1519 (1991).')
     3467        print ('Residue error scores >11.5 for 5% & >17.2 for 1% likelihood of being correct')
     3468        print ('NB: this calc. gives a close approximate to original erratv2 result')
     3469        G2plt.PlotAAProb(G2frame,resNames,Probs1,Probs2,Title='Error score for %s'%(data['General']['Name']),
     3470            thresh=[[8.0,6.0],[17.191,11.527]])
     3471
    34723472    def OnIsoDistortCalc(event):
    34733473        '''Compute the ISODISTORT mode values from the current coordinates.
     
    88698869        G2frame.Bind(wx.EVT_MENU, OnRunMultiMCSA, id=G2G.wxID_MULTIMCSA)
    88708870        G2frame.Bind(wx.EVT_MENU, OnTransform, id=G2G.wxID_TRANSFORMSTRUCTURE)
     8871        G2frame.Bind(wx.EVT_MENU, OnValidProtein, id=G2G.wxID_VALIDPROTEIN)
    88718872        # Data
    88728873        FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.DataMenu)
     
    88998900        G2frame.Bind(wx.EVT_MENU, OnDistAnglePrt, id=G2G.wxID_ATOMSPDISAGL)
    89008901        G2frame.Bind(wx.EVT_MENU, OnDensity, id=G2G.wxID_ATOMSDENSITY)
    8901         G2frame.Bind(wx.EVT_MENU, OnValidProtein, id=G2G.wxID_VALIDPROTEIN)
    89028902        G2frame.Bind(wx.EVT_MENU, OnIsoDistortCalc, id=G2G.wxID_ISODISP)
    89038903        if 'HydIds' in data['General']:
     
    90639063    Pages.append('Pawley reflections')
    90649064    G2frame.dataWindow.AtomCompute.Enable(G2G.wxID_ISODISP,'ISODISTORT' in data)
    9065     G2frame.dataWindow.AtomCompute.Enable(G2G.wxID_VALIDPROTEIN,'macro' in data['General']['Type'])
     9065    G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_VALIDPROTEIN,'macro' in data['General']['Type'])
    90669066    G2frame.phaseDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged)
    90679067    FillMenus()
  • trunk/GSASIIrestrGUI.py

    r3239 r3243  
    3232import GSASIIphsGUI as G2phsGUI
    3333
     34WACV = wx.ALIGN_CENTER_VERTICAL
    3435VERY_LIGHT_GREY = wx.Colour(235,235,235)
    3536TabSelectionIdDict = {}
     
    172173            AddAARamaRestraint(restrData['Rama'])
    173174           
     175    def makeChains(Names,Ids):
     176        Chains = {}
     177        atoms = zip(Names,Ids)
     178        for name,Id in atoms:
     179            items = name.split(' ',2)
     180            rnum,res = items[0].split(':')
     181            rnum = int(rnum)
     182            if items[1] not in Chains:
     183                Residues = {}
     184                Chains[items[1]] = Residues
     185            if rnum not in Residues:
     186                Residues[rnum] = [[],[]]
     187            if items[2][3] in [' ','A']:
     188                Residues[rnum][0].append([res,items[2],Id])
     189            if items[2][3] in [' ','B']:
     190                Residues[rnum][1].append([res,items[2],Id])
     191        return Chains
     192       
    174193    def AddBondRestraint(bondRestData):
    175194        Lists = {'origin':[],'target':[]}
     
    236255        if not macro:
    237256            return
     257#        Chains = makeChains(Names,Ids)           
    238258        macStr = macro.readline()
    239259        atoms = zip(Names,Coords,Ids)
    240        
    241260        Factor = bondRestData['Range']
    242261        while macStr:
     
    245264                restrData['Bond']['wtFactor'] = float(items[1])
    246265            elif 'S' in items[0]:
     266               
     267               
     268#                Res = items[1]
     269#                Value = float(items[2])
     270#                Esd = float(items[3])
     271#                Atms = items[4:6]
     272#                pAtms = ['','']
     273#                for i,atm in enumerate(Atms):
     274#                    if '+' in atm:
     275#                        pAtms[i] = atm.strip('+')
     276#                ids = [0,0]
     277#                chains = list(Chains.keys())
     278#                chains.sort()
     279#                for chain in chains:
     280#                    residues = list(Chains[chain].keys())
     281#                    residues.sort()
     282#                    for residue in residues:
     283#                        for ires in [0,1]:
     284#                            if Res != '*':  #works with disordered res
     285#                                for res,name,Id in Chains[chain][residue][ires]:
     286#                                    if Res == res:
     287#                                        try:
     288#                                            ipos = Atms.index(name[:3].strip())
     289#                                            ids[ipos] = Id
     290#                                        except ValueError:
     291#                                            continue
     292#                            else:
     293#                                try:
     294#                                    for res,name,Id in Chains[chain][residue][ires]:
     295#                                        try:
     296#                                            ipos = Atms.index(name[:3].strip())
     297#                                            ids[ipos] = Id
     298#                                        except ValueError:
     299#                                            continue
     300#                                    for res,name,Id in Chains[chain][residue+1][ires]:
     301#                                        try:
     302#                                            ipos = pAtms.index(name[:3].strip())
     303#                                            ids[ipos] = Id
     304#                                        except ValueError:
     305#                                            continue
     306#                                except KeyError:
     307#                                    continue
     308#                            if all(ids):
     309#                                bond = [list(ids),['1','1'],Value,Esd]
     310#                                if bond not in bondRestData['Bonds']:
     311#                                    bondRestData['Bonds'].append(bond)
     312#                                ids = [0,0]
     313                               
     314                               
    247315                oIds = []
    248316                oCoords = []
     
    274342                            newBond = [[oId,tId],['1','1'],dist,esd]
    275343                            if newBond not in bondRestData['Bonds']:
    276                                 bondRestData['Bonds'].append(newBond)                         
     344                                bondRestData['Bonds'].append(newBond)             
     345
     346           
    277347            macStr = macro.readline()
    278348        macro.close()
     349        print(' Found %d bond restraints'%len(bondRestData['Bonds']))
    279350        UpdateBondRestr(bondRestData)               
    280351           
     
    352423        UpdateAngleRestr(angleRestData)               
    353424
    354     def makeChains(Names,Ids):
    355         Chains = {}
    356         atoms = zip(Names,Ids)
    357         for name,Id in atoms:
    358             items = name.split(' ',2)
    359             rnum,res = items[0].split(':')
    360             rnum = int(rnum)
    361             if items[1] not in Chains:
    362                 Residues = {}
    363                 Chains[items[1]] = Residues
    364             if rnum not in Residues:
    365                 Residues[rnum] = [[],[]]
    366             if items[2][3] in [' ','A']:
    367                 Residues[rnum][0].append([res,items[2],Id])
    368             if items[2][3] in [' ','B']:
    369                 Residues[rnum][1].append([res,items[2],Id])
    370         return Chains
    371        
    372425    def AddAAAngleRestraint(angleRestData):
    373426        macro = getMacroFile('angle')
     
    428481            macStr = macro.readline()
    429482        macro.close()
     483        print(' Found %d angle restraints'%len(angleRestData['Angles']))
    430484        UpdateAngleRestr(angleRestData)               
    431485       
     
    507561            macStr = macro.readline()
    508562        macro.close()
     563        print(' Found %d plane restraints'%len(planeRestData['Planes']))
    509564        UpdatePlaneRestr(planeRestData)               
    510565
     
    559614            macStr = macro.readline()
    560615        macro.close()
     616        print(' Found %d chiral volumes restraints'%len(chiralRestData['Volumes']))
    561617        UpdateChiralRestr(chiralRestData)               
    562618       
     
    627683            macStr = macro.readline()
    628684        macro.close()
     685        print(' Found %d torsion restraints'%len(torsionRestData['Torsions']))
    629686        UpdateTorsionRestr(torsionRestData)                       
    630687       
     
    714771            macStr = macro.readline()
    715772        macro.close()
     773        print(' Found %d Ramachandran restraints'%len(ramaRestData['Ramas']))
    716774        UpdateRamaRestr(ramaRestData)
    717775       
     
    769827
    770828        wtBox = wx.BoxSizer(wx.HORIZONTAL)
    771         wtBox.Add(wx.StaticText(wind,-1,'Restraint weight factor: '),0,wx.ALIGN_CENTER_VERTICAL)
     829        wtBox.Add(wx.StaticText(wind,-1,'Restraint weight factor: '),0,WACV)
    772830        wtfactor = G2G.ValidatedTxtCtrl(wind,restData,'wtFactor',nDig=(10,2),typeHint=float)
    773         wtBox.Add(wtfactor,0,wx.ALIGN_CENTER_VERTICAL)
     831        wtBox.Add(wtfactor,0,WACV)
    774832        useData = wx.CheckBox(wind,-1,label=' Use?')
    775833        useData.Bind(wx.EVT_CHECKBOX, OnUseData)
    776834        useData.SetValue(restData['Use'])       
    777         wtBox.Add(useData,0,wx.ALIGN_CENTER_VERTICAL)
     835        wtBox.Add(useData,0,WACV)
    778836        if 'Bonds' in restData or 'Angles' in restData:
    779             wtBox.Add(wx.StaticText(wind,-1,'  Search range: '),0,wx.ALIGN_CENTER_VERTICAL)
     837            wtBox.Add(wx.StaticText(wind,-1,'  Search range: '),0,WACV)
    780838            sRange = G2G.ValidatedTxtCtrl(wind,restData,'Range',nDig=(10,2),typeHint=float)
    781             wtBox.Add(sRange,0,wx.ALIGN_CENTER_VERTICAL)
    782             wtBox.Add(wx.StaticText(wind,-1,' x sum(atom radii)'),0,wx.ALIGN_CENTER_VERTICAL)
     839            wtBox.Add(sRange,0,WACV)
     840            wtBox.Add(wx.StaticText(wind,-1,' x sum(atom radii)'),0,WACV)
    783841        return wtBox
    784842       
     
    866924        mainSizer = wx.BoxSizer(wx.VERTICAL)
    867925        mainSizer.Add((5,5),0)
    868         mainSizer.Add(WtBox(BondRestr,bondRestData),0,wx.ALIGN_CENTER_VERTICAL)
     926        mainSizer.Add(WtBox(BondRestr,bondRestData),0,WACV)
    869927
    870928        bondList = bondRestData['Bonds']
     
    930988                mainSizer.Add(wx.StaticText(BondRestr,-1,
    931989                    'Bond restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    932                     %(chisq,chisq/len(bondList))),0,wx.ALIGN_CENTER_VERTICAL)
    933                 mainSizer.Add(Bonds,0,)
     990                    %(chisq,chisq/len(bondList))),0,WACV)
     991                Bonds.SetScrollRate(10,10)
     992                Bonds.SetMinSize((-1,300))
     993                mainSizer.Add(Bonds,1,wx.EXPAND,1)
    934994            else:
    935995                mainSizer.Add(wx.StaticText(BondRestr,-1,'No bond distance restraints for this phase'),0,)
     
    937997            mainSizer.Add(wx.StaticText(BondRestr,-1,'No bond distance restraints for this phase'),0,)
    938998
    939         BondRestr.SetSizer(mainSizer)
    940         G2phsGUI.SetPhaseWindow(BondRestr,mainSizer,Scroll=0)
     999        wx.CallAfter(G2phsGUI.SetPhaseWindow,BondRestr,mainSizer,Scroll=0)
    9411000       
    9421001    def UpdateAngleRestr(angleRestData):
     
    9951054        mainSizer = wx.BoxSizer(wx.VERTICAL)
    9961055        mainSizer.Add((5,5),0)
    997         mainSizer.Add(WtBox(AngleRestr,angleRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1056        mainSizer.Add(WtBox(AngleRestr,angleRestData),0,WACV)
    9981057
    9991058        angleList = angleRestData['Angles']
     
    10591118                mainSizer.Add(wx.StaticText(AngleRestr,-1,
    10601119                    'Angle restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1061                     %(chisq,chisq/len(angleList))),0,wx.ALIGN_CENTER_VERTICAL)
    1062                 mainSizer.Add(Angles,0,)
     1120                    %(chisq,chisq/len(angleList))),0,WACV)
     1121                Angles.SetScrollRate(10,10)
     1122                Angles.SetMinSize((-1,300))
     1123                mainSizer.Add(Angles,1,wx.EXPAND,1)
    10631124            else:
    10641125                mainSizer.Add(wx.StaticText(AngleRestr,-1,'No bond angle restraints for this phase'),0,)
    10651126        else:
    10661127            mainSizer.Add(wx.StaticText(AngleRestr,-1,'No bond angle restraints for this phase'),0,)
    1067 
    1068         AngleRestr.SetSizer(mainSizer)
    1069         G2phsGUI.SetPhaseWindow(AngleRestr,mainSizer,Scroll=0)
     1128        wx.CallAfter(G2phsGUI.SetPhaseWindow,AngleRestr,mainSizer,Scroll=0)
    10701129   
    10711130    def UpdatePlaneRestr(planeRestData):
     
    11151174        mainSizer = wx.BoxSizer(wx.VERTICAL)
    11161175        mainSizer.Add((5,5),0)
    1117         mainSizer.Add(WtBox(PlaneRestr,planeRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1176        mainSizer.Add(WtBox(PlaneRestr,planeRestData),0,WACV)
    11181177
    11191178        planeList = planeRestData['Planes']
     
    11841243                mainSizer.Add(wx.StaticText(PlaneRestr,-1,
    11851244                    'Plane restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1186                     %(chisq,chisq/len(planeList))),0,wx.ALIGN_CENTER_VERTICAL)
    1187                 mainSizer.Add(Planes,0,)
     1245                    %(chisq,chisq/len(planeList))),0,WACV)
     1246                Planes.SetScrollRate(10,10)
     1247                Planes.SetMinSize((-1,300))
     1248                mainSizer.Add(Planes,1,wx.EXPAND,1)
    11881249            else:
    11891250                mainSizer.Add(wx.StaticText(PlaneRestr,-1,'No plane restraints for this phase'),0,)
     
    11911252            mainSizer.Add(wx.StaticText(PlaneRestr,-1,'No plane restraints for this phase'),0,)
    11921253
    1193         PlaneRestr.SetSizer(mainSizer)
    11941254        G2phsGUI.SetPhaseWindow(PlaneRestr,mainSizer,Scroll=0)
    11951255   
     
    12481308        mainSizer = wx.BoxSizer(wx.VERTICAL)
    12491309        mainSizer.Add((5,5),0)
    1250         mainSizer.Add(WtBox(ChiralRestr,chiralRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1310        mainSizer.Add(WtBox(ChiralRestr,chiralRestData),0,WACV)
    12511311
    12521312        volumeList = chiralRestData['Volumes']
     
    13111371                mainSizer.Add(wx.StaticText(ChiralRestr,-1,
    13121372                    'Chiral volume restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1313                     %(chisq,chisq/len(volumeList))),0,wx.ALIGN_CENTER_VERTICAL)
    1314                 mainSizer.Add(Volumes,0,)
     1373                    %(chisq,chisq/len(volumeList))),0,WACV)
     1374                Volumes.SetScrollRate(10,10)
     1375                Volumes.SetMinSize((-1,300))
     1376                mainSizer.Add(Volumes,1,wx.EXPAND,1)
    13151377            else:
    13161378                mainSizer.Add(wx.StaticText(ChiralRestr,-1,'No chiral volume restraints for this phase'),0,)
     
    13181380            mainSizer.Add(wx.StaticText(ChiralRestr,-1,'No chiral volume restraints for this phase'),0,)
    13191381
    1320         ChiralRestr.SetSizer(mainSizer)
    13211382        G2phsGUI.SetPhaseWindow(ChiralRestr,mainSizer,Scroll=0)
    13221383   
     
    13561417                    torsionRestData['Torsions'][r][4] = parm
    13571418            dlg.Destroy()
    1358             wx.CallAfter(UpdateTorsionRestr,torsionRestData)               
     1419            wx.CallAfter(UpdateTorsionRestr,torsionRestData)
     1420
     1421        def coeffSizer():               
     1422            table = []
     1423            rowLabels = []
     1424            Types = 9*[wg.GRID_VALUE_FLOAT+':10,4',]
     1425            colLabels = ['Mag A','Pos A','Width A','Mag B','Pos B','Width B','Mag C','Pos C','Width C']
     1426            for item in coeffDict:
     1427                rowLabels.append(item)
     1428                table.append(coeffDict[item])
     1429            coeffTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1430            Coeff = G2G.GSGrid(TorsionRestr)
     1431            Coeff.SetScrollRate(0,10)
     1432            Coeff.SetTable(coeffTable, True)
     1433            Coeff.AutoSizeColumns(False)
     1434            for r in range(len(coeffDict)):
     1435                for c in range(9):
     1436                    Coeff.SetReadOnly(r,c,True)
     1437                    Coeff.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1438            Coeff.SetMaxSize((-1,200))
     1439            return Coeff
    13591440                                           
    13601441        if TorsionRestr.GetSizer(): TorsionRestr.GetSizer().Clear(True)
    13611442        mainSizer = wx.BoxSizer(wx.VERTICAL)
    13621443        mainSizer.Add((5,5),0)
    1363         mainSizer.Add(WtBox(TorsionRestr,torsionRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1444        mainSizer.Add(WtBox(TorsionRestr,torsionRestData),0,WACV)
    13641445       
    13651446        coeffDict = torsionRestData['Coeff']
    13661447        torsionList = torsionRestData['Torsions']
     1448        if len(coeffDict):
     1449            mainSizer.Add((5,5))
     1450            mainSizer.Add(wx.StaticText(TorsionRestr,-1,'Torsion function coefficients:'),0,WACV)
     1451            mainSizer.Add(coeffSizer(),1,wx.EXPAND,1)       
     1452       
    13671453        if len(torsionList):
     1454            mainSizer.Add(wx.StaticText(TorsionRestr,-1,'Torsion restraints:'),0,WACV)
    13681455            table = []
    13691456            rowLabels = []
     
    13921479                for ibad in bad:
    13931480                    del torsionList[ibad]
    1394             if len(torsionList):
    1395                 torsionTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1396                 TorsionRestr.Torsions = G2G.GSGrid(TorsionRestr)
    1397                 TorsionRestr.Torsions.SetTable(torsionTable, True)
    1398                 TorsionRestr.Torsions.AutoSizeColumns(False)
    1399                 for r in range(len(torsionList)):
    1400                     for c in range(5):
    1401                         TorsionRestr.Torsions.SetReadOnly(r,c,True)
    1402                         TorsionRestr.Torsions.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
    1403                 TorsionRestr.Torsions.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK,OnRowSelect)
    1404                 if 'phoenix' in wx.version():
    1405                     TorsionRestr.Torsions.Bind(wg.EVT_GRID_CELL_CHANGED, OnCellChange)
    1406                 else:
    1407                     TorsionRestr.Torsions.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
    1408                 G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
    1409                 G2frame.Bind(wx.EVT_MENU, OnChangeEsd, id=G2G.wxID_RESTCHANGEESD)
    1410                 mainSizer.Add(wx.StaticText(TorsionRestr,-1,
    1411                     'Torsion restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1412                     %(chisq,chisq/len(torsionList))),0,wx.ALIGN_CENTER_VERTICAL)
    1413                 mainSizer.Add(TorsionRestr.Torsions,0,)
     1481            torsionTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1482            TorsionRestr.Torsions = G2G.GSGrid(TorsionRestr)
     1483            TorsionRestr.Torsions.SetTable(torsionTable, True)
     1484            TorsionRestr.Torsions.AutoSizeColumns(False)
     1485            for r in range(len(torsionList)):
     1486                for c in range(5):
     1487                    TorsionRestr.Torsions.SetReadOnly(r,c,True)
     1488                    TorsionRestr.Torsions.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1489            TorsionRestr.Torsions.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK,OnRowSelect)
     1490            if 'phoenix' in wx.version():
     1491                TorsionRestr.Torsions.Bind(wg.EVT_GRID_CELL_CHANGED, OnCellChange)
     1492            else:
     1493                TorsionRestr.Torsions.Bind(wg.EVT_GRID_CELL_CHANGE, OnCellChange)
     1494            G2frame.Bind(wx.EVT_MENU, OnDeleteRestraint, id=G2G.wxID_RESTDELETE)
     1495            G2frame.Bind(wx.EVT_MENU, OnChangeEsd, id=G2G.wxID_RESTCHANGEESD)
     1496            mainSizer.Add(wx.StaticText(TorsionRestr,-1,
     1497                'Torsion restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
     1498                %(chisq,chisq/len(torsionList))),0,WACV)
     1499            TorsionRestr.Torsions.SetScrollRate(10,10)
     1500            TorsionRestr.Torsions.SetMinSize((-1,300))
     1501            mainSizer.Add(TorsionRestr.Torsions,1,wx.EXPAND,1)
    14141502               
    1415                 mainSizer.Add((5,5))
    1416                 mainSizer.Add(wx.StaticText(TorsionRestr,-1,'Torsion function coefficients:'),0,wx.ALIGN_CENTER_VERTICAL)
    1417                 table = []
    1418                 rowLabels = []
    1419                 Types = 9*[wg.GRID_VALUE_FLOAT+':10,4',]
    1420                 colLabels = ['Mag A','Pos A','Width A','Mag B','Pos B','Width B','Mag C','Pos C','Width C']
    1421                 for item in coeffDict:
    1422                     rowLabels.append(item)
    1423                     table.append(coeffDict[item])
    1424                 coeffTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1425                 Coeff = G2G.GSGrid(TorsionRestr)
    1426                 Coeff.SetTable(coeffTable, True)
    1427                 Coeff.AutoSizeColumns(False)
    1428                 for r in range(len(coeffDict)):
    1429                     for c in range(9):
    1430                         Coeff.SetReadOnly(r,c,True)
    1431                         Coeff.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
    1432                 mainSizer.Add(Coeff,0,)
    1433             else:
    1434                 mainSizer.Add(wx.StaticText(TorsionRestr,-1,'No torsion restraints for this phase'),0,)
    14351503        else:
    14361504            mainSizer.Add(wx.StaticText(TorsionRestr,-1,'No torsion restraints for this phase'),0,)
    14371505
    1438         TorsionRestr.SetSizer(mainSizer)
    14391506        G2phsGUI.SetPhaseWindow(TorsionRestr,mainSizer,Scroll=0)
    14401507
     
    14741541                    ramaRestData['Ramas'][r][4] = parm
    14751542            dlg.Destroy()
    1476             UpdateRamaRestr(ramaRestData)               
    1477                                            
     1543            UpdateRamaRestr(ramaRestData)
     1544
     1545        def coeffSizer():
     1546            table = []
     1547            rowLabels = []
     1548            Types = 6*[wg.GRID_VALUE_FLOAT+':10,4',]
     1549            colLabels = ['Mag','Pos phi','Pos psi','sig(phi)','sig(psi)','sig(cov)']
     1550            for item in coeffDict:
     1551                for i,term in enumerate(coeffDict[item]):
     1552                    rowLabels.append(item+' term:'+str(i))
     1553                    table.append(term)
     1554            coeffTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1555            Coeff = G2G.GSGrid(RamaRestr)
     1556            Coeff.SetScrollRate(0,10)
     1557            Coeff.SetTable(coeffTable, True)
     1558            Coeff.AutoSizeColumns(False)
     1559            for r in range(Coeff.GetNumberRows()):
     1560                for c in range(6):
     1561                    Coeff.SetReadOnly(r,c,True)
     1562                    Coeff.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1563            Coeff.SetMaxSize((-1,200))
     1564            return Coeff
     1565                                                   
    14781566        if RamaRestr.GetSizer(): RamaRestr.GetSizer().Clear(True)
    14791567        mainSizer = wx.BoxSizer(wx.VERTICAL)
    14801568        mainSizer.Add((5,5),0)
    1481         mainSizer.Add(WtBox(RamaRestr,ramaRestData),0,wx.ALIGN_CENTER_VERTICAL)
    1482 
     1569        mainSizer.Add(WtBox(RamaRestr,ramaRestData),0,WACV)
    14831570        ramaList = ramaRestData['Ramas']
    14841571        coeffDict = ramaRestData['Coeff']
     1572        if len(coeffDict):
     1573            mainSizer.Add(wx.StaticText(RamaRestr,-1,'Ramachandran function coefficients:'),0,WACV)
     1574            mainSizer.Add(coeffSizer(),1,wx.EXPAND,1)
     1575           
    14851576        if len(ramaList):
    1486             mainSizer.Add(wx.StaticText(RamaRestr,-1,'Ramachandran restraints:'),0,wx.ALIGN_CENTER_VERTICAL)
     1577            mainSizer.Add(wx.StaticText(RamaRestr,-1,'Ramachandran restraints:'),0,WACV)
    14871578            table = []
    14881579            rowLabels = []
     
    15291620                mainSizer.Add(wx.StaticText(RamaRestr,-1,
    15301621                    'Ramachandran restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1531                     %(chisq,chisq/len(ramaList))),0,wx.ALIGN_CENTER_VERTICAL)
    1532                 mainSizer.Add(RamaRestr.Ramas,0,)
    1533             else:
    1534                 mainSizer.Add(wx.StaticText(RamaRestr,-1,'No Ramachandran restraints for this phase'),0,)
     1622                    %(chisq,chisq/len(ramaList))),0,WACV)
     1623                RamaRestr.Ramas.SetScrollRate(10,10)
     1624                RamaRestr.Ramas.SetMinSize((-1,300))
     1625                mainSizer.Add(RamaRestr.Ramas,1,wx.EXPAND,1)
    15351626        else:
    15361627            mainSizer.Add(wx.StaticText(RamaRestr,-1,'No Ramachandran restraints for this phase'),0,)
    1537         mainSizer.Add((5,5))
    1538         mainSizer.Add(wx.StaticText(RamaRestr,-1,'Ramachandran function coefficients:'),0,wx.ALIGN_CENTER_VERTICAL)
    1539         if len(coeffDict):
    1540             table = []
    1541             rowLabels = []
    1542             Types = 6*[wg.GRID_VALUE_FLOAT+':10,4',]
    1543             colLabels = ['Mag','Pos phi','Pos psi','sig(phi)','sig(psi)','sig(cov)']
    1544             for item in coeffDict:
    1545                 for i,term in enumerate(coeffDict[item]):
    1546                     rowLabels.append(item+' term:'+str(i))
    1547                     table.append(term)
    1548             coeffTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1549             Coeff = G2G.GSGrid(RamaRestr)
    1550             Coeff.SetTable(coeffTable, True)
    1551             Coeff.AutoSizeColumns(False)
    1552             for r in range(Coeff.GetNumberRows()):
    1553                 for c in range(6):
    1554                     Coeff.SetReadOnly(r,c,True)
    1555                     Coeff.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
    1556             mainSizer.Add(Coeff,0,)
    1557 
    1558         RamaRestr.SetSizer(mainSizer)
     1628
    15591629        G2phsGUI.SetPhaseWindow(RamaRestr,mainSizer,Scroll=0)
    15601630
     
    16151685        mainSizer = wx.BoxSizer(wx.VERTICAL)
    16161686        mainSizer.Add((5,5),0)
    1617         mainSizer.Add(WtBox(ChemCompRestr,chemcompRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1687        mainSizer.Add(WtBox(ChemCompRestr,chemcompRestData),0,WACV)
    16181688        mainSizer.Add(wx.StaticText(ChemCompRestr,-1,
    1619             'NB: The chemical restraint sum is over the unit cell contents'),0,wx.ALIGN_CENTER_VERTICAL)
     1689            'NB: The chemical restraint sum is over the unit cell contents'),0,WACV)
    16201690        mainSizer.Add((5,5),0)
    16211691
     
    16791749                mainSizer.Add(wx.StaticText(ChemCompRestr,-1,
    16801750                    'Chemical composition restraints: sum(wt*(delt/sig)^2) =    %.2f, mean(wt*(delt/sig)^2) =    %.2f'    \
    1681                     %(chisq,chisq/len(chemcompList))),0,wx.ALIGN_CENTER_VERTICAL)
     1751                    %(chisq,chisq/len(chemcompList))),0,WACV)
    16821752                mainSizer.Add(ChemComps,0,)
    16831753            else:
     
    16861756            mainSizer.Add(wx.StaticText(ChemCompRestr,-1,'No chemical composition restraints for this phase'),0,)
    16871757
    1688         ChemCompRestr.SetSizer(mainSizer)
    16891758        G2phsGUI.SetPhaseWindow(ChemCompRestr,mainSizer,Scroll=0)
    16901759           
     
    17221791        mainSizer = wx.BoxSizer(wx.VERTICAL)
    17231792        mainSizer.Add((5,5),0)
    1724         mainSizer.Add(WtBox(TextureRestr,textureRestData),0,wx.ALIGN_CENTER_VERTICAL)
     1793        mainSizer.Add(WtBox(TextureRestr,textureRestData),0,WACV)
    17251794        mainSizer.Add(wx.StaticText(TextureRestr,-1,
    17261795            'NB: The texture restraints suppress negative pole figure values for the selected HKLs\n'
    1727             '    "unit esd" gives a bias toward a flatter polefigure'),0,wx.ALIGN_CENTER_VERTICAL)
     1796            '    "unit esd" gives a bias toward a flatter polefigure'),0,WACV)
    17281797        mainSizer.Add((5,5),0)
    17291798
     
    17581827        else:
    17591828            mainSizer.Add(wx.StaticText(TextureRestr,-1,'No texture restraints for this phase'),0,)
    1760         TextureRestr.SetSizer(mainSizer)
    17611829        G2phsGUI.SetPhaseWindow(TextureRestr,mainSizer,Scroll=0)
    17621830           
  • trunk/imports/G2phase.py

    r3239 r3243  
    105105                        E,SGData = G2spc.SpcGroup(SpGrpNorm)
    106106                while E:
    107                     print (G2spc.SGErrors(E))
    108107                    dlg = wx.TextEntryDialog(parent,
    109108                        SpGrp[:-1]+' is invalid \nN.B.: make sure spaces separate axial fields in symbol',
     
    117116                        self.warnings += "Change this in phase's General tab."           
    118117                    dlg.Destroy()
    119                 SGlines = G2spc.SGPrint(SGData)
    120                 for l in SGlines: print (l)
     118#                SGlines = G2spc.SGPrint(SGData)
     119#                for l in SGlines: print (l)
    121120            elif 'SCALE' in S[:5]:
    122121                V = S[10:41].split()
     
    321320                if 'AT' in key[6:8]:
    322321                    S = EXPphase[key]
    323                     Atom = [S[56:60],S[50:54].strip().upper(),S[54:56],
     322                    Atom = [S[56:60].strip(),S[50:54].strip().upper(),S[54:56],
    324323                        S[46:51].strip(),S[:8].strip().capitalize(),'',
    325324                        float(S[16:24]),float(S[24:32]),float(S[32:40]),
Note: See TracChangeset for help on using the changeset viewer.