Changeset 835


Ignore:
Timestamp:
Jan 17, 2013 2:05:19 PM (11 years ago)
Author:
vondreele
Message:

more work on rigid bodies
fixes for crash in selecting wavelengths

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/ElementTable.py

    r762 r835  
    1111White = (255, 255, 255)           
    1212ElTable = [
    13     (["H","H-1","D","D-1","T","T-1"],0,0, "Hydrogen",    White,           0.0000,(255,255,255)),
    1413    (["D","D-1"],                  0,0, "Deuterium",   White,           0.0000,(255,255,255)),
    1514    (["T","T-1"],                  0,0, "Tritium",     White,           0.0000,(255,255,255)),
     15    (["H","H-1","D","D-1","T","T-1"],0,0, "Hydrogen",    White,           0.0000,(255,255,255)),
    1616    (["He",],                     17,0, "Helium",      Noblecolor,      0.0000,(217,255,255)),
    1717    (["Li","Li+1"],                0,1, "Lithium",     Alkcolor,        0.0004,(204,128,255)),
  • trunk/GSASII.py

    r831 r835  
    12851285        if not G2gd.GetPatternTreeItemId(self,self.root,'Rigid bodies'):
    12861286            sub = self.PatternTree.AppendItem(parent=self.root,text='Rigid bodies')
    1287             self.PatternTree.SetItemPyData(sub,{'Vector':{},'Residue':{},'Z-matrix':{}})
     1287            self.PatternTree.SetItemPyData(sub,{'Vector':{'AtInfo':{}},
     1288                'Residue':{'AtInfo':{}},'Z-matrix':{'AtInfo':{}}})
    12881289               
    12891290    class CopyDialog(wx.Dialog):
  • trunk/GSASIIconstrGUI.py

    r831 r835  
    626626    '''
    627627    if not data:
    628         data.update({'Vector':{},'Residue':{},'Z-matrix':{}})       #empty dict - fill it
     628        data.update({'Vector':{'AtInfo':{}},'Residue':{'AtInfo':{}},'Z-matrix':{'AtInfo':{}}})       #empty dict - fill it
    629629           
    630630    Indx = {}
     
    648648            UpdateZMatrixRB()
    649649           
     650    def getMacroFile(macName):
     651        defDir = os.path.join(os.path.split(__file__)[0],'GSASIImacros')
     652        dlg = wx.FileDialog(G2frame,message='Choose '+macName+' rigid body macro file',
     653            defaultDir=defDir,defaultFile="",wildcard="GSAS-II macro file (*.mac)|*.mac",
     654            style=wx.OPEN | wx.CHANGE_DIR)
     655        try:
     656            if dlg.ShowModal() == wx.ID_OK:
     657                macfile = dlg.GetPath()
     658                macro = open(macfile,'Ur')
     659                head = macro.readline()
     660                if macName not in head:
     661                    print head
     662                    print '**** ERROR - wrong restraint macro file selected, try again ****'
     663                    macro = []
     664            else: # cancel was pressed
     665                macxro = []
     666        finally:
     667            dlg.Destroy()
     668        return macro        #advanced past 1st line
     669       
    650670    def OnAddRigidBody(event):
    651671        page = G2frame.dataDisplay.GetSelection()
     
    658678           
    659679    def AddVectorRB():
     680        AtInfo = data['Vector']['AtInfo']
    660681        dlg = MultiIntegerDialog(G2frame.dataDisplay,'New Rigid Body',['No. atoms','No. translations'],[1,1])
    661682        if dlg.ShowModal() == wx.ID_OK:
     
    668689            rbTypes = ['C' for i in range(nAtoms)]
    669690            Info = G2elem.GetAtomInfo('C')
    670             AtInfo= {'C':[Info['Drad'],Info['Color']]}
     691            AtInfo['C'] = [Info['Drad'],Info['Color']]
    671692            data['Vector'][rbId] = {'RBname':'UNKRB','VectMag':vecMag,
    672                 'VectRef':vecRef,'rbTypes':rbTypes,'rbVect':vecVal,'AtInfo':AtInfo}
     693                'VectRef':vecRef,'rbTypes':rbTypes,'rbVect':vecVal}
    673694        dlg.Destroy()
    674695        UpdateVectorRB()
    675696       
    676697    def AddResidueRB():
    677         pass
     698        AtInfo = data['Residue']['AtInfo']
     699        macro = getMacroFile('rigid body')
     700        if not macro:
     701            return
     702        macStr = macro.readline()
     703        while macStr:
     704            items = macStr.split()
     705            print items
     706            if 'I' == items[0]:
     707                rbId = ran.randint(0,sys.maxint)
     708                rbName = items[1]
     709                rbTypes = []
     710                rbXYZ = []
     711                rbSeq = []
     712                atNames = []
     713                nAtms,nSeq,nOrig,mRef,nRef = [int(items[i]) for i in [2,3,4,5,6]]
     714                for iAtm in range(nAtms):
     715                    macStr = macro.readline().split()
     716                    atName = macStr[0]
     717                    atNames.append(atName)
     718                    rbXYZ.append([float(macStr[i]) for i in [1,2,3]])
     719                    atNames.append(atName[0])          #might not always work
     720                    if atName[0] not in AtInfo:
     721                        Info = G2elem.GetAtomInfo(atName[0])
     722                        AtInfo[atName[0]] = [Info['Drad'],Info['Color']]
     723                rbXYZ = np.array(rbXYZ)-np.array(rbXYZ[nOrig-1])
     724                for iSeq in range(nSeq):
     725                    macStr = macro.readline().split()
     726                    mSeq = int(macStr[0])
     727                    rbseq = []
     728                    for jSeq in range(mSeq):
     729                        macStr = macro.readline().split()
     730                        iBeg = int(macStr[0])-1
     731                        iFin = int(macStr[1])-1
     732                        nMove = int(macStr[2])
     733                        iMove = [int(macStr[i]) for i in range(3,nMove+3)]
     734                        rbseq.append([iBeg,iFin,iMove])
     735                    rbSeq.append(rbseq)
     736                data['Residue'][rbId] = {'RBname':rbName,'rbXYZ':rbXYZ,'rbTypes':rbTypes,
     737                    'atNames':atNames,'rbRef':[nOrig-1,mRef-1,nRef-1],'rbSeq':rbSeq}
     738            macStr = macro.readline()
     739        macro.close()
    678740       
    679741    def AddZMatrixRB():
     
    681743
    682744    def UpdateVectorRB():
     745        AtInfo = data['Vector']['AtInfo']
    683746        SetStatusLine(' You may use e.g. "sind(60)", "cos(60)", "c60" or "s60" for a vector entry')
    684747        def rbNameSizer(rbId,rbData):
     
    699762                rbId = Indx[Obj.GetId()]
    700763                Obj.SetValue(False)
    701                 G2plt.PlotRigidBody(G2frame,'Vector',data['Vector'][rbId],plotDefaults)
     764                G2plt.PlotRigidBody(G2frame,'Vector',AtInfo,rbData,plotDefaults)
    702765           
    703766            nameSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    735798                Obj.SetValue('%8.3f'%(val))
    736799                UpdateVectorRB()
    737                 G2plt.PlotRigidBody(G2frame,'Vector',data['Vector'][rbId],plotDefaults)
     800                G2plt.PlotRigidBody(G2frame,'Vector',AtInfo,data['Vector'][rbId],plotDefaults)
    738801               
    739802            def OnRBVectorRef(event):
     
    758821            return magSizer
    759822           
    760         def OnRBVectorVal(event):
    761             Obj = event.GetEventObject()
    762             rbId,imag,i = Indx[Obj.GetId()]
    763             try:
    764                 val = float(Obj.GetValue())
    765                 data['Vector'][rbId]['rbVect'][imag][i] = val
    766             except ValueError:
    767                 pass
    768             UpdateVectorRB()
    769             G2plt.PlotRigidBody(G2frame,'Vector',data['Vector'][rbId],plotDefaults)
    770            
    771823        def rbVectors(rbId,imag,mag,XYZ,rbData):
    772824
    773825            def TypeSelect(event):
     826                AtInfo = data['Vector']['AtInfo']
    774827                r,c = event.GetRow(),event.GetCol()
    775828                if vecGrid.GetColLabelValue(c) == 'Type':
     
    778831                        if PE.Elem != 'None':
    779832                            El = PE.Elem.strip().lower().capitalize()
    780                             if El not in rbData['rbRadii']:
    781                                 rbData['rbRadii'][El] = G2elem.GetAtomInfo(El)['Drad']                           
     833                            if El not in AtInfo:
     834                                Info = G2elem.GetAtomInfo(El)
     835                                AtInfo[El] = [Info['Drad']['Color']]
    782836                            rbData['rbTypes'][r] = El
    783837                            vecGrid.SetCellValue(r,c,El)
     
    821875        VectorRBSizer = wx.BoxSizer(wx.VERTICAL)
    822876        for rbId in data['Vector']:
    823             rbData = data['Vector'][rbId]
    824             VectorRBSizer.Add(rbNameSizer(rbId,rbData),0)
    825             XYZ = np.array([[0.,0.,0.] for Ty in rbData['rbTypes']])
    826             for imag,mag in enumerate(rbData['VectMag']):
    827                 XYZ += mag*rbData['rbVect'][imag]
    828                 VectorRBSizer.Add(rbVectMag(rbId,imag,rbData),0)
    829                 VectorRBSizer.Add(rbVectors(rbId,imag,mag,XYZ,rbData),0)
    830             VectorRBSizer.Add((5,5),0)       
     877            if rbId != 'AtInfo':
     878                rbData = data['Vector'][rbId]
     879                VectorRBSizer.Add(rbNameSizer(rbId,rbData),0)
     880                XYZ = np.array([[0.,0.,0.] for Ty in rbData['rbTypes']])
     881                for imag,mag in enumerate(rbData['VectMag']):
     882                    XYZ += mag*rbData['rbVect'][imag]
     883                    VectorRBSizer.Add(rbVectMag(rbId,imag,rbData),0)
     884                    VectorRBSizer.Add(rbVectors(rbId,imag,mag,XYZ,rbData),0)
     885                VectorRBSizer.Add((5,5),0)       
    831886        VectorRBSizer.Layout()   
    832887        VectorRBDisplay.SetSizer(VectorRBSizer,True)
  • trunk/GSASIImacros/residue-rb.mac

    r812 r835  
    78781
    79792 3 1 4
    80 2
     803
    81812 5 4 6 7 8 9
    82825 6 3 7 8 9
  • trunk/GSASIIphsGUI.py

    r834 r835  
    376376            return
    377377        char = chr(key)
    378         if char in '.+-/0123456789':
     378        if char in '.+-/0123456789cosind()':
    379379            self._tc.WriteText(char)
    380380        else:
     
    17961796        rbXYZ = []
    17971797        rbType = []
    1798         AtInfo = {}
     1798        AtInfo = RBData['Vector']['AtInfo']
    17991799        for item in indx:
    18001800            rbtype = atomData[item][ct]
     
    18081808        rbId = ran.randint(0,sys.maxint)
    18091809        RBData['Vector'][rbId] = {'RBname':'UNKRB','VectMag':[1.0,],
    1810             'VectRef':[False,],'rbTypes':rbType,'rbVect':[rbXYZ,],'AtInfo':AtInfo}
     1810            'VectRef':[False,],'rbTypes':rbType,'rbVect':[rbXYZ,]}
    18111811        print 'New rigid body added to set of rigid bodies'
    18121812
  • trunk/GSASIIplot.py

    r834 r835  
    33763376################################################################################
    33773377
    3378 def PlotRigidBody(G2frame,rbType,rbData,defaults):
     3378def PlotRigidBody(G2frame,rbType,AtInfo,rbData,defaults):
    33793379    '''RB plotting package. Can show rigid body structures as balls & sticks
    33803380    '''
    33813381
    3382     def FindBonds(XYZ,rbData):                    #uses numpy & masks - very fast even for proteins!
     3382    def FindBonds(XYZ):                    #uses numpy & masks - very fast even for proteins!
    33833383        import numpy.ma as ma
    3384         AtInfo = rbData['AtInfo']
    33853384        rbTypes = rbData['rbTypes']
    33863385        Radii = []
     
    34103409        for imag,mag in enumerate(rbData['VectMag']):
    34113410            XYZ += mag*rbData['rbVect'][imag]
    3412         Bonds = FindBonds(XYZ,rbData)
     3411        Bonds = FindBonds(XYZ)
    34133412    elif rbType == 'Residue':
    34143413        pass
     
    35803579        for iat,atom in enumerate(XYZ):
    35813580            x,y,z = atom
    3582             CL = rbData['AtInfo'][rbData['rbTypes'][iat]][1]
     3581            CL = AtInfo[rbData['rbTypes'][iat]][1]
    35833582            color = np.array(CL)/255.
    35843583            RenderSphere(x,y,z,radius,color)
  • trunk/GSASIIpwdGUI.py

    r814 r835  
    819819            data['Lam'] = [data['Lam1'][0],data['Lam1'][0],0]
    820820            del(data['Lam1'])
    821         UpdateInstrumentGrid(G2frame,data)
     821        wx.CallAfter(UpdateInstrumentGrid,data)
    822822               
    823823    def OnLamPick(event):
Note: See TracChangeset for help on using the changeset viewer.