Changeset 4614 for trunk


Ignore:
Timestamp:
Oct 21, 2020 5:16:55 PM (13 months ago)
Author:
vondreele
Message:

provide protection for acosd in RotateRBXYZ & UpdateRBXYZ
Add sitesym & multilicity for RB origin to OnAddRB GUI; responds when origin is changed.
correct frac for RB atoms for initial origin multiplicity. This allows full RB molecules to be placed on symmetry elements.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIImath.py

    r4598 r4614  
    995995        a,v = Q2AV(oriQ)
    996996        symaxis = np.array(symAxis)
    997         xformAng = np.arccos(np.dot(v,symaxis))
     997        vdotsym = min(1.0,max(-1.0,np.vdot(v,symaxis)))
     998        xformAng = np.arccos(vdotsym)
    998999        xformVec = np.cross(symaxis,v)
    9991000        Q = prodQQ(oriQ,AV2Q(xformAng,xformVec))
     
    10351036        a,v = Q2AV(RBObj['Orient'][0])
    10361037        symaxis = np.array(RBObj.get('symAxis'))
    1037         xformAng = np.arccos(np.dot(v,symaxis))
     1038        vdotsym = min(1.0,max(-1.0,np.vdot(v,symaxis)))
     1039        xformAng = np.arccos(vdotsym)
    10381040        xformVec = np.cross(symaxis,v)
    10391041        Q = prodQQ(RBObj['Orient'][0],AV2Q(xformAng,xformVec))
  • trunk/GSASIIphsGUI.py

    r4613 r4614  
    1035610356                        return
    1035710357                    dlg.Destroy()
     10358                Mult = G2spc.SytSym(rbObj['Orig'][0],data['General']['SGData'])[1]
    1035810359                Ids = []
    1035910360                updateNeeded = False
     
    1036510366                        x,y,z = line[2:5]
    1036610367                        AtomAdd(x,y,z,El=elem,Name=lbl,update=False)
     10368                        atomData[nextNum][6] = Mult/atomData[nextNum][8]
    1036710369                        Ids.append(atomData[nextNum][-1])
    1036810370                        updateNeeded = True
    1036910371                    else:
    1037010372                        atomData[line[5]][cx:cx+3] = line[2:5]
     10373                        atomData[line[5]][6] = Mult/atomData[line[5]][8]
    1037110374                        Ids.append(line[11])
    1037210375                if updateNeeded:
     
    1048010483                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
    1048110484                UpdateTable()
     10485               
     10486            def UpdateSytSym(*args,**kwargs):
     10487               
     10488                Sytsym,Mult = G2spc.SytSym(rbObj['Orig'][0],data['General']['SGData'])[:2]
     10489                sytsymtxt.SetLabel('Origin site symmetry: %s, multiplicity: %d '%(Sytsym,Mult))
     10490                UpdateTablePlot(args,kwargs)
    1048210491               
    1048310492            def getSelectedAtoms():
     
    1059910608                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
    1060010609                RigidBodies.SetFocus() # make sure tab presses go to panel
     10610               
    1060110611            def Sticks(event):
    1060210612                '''Set all draw atoms in crystal structure to stick
     
    1060510615                FindBondsDraw(data)
    1060610616                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
    10607                 RigidBodies.SetFocus() # make sure tab presses go to panel               
     10617                RigidBodies.SetFocus() # make sure tab presses go to panel
     10618               
    1060810619            def OnRowSelect(event):
    1060910620                '''Respond to the selection of a rigid body atom.
     
    1062010631                G2plt.PlotStructure(G2frame,data,False,UpdateTable)
    1062110632                misc['showSelect'].SetLabelText(cryatom)
     10633               
    1062210634            def OnSymRadioSet(event):
    1062310635                '''Set the symmetry axis for the body as
     
    1066510677            atNames = data['testRBObj']['atNames']
    1066610678            topSizer = wx.BoxSizer(wx.HORIZONTAL)
    10667             topSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
    10668                                 'Locating rigid body : '+rbName), 0, WACV)
     10679            topSizer.Add(wx.StaticText(RigidBodies,label='Locating rigid body : '+rbName), 0, WACV)
    1066910680            topSizer.Add((10,-1),0)
    10670             topSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
    10671                                 'Display crystal structure as:'), 0, WACV)
    10672             btn = wx.Button(RigidBodies,wx.ID_ANY,"Ball && Sticks")
     10681            topSizer.Add(wx.StaticText(RigidBodies,label='Display crystal structure as:'), 0, WACV)
     10682            btn = wx.Button(RigidBodies,label="Ball && Sticks")
    1067310683            btn.Bind(wx.EVT_BUTTON, BallnSticks)
    1067410684            topSizer.Add(btn)
    10675             btn = wx.Button(RigidBodies,wx.ID_ANY,"Sticks")
     10685            btn = wx.Button(RigidBodies,label="Sticks")
    1067610686            btn.Bind(wx.EVT_BUTTON, Sticks)
    1067710687            topSizer.Add(btn)
     
    1067910689            mainSizer.Add((-1,5),0)
    1068010690            OriSizer = wx.BoxSizer(wx.HORIZONTAL)
    10681             OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Origin: '),0,WACV)
     10691            OriSizer.Add(wx.StaticText(RigidBodies,label='Origin: '),0,WACV)
    1068210692            Xsizers = []
    1068310693            for ix in range(3):
    10684                 OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,RBdirlbl[ix]),
    10685                                  0,WACV,4)
     10694                OriSizer.Add(wx.StaticText(RigidBodies,label=RBdirlbl[ix]),0,WACV,4)
    1068610695                origX = G2G.ValidatedTxtCtrl(RigidBodies,rbObj['Orig'][0],ix,nDig=(10,5),
    10687                     xmin=-1.5,xmax=1.5,typeHint=float,OnLeave=UpdateTablePlot)
     10696                    xmin=-1.5,xmax=1.5,typeHint=float,OnLeave=UpdateSytSym)
    1068810697                OriSizer.Add(origX,0,WACV)
    1068910698                Xsizers.append(origX)
     
    1069410703            fixOrig = G2G.G2CheckBox(RigidBodies,'Lock',rbObj,'fixOrig')
    1069510704            OriSizer.Add(fixOrig,0,WACV,10)
    10696 
    1069710705            mainSizer.Add(OriSizer)
    10698             OriSizer.Add((5,0),)
    10699             OriSizer = wx.FlexGridSizer(0,5,5,5)
     10706            Sytsym,Mult = G2spc.SytSym(rbObj['Orig'][0],data['General']['SGData'])[:2]
     10707            sytsymtxt = wx.StaticText(RigidBodies,label='Origin site symmetry: %s, multiplicity: %d '%(Sytsym,Mult))
     10708            mainSizer.Add(sytsymtxt,0,WACV)
     10709            OriSizer1 = wx.FlexGridSizer(0,5,5,5)
    1070010710            if len(atomData):
    1070110711                choice = list(atNames[0].keys())
    1070210712                choice.sort()
    1070310713                G2frame.testRBObjSizers.update({'Xsizers':Xsizers})
    10704             mainSizer.Add(OriSizer)
     10714            mainSizer.Add(OriSizer1)
    1070510715            mainSizer.Add((5,5),0)
    10706             OriSizer = wx.BoxSizer(wx.HORIZONTAL)
     10716            OriSizer2 = wx.BoxSizer(wx.HORIZONTAL)
    1070710717            if 'OrientVec' not in rbObj: rbObj['OrientVec'] = [0.,0.,0.,0.]
    1070810718            rbObj['OrientVec'][0],V = G2mth.Q2AVdeg(rbObj['Orient'][0])
    1070910719            rbObj['OrientVec'][1:] = np.inner(Bmat,V)
    10710             OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Orientation azimuth: '),0,WACV)
     10720            OriSizer2.Add(wx.StaticText(RigidBodies,label='Orientation azimuth: '),0,WACV)
    1071110721            OrientVecSiz = []
    1071210722            OrientVecSiz.append(G2G.ValidatedTxtCtrl(RigidBodies,rbObj['OrientVec'],0,nDig=(10,2),
    1071310723                xmin=0.,xmax=360.,typeHint=float,OnLeave=UpdateOrientation))
    10714             OriSizer.Add(OrientVecSiz[-1],0,WACV)
     10724            OriSizer2.Add(OrientVecSiz[-1],0,WACV)
    1071510725            azSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL,value=int(rbObj['OrientVec'][0]*10.),size=(200,25))
    1071610726            azSlide.SetRange(0,3600)
    1071710727            azSlide.Bind(wx.EVT_SLIDER, OnAzSlide)
    10718             OriSizer.Add(azSlide,0,WACV)
    10719             mainSizer.Add(OriSizer)
    10720             OriSizer = wx.BoxSizer(wx.HORIZONTAL)
    10721             OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Orientation vector'),0,WACV)
     10728            OriSizer2.Add(azSlide,0,WACV)
     10729            mainSizer.Add(OriSizer2)
     10730            OriSizer3 = wx.BoxSizer(wx.HORIZONTAL)
     10731            OriSizer3.Add(wx.StaticText(RigidBodies,label='Orientation vector'),0,WACV)
    1072210732            for ix,lbl in enumerate('xyz'):
    10723                 OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'  '+lbl+': '),0,WACV)
     10733                OriSizer3.Add(wx.StaticText(RigidBodies,label='  '+lbl+': '),0,WACV)
    1072410734                OrientVecSiz.append(G2G.ValidatedTxtCtrl(RigidBodies,rbObj['OrientVec'],ix+1,nDig=(10,4),
    1072510735                    xmin=-1.,xmax=1.,typeHint=float,OnLeave=UpdateOrientation))
    10726                 OriSizer.Add(OrientVecSiz[-1],0,WACV)
     10736                OriSizer3.Add(OrientVecSiz[-1],0,WACV)
    1072710737            OrientVecSiz.append(azSlide)
    10728             OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,' (frac coords)'),0,WACV)
     10738            OriSizer3.Add(wx.StaticText(RigidBodies,label=' (frac coords)'),0,WACV)
    1072910739            G2frame.testRBObjSizers.update({'OrientVecSiz':OrientVecSiz})
    10730             mainSizer.Add(OriSizer)
     10740            mainSizer.Add(OriSizer3)
    1073110741            mainSizer.Add((5,5),0)
    10732             OriSizer = wx.BoxSizer(wx.HORIZONTAL)
    10733             OriSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
    10734                                     'Rigid body symmetry axis: '),0, WACV)
     10742            OriSizer4 = wx.BoxSizer(wx.HORIZONTAL)
     10743            OriSizer4.Add(wx.StaticText(RigidBodies,label='Rigid body symmetry axis: '),0, WACV)
    1073510744            choices = ['None']+RBdirlbl
    10736             symRadioSet = wx.RadioBox(RigidBodies,wx.ID_ANY,choices=choices)
     10745            symRadioSet = wx.RadioBox(RigidBodies,choices=choices)
    1073710746            symRadioSet.Bind(wx.EVT_RADIOBOX, OnSymRadioSet)
    10738             OriSizer.Add(symRadioSet)
    10739             mainSizer.Add(OriSizer)
     10747            OriSizer4.Add(symRadioSet)
     10748            mainSizer.Add(OriSizer4)
    1074010749            mainSizer.Add((5,5),0)
    1074110750            RefSizer = wx.FlexGridSizer(0,7,5,5)
     
    1075310762                        else:
    1075410763                            torName += data['testRBObj']['rbAtTypes'][item]+str(item)+' '
    10755                     TorSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Side chain torsion for rb seq: '+torName),0,WACV)
     10764                    TorSizer.Add(wx.StaticText(RigidBodies,label='Side chain torsion for rb seq: '+torName),0,WACV)
    1075610765                    torSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL)
    1075710766                    torSlide.SetRange(0,3600)
     
    1075910768                    torSlide.Bind(wx.EVT_SLIDER, OnTorSlide)
    1076010769                    TorSizer.Add(torSlide,1,wx.EXPAND|wx.RIGHT)
    10761                     TorSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,' Angle: '),0,WACV)
     10770                    TorSizer.Add(wx.StaticText(RigidBodies,label=' Angle: '),0,WACV)
    1076210771                    ang = G2G.ValidatedTxtCtrl(RigidBodies,torsion,0,nDig=(8,3),typeHint=float,OnLeave=OnTorAngle)
    1076310772                    Indx[torSlide.GetId()] = [t,ang]
     
    1076610775                mainSizer.Add(TorSizer,0,wx.EXPAND|wx.RIGHT)
    1076710776            else:
    10768                 mainSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'No side chain torsions'),0)
    10769             OkBtn = wx.Button(RigidBodies,wx.ID_ANY,"Add")
     10777                mainSizer.Add(wx.StaticText(RigidBodies,label='No side chain torsions'),0)
     10778            OkBtn = wx.Button(RigidBodies,label="Add")
    1077010779            OkBtn.Bind(wx.EVT_BUTTON, OnAddRB)
    10771             CancelBtn = wx.Button(RigidBodies,wx.ID_ANY,'Cancel')
     10780            CancelBtn = wx.Button(RigidBodies,label='Cancel')
    1077210781            CancelBtn.Bind(wx.EVT_BUTTON, OnCancel)
    1077310782            btnSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    1078410793            data['testRBObj']['availAtoms'] = ['         '] + assignable
    1078510794            if len(assignable) == 0:
    10786                 mainSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
     10795                mainSizer.Add(wx.StaticText(RigidBodies,label=
    1078710796                    'No matching atoms between rigid body and crystal.'+
    1078810797                    ' All rigid body atoms will be added to structure.'),0)
     
    1079510804            G2plt.PlotStructure(G2frame,data,True,UpdateTable)
    1079610805           
    10797             mainSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,
     10806            mainSizer.Add(wx.StaticText(RigidBodies,label=
    1079810807                    'Match between atoms in rigid body and crystal.'+
    1079910808                    ' Use assignments to align bodies.'),0)
     
    1084310852            btnSizer = wx.BoxSizer(wx.VERTICAL)
    1084410853            hSizer = wx.BoxSizer(wx.HORIZONTAL)
    10845             hSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Crystal Highlight: '))
     10854            hSizer.Add(wx.StaticText(RigidBodies,label='Crystal Highlight: '))
    1084610855            misc['showSelect'] = G2G.G2ChoiceButton(RigidBodies,
    1084710856                data['testRBObj']['availAtoms'],None,None,showAtom,0,showCryAtom,size=(75,-1))
     
    1084910858            btnSizer.Add(hSizer)
    1085010859            btnSizer.Add((-1,20))
    10851             btnSizer.Add(wx.StaticText(RigidBodies,wx.ID_ANY,'Actions with assigned\natom(s)...'),0,wx.ALL)
     10860            btnSizer.Add(wx.StaticText(RigidBodies,label='Actions with assigned\natom(s)...'),0,wx.ALL)
    1085210861            btnSizer.Add((-1,10))
    10853             btn = wx.Button(RigidBodies, wx.ID_ANY, 'Update Assignments')
     10862            btn = wx.Button(RigidBodies,label='Update Assignments')
    1085410863            btn.Bind(wx.EVT_BUTTON,UpdateTable)
    1085510864            btnSizer.Add(btn,0,wx.ALIGN_CENTER)
    1085610865            btnSizer.Add((-1,10))
    1085710866
    10858             btn = wx.Button(RigidBodies, wx.ID_ANY, 'Set Origin')
     10867            btn = wx.Button(RigidBodies,label='Set Origin')
    1085910868            btn.Bind(wx.EVT_BUTTON,onSetOrigin)
    1086010869            btnSizer.Add(btn,0,wx.ALIGN_CENTER)
    1086110870            btnSizer.Add((-1,5))
    10862             btn = wx.Button(RigidBodies, wx.ID_ANY, 'Set Orientation')
     10871            btn = wx.Button(RigidBodies,label='Set Orientation')
    1086310872            btn.Bind(wx.EVT_BUTTON,onFitOrientation)
    1086410873            btnSizer.Add(btn,0,wx.ALIGN_CENTER)
    1086510874            btnSizer.Add((-1,5))
    10866             btn = wx.Button(RigidBodies, wx.ID_ANY, 'Set both')
     10875            btn = wx.Button(RigidBodies,label='Set both')
    1086710876            btn.Bind(wx.EVT_BUTTON,onFitBoth)
    1086810877            btnSizer.Add(btn,0,wx.ALIGN_CENTER)
     
    1180611815        generalData = data['General']
    1180711816        startDmin = generalData['Pawley dmin']
    11808         genDlg = wx.Dialog(G2frame,wx.ID_ANY,'Set Pawley Parameters',
     11817        genDlg = wx.Dialog(G2frame,label='Set Pawley Parameters',
    1180911818                    style=wx.DEFAULT_DIALOG_STYLE)
    1181011819        mainSizer = wx.BoxSizer(wx.VERTICAL)
Note: See TracChangeset for help on using the changeset viewer.