Changeset 4573 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Sep 21, 2020 3:43:06 PM (3 years ago)
Author:
toby
Message:

RB extensions and minor bug fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r4570 r4573  
    77277727            G2plt.PlotStructure(G2frame,data)
    77287728                   
     7729        def NextAtom(event):
     7730            'respond to a tab by cycling through the atoms'
     7731            next = 0
     7732            for r in drawAtoms.GetSelectedRows():
     7733                next = r + 1
     7734                break
     7735            if next >= drawAtoms.GetNumberRows():
     7736                next = 0
     7737            drawAtoms.ClearSelection()
     7738            drawAtoms.SelectRow(next,True)
     7739            drawAtoms.MakeCellVisible(next,0)
     7740            drawingData['selectedAtoms'] = drawAtoms.GetSelectedRows()
     7741            G2plt.PlotStructure(G2frame,data)
     7742
    77297743        def RowSelect(event):
    77307744            r,c =  event.GetRow(),event.GetCol()
     
    77517765            drawingData['selectedAtoms'] = []
    77527766            drawingData['selectedAtoms'] = drawAtoms.GetSelectedRows()
    7753             G2plt.PlotStructure(G2frame,data)                   
     7767            G2plt.PlotStructure(G2frame,data)
    77547768
    77557769#### UpdateDrawAtoms executable code starts here
     
    77997813        drawAtoms.Bind(wg.EVT_GRID_CELL_LEFT_DCLICK, RefreshDrawAtomGrid)
    78007814        drawAtoms.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK, RowSelect)
     7815        try:
     7816            drawAtoms.Bind(wg.EVT_GRID_TABBING, NextAtom)
     7817        except: # patch: for pre-2.9.5 wx
     7818            pass
    78017819        for i,atom in enumerate(drawingData['Atoms']):
    78027820            attr = wg.GridCellAttr()                #needs to be here - gets lost if outside loop!
     
    88888906            line2Sizer.Add(showHydrogen,0,WACV)
    88898907           
    8890             showRB = wx.CheckBox(drawOptions,-1,label=' Show rigid Bodies?')
     8908            showRB = wx.CheckBox(drawOptions,-1,label=' Show Rigid Bodies?')
    88918909            showRB.Bind(wx.EVT_CHECKBOX, OnShowRB)
    88928910            showRB.SetValue(drawingData['showRigidBodies'])
     
    1008510103        if refresh:
    1008610104            if RigidBodies.GetSizer(): RigidBodies.GetSizer().Clear(True)
     10105        if 'testRBObj' in data: del data['testRBObj']
    1008710106        general = data['General']
    1008810107        cx,ct,cs,cia = general['AtomPtrs']
     
    1031910338               
    1032010339            def OnTorAngle(invalid,value,tc):
    10321                 #OkBtn.SetLabel('OK')
    10322                 #OkBtn.Enable(True)
    10323                 Obj = tc.event.GetEventObject()
    10324                 [tor,torSlide] = Indx[Obj.GetId()]
     10340                '''respond to a number entered into the torsion editor.
     10341                Update the slider (number is already saved)
     10342                recompute atom distances
     10343                '''
     10344                [tor,torSlide] = Indx[tc.GetId()]
    1032510345                torSlide.SetValue(int(value*10))
    1032610346                UpdateTablePlot()
    1032710347               
    1032810348            def OnTorSlide(event):
    10329                 #OkBtn.SetLabel('OK')
    10330                 #OkBtn.Enable(True)
     10349                '''respond to the slider moving. Put value into editor & save
     10350                recompute atom distances
     10351                '''
    1033110352                Obj = event.GetEventObject()
    1033210353                tor,ang = Indx[Obj.GetId()]
     
    1047610497                    item.SetLabel('%10.4f'%(data['testRBObj']['rbObj']['Orient'][0][i]))
    1047710498                UpdateTablePlot()
     10499               
     10500            def BallnSticks(event):
     10501                '''Set all draw atoms in crystal structure to balls & stick
     10502                '''
     10503                for a in data['Drawing']['Atoms']: a[6] = "balls & sticks"
     10504                FindBondsDraw(data)
     10505                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
     10506                RigidBodies.SetFocus() # make sure tab presses go to panel
     10507            def Sticks(event):
     10508                '''Set all draw atoms in crystal structure to stick
     10509                '''
     10510                for a in data['Drawing']['Atoms']: a[6] = "sticks"
     10511                FindBondsDraw(data)
     10512                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
     10513                RigidBodies.SetFocus() # make sure tab presses go to panel               
     10514            def OnRowSelect(event):
     10515                '''Respond to the selection of a rigid body atom.
     10516                Highlight the atom in the body and the paired atom in the
     10517                crystal
     10518                '''
     10519                event.Skip()
     10520                cryatom = event.GetEventObject().Table.GetValue(event.GetRow(),4)
     10521                if not cryatom:
     10522                    cryatom = event.GetEventObject().Table.GetValue(event.GetRow(),2)
     10523                data['testRBObj']['RBhighLight'] = event.GetRow()
     10524                data['testRBObj']['CRYhighLight'] = [
     10525                    i for i,a in enumerate(data['Atoms']) if a[0] == cryatom]
     10526                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
     10527                data['testRBObj']['showSelect'].SetLabelText(cryatom)
     10528            showAtom = [None]
     10529            def showCryAtom(*args,**kwargs):
     10530                '''Respond to selection of a crystal atom
     10531                '''
     10532                data['testRBObj']['CRYhighLight'] = [
     10533                    i for i,a in enumerate(data['Atoms']) if a[0] == showAtom[0]]
     10534                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
    1047810535
    1047910536            # Start of Draw()
     
    1048710544                for i in unmatchedRBatoms:
    1048810545                    rbAssignments[i] = None
    10489 
    1049010546            mainSizer = wx.BoxSizer(wx.VERTICAL)
    1049110547            mainSizer.Add((5,5),0)
     
    1049710553            rbRef = data['testRBObj']['rbRef']
    1049810554            Torsions = rbObj['Torsions']
    10499             refName = []
    10500             for ref in rbRef:
    10501                 refName.append(data['testRBObj']['rbAtTypes'][ref]+str(ref))
     10555            #refName = []
     10556            #for ref in rbRef:
     10557            #    refName.append(data['testRBObj']['rbAtTypes'][ref]+str(ref))
    1050210558            atNames = data['testRBObj']['atNames']
    10503             mainSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
     10559            topSizer = wx.BoxSizer(wx.HORIZONTAL)
     10560            topSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
    1050410561                                'Locating rigid body : '+rbName), 0, WACV)
    10505             mainSizer.Add((5,5),0)
     10562            topSizer.Add((10,-1),0)
     10563            topSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
     10564                                'Display crystal structure as:'), 0, WACV)
     10565            btn = wx.Button(RigidBodies,wx.ID_ANY,"Ball && Sticks")
     10566            btn.Bind(wx.EVT_BUTTON, BallnSticks)
     10567            topSizer.Add(btn)
     10568            btn = wx.Button(RigidBodies,wx.ID_ANY,"Sticks")
     10569            btn.Bind(wx.EVT_BUTTON, Sticks)
     10570            topSizer.Add(btn)
     10571            mainSizer.Add(topSizer)
     10572            mainSizer.Add((-1,5),0)
    1050610573            OriSizer = wx.BoxSizer(wx.HORIZONTAL)
    1050710574            OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Origin: '),0,WACV)
     
    1054710614                    torName = ''
    1054810615                    for item in [seq[0],seq[1],seq[3][0]]:
    10549                         torName += data['testRBObj']['rbAtTypes'][item]+str(item)+' '
     10616                        if data['testRBObj']['NameLookup'][item]:
     10617                            torName += data['testRBObj']['NameLookup'][item]+' '
     10618                        else:
     10619                            torName += data['testRBObj']['rbAtTypes'][item]+str(item)+' '
    1055010620                    TorSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Side chain torsion for rb seq: '+torName),0,WACV)
    1055110621                    torSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL)
     
    1058110651               
    1058210652            SetPhaseWindow(RigidBodies,mainSizer)
    10583 
    1058410653            G2plt.PlotStructure(G2frame,data,True,UpdateTable)
     10654           
     10655            gridSizer = wx.BoxSizer(wx.HORIZONTAL)
    1058510656            colLabels = ['RB\ntype','phase\n#','phase\nlabel','delta, A','Assign as atom']
    1058610657            rowLabels = [l[1] for l in matchTable]
     
    1060110672            RigidBodies.atomsTable = G2G.Table(displayTable,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    1060210673            RigidBodies.atomsGrid = G2G.GSGrid(RigidBodies)
    10603 
    10604             labelsChoices = ['         '] + [a[0] for a in data['Atoms']
     10674            RigidBodies.atomsGrid.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK,OnRowSelect)
     10675            data['testRBObj']['RBhighLight'] = None
     10676            data['testRBObj']['CRYhighLight'] = []
     10677            data['testRBObj']['availAtoms'] = ['         '] + [a[0] for a in data['Atoms']
    1060510678                                                 if a[-1] not in rbUsedIds]
    1060610679            choiceeditor = wg.GridCellChoiceEditor(
    10607                 labelsChoices+['Create new'], False)
     10680                data['testRBObj']['availAtoms']+['Create new'], False)
    1060810681            RigidBodies.atomsGrid.SetTable(RigidBodies.atomsTable,True)
    1060910682            # make all grid entries read only
     
    1062310696            RigidBodies.atomsGrid.SetMargins(0,0)
    1062410697
    10625             gridSizer = wx.BoxSizer(wx.HORIZONTAL)
    1062610698            gridSizer.Add(RigidBodies.atomsGrid)#,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
    1062710699            gridSizer.Add((5,5))
    1062810700
    1062910701            btnSizer = wx.BoxSizer(wx.VERTICAL)
     10702            hSizer = wx.BoxSizer(wx.HORIZONTAL)
     10703            hSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Crystal Highlight: '))
     10704            data['testRBObj']['showSelect'] = G2G.G2ChoiceButton(RigidBodies,
     10705                                data['testRBObj']['availAtoms'],
     10706                                None,None,showAtom,0,showCryAtom,
     10707                                size=(75,-1))
     10708            hSizer.Add(data['testRBObj']['showSelect'])
     10709            btnSizer.Add(hSizer)
    1063010710            btnSizer.Add((-1,20))
    1063110711            btnSizer.Add(
     
    1065510735            RigidBodies.SendSizeEvent()
    1065610736            RigidBodies.Scroll(0,0)
    10657 
     10737            RigidBodies.SetFocus() # make sure tab presses go to panel
     10738            data['testRBObj']['UpdateTable'] = UpdateTable
    1065810739        # start of OnRBAssign(event)
    1065910740        rbAssignments = {}
     
    1072210803        data['testRBObj']['rbAtTypes'] = RBData[rbType][rbId]['rbTypes']
    1072310804        data['testRBObj']['AtInfo'] = RBData[rbType]['AtInfo']
     10805        data['testRBObj']['NameLookup'] = RBData[rbType][rbId]['atNames']
    1072410806        data['testRBObj']['rbType'] = rbType
    1072510807        data['testRBObj']['rbData'] = RBData
     
    1072810810        data['testRBObj']['rbRef'] = rbRef
    1072910811        refType = []
    10730         refName = []
     10812        #refName = []
    1073110813        for ref in rbRef[:3]:
    1073210814            reftype = data['testRBObj']['rbAtTypes'][ref]
    1073310815            refType.append(reftype)
    10734             refName.append(reftype+' '+str(rbRef[0]))
     10816            #refName.append(reftype+' '+str(rbRef[0]))
    1073510817        atNames = [{},{},{}]
    1073610818        AtNames = {}
     
    1262412706    G2frame.phaseDisplay.AddPage(drawAtoms,'Draw Atoms')
    1262512707    Pages.append('Draw Atoms')
     12708    def rbKeyPress(event):
     12709        '''Respond to a Tab to highlight the next RB or crystal atom
     12710        '''
     12711        if 'testRBObj' not in data: return
     12712        alt = event.GetModifiers() & wx.MOD_ALT
     12713        event.Skip()
     12714        try: # IsKeyInCategory not in wx 2.9
     12715            if not event.IsKeyInCategory(wx.WXK_CATEGORY_TAB): return
     12716        except:
     12717            return
     12718        if alt:    # advance RB selection
     12719            #GSASIIpath.IPyBreak()
     12720            rows = RigidBodies.atomsGrid.GetSelectedRows()
     12721            if len(rows) == 0:
     12722                rows = [0]
     12723            else:
     12724                rows[0] += 1
     12725            if rows[0] > RigidBodies.atomsGrid.GetNumberRows()-1:
     12726                rows = [0]
     12727            elif rows[0] < 0:
     12728                rows[0] = RigidBodies.atomsGrid.GetNumberRows()-1
     12729            RigidBodies.atomsGrid.SelectRow(rows[0])         
     12730            RigidBodies.atomsGrid.MakeCellVisible(rows[0],0)         
     12731            data['testRBObj']['RBhighLight'] = rows[0]
     12732        else:
     12733            #GSASIIpath.IPyBreak()
     12734            #return
     12735            Ind = data['testRBObj'].get('CRYhighLight',[])
     12736            if len(Ind) == 0:
     12737                I = -1
     12738            else:
     12739                I = Ind[0]
     12740            wrap = False
     12741            while True:
     12742                I += 1
     12743                if I >= len(data['Atoms']) and wrap:
     12744                    print('How did this happen?',Ind,I,
     12745                              len(data['testRBObj']['availAtoms']),len(data['Atoms']))
     12746                    return
     12747                elif I >= len(data['Atoms']):
     12748                    wrap = True
     12749                    I = 0
     12750                if data['Atoms'][I][0] in data['testRBObj']['availAtoms']:
     12751                    data['testRBObj']['CRYhighLight'] = [I]
     12752                    data['testRBObj']['showSelect'].SetLabelText(data['Atoms'][I][0])
     12753                    break
     12754        G2plt.PlotStructure(G2frame,data,False,data['testRBObj']['UpdateTable'])
    1262612755    if data['General']['Type'] not in ['faulted',] and not data['General']['Modulated']:
    1262712756        RigidBodies = wx.ScrolledWindow(G2frame.phaseDisplay)
    1262812757        G2frame.phaseDisplay.AddPage(RigidBodies,'RB Models')
     12758        RigidBodies.Bind(wx.EVT_CHAR,rbKeyPress)
    1262912759        Pages.append('RB Models')
    1263012760    MapPeaks = G2G.GSGrid(G2frame.phaseDisplay)
Note: See TracChangeset for help on using the changeset viewer.