Changeset 2450


Ignore:
Timestamp:
Aug 25, 2016 12:22:04 PM (5 years ago)
Author:
vondreele
Message:

fix error in matrix in getCellEsd & RetDistAngle?
Add new atom drawing option for sphere of enclosure

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r2435 r2450  
    7575    wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM, wxID_DRAWDELETE, wxID_DRAWFILLCELL,
    7676    wxID_DRAWADDEQUIV, wxID_DRAWFILLCOORD, wxID_DRAWDISAGLTOR,  wxID_DRAWPLANE,
    77     wxID_DRAWDISTVP,
    78 ] = [wx.NewId() for item in range(13)]
     77    wxID_DRAWDISTVP, wxID_DRAWADDSPHERE,
     78] = [wx.NewId() for item in range(14)]
    7979
    8080[ wxID_DRAWRESTRBOND, wxID_DRAWRESTRANGLE, wxID_DRAWRESTRPLANE, wxID_DRAWRESTRCHIRAL,
     
    324324       
    325325################################################################################
     326class SphereEnclosure(wx.Dialog):
     327    ''' Add atoms within sphere of enclosure to drawing
     328   
     329    :param wx.Frame parent: reference to parent frame (or None)
     330    :param general: general data (includes drawing data)
     331    :param atoms: drawing atoms data
     332   
     333    '''
     334    def __init__(self,parent,general,drawing,indx):
     335        wx.Dialog.__init__(self,parent,wx.ID_ANY,'Setup phase transformation',
     336            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
     337        self.panel = wx.Panel(self)         #just a dummy - gets destroyed in Draw!
     338        self.General = general
     339        self.Drawing = drawing
     340        self.indx = indx
     341        self.Sphere = 1.0
     342        self.centers = []
     343       
     344        self.Draw()
     345       
     346    def Draw(self):
     347       
     348        def OnRadius(event):
     349            event.Skip()
     350            try:
     351                val = float(radius.GetValue())
     352                if val < 0.5:
     353                    raise ValueError
     354                self.Sphere = val
     355            except ValueError:
     356                pass
     357            radius.SetValue('%.3f'%(self.Sphere))
     358       
     359        self.panel.Destroy()
     360        self.panel = wx.Panel(self)
     361        mainSizer = wx.BoxSizer(wx.VERTICAL)
     362        mainSizer.Add(wx.StaticText(self.panel,label=' Sphere of enclosure controls:'),0,WACV)
     363        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     364        atoms = []
     365        if len(self.indx):
     366            topSizer.Add(wx.StaticText(self.panel,label=' Sphere centered at atoms: '),0,WACV)
     367            cx,ct,cs = self.Drawing['atomPtrs'][:3]
     368#            print self.Drawing.keys()
     369            for id in self.indx:
     370                atom = self.Drawing['Atoms'][id]
     371                self.centers.append(atom[cx:cx+3])
     372                atoms.append('%s(%s)'%(atom[ct-1],atom[cs-1]))
     373            topSizer.Add(wx.ComboBox(self.panel,choices=atoms,value=atoms[0],
     374                style=wx.CB_READONLY|wx.CB_DROPDOWN),0,WACV)
     375        else:
     376            topSizer.Add(wx.StaticText(self.panel,label=' Sphere centered at drawing view point'),0,WACV)
     377            self.centers.append(self.Drawing['viewPoint'][0])
     378        mainSizer.Add(topSizer,0,WACV)
     379        sphereSizer = wx.BoxSizer(wx.HORIZONTAL)
     380        sphereSizer.Add(wx.StaticText(self.panel,label=' Sphere radius: '),0,WACV)
     381        radius = wx.TextCtrl(self.panel,value='%.3f'%(self.Sphere),style=wx.TE_PROCESS_ENTER)
     382        radius.Bind(wx.EVT_TEXT_ENTER,OnRadius)
     383        radius.Bind(wx.EVT_KILL_FOCUS,OnRadius)
     384        sphereSizer.Add(radius,0,WACV)
     385        mainSizer.Add(sphereSizer,0,WACV)
     386       
     387        OkBtn = wx.Button(self.panel,-1,"Ok")
     388        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
     389        cancelBtn = wx.Button(self.panel,-1,"Cancel")
     390        cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
     391        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
     392        btnSizer.Add((20,20),1)
     393        btnSizer.Add(OkBtn)
     394        btnSizer.Add((20,20),1)
     395        btnSizer.Add(cancelBtn)
     396        btnSizer.Add((20,20),1)
     397       
     398        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
     399        self.panel.SetSizer(mainSizer)
     400        self.panel.Fit()
     401        self.Fit()
     402       
     403    def GetSelection(self):
     404        return self.centers,self.Sphere
     405
     406    def OnOk(self,event):
     407        parent = self.GetParent()
     408        parent.Raise()
     409        self.EndModal(wx.ID_OK)
     410
     411    def OnCancel(self,event):
     412        parent = self.GetParent()
     413        parent.Raise()
     414        self.EndModal(wx.ID_CANCEL)
     415       
     416################################################################################
    326417class TransformDialog(wx.Dialog):
    327     ''' Phaae transformation
     418    ''' Phase transformation
    328419   
    329420    :param wx.Frame parent: reference to parent frame (or None)
     
    20542145        self.DrawAtomEdit.Append(id=wxID_DRAWADDEQUIV, kind=wx.ITEM_NORMAL,text='Add atoms',
    20552146            help='Add symmetry & cell equivalents to drawing set from selected atoms')
     2147        self.DrawAtomEdit.Append(id=wxID_DRAWADDSPHERE, kind=wx.ITEM_NORMAL,text='Add sphere of atoms',
     2148            help='Add atoms within sphere of enclosure')
    20562149        self.DrawAtomEdit.Append(id=wxID_DRAWTRANSFORM, kind=wx.ITEM_NORMAL,text='Transform draw atoms',
    20572150            help='Transform selected atoms by symmetry & cell translations')
  • trunk/GSASIIphsGUI.py

    r2431 r2450  
    41664166            G2plt.PlotStructure(G2frame,data)
    41674167           
     4168    def AddSphere(event):
     4169        generalData = data['General']
     4170        Amat,Bmat = G2lat.cell2AB(generalData['Cell'][1:7])
     4171        atomData = data['Drawing']['Atoms']
     4172        numAtoms = len(atomData)
     4173        cx,ct,cs,ci = data['Drawing']['atomPtrs']
     4174        cuij = cs+5
     4175        generalData = data['General']
     4176        SGData = generalData['SGData']
     4177        cellArray = G2lat.CellBlock(1)
     4178        indx = drawAtoms.GetSelectedRows()
     4179        indx.sort()
     4180        dlg = G2gd.SphereEnclosure(G2frame,data['General'],data['Drawing'],indx)
     4181        try:
     4182            if dlg.ShowModal() == wx.ID_OK:
     4183                centers,radius = dlg.GetSelection()
     4184                for orig in centers:
     4185                    xyzA = np.array(orig)
     4186                    for atomB in atomData[:numAtoms]:
     4187                        xyzB = np.array(atomB[cx:cx+3])
     4188                        Uij = atomB[cuij:cuij+6]
     4189#                        GSASIIpath.IPyBreak()
     4190                        result = G2spc.GenAtom(xyzB,SGData,False,Uij,True)
     4191                        for item in result:
     4192                            atom = copy.copy(atomB)
     4193                            atom[cx:cx+3] = item[0]
     4194                            atom[cx+3] = str(item[2])+'+'
     4195                            atom[cuij:cuij+6] = item[1]
     4196                            for xyz in cellArray+np.array(atom[cx:cx+3]):
     4197                                dist = np.sqrt(np.sum(np.inner(Amat,xyz-xyzA)**2))
     4198                                if 0 < dist <= radius:
     4199                                    if noDuplicate(xyz,atomData):
     4200                                        C = xyz-atom[cx:cx+3]+item[3]
     4201                                        newAtom = atom[:]
     4202                                        newAtom[cx:cx+3] = xyz
     4203                                        newAtom[cx+3] += str(int(round(C[0])))+','+str(int(round(C[1])))+','+str(int(round(C[2])))
     4204                                        atomData.append(newAtom)
     4205        finally:
     4206            dlg.Destroy()
     4207        UpdateDrawAtoms()
     4208        drawAtoms.ClearSelection()
     4209        G2plt.PlotStructure(G2frame,data)
     4210           
    41684211    def TransformSymEquiv(event):
    41694212        indx = drawAtoms.GetSelectedRows()
     
    75977640        G2frame.dataFrame.Bind(wx.EVT_MENU, SetViewPoint, id=G2gd.wxID_DRAWVIEWPOINT)
    75987641        G2frame.dataFrame.Bind(wx.EVT_MENU, AddSymEquiv, id=G2gd.wxID_DRAWADDEQUIV)
     7642        G2frame.dataFrame.Bind(wx.EVT_MENU, AddSphere, id=G2gd.wxID_DRAWADDSPHERE)
    75997643        G2frame.dataFrame.Bind(wx.EVT_MENU, TransformSymEquiv, id=G2gd.wxID_DRAWTRANSFORM)
    76007644        G2frame.dataFrame.Bind(wx.EVT_MENU, FillCoordSphere, id=G2gd.wxID_DRAWFILLCOORD)           
  • trunk/GSASIIstrIO.py

    r2448 r2450  
    14871487        Ax[3]*Ax[5]-Ax[1]*Ax[4],
    14881488        Ax[3]*Ax[4]-Ax[0]*Ax[5]])
    1489     srcvlsq = np.inner(drVdA,np.inner(vcov,drVdA.T))
     1489    srcvlsq = np.inner(drVdA,np.inner(drVdA,vcov))
    14901490    Vol = 1/np.sqrt(rVsq)
    14911491    sigVol = Vol**3*np.sqrt(srcvlsq)/2.         #ok - checks with GSAS
  • trunk/GSASIIstrMain.py

    r2448 r2450  
    538538                                sig = 0.0
    539539                                if len(Xvcov):
    540                                     sig = np.sqrt(np.inner(pdpx,np.inner(Xvcov,pdpx)))
     540                                    sig = np.sqrt(np.inner(pdpx,np.inner(pdpx,Xvcov)))
    541541                                Dist.append([Oatom[0],Tatom[0],tunit,Top,ma.getdata(dist[indb])[i],sig])
    542542                                if (Dist[-1][-2]-AsumR) <= 0.:
Note: See TracChangeset for help on using the changeset viewer.