Changeset 860


Ignore:
Timestamp:
Mar 1, 2013 2:14:21 PM (9 years ago)
Author:
vondreele
Message:

more fixes to rigid body stuff

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIconstrGUI.py

    r859 r860  
    630630    Indx = {}
    631631    resList = []
    632     plotDefaults = {'oldxy':[0.,0.],'Quaternion':[1.,0.,0.,0.],'cameraPos':30.,'viewDir':[0,0,1],}
     632    plotDefaults = {'oldxy':[0.,0.],'Quaternion':[0.,0.,0.,1.],'cameraPos':30.,'viewDir':[0,0,1],}
    633633
    634634    def OnPageChanged(event):
  • trunk/GSASIImath.py

    r859 r860  
    244244def UpdateResRBAtoms(Bmat,RBObj,RBData):
    245245    RBIds = GetResRBIds(RBData)
    246     RBRes = RBData[RBIds[RBObj['RBname']]]
     246    RBname = RBObj['RBname'].split(':')[0]
     247    RBRes = RBData[RBIds[RBname]]
    247248    XYZ = np.array(RBRes['rbXYZ'])
    248249    for tor,seq in zip(RBObj['Torsions'],RBRes['rbSeq']):
     
    259260def UpdateRBAtoms(Bmat,RBObj,RBData,RBType):
    260261    RBIds = GetResRBIds(RBData[RBType])
    261     RBRes = RBData[RBType][RBIds[RBObj['RBname']]]
     262    RBname = RBObj['RBname'].split(':')[0]
     263    RBRes = RBData[RBType][RBIds[RBname]]
    262264    if RBType == 'Vector':
    263265        vecs = RBRes['rbVect']
     
    13801382        V /= d
    13811383    else:
    1382         return [1.,0.,0.,0.]    #identity
     1384        return [0.,0.,0.,1.]    #identity
    13831385    p = A/2.
    13841386    Q[0] = cosd(p)
     
    13911393    '''
    13921394    A = 2.*acosd(Q[0])
    1393     V = Q[1:]/nl.norm(Q[1:])
     1395    V = np.array([0.,0.,1.])
     1396    if nl.norm(Q[1:]):
     1397        V = Q[1:]/nl.norm(Q[1:])
    13941398    return A,V
    13951399   
     
    13991403    '''
    14001404    A = 2.*np.arccos(Q[0])
    1401     V = Q[1:]/nl.norm(Q[1:])
     1405    V = np.array([0.,0.,1.])
     1406    if nl.norm(Q[1:]):
     1407        V = Q[1:]/nl.norm(Q[1:])
    14021408    return A,V
    14031409   
     
    14171423    else:
    14181424        V3 = np.zeros(3)
    1419     Q = np.array([1.0,0.0,0.0,0.0])
     1425    Q = np.array([0.,0.,0.,1.])
    14201426    D = 0.
    14211427    if nl.norm(V3):
  • trunk/GSASIIphsGUI.py

    r859 r860  
    30753075            wx.CallAfter(FillRigidBodyGrid,True)
    30763076           
    3077         def ThermDataSizer(RBObj):       #needs to be seen by VecRbSizer!
     3077        def ThermDataSizer(RBObj):
    30783078           
    30793079            def OnThermval(event):
     
    31913191                Indx[orien.GetId()] = ix
    31923192                topSizer.Add(orien,0,wx.ALIGN_CENTER_VERTICAL)
    3193             Qcheck = wx.ComboBox(RigidBodies,-1,value='',choices=[' ','A','Q'],
     3193            Qcheck = wx.ComboBox(RigidBodies,-1,value='',choices=[' ','A','AV'],
    31943194                style=wx.CB_READONLY|wx.CB_DROPDOWN)
    31953195            Qcheck.Bind(wx.EVT_COMBOBOX,OnOrienRef)
     
    31993199                         
    32003200        def ResrbSizer(RBObj):
    3201            
     3201            G2frame.dataFrame.SetStatusText('NB: Rotation vector is in crystallographic space')
     3202             
    32023203            def OnTorsionRef(event):
    32033204                Obj = event.GetEventObject()
     
    32743275           
    32753276        def VecrbSizer(RBObj):
    3276                  
     3277            G2frame.dataFrame.SetStatusText('NB: Rotation vector is in crystallographic space')
     3278                   
    32773279            def OnDelVecRB(event):
    32783280                Obj = event.GetEventObject()
     
    33903392        atomData = data['Atoms']
    33913393        Indx = {}
    3392         atInd = [0,1,2]
     3394        atInd = [-1,-1,-1]
    33933395        data['testRBObj'] = {}
    33943396           
     
    34023404                newXYZ = G2mth.UpdateRBAtoms(Bmat,rbObj,RBData,rbType)
    34033405                Ids = []
     3406                dmax = 0.0
    34043407                oldXYZ = G2mth.getAtomXYZ(atomData,cx)
    34053408                for xyz in newXYZ:
    34063409                    dist = G2mth.GetXYZDist(xyz,oldXYZ,Amat)
     3410                    dmax = max(dmax,np.min(dist))
    34073411                    id = np.argmin(dist)
    34083412                    Ids.append(atomData[id][-1])
    34093413                    atomData[id][cx:cx+3] = xyz
     3414                if dmax > 0.5:
     3415                    print '**** WARNING - some atoms not found or misidentified ****'
     3416                    print '****           check torsion angles & try again      ****'
     3417                    OkBtn.SetLabel('Not Ready')
     3418                    OkBtn.Enable(False)
     3419                    return
    34103420                rbObj['Ids'] = Ids
    34113421                rbObj['ThermalMotion'] = ['None',[],[]] #type,values,flags
     
    34423452                data['testRBObj']['AtNames'] = AtNames
    34433453                data['testRBObj']['rbObj'] = {'Orig':[[0,0,0],False],
    3444                     'Orient':[[0,0,0,1.],' '],'Ids':[],'RBId':rbId,'Torsions':[],
     3454                    'Orient':[[0.,0.,0.,1.],' '],'Ids':[],'RBId':rbId,'Torsions':[],
    34453455                    'numChain':'','RBname':RBData[rbType][rbId]['RBname']}
    34463456                data['testRBObj']['torAtms'] = []               
     
    34593469                            atNames[i][atom[ct-1]] = iatm
    34603470                return atNames,AtNames
    3461                
    3462             def OnOrigX(event):
    3463                 Obj = event.GetEventObject()
    3464                 item = Indx[Obj.GetId()]
    3465                 try:
    3466                     val = float(Obj.GetValue())
    3467                     data['testRBObj']['rbObj']['Orig'][0][item] = val
    3468                 except ValueError:
    3469                     pass
    3470                 G2plt.PlotStructure(G2frame,data)
    3471                
    3472             def OnOrien(event):
    3473                 Obj = event.GetEventObject()
    3474                 item = Indx[Obj.GetId()]
    3475                 Q = data['testRBObj']['rbObj']['Orient'][0]
    3476                 try:
    3477                     val = float(Obj.GetValue())
    3478                     Q[item] = val
    3479                     if not any(Q):
    3480                         raise ValueError
    3481                     Q = G2mth.normQ(Q)
    3482                     data['testRBObj']['rbObj']['Orient'][0] = Q
    3483                 except ValueError:
    3484                     pass
    3485                 G2plt.PlotStructure(G2frame,data)
    34863471               
    34873472            def OnAtOrigPick(event):
     
    34993484                    Oxyz = np.inner(Bmat,np.array(rbXYZ[rbRef[0]]))
    35003485                    Nxyz = np.array(atomData[nref][cx:cx+3])
    3501                     data['testRBObj']['rbObj']['Orig'][0] = Nxyz-Oxyz   
    3502                 else:           
    3503                     data['testRBObj']['rbObj']['Orig'][0] = atomData[atNames[item][atName]][cx:cx+3]
     3486                    Orig = Nxyz-Oxyz
     3487                    data['testRBObj']['rbObj']['Orig'][0] = Orig   
     3488                else:
     3489                    Orig = atomData[atNames[item][atName]][cx:cx+3]
     3490                    data['testRBObj']['rbObj']['Orig'][0] = Orig
     3491                for x,item in zip(Orig,Xsizers):
     3492                    item.SetLabel('%10.5f'%(x))
    35043493                G2plt.PlotStructure(G2frame,data)
    35053494               
     
    35093498                atName = Obj.GetValue()
    35103499                atInd[item] = atNames[item][atName]
     3500                if any([x<0 for x in atInd]):
     3501                    return
     3502                OkBtn.SetLabel('OK')
     3503                OkBtn.Enable(True)
    35113504                rbType = data['testRBObj']['rbType']
    35123505                rbObj = data['testRBObj']['rbObj']
     
    35303523                QuatC = G2mth.prodQQ(QuatB,QuatA)
    35313524                data['testRBObj']['rbObj']['Orient'] = [QuatC,' ']
     3525                for x,item in zip(QuatC,Osizers):
     3526                    item.SetLabel('%10.4f'%(x))               
    35323527                if rbType == 'Vector':
    35333528                    Oxyz = np.inner(Bmat,G2mth.prodQVQ(QuatC,rbOrig))
    35343529                    Nxyz = np.array(atomData[atInd[0]][cx:cx+3])
    3535                     data['testRBObj']['rbObj']['Orig'][0] = Nxyz-Oxyz
     3530                    Orig = Nxyz-Oxyz
     3531                    data['testRBObj']['rbObj']['Orig'][0] = Orig
     3532                    for x,item in zip(Orig,Xsizers):
     3533                        item.SetLabel('%10.5f'%(x))
    35363534                G2plt.PlotStructure(G2frame,data)
    35373535               
    35383536            def OnTorAngle(event):
     3537                OkBtn.SetLabel('OK')
     3538                OkBtn.Enable(True)
    35393539                Obj = event.GetEventObject()
    35403540                [tor,torSlide] = Indx[Obj.GetId()]
     
    35503550               
    35513551            def OnTorSlide(event):
     3552                OkBtn.SetLabel('OK')
     3553                OkBtn.Enable(True)
    35523554                Obj = event.GetEventObject()
    35533555                tor,ang = Indx[Obj.GetId()]
     
    35843586                OriSizer.Add(wx.StaticText(RigidBodies,-1,'Origin x,y,z: '),0,wx.ALIGN_CENTER_VERTICAL)
    35853587                for ix,x in enumerate(Orig):
    3586                     origX = wx.TextCtrl(RigidBodies,-1,value='%10.5f'%(x),style=wx.TE_PROCESS_ENTER)
    3587                     origX.Bind(wx.EVT_TEXT_ENTER,OnOrigX)
    3588                     origX.Bind(wx.EVT_KILL_FOCUS,OnOrigX)
    3589                     Indx[origX.GetId()] = ix
     3588                    origX = wx.StaticText(RigidBodies,-1,'%10.5f'%(x))
    35903589                    OriSizer.Add(origX,0,wx.ALIGN_CENTER_VERTICAL)
    35913590                    Xsizers.append(origX)
     
    35973596                OriSizer.Add(wx.StaticText(RigidBodies,-1,'Orientation quaternion: '),0,wx.ALIGN_CENTER_VERTICAL)
    35983597                for ix,x in enumerate(Orien):
    3599                     orien = wx.TextCtrl(RigidBodies,-1,value='%8.4f'%(x),style=wx.TE_PROCESS_ENTER)
    3600                     orien.Bind(wx.EVT_TEXT_ENTER,OnOrien)
    3601                     orien.Bind(wx.EVT_KILL_FOCUS,OnOrien)
    3602                     Indx[orien.GetId()] = ix
     3598                    orien = wx.StaticText(RigidBodies,-1,'%10.4f'%(x))
    36033599                    OriSizer.Add(orien,0,wx.ALIGN_CENTER_VERTICAL)
    36043600                    Osizers.append(orien)
     
    36103606                    RefSizer.Add(wx.StaticText(RigidBodies,-1,'Location setting: Select match to'),0,wx.ALIGN_CENTER_VERTICAL)
    36113607                    for i in [0,1,2]:
    3612                         choice = atNames[i].keys()
     3608                        choice = ['',]+atNames[i].keys()
    36133609                        choice.sort()
    36143610                        RefSizer.Add(wx.StaticText(RigidBodies,-1,' '+refName[i]+': '),0,wx.ALIGN_CENTER_VERTICAL)
    3615                         atPick = wx.ComboBox(RigidBodies,-1,value=atomData[atInd[i]][ct-1],
    3616                             choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN)
     3611                        atPick = wx.ComboBox(RigidBodies,-1,value='',
     3612                            choices=choice[1:],style=wx.CB_READONLY|wx.CB_DROPDOWN)
    36173613                        if i:
    36183614                            atPick.Bind(wx.EVT_COMBOBOX, OnAtQPick)
     
    36613657                mainSizer.Add(topSizer)               
    36623658               
    3663             OkBtn = wx.Button(RigidBodies,-1,"Ok")
     3659            OkBtn = wx.Button(RigidBodies,-1,"Not ready")
    36643660            OkBtn.Bind(wx.EVT_BUTTON, OnOk)
     3661            OkBtn.Enable(False)
    36653662            CancelBtn = wx.Button(RigidBodies,-1,'Cancel')
    36663663            CancelBtn.Bind(wx.EVT_BUTTON, OnCancel)
     
    37163713                VAR = rbRes['rbXYZ'][rbRef[1]]-rbRes['rbXYZ'][rbRef[0]]
    37173714                VBR = rbRes['rbXYZ'][rbRef[2]]-rbRes['rbXYZ'][rbRef[0]]
    3718                 rbObj = {'RBname':rbRes['RBname'],'numChain':numChain}
     3715                rbObj = {'RBname':rbRes['RBname']+':'+str(rbRes['useCount']),'numChain':numChain}
    37193716                rbAtoms = []
    37203717                rbIds = []
     
    37383735                QuatC = G2mth.prodQQ(QuatB,QuatA)
    37393736                rbObj['Orient'] = [QuatC,' ']
     3737                rbObj['ThermalMotion'] = ['None',[],[]] #type,values,flags
    37403738                SXYZ = []
    37413739                TXYZ = []
     
    37533751                    for ride in Riders:
    37543752                        SXYZ[ride] = G2mth.prodQVQ(QuatA,SXYZ[ride]-SXYZ[Patm])+SXYZ[Patm]
    3755                 RBData['Residue'][RBIds[res]]['useCount'] += 1
     3753                rbRes['useCount'] += 1
    37563754                RBObjs.append(rbObj)
    37573755            data['RBModels']['Residue'] = RBObjs
     
    37663764    def OnRBRemoveAll(event):
    37673765        data['RBModels']['Residue'] = []
    3768         data['RBModels']['Vector'] = []
     3766        data['RBModels']['Vector'] = []   
     3767        RBData = G2frame.PatternTree.GetItemPyData(   
     3768            G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))
     3769        for RBType in ['Vector','Residue']:
     3770            for rbId in RBData[RBType]:
     3771                RBData[RBType][rbId]['useCount'] = 0       
    37693772        FillRigidBodyGrid(True)
    37703773       
  • trunk/GSASIIplot.py

    r859 r860  
    28012801                               
    28022802        if event.Dragging():
    2803             if event.AltDown():
     2803            if event.AltDown() and rbObj:
    28042804                if event.LeftIsDown():
    28052805                    SetRBRotation(newxy)
     
    29792979        Ty += V[1]*0.01
    29802980        Tz += V[2]*0.01
    2981         drawingData['oldxy'] = list(newxy)
    29822981        drawingData['viewPoint'][0] =  Tx,Ty,Tz
    29832982        SetViewPointText([Tx,Ty,Tz])
     
    29972996        Ty -= V[1]*0.01
    29982997        Tz -= V[2]*0.01
    2999         drawingData['oldxy'] = list(newxy)
    30002998        rbObj['Orig'][0] =  Tx,Ty,Tz
    30012999        SetRBOrigText()
     
    35743572        pass
    35753573
     3574#    def SetRBOrigin():
     3575#        page = getSelection()
     3576#        if page:
     3577#            if G2frame.dataDisplay.GetPageText(page) == 'Rigid bodies':
     3578#                G2frame.MapPeaksTable.SetData(mapPeaks)
     3579#                panel = G2frame.dataDisplay.GetPage(page).GetChildren()
     3580#                names = [child.GetName() for child in panel]
     3581#                panel[names.index('grid window')].Refresh()
     3582           
    35763583    def OnMouseDown(event):
    35773584        xy = event.GetPosition()
     
    35863593                Q = defaults['Quaternion']
    35873594                G2frame.G2plotNB.status.SetStatusText('New quaternion: %.2f+, %.2fi+ ,%.2fj+, %.2fk'%(Q[0],Q[1],Q[2],Q[3]),1)
     3595#            elif event.RightIsDown():
     3596#                SetRBOrigin(newxy)
    35883597            elif event.MiddleIsDown():
    35893598                SetRotationZ(newxy)
     
    36123621        glLightfv(GL_LIGHT0,GL_DIFFUSE,[1,1,1,1])
    36133622       
     3623#    def SetRBOrigin(newxy):
     3624##first get translation vector in screen coords.       
     3625#        oldxy = defaults['oldxy']
     3626#        if not len(oldxy): oldxy = list(newxy)
     3627#        dxy = newxy-oldxy
     3628#        defaults['oldxy'] = list(newxy)
     3629#        V = np.array([dxy[0],-dxy[1],0.])/100.
     3630#        Q = defaults['Quaternion']
     3631#        V = G2mth.prodQVQ(G2mth.invQ(Q),V)
     3632#        rbData['rbXYZ'] += V
     3633#        PlotRigidBody(G2frame,rbType,AtInfo,rbData,defaults)
     3634#               
    36143635    def SetRotation(newxy):
    36153636#first get rotation vector in screen coords. & angle increment       
  • trunk/GSASIIstruct.py

    r859 r860  
    38373837    for item in phaseVary:
    38383838        if '::A0' in item:
    3839             print '**** WARNING - lattice parameters should not be refined in a sequential refinement'
    3840             print '               instead use the Dij parameters for each powder histogram ****'
     3839            print '**** WARNING - lattice parameters should not be refined in a sequential refinement ****'
     3840            print '****           instead use the Dij parameters for each powder histogram            ****'
    38413841    if 'Seq Data' in Controls:
    38423842        histNames = Controls['Seq Data']
Note: See TracChangeset for help on using the changeset viewer.